【问题标题】:ASCII text sent with pySerial becomes appended at end device使用 pySerial 发送的 ASCII 文本附加在终端设备上
【发布时间】:2013-02-08 11:32:05
【问题描述】:

我正在尝试向设备发送两行 ASCII 文本,但设备将这两行读取为附加的一行。是延迟问题还是结束字符错误?我似乎真的看不出问题。

import serial
ser = serial.Serial('/dev/cu.usbserial-FTVFV0X7', 19200, timeout=10)
ser.write("x0")
ser.flush()
ser.write("11")
ser.flush()

终端设备接收到的是x011,而不是x0和11。

从普通终端程序测试时,两行分开接收没有问题。

【问题讨论】:

  • 它还会收到什么? 0x0 + 11 = 0x011。
  • @Ken,请不要误会。我说的是 ASCII 字符而不是 HEX。
  • @bernie,实际上换了一行,但问题是第二行接收为\n11。新行 char 会搞砸一切。
  • @bernie,如果我只使用\n,它也会被附加。所以我会收到x0\n11
  • @bernie,事情是os.linesep 工作,但\n 搞砸了。这可能是缺少结束字符的迹象吗?

标签: python serial-port pyserial plc


【解决方案1】:

许多硬件串行设备使用回车来表示行或指令的结束。在不知道您尝试与之通信的设备(或它期望的协议)的情况下,我可能会建议尝试

ser.write("x0\r")
ser.flush()
ser.write("11\r")

如documentation 中所示,pySerial 不再支持readline() 的 EOL 参数,因此如果设备正在向您返回回复(并且正在使用 \r 终止行),那么您应该按照建议进行操作并使用io.TextIOWrapper 和适当的超时来解析传入的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-17
    • 2013-01-07
    • 2014-01-07
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多