繁体   English   中英

如何使用Java读取原始串行数据?

[英]How to read raw serial data using Java?

我目前正在实施Slot计费系统,以使用SAS602与老虎机进行接口 该协议使用非标准的9位协议进行串行通信。 因此数据是1个开始位+ 8个数据位+ 1个停止位+ 1个唤醒位(在我的情况下是奇偶校验位)

老虎机根据唤醒位识别地址字节和数据字节。 如果已设置,则该字节为地址并被清除,则为数据字节。

在协议中也提到了9位不可用的支持,建议使用标记/空间奇偶校验。 我在Java上使用jserialcom,并设法与老虎机建立了连接并读取了数据。 但是,我无法区分数据和地址字节,因为使用jserialcomm库,readbytes会剥离原始数据,仅向我提供数据字节。 我无法访问奇偶校验位状态。

是否可以使用Java获取原始的11位数据? 可能吗? 如果是这样,我该怎么做呢?

我打开任何库或Linux平台。

因为第9位不是数据而是携带控制信息,所以在配置串行端口时可以启用奇偶校验。 现在,当接收到数据时,在接收到的字节中计数为1,并检查是否发生奇偶校验错误。 如果尚未发生,并且您知道1的数目,则可以轻松推断出奇偶校验位是1还是0,从而得出数据或控制。

还可以看看这篇关于串行端口第9位的文章

最后,我修改了Jserialcomm库,以在接收数据时忽略奇偶校验,并在传输数据时设置奇偶校验位。 对接收到的数据进行错误检查仅基于CRC。 到目前为止,这个工作正常。

尽管可以通过在接收到的数据上设置NO_PARITY来实现上述目的。 发送字节时的MARK和SPACE奇偶校验。 使用Jserialcomm库切换奇偶校验时,因为设置奇偶校验时有200ms的延迟。 这再次导致数据丢失。 我不完全确定为什么会有这样的延迟。

在Linux中,还可以选择在奇偶校验后出现错误时将255 0添加到接收到的每个字节中。 这可以逆转奇偶校验机制来应用。 但是这种方法也容易出错,因为添加额外的字节需要花费时间,并且最终可能会丢失大量数据。 这也需要修改Jserialcomm库。

暂无
暂无

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

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