C++ 串口双向通信问题

C++ 串口双向通信问题,c++,linux,serial-port,pyserial,C++,Linux,Serial Port,Pyserial,我有一个设备(用CPP编码)连接到我的Ubuntu PC,我正试图用我的Python节点与它通信。基本上,尝试从设备接收消息,然后向其发送消息(波特率为230400)。默认情况下,设备仅以非常低的频率发布心跳消息:0.1-0.2 Hz。发送到设备的消息约为2 Hz。(当我完成完整的实现时,它们可能高达200 Hz)。在默认情况下,我能够从PC接收心跳并正确发送消息 但因为我需要的信息不仅仅是心跳,我还包括了更多的信息要从设备发送,频率增加到2赫兹左右。但是,我能够正确地从设备接收这些消息,但是我

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

但因为我需要的信息不仅仅是心跳,我还包括了更多的信息要从设备发送,频率增加到2赫兹左右。但是,我能够正确地从设备接收这些消息,但是我发送到设备的消息在一段时间后会下降。在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)

我对串口通信的低级方面不是很了解。我曾尝试在设备上调整参数,如缓冲区大小、超时等,但没有任何效果。如果有人能够解释为什么会出现这个问题,或者我应该在代码中查找哪些危险信号,这将非常有帮助。不幸的是,设备上的完整代码在这里显示得非常广泛,因此如果需要,我可以包括特定部分。提前谢谢

你说“设备停止接收”。这是否意味着发送者停止了?还是发送方仍在发送消息,但接收方不知何故被卡住了?发送方仍以正确的频率发送消息。只是另一端的设备从未接收到它们。除了打开和读取,接收器是否与串行端口进行任何其他交互?:更改参数、写入、ioctl()、tcsettr()等。?假关闭怎么样?什么操作系统是“设备”?你能分享设备代码吗?可能是很多事情-可能是一个比赛条件下,你错过了看到“新数据进来”。你好,谢谢你的答复。我能够解决这个问题:事实上,设备在不同的线程中处理发送和接收操作,并且它们之间存在某种冲突。当我在同一个地方重写带有发送和接收操作的代码时,我没有这个“超时”问题。希望这不会引起更多的问题。沃利克:不,没有更多的互动。Mats:它运行ARM Linux,NuttX。明天我可以用代码编辑问题,(我现在没有),如果你能让我知道我没有做错什么就好了。