繁体   English   中英

我如何为设备建模以测试串行通信?

[英]How do I model the device, in order to test my serial communication?

我正在尝试使用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。

超时=无:永远等待
超时= 0:非阻塞模式(读取后立即返回)
超时= x:将超时设置为x秒(允许浮动)

在此处输入图片说明

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

这是库测试的一些代码:

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")

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

编辑:下面的木屑的评论是在一个更简洁的方式解决了这个问题。 改用它。


现在是真正的解决方案。

事实证明,我的问题很愚蠢。 我在做:

  1. 打开端口,无超时或读写
  2. write()然后read()进行无限循环
  3. 用刀或回形针短接RX和TX
  4. 等一下挠头,为什么一切都冻结了

发生了什么:写入成功,但是数据丢失了(因为RX和TX尚未连接)。 然后,read()冻结,等待听到一些声音。

短路了引脚, 然后运行测试解决了该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM