大家下午好。您需要从一个设备接收数据。设备仅在向其发送命令后才产生数据。我们发送命令并接收几行响应(根据设备设置,接收的行数可能会有所不同)。从程序发送命令后,设备生成行,程序读取它们并冻结。那些。无法进一步处理接收到的数据并正常释放COM口。未经编辑的草稿代码:
import serial.tools.list_ports
#
#ports = serial.tools.list_ports.comports()
#
#for port in ports:
# print(port.device)
try:
# Find and open the COM port
ports = serial.tools.list_ports.comports()
port = next((p.device for p in ports), None)
print("Select port",port)
if port is None:
raise ValueError("No COM port found.")
ser = serial.Serial(port, baudrate=19200)
ser.flushInput()
ser.flushOutput()
serial_command=b"T LIST\r\n" #отправляем команду на получение данных
ser.write(serial_command)
data=""
while str(data)!="": # Читаем данные их порта
data=ser.readline()
print(data)
ser.flushInput()
ser.flushOutput()
# Perform operations on the COM port
ser.close() # Close the connection when done
print("Finish!")
except ValueError as ve:
print("Error:", str(ve))
except serial.SerialException as se:
print("Serial port error:", str(se))
except Exception as e:
print("An error occurred:", str(e))
结果是一个流:
b'T 014:18:15 0002 RANGE=1000.0 UGM\r\n'
b'T 014:18:15 0002 STABIL=0.0 UGM\r\n'
b'T 014:18:15 0002 PRES=30.5 IN-HG-A\r\n'
b'T 014:18:15 0002 SAMP FL=0 CC/M\r\n'
b'T 014:18:15 0002 PMT=13.7 MV\r\n'
b'T 014:18:15 0002 NORM PMT=16.0 MV\r\n'
b'T 014:18:15 0002 UV LAMP=3364.4 MV\r\n'
b'T 014:18:15 0002 LAMP RATIO=95.5 %\r\n'
b'T 014:18:15 0002 STR. LGT=22.1 UGM\r\n'
b'T 014:18:15 0002 DRK PMT=40.9 MV\r\n'
b'T 014:18:15 0002 DRK LMP=-1.1 MV\r\n'
b'T 014:18:15 0002 SLOPE=1.000\r\n'
b'T 014:18:15 0002 OFFSET=15.5 MV\r\n'
b'T 014:18:15 0002 HVPS=670 VOLTS\r\n'
b'T 014:18:15 0002 RCELL TEMP=50.0 C\r\n'
b'T 014:18:15 0002 BOX TEMP=31.6 C\r\n'
b'T 014:18:15 0002 PMT TEMP=8.2 C\r\n'
b'T 014:18:15 0002 TIME=18:15:13\r\n'
如果serial.Serial(port, baudrate=19200)将 timeout=1 添加到该行,程序将开始无休止地读取数据。那些。在输出中我们有:
b''
b''
...
接收数据后必须释放端口,以便可以处理数据。我就是不知道插头在哪里。