簡體   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