THreads unter threadpool

This commit is contained in:
jens 2022-11-03 18:20:26 +01:00
parent 19ab015728
commit c505a49392

View File

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