繁体   English   中英

使用RXTX同步Java串行端口连接

[英]Synchronizing a java serial port connection using RXTX

我有一个Java程序,该程序在串行端口上连续侦听某种格式的消息。 当发送方应用程序不发送消息时,它将以以下格式发送心跳消息:

  • 字节1:1
  • 字节2:0xFE
  • 字节3:0xED
  • 字节4-255:0

如果接收方应用程序在发送方之前启动,则所有功能均正常运行,但是,如果发送方一直在降低心跳,则几乎可以确定,接收方在启动时将在心跳消息中间开始侦听(这是一个问题)因为我读了255个字节的数据块,因为每个消息都是Reed-Solomon编码的)。 我写了一个简单的状态机同步功能。 在下列情况下,它一次读取1个字节:

  • 如果我只是读1:则切换到NEW_MESSAGE状态。

  • 如果我刚刚读到0xFE:切换到POTENTIAL_HEARTBEAT状态。

  • 如果我刚刚读到0xED:切换到HEARTBEAT状态

相关检查已经到位,以确保不会乱序到达这些状态,一旦达到HEARTBEAT状态,我将读取剩余的252 0并假定接收器已同步。 到目前为止,在测试中,尽管向下发送了正确的字节以有效触发同步,但该同步器仍无法正常工作。 我的问题是:是否有更好的方法来同步串行通信,因为我真的根本不喜欢我的方法。

问题实际上只是我忘记了位排序的重要性。 我从中读取的字节通道为小端,因此16位整数0xFEED即将以0xED 0xFE而不是0xFE oxED出现。 通过简单的状态检查开关,一切正常。

衷心感谢所有评论。

扩展状态机,并检查接收到的最后3个字节。 将它们映射到心跳消息的前3个字节。 由于前3个字节似乎总是相同,因此您可以使用它来检测心跳消息的开头并进行同步。

暂无
暂无

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

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