串口双向通信问题

时间:2014-05-21 00:52:52

标签: c++ linux serial-port pyserial

我有一个连接到我的Ubuntu PC的设备(用CPP编码),我正在尝试使用我的Python节点与它通信。基本上尝试是从设备接收消息,然后向其发送消息(波特率为230400)。默认情况下,设备仅以非常低的频率发布心跳消息。 :0.1-0.2赫兹。发送到设备的消息大约为2 Hz。 (当我完成完整的实施时,它们可以高达200赫兹)。在默认情况下,我能够收到心跳并从PC正确发送消息。

但是因为我需要更多的信息而不仅仅是心跳,我还提供了一些从设备发送的消息,将频率提高到大约2 Hz。但是,我能够正确地从设备接收这些消息,但是我发送到设备的消息会在一段时间后丢失。在PC端,发送者+接收者被打包到相同的Python脚本中。如果我重新启动脚本,它会再次运行一段时间,然后停止。

当我增加从设备发送到PC或其频率的数据量时,停止所需的时间减少。

回顾一下:

案例1:设备以0.1 Hz发送,PC以2 Hz发送,两端发送/接收精细工作。

案例2:设备以> 1-2 Hz发送,PC以2 Hz发送,设备发送,PC接收。 PC发送,设备在一段时间后停止接收。

在Python中打开端口的方式就像这样

def __init__(self, device, baud=230400, autoreconnect=False, source_system=255):
    import serial
    self.baud = baud
    self.device = device
    self.autoreconnect = autoreconnect
    self.port = serial.Serial(self.device, self.baud, timeout=0,
                              dsrdtr=False, rtscts=False, xonxoff=False)

我对串口通信的低级方面知之甚少。我尝试在设备上调整缓冲区大小,超时等参数,但没有任何效果。如果任何人能够阐明为什么会出现这个问题,或者我应该在代码中寻找什么样的红旗,这将是非常有帮助的。遗憾的是,设备上的完整代码在此处显示非常广泛,因此如果需要,我可以包含特定部分。提前谢谢!

0 个答案:

没有答案