Форум сайта python.su
в Qt надо делать через сигнал/слот
https://evileg.com/ru/post/290/
https://github.com/qt/qtserialport/tree/5.12/examples/serialport
примеры на С++, но разобраться несложно
Офлайн
попробую. спс за подсказку
А на будущее всё равно вопрос интересный, можно ли остановить запушенный поток?
отредактировал. Всё отлично получилось. Причём доку я читал и waitForReadyRead я видел, только не до конца раздуплил как его применить. Я просто раньше только под микроконтроллеры кое-что писал, а на такие вещи только сейчас решился попробовать.
Отредактировано banzayy (Май 2, 2019 15:03:07)
Офлайн
Офлайн
с портами окончательно оформилось так
from PyQt5.QtCore import pyqtSignal, QThread, QIODevice from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo class SerialThreadClass(QThread): rx_signal = pyqtSignal(bytes) def __init__(self, port, parent=None): super(SerialThreadClass, self).__init__(parent) # open the serial port self.serport = QSerialPort() self.serport.setBaudRate(14400) self.serport.setPortName(port) self.serport.open(QIODevice.ReadWrite) def run(self): # Устанавливаем таймаут на приём в 2 секунды if self.serport.waitForReadyRead(1000): # Принимаем данные rx_data = self.serport.readLine() # Если данные приняты, передаём их с сигналом if len(rx_data) > 0: self.rx_signal.emit(bytes(rx_data)) # При наступлении таймаута передаём сигнал об ошибке else: rx_data = [0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1] self.rx_signal.emit(bytes(rx_data)) # Передача данных через порт def senddata(self, data): tx_data = bytes(data) self.serport.write(tx_data) # Определяем доступные в системе порты class SerialInfoClass(QSerialPortInfo): def __init__(self, parent=None): super(SerialInfoClass, self).__init__(parent) def avaliable_ports(self): avaliable_comport_list = [''] self.my_ports = QSerialPortInfo() ports = self.my_ports.availablePorts() for port in ports: port_name = port.portName() avaliable_comport_list.append(port_name) return avaliable_comport_list
Отредактировано banzayy (Май 3, 2019 19:53:48)
Офлайн
banzayyа чего же
А на будущее всё равно вопрос интересный, можно ли остановить запушенный поток?
banzayyтак всетаки две или одну?
# Устанавливаем таймаут на приём в 2 секунды
if self.serport.waitForReadyRead(1000):
[code python][/code]
Отредактировано PEHDOM (Май 3, 2019 09:46:25)
Офлайн
это будет ещё подбираться, оборудование ещё не готово. пока остановился на 1 секунде. Доделается в металле, установятся микроконтроллерные платы в оборудование (может ардуино, может что-то на stm32f103) и будет по итогам видно
Офлайн