我正在尝试使用pySerial通过USB-RS232转换器与设备通话。
我的第一个测试是放弃通信,只是“发明”数据点,以便测试通信类与程序其余部分的整合。
def run(self):
import random
while True:
self.callback(random.ranint(MIN, MAX))
工作得很好。现在我想测试“短路”通信。也就是说,短引脚2和3(没有流量控制)并接收我正在传输的内容。
这在minicom
中可以正常使用,但不适用于我的代码:
def run(self):
while True:
self.ser.write('a')
print self.ser.read(size=1)
读取和写入超时设置为0.
超时=无:永远等待
timeout = 0:非阻塞模式(读取后立即返回)
timeout = x:将超时设置为x秒(允许浮动)
我的程序在调用write()
后挂起。我错过了什么?
答案 0 :(得分:0)
以下是图书馆测试中的一些代码:
def test2_Loopback(self):
"""timeout: each sent character should return (binary test).
this is also a test for the binary capability of a port."""
for block in segments(bytes_0to255):
length = len(block)
self.s.write(block)
# there might be a small delay until the character is ready (especially on win32)
time.sleep(0.05)
self.failUnlessEqual(self.s.inWaiting(), length, "expected exactly %d character for inWainting()" % length)
self.failUnlessEqual(self.s.read(length), block)#, "expected a %r which was written before" % block)
self.failUnlessEqual(self.s.read(1), data(''), "expected empty buffer after all sent chars are read")
来自here的。看来我缺少的是中间的评论。
编辑:锯末下面的评论以更简洁的方式解决了这个问题。请改用它。
现在是真正的解决方案。
事实证明我的问题非常愚蠢。我在做:
write()
,然后read()
发生了什么:写入成功,但数据丢失(因为RX和TX尚未加入)。然后读(),冻结,等待听到的东西。
我通过首先将引脚短接来解决,然后运行测试。