如何对设备进行建模,以便测试我的串行通信?

时间:2013-09-10 10:30:14

标签: python serial-port pyserial

我正在尝试使用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秒(允许浮动)

enter image description here

我的程序在调用write()后挂起。我错过了什么?

1 个答案:

答案 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

。看来我缺少的是中间的评论。

编辑:锯末下面的评论以更简洁的方式解决了这个问题。请改用它。


现在是真正的解决方案。

事实证明我的问题非常愚蠢。我在做:

  1. 打开端口,没有超时或读写
  2. 无限循环write(),然后read()
  3. 用刀或回形针短接RX和TX
  4. 等待并抓住我的头,为什么一切都冻结
  5. 发生了什么:写入成功,但数据丢失(因为RX和TX尚未加入)。然后读(),冻结,等待听到的东西。

    我通过首先将引脚短接来解决,然后运行测试。