【问题标题】:Problem sending Bytes with pySerial and socat使用 pySerial 和 socat 发送字节时出现问题
【发布时间】:2011-04-02 13:33:56
【问题描述】:

我想通过 pySerial 发送一些字节。我用 socat 创建了虚拟串口用于测试目的:

socat PTY,link=./ptyp1,b9600 PTY,link=./ptyp2,b9600

这是python代码:

ser = serial.Serial('./ptyp1')
x = struct.pack('B',2)
print binascii.hexlify(x) # 02
ser.write(x)
y = ser.read(2)
print binascii.hexlify(y) # 5e42

我得到的输出:

02   # x
5e42 # y

我期望的输出:

02 # x
02 # y

我在这里做错了什么?是socat还是python?

编辑:

我刚刚注意到不同 x 值的一些其他奇怪行为。这里的输出:

x = 12  => y = 5E 52 0D 0A 5E 50
x = 100 => y = 100 # why does it work here?

解决方案:

问题是我在我写信的同一个端口上阅读。如果我做对了,socat 将两个端口“连接”为“输入”和“输出”。因此,如果我写入 ./ptyp1,我必须阅读 ./ptyp2。之后,一切都很好。

【问题讨论】:

    标签: python pyserial socat


    【解决方案1】:

    问题是我在我写信的同一个端口上阅读。如果我做对了,socat 将两个端口“连接”为“输入”和“输出”。因此,如果我写入 ./ptyp1,我必须阅读 ./ptyp2。之后,一切都很好。

    【讨论】:

      【解决方案2】:

      我已经安装了 socat 来测试你的代码。我已经运行了这条线:

      socat PTY,link=./ptyp1,b9600 PTY,link=./ptyp2,b9600
      

      那么,下面的代码就起作用了:

      from binascii import hexlify
      from serial import Serial, struct
      
      ser = Serial('ptyp1')
      x = struct.pack('B', 2)
      print hexlify(x) # 02
      ser.write(x)
      y = ser.read()
      print hexlify(y) # 5E
      y = ser.read()
      print hexlify(y) # 42
      

      输出:

      02
      5e
      42
      

      【讨论】:

      • 好的,但我不明白:为什么我只写 1 (02) 时可以读取 2 个字节 (5e 42)。如何写入 1 个字节并读取相同的字节?
      【解决方案3】:

      您似乎得到的是字符串“^B”。 socat(或其他方式)可能会将您发送的字节 (\x02) 解释为某种控制代码。

      在我的脑海中,Ctrl-B 是翻页助记符,但我不确定。

      【讨论】:

        猜你喜欢
        • 2013-12-05
        • 1970-01-01
        • 2016-08-17
        • 2021-01-07
        • 2011-07-24
        • 1970-01-01
        • 2011-03-22
        • 2021-03-21
        • 2012-09-03
        相关资源
        最近更新 更多