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_())

電流テストを実現する機能