我正在尝试将命令写入设备并使用RS232串行端口读取输出消息。当我尝试编写该命令时,它最初在工作。有时过后,它发送了错误的命令。例如,如果我发送"PC:EXEC:MY_CMD"
,则它正在向设备写入类似"PCPC:EXEC:MY_CMD"
或"PC:EXEPC:EXEC:MY_CMD"
的内容。这是代码:
import serial
import time
ser = serial.Serial()
ser.port = 'COM11'
ser.baudrate = 115200
ser.bytesize = serial.EIGHTBITS
ser.parity = serial.PARITY_NONE
ser.stopbits = serial.STOPBITS_ONE
ser.timeout = 1
time.sleep(1)
ser.open()
if ser.is_open:
cmd = 'PC:EXEC:MY_CMD' + '\r\n'
if ser.in_waiting == 0:
time.sleep(5)
ser.write(cmd.encode())
if ser.in_waiting > 0:
msg = ser.read(ser.in_waiting)
print (msg.decode())
ser.flush()
ser.close()
我在读取串行输出时没有问题。
当我尝试使用Tera term或腻子之类的串行终端发送命令时,它工作正常。请帮助我解决问题。
答案 0 :(得分:0)
我自己解决了。
当我尝试发送命令时,python正在非常快地将其写入设备。因此,我添加了一个循环以较小的延迟一个字节一个字节地写入字节,这对我来说很好用。这是编辑的部分:
if ser.in_waiting == 0:
for i in cmd:
ser.write(i.encode())
time.sleep(0.1)