diff --git a/jfs_main01.py b/jfs_main01.py index 40fcc86..179a29d 100644 --- a/jfs_main01.py +++ b/jfs_main01.py @@ -8,7 +8,7 @@ import pyqtgraph as pg class MainWindow2( MainWindow): - leftsignal = QtCore.pyqtSignal(float) + #leftsignal = QtCore.pyqtSignal(float) def __init__(self): super(MainWindow2,self).__init__() @@ -48,7 +48,7 @@ class MainWindow2( MainWindow): self.ui.checkBox_3.stateChanged.connect(self.clickedBox3) self.ui.pushButton_3.clicked.connect(self.sendRheoHome) self.ui.pushButton_4.clicked.connect(self.sendRheoInject) - self.leftsignal.connect(self.setwhatsleft) + #self.leftsignal.connect(self.setwhatsleft) ### Link zur Doku #self.webEngineView.setUrl(QtCore.QUrl("file:///C:/Users/jens/ownCloud/www/jfs/git2022/jfsPoseidon/test.html")) @@ -57,23 +57,39 @@ class MainWindow2( MainWindow): file_path = 'file:///'+file_path self.ui.webEngineView.setUrl(QtCore.QUrl(file_path)) + ### init GUI + #ESP32 + self.ui.start_btn.setEnabled(False) + self.ui.stop_btn.setEnabled(False) + self.ui.closeRheo_btn.setEnabled(False) + self.ui.checkBox.setEnabled(False) + self.ui.lineEdit.setEnabled(False) + #Rheo + self.ui.pushButton.setEnabled(True) + self.ui.pushButton_2.setEnabled(False) + self.ui.checkBox_3.setEnabled(False) + self.ui.pushButton_3.setEnabled(False) + self.ui.pushButton_4.setEnabled(False) ### ESP32 def setFrequency(self): s = self.ui.lineEdit.text() cmd='o'+str(s)+'\n' thread = Thread(self.sendToEsp32, cmd) - thread.finished.connect(lambda:self.thread_finished(thread)) - thread.start() + thread.signals.finished.connect(lambda:self.thread_finished(thread)) + self.threadpool.start(thread) def sendToEsp32(self, sendStr): + print(f" sending {sendStr}") self.esp32_serial.write(sendStr.encode('utf-8')) self.esp32_serial.flushInput() def clickedBox(self,state): if state == QtCore.Qt.Checked: print('checkes') - self.threadx[2] =ThC_2(parent=None,port = self.esp32_serial) - self.threadx[2].start() + #self.threadx[2] =ThC_2(parent=None,port = self.esp32_serial) + #self.threadx[2].start() + self.threadx[2] = ThC_2(port = self.esp32_serial) + self.threadpool.start(self.threadx[2]) else: print('no') self.threadx[2].stop() @@ -89,20 +105,30 @@ class MainWindow2( MainWindow): def startesp32(self): - self.threadx[1] = ThC(parent=None,index=1,port = self.esp32_serial,base=self.timeBase) - self.threadx[1].start() - self.threadx[1].datasignal.connect(self.updateData) + self.clearPlot() + self.threadx[1] = ThC(index=1,port = self.esp32_serial,base=self.timeBase) + #self.threadx[1].start() + self.threadpool.start(self.threadx[1]) + self.threadx[1].signals.datasignal.connect(self.updateData) self.ui.start_btn.setEnabled(False) self.ui.stop_btn.setEnabled(True) + self.ui.checkBox.setEnabled(True) + self.ui.comboBox_tb.setEnabled(False) def stopesp32(self): self.threadx[1].stop() self.ui.start_btn.setEnabled(True) self.ui.stop_btn.setEnabled(False) - + self.ui.comboBox_tb.setEnabled(True) + def setTimeBase(self): self.timeBase=int(self.ui.comboBox_tb.currentText()) + + + + + def connectRheo(self): self.rheo_port = self.ui.comboBox.currentText() self.statusBar().showMessage("You clicked CONNECT TO Rheo Ventil") @@ -118,14 +144,15 @@ class MainWindow2( MainWindow): self.rheo_serial.bytesize = serial.EIGHTBITS self.rheo_serial.timeout = 1 self.rheo_serial.open() - # self.ui.closeRheo_btn.setEnabled(True) - # self.ui.openRheo_btn.setEnabled(False) - # self.ui.start_btn.setEnabled(True) - # self.ui.stop_btn.setEnabled(False) - - # self.ui.connect_BTN.setEnabled(False) + self.ui.pushButton.setEnabled(False) + self.ui.pushButton_2.setEnabled(True) + self.ui.checkBox_3.setEnabled(True) + self.ui.checkBox_3.setCheckState(False) + self.ui.pushButton_3.setEnabled(True) + self.ui.pushButton_4.setEnabled(True) time.sleep(1) self.statusBar().showMessage("Successfully connected to Rheo board.") + self.getFromRheo() except: self.statusBar().showMessage("Cannot connect to board. Try again..") @@ -138,6 +165,11 @@ class MainWindow2( MainWindow): print("Disconnecting from board..") time.sleep(0.1) self.rheo_serial.close() + self.ui.pushButton.setEnabled(True) + self.ui.pushButton_2.setEnabled(False) + self.ui.checkBox_3.setEnabled(False) + self.ui.pushButton_3.setEnabled(False) + self.ui.pushButton_4.setEnabled(False) print("Board has been disconnected") def clickedBox3(self,state): @@ -170,8 +202,8 @@ class MainWindow2( MainWindow): def sendToRheo(self,cmd): thread = Thread(self.sendRheo, cmd) - thread.finished.connect(lambda:self.thread_finished(thread)) - thread.start() + thread.signals.finished.connect(lambda:self.thread_finished(thread)) + self.threadpool.start(thread) def setwhatsleft(self,xx): #print (f'that left {xx} ') @@ -190,19 +222,24 @@ class MainWindow2( MainWindow): #self.leftsignal.emit(float(inp)) def getFromRheo(self): - thread = Thread(self.getRheoVolume) - thread.finished.connect(lambda:self.thread_finished(thread)) - thread.start() + cmd = "" + thread = Thread(self.getRheoVolume,cmd) + thread.signals.finished.connect(lambda:self.thread_finished(thread)) + thread.signals.result.connect(self.setwhatsleft) + self.threadpool.start(thread) - def getRheoVolume(self): + def getRheoVolume(self,cmd): time.sleep(1) + self.rheo_serial.flushOutput() self.rheo_serial.flushInput() cmd = str(5)+'\r\n' self.rheo_serial.write(cmd.encode('utf-8')) time.sleep(1) inp = self.rheo_serial.readline().decode('utf-8') - print(inp) - self.leftsignal.emit(float(inp)) + inp = inp.rstrip() + print(f" >{inp}<") + #inp = 200 + return inp @@ -226,7 +263,8 @@ class MainWindow2( MainWindow): self.ui.openRheo_btn.setEnabled(False) self.ui.start_btn.setEnabled(True) self.ui.stop_btn.setEnabled(False) - + self.ui.checkBox.setEnabled(True) + self.ui.lineEdit.setEnabled(True) # self.ui.connect_BTN.setEnabled(False) time.sleep(1) self.statusBar().showMessage("Successfully connected to esp32 board.") @@ -249,6 +287,8 @@ class MainWindow2( MainWindow): self.ui.closeRheo_btn.setEnabled(False) self.ui.start_btn.setEnabled(False) self.ui.stop_btn.setEnabled(False) + self.ui.checkBox.setEnabled(False) + self.ui.lineEdit.setEnabled(False) def checkForStopFlow(self): if self.checkForStopFlow : @@ -278,16 +318,21 @@ class MainWindow2( MainWindow): self.esp32_serial.write(sendStr.encode()) self.esp32_serial.flushInput() - -class ThC(QtCore.QThread): +class WorkerKilledException(Exception): + pass + +class ThC_Signals(QtCore.QObject): datasignal = QtCore.pyqtSignal(int,float) - def __init__(self,parent=None,port=None,index=0,base=100): - super(ThC, self).__init__(parent) +class ThC(QtCore.QRunnable): + #datasignal = QtCore.pyqtSignal(int,float) + def __init__(self,port=None,index=0,base=100): + super().__init__() self.index = index self.is_running = True self.port = port self.base = base + self.signals = ThC_Signals() def run(self): print(f"Thread {self.index} started") self.port.flushOutput() @@ -299,20 +344,24 @@ class ThC(QtCore.QThread): while True: cnt+=1 inp = self.port.readline() - if inp[0] == 62 and inp[-3] == 60 : - inp = inp[1:-3] - y = float(inp.decode('utf-8')) - self.datasignal.emit(cnt,y) - - time.sleep(0.001) + try: + if inp[0] == 62 and inp[-3] == 60 : + inp = inp[1:-3] + y = float(inp.decode('utf-8')) + self.signals.datasignal.emit(cnt,y) + except IndexError: + pass + time.sleep(0.001) + if self.is_running==False: + raise WorkerKilledException def stop(self): self.is_running=False print(f"Thread {self.index} stopped") - self.terminate() + #self.terminate() -class ThC_2(QtCore.QThread): - def __init__(self,parent=None,port=None): - super(ThC_2,self).__init__(parent) +class ThC_2(QtCore.QRunnable): + def __init__(self,port=None): + super().__init__() self.is_running = True self.port=port def run(self): @@ -324,10 +373,12 @@ class ThC_2(QtCore.QThread): print(cmd) self.port.write(cmd.encode('utf-8')) time.sleep(1) + if self.is_running==False: + raise WorkerKilledException def stop(self): self.is_running=False print(f'Thread ThC-2 stopped') - self.terminate() +