2011-04-02 53 views
1

我想通过pySerial发送一些字节。我创建了socat虚拟串行端口,用于测试目的:用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。之后,一切都很好。

回答

1

问题是我读到了我写给的同一个端口。如果我做对了,socat将两个港口“连接”为“进”和“出”。所以如果我写入./ptyp1,我必须阅读./ptyp2。之后,一切都很好。

0

我已经安装了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 
+0

好吧,但我不明白:当我只写1(02)时,为什么我可以读2个字节(5e 42)。我如何写1个字节并读取相同的字节? – nonsenz 2011-04-02 16:57:13

0

你似乎什么回去了是字符串 “^ B” 。有可能socat(或其他方法)正在将您发送的字节(\x02)解释为某种控制代码。

关闭我的头顶,Ctrl-B是回页助记符,但我不确定。