На данный момент я должен сделать код, который продолжает читать данные из моего COM-порта. Но в тот момент, когда я пытаюсь использовать read (), он блокирует программу, я пытался использовать потоки, но когда я делаю свой поток предназначенным для функции чтения, он продолжает блокироваться.
Поэтому я добавил возврат, проблема в том, что он будет возвращать только то значение, которое прочитал, когда я нажимаю кнопку.
В этот момент Lees () читает данные в тот момент, когда я нажимаю кнопку InsertText (). Я хочу, чтобы Lees () продолжал работать в фоновом режиме, пока я использую свой интерфейс.
Интерфейс:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLineEdit
import serial_se_re
import threading
serialPort = serial_se_re.SerialPort()
def SendDataCommand():
serialPort.Stuur("Basic Send")
def Verbinden():
serialPort.Open("COM13",19200)
def InsertText():
print(serialPort.Lees())
#tekst_veld.insert(message)
app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
window.setWindowTitle('Python')
thread = threading.Thread(target=serialPort.Lees())
thread.start()
connect_button = QPushButton('Connect')
layout.addWidget(connect_button)
connect_button.clicked.connect(lambda: Verbinden())
stuur_data_button = QPushButton('Stuur message')
layout.addWidget(stuur_data_button)
stuur_data_button.clicked.connect(lambda: SendDataCommand())
instert_text = QPushButton('add')
layout.addWidget(instert_text)
instert_text.clicked.connect(lambda: InsertText())
tekst_veld = QLineEdit()
layout.addWidget(tekst_veld)
window.setLayout(layout)
window.show()
app.exec_()
SerialConnection:
import serial
import sys
import _thread
import threading
class SerialPort:
def __init__(self):
self.comportName = "COM13"
self.baud = 19200
self.isopen = False
self.timeout = None
self.serialport = serial.Serial()
def __del__(self):
try:
if self.serialport.is_open():
self.serialport.close()
except:
print("Kan de COM port niet sluiten, error: ", sys.exc_info()[0] )
def CheckOpen(self):
return self.isopen
def Open(self,port,baud):
if not self.isopen:
self.serialport.port = port
self.serialport.baudrate = baud
try:
self.serialport.open()
self.isopen = True
except:
print("Kan port niet openen, error: ", sys.exc_info()[0])
def Sluiten(self):
if self.isopen:
try:
self.serialport.close()
self.isopen = False
except:
print("Kan port niet sluiten, error: ", sys.exc_info()[0])
def Stuur(self,message):
if self.isopen:
try:
# Ensure that the end of the message has both \r and \n, not just one or the other
newmessage = message.strip()
newmessage += '\r\n'
self.serialport.write(newmessage.encode('utf-8'))
except:
print("Error sending message: ", sys.exc_info()[0] )
else:
return True
else:
return False
def Lees(self):
if self.isopen:
try:
while(1):
message = self.serialport.read()
return(message)
except Exception:
print("error")
else:
print("Cannot open serial port")