PySerial 写入未按预期工作
PySerial write is not working as expected
我正在尝试将命令写入设备并使用 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 或 putty 等串行终端发送命令时,它工作正常。请帮我解决问题。
我自己解决了
当我尝试发送我的命令时,python 正在非常快速地将它写入设备。所以我添加了一个循环来以很小的延迟一个一个地写入字节,它对我来说很好用。这是编辑的部分:
if ser.in_waiting == 0:
for i in cmd:
ser.write(i.encode())
time.sleep(0.1)
我正在尝试将命令写入设备并使用 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 或 putty 等串行终端发送命令时,它工作正常。请帮我解决问题。
我自己解决了
当我尝试发送我的命令时,python 正在非常快速地将它写入设备。所以我添加了一个循环来以很小的延迟一个一个地写入字节,它对我来说很好用。这是编辑的部分:
if ser.in_waiting == 0:
for i in cmd:
ser.write(i.encode())
time.sleep(0.1)