PySerial写入未按预期工作

时间:2019-02-21 11:23:07

标签: python-3.x serial-port pyserial

我正在尝试将命令写入设备并使用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或腻子之类的串行终端发送命令时,它工作正常。请帮助我解决问题。

1 个答案:

答案 0 :(得分:0)

我自己解决了。

当我尝试发送命令时,python正在非常快地将其写入设备。因此,我添加了一个循环以较小的延迟一个字节一个字节地写入字节,这对我来说很好用。这是编辑的部分:

if ser.in_waiting == 0:
    for i in cmd:
        ser.write(i.encode())
        time.sleep(0.1)