pythonプログラミング電源プログラミング(2)
22258 ワード
# -*- coding: utf-8 -*-
#!/usr/bin/python
"""
Module implementing Watch_MainWindow.
@Author: TOBY
@Email: hejunwang@
@DateTime: 2019-07-18 09:16:43
@Description: keithley 2303 ,RIGOL dm3068
"""
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from Ui_watchcurrent_ui import Ui_MainWindow
import sys
import visa
import threading
import time
from PyQt5.QtWidgets import qApp
class Watch_MainWindow(QMainWindow, Ui_MainWindow):
"""
Class documentation goes here.
"""
def __init__(self, parent=None):
"""
Constructor
@param parent reference to the parent widget
@type QWidget
"""
super(Watch_MainWindow, self).__init__(parent)
self.setupUi(self)
self.init()
# ,
self.setFixedSize(self.width(), self.height())
self.statusBar.showMessage("Ready")
#TODO
def init(self):
self.rm = visa.ResourceManager()
self.dev =self.rm.list_resources()
print(self.dev)
self.rm2 = visa.ResourceManager()
self.dev2 =self.rm2.list_resources()
print(self.dev2)
self.rigol = visa.ResourceManager()
self.dm3068 =self.rigol.list_resources()
print(self.dm3068)
#
self.w_stop_btn.setEnabled(False)
#
self.IsCon = False
self.IsCon2 = False
self.IsCon3 = False
#
self.dataList=[]
#
self.dm3068List=[]
#
self.menuAction()
#TODO
def lcdNum(self):
#
self.second = 0
self.minute = 0
self.hour = 0
self.days = 0
self.lcdtimer = QTimer(self)
self.lcdtimer.timeout.connect(self.onTimerOut)
self.lcdtimer.start(1000)
#
self.jishu = 0
def onTimerOut(self):
self.second += 1
self.jishu += 1
if self.second%60==0:
self.minute+=1
self.second =0
print('minute:'+str(self.minute))
if self.minute%60==0:
self.hour+=1
self.minute=0
print('minute:---'+str(self.minute))
print('hour:'+str(self.hour))
else:
print('minute:--->'+str(self.minute))
print('hour-->:'+str(self.hour))
#
self.duration_time= int(self.w_duration.text())
# ,
if self.jishu %self.duration_time==0:
print(' ')
self.data_save()
self.data2_save()
self.w_remind.append("### ###:"+str(self.t2)+
" V"+ '---'+"### ###:"+str(self.avgdata)+" mA"+
"### ###:"+str(self.avgdata2)+" mA")
# self.all_timer_stop()
# self.stopbtn_set()
#
# self.data_save()
# self.w_remind.append(' :'+str(self.lendata)+"
")
self.w_lcd.display(str(self.hour)+":"+str(self.minute)+
":"+str(self.second))
@pyqtSlot()
def on_w_connect_btn_clicked(self):
"""
Slot documentation goes here.
"""
# TODO:
# self.init()
# raise NotImplementedError
try :
print('on_w_connect_btn_clicked')
self.my_instrument = self.rm.open_resource(self.dev[1])
self.w_remind.append(' :
'+self.my_instrument.query('*IDN?'))
print(' *IDN? :
'+self.my_instrument.query('*IDN?'))
self.w_remind.append(' :'+str(self.dev))
#
self.w_connect_btn.setEnabled(False)
self.IsCon = True
print(self.IsCon)
self.read_config() #
except :
print(" ")
self.msg(' , '+'
'+' ')
self.w_connect_btn.setEnabled(True)
@pyqtSlot()
def on_w_connect_btn2_clicked(self):
"""
Slot documentation goes here.
"""
# TODO:
# self.init()
# raise NotImplementedError
#
if self.comboBox_2.currentText()==" ":
self.IsCon2= False
self.msg(' ')
else:
try :
print('on_w_connect_btn2_clicked')
self.my_instrument2 = self.rm2.open_resource(self.dev2[2])
self.w_remind.append(' :
'+self.my_instrument2.query('*IDN?'))
print(' *IDN? :
'+self.my_instrument2.query('*IDN?'))
self.w_remind.append(' :'+str(self.dev2[2]))
#
self.w_connect_btn2.setEnabled(False)
self.IsCon2=True
# # 2
self.read_config2()
except :
print(" ")
self.msg(' , '+'
'+' ')
self.w_connect_btn2.setEnabled(True)
#
def msg(self, str):
reply = QMessageBox.critical(self, ' ', str)
print(reply)
# 1
def read_config(self):
#TODO
self.reset()
#
if self.comboBox.currentText()==" ":
self.is_Volt_Auto= False
else:
self.is_Volt_Auto= True
print(' :'+self.comboBox.currentText())
# TODO
self.my_instrument.write(":OUTP ON")
print('OUTP ')
self.w_remind.append(' :'+self.my_instrument.query(':OUTP?'))
#--# , ------------------------------------
print(type(self.w_setting_volt.text()))
self.setvolt = self.w_setting_volt.text()
# print(self.setvolt+"...........")
self.my_instrument.write(":VOLT "+self.setvolt)
print(' :'+self.my_instrument.query(':VOLT?'))
# self.w_remind.append(' :'+self.my_instrument.query(':VOLT?'))
# ,
self.setcurrent = self.w_setting_current.text()
self.my_instrument.write(":CURR "+self.setcurrent)
# my_instrument.write(":OUTPut:TIMer:DATA 100")
print(' :'+self.my_instrument.query(':CURR?'))
self.w_remind.append(' :'+self.my_instrument.query(':CURR?'))
self.w_remind.append(' :'
+self.my_instrument.query(':SYSTem:VERSion?'))
self.w_remind.append(' :'+self.my_instrument.query(':SYSTem:ERRor?'))
self.w_remind.append(' 1 !!!')
# 2
def read_config2(self):
#TODO
self.reset2()
# TODO
self.my_instrument2.write(":OUTP ON")
print('OUTP ')
self.w_remind.append(' :'+self.my_instrument2.query(':OUTP?'))
#--# , ------------------------------------
self.setvolt2 = self.w_setting_volt2.text()
self.my_instrument2.write(":VOLT "+self.setvolt2)
print(' :'+self.my_instrument2.query(':VOLT?'))
# self.w_remind.append(' :'+self.my_instrument.query(':VOLT?'))
# ,
self.setcurrent2 = self.w_setting_current2.text()
self.my_instrument2.write(":CURR "+self.setcurrent2)
# my_instrument.write(":OUTPut:TIMer:DATA 100")
print(' :'+self.my_instrument2.query(':CURR?'))
self.w_remind.append(' :'+self.my_instrument2.query(':CURR?'))
self.w_remind.append(' :'
+self.my_instrument2.query(':SYSTem:VERSion?'))
self.w_remind.append(' :'+self.my_instrument2.query(':SYSTem:ERRor?'))
self.w_remind.append(' 2 !!!')
@pyqtSlot()
def on_w_run_btn_clicked(self):
"""
Slot documentation goes here.
"""
# TODO
#
self.dataList=[]
#
self.data2List=[]
#
self.dm3068List=[]
#
if self.comboBox.currentText()==" ":
self.is_Volt_Auto= False
else:
self.is_Volt_Auto= True
#
self.w_max_current.setText('0.000')
self.w_min_current.setText('0.000')
self.w_avg_current.setText('0.000')
#
if self.IsCon:
print(self.w_setting_volt.text())
self.setvolt = float(self.w_setting_volt.text())
self.lowvolt = float(self.w_low_volt.text())
self.hightvolt = float(self.w_hight_volt.text())
#TODO
#1 , , ,
#2 , , ,
if self.is_Volt_Auto:
pass
print(' ')
self.read_config()
self.volttimer = QTimer(self)
self.volttimer.timeout.connect(self.timeout_slot)
self.volttimer.start(5000)
self.w_run_btn.setEnabled(False)
self.w_stop_btn.setEnabled(True)
else:
#1
#2
if (self.setvolt< self.lowvolt) or (self.setvolt> self.hightvolt):
self.msg(' , ')
else:
#
self.data_Collection()
#
self.w_run_btn.setEnabled(False)
self.w_stop_btn.setEnabled(True)
self.w_remind.append('*** ***')
#
self.lcdNum()
else:
self.msg(' , !')
#TODO
def data_Collection(self):
self.timer = QTimer(self)
# ,
self.timedelay = int(self.w_time_delay.text())
if self.timedelay<250:
# 250ms 4 , 250,
self.timer.start(250)
self.timer.start(self.timedelay)
# # operate()
self.timer.timeout.connect(self.timeout_slot)
def timeout_slot(self):
local_time = QDateTime.currentDateTime()
# w_remind
# self.w_remind.append(time.toString(Qt.ISODate)+'<:>'+self.my_instrument.query(':MEAS?'))
print(local_time.toString(Qt.ISODate)+'<:>'+self.my_instrument.query(':MEAS:VOLT?'))
# self.w_remind.append(time.toString(Qt.ISODate)+'<:>'+self.my_instrument.query(':MEAS:CURR?'))
print(local_time.toString(Qt.ISODate)+'<:>'+self.my_instrument.query(':MEAS:CURR?'))
# print(type(self.my_instrument.query(':MEAS:CURR?')))
# 1
self.tempcurr = float(self.my_instrument.query(':MEAS:CURR?'))*1000
#round
self.t1 = round(self.tempcurr, 3)
print(self.t1)
self.w_now_current.setText(str(self.t1))
#
self.tempvolt =float(self.my_instrument.query(':MEAS:VOLT?'))
#round
self.t2 = round(self.tempvolt, 3)
print(self.t2)
self.w_current_volt.setText(str(self.t2))
if self.IsCon2:
# 2
self.tempcurr2 = float(self.my_instrument2.query(':MEAS:CURR?'))*1000
#round
self.tmpc2 = round(self.tempcurr2, 3)
print(self.tmpc2)
self.w_now_current.setText(str(self.tmpc2))
# rigol , ,
if self.IsCon3:
#rigol DC
self.tempvolt3 =float(self.my_instrument3.query(':MEAS:VOLT:DC?'))
#round
self.t3 = round(self.tempvolt3, 3)
print('rigol -->'+str(self.t3))
self.w_current_volt3.setText(str(self.t3))
self.dm3068List.append(self.t3)
#TODO
self.dataList.append(self.t1)
self.data2List.append(self.tmpc2)
#
if self.is_Volt_Auto:
self.w_remind.append(local_time.toString(Qt.ISODate)+"--> :"+
self.w_setting_volt.text()+'V'+
"--> :"+str(self.t2)+" V"+
"--> :"+str(self.t1)+" mA"+"--> :"+str(self.tmpc2)+'mA')
#
a = float(self.setvolt)+float(self.w_volt_step.text())
self.w_setting_volt.setText(str(round(a, 3)))
self.setvolt = self.w_setting_volt.text()
self.my_instrument.write(":VOLT "+self.setvolt)
# ,
if a > self.hightvolt:
self.reset()
#
self.w_run_btn.setEnabled(True)
self.w_stop_btn.setEnabled(False)
self.w_connect_btn.setEnabled(False)
self.volttimer.stop()
self.w_remind.append('************ ************
')
else:
if self.IsCon3:
self.w_remind.append(" :"+str(self.t2)+
" V"+ '---'+" :"+str(self.t1)+" mA"+"DM3068 :"+str(self.t3))
else:
self.w_remind.append(" :"+str(self.t2)+
" V"+ '---'+" :"+str(self.t1)+" mA"+"---- :"+str(self.tmpc2))
#
def data_save(self):
maxdata =round(max(self.dataList), 3)
mindata =round(min(self.dataList), 3)
self.lendata = len(self.dataList)
self.avgdata = round(sum(self.dataList)/self.lendata, 3)
self.w_max_current.setText(str(maxdata))
self.w_min_current.setText(str(mindata))
self.w_avg_current.setText(str(self.avgdata))
# 20s
self.dataList=[]
def data2_save(self):
# maxdata =round(max(self.dataList), 3)
# mindata =round(min(self.dataList), 3)
self.lendata = len(self.data2List)
self.avgdata2 = round(sum(self.data2List)/self.lendata, 3)
# self.w_max_current.setText(str(maxdata))
# self.w_min_current.setText(str(mindata))
self.w_avg_current2.setText(str(self.avgdata2))
# self.w_remind.append("###### ######:"+str(self.t2)+
# " V"+ '---'+"###### ######:"+str(avgdata)+" mA")
# 20s
self.data2List=[]
@pyqtSlot()
def on_w_stop_btn_clicked(self):
"""
Slot documentation goes here.
"""
# TODO:
# raise NotImplementedError
print('on_w_stop_btn_clicked')
self.stopbtn_set()
self.all_timer_stop()
self.w_remind.append('************ ************
')
def stopbtn_set(self):
#
self.w_run_btn.setEnabled(True)
self.w_stop_btn.setEnabled(False)
# if self.IsCon:
# self.reset()
# self.w_connect_btn.setEnabled(True)
# if self.IsCon2:
# self.reset2()
# self.w_connect_btn2.setEnabled(True)
# if self.IsCon3:
# self.reset3()
# self.w_connect_btn3.setEnabled(True)
#
def all_timer_stop(self):
if self.is_Volt_Auto:
self.volttimer.stop()
else:
#
self.timer.stop()
#
self.lcdtimer.stop()
#
self.data_save()
self.w_remind.append(' :'+str(self.lendata)+"
")
# 1
def reset(self):
# TODO:
self.my_instrument.write('*CLS')
self.my_instrument.write('*RST')
# 2
def reset2(self):
# TODO:
self.my_instrument2.write('*CLS')
self.my_instrument2.write('*RST')
# 3
def reset3(self):
# TODO:
self.my_instrument3.write('*CLS')
self.my_instrument3.write('*RST')
@pyqtSlot()
def on_w_excelOut_btn_clicked(self):
"""
Slot documentation goes here.
"""
# TODO: csv
# raise NotImplementedError
pass
@pyqtSlot()
def on_w_connect_btn3_clicked(self):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
# raise NotImplementedError
try:
pass
self.my_instrument3 = self.rm.open_resource(self.dm3068[2])
time.sleep(1)
self.w_remind.append(' :
'+self.my_instrument3.query('*IDN?'))
self.w_remind.append(' *IDN? :
'+self.my_instrument3.query('*IDN?'))
self.w_remind.append(' :
'+self.my_instrument3.query(':SYST:ERR?'))
self.w_remind.append('SCPI :
'+self.my_instrument3.query(':SYST:VERS?'))
print(' *IDN? :
'+self.my_instrument3.query('*IDN?'))
print(' :
'+self.my_instrument3.query(':SYST:ERR?'))
print('SCPI :
'+self.my_instrument3.query(':SYST:VERS?'))
# self.w_remind.append(' :'+str(self.dev[2]))
self.reset3()
self.IsCon3 =True
time.sleep(1)
#
self.my_instrument3.write(':FUNCtion:VOLTage:DC')
time.sleep(1)
#
# self.my_instrument3.write(':FUNCtion:CURRent:DC')
# time.sleep(1)
# print(' '+str(self.my_instrument3.query(':MEAS:CURR:DC?')))
# DC
# self.tempvolt3 =float(self.my_instrument3.query(':MEAS:VOLT:DC?'))
# #round
# self.t3 = round(self.tempvolt3, 3)
# print(' '+str(self.t3))
# self.w_current_volt3.setText(str(self.t3))
self.w_connect_btn3.setEnabled(False)
# ,
self.IsCon3 = True
except:
pass
self.msg("DM3068 ,
")
#Action menu
def menuAction(self):
self.new_action.triggered.connect(self.newtrigger)
self.about_action.triggered.connect(self.abouttrigger)
self.actionVersion.triggered.connect(self.versionaction)
self.actionGuide.triggered.connect(self.guideaction)
def newtrigger(self):
# Qmenu
print('is triggeres')
if self.IsCon:
self.reset()
self.w_connect_btn.setEnabled(True)
if self.IsCon2:
self.reset2()
self.w_connect_btn2.setEnabled(True)
if self.IsCon3:
self.reset3()
self.w_connect_btn3.setEnabled(True)
# QMessageBox.information(self,"Information"," , ")
def abouttrigger(self):
print('about_action')
QMessageBox.aboutQt(self,"About Qt")
def versionaction(self):
QMessageBox.information(self,"Information"," V1.1, :[email protected]"+"
")
def guideaction(self):
print('information')
QMessageBox.information(self,"Information",' ')
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow =Watch_MainWindow()
MainWindow.show()
sys.exit(app.exec_())
電流テストを実現する機能