2015-02-11 86 views
0

我想使用串行端口在兩臺計算機之間進行通信,並且我是此區域的新手。我需要從一臺計算機(比如說A)發送請求到另一臺計算機(比如說B)並接收發送請求的響應。我正在用響應更新Java Swing用戶界面。與JSSC同步/異步串行端口通信

我正在使用jSSC庫來執行此操作。我看過SerialPortReader examples,以下是我的理解。

我將不得不在兩臺計算機上實現SerialPortEventListener.A將使用writeBytes方法發送請求。 B將聽取使用SerialPortEventListener發送的命令,並將使用writeBytes方法發送響應。 A將使用其SerialPortEventListener的實現來監聽數據,並且當數據收到時,將更新UI。以下是我的問題。

a)我上面的觀察是否正確?有沒有不同的方式來做到這一點(例如,有可能在協議內存在將返回響應的writeBytes方法?)

b)我讀了幾個步驟,說明串行端口通信可以是同步或異步。但從例子來說,我不明白代碼是否實現了異步或同步通信。如何使用jSSC實現同步/異步通信?我沒有要求實施。只是一些準則和可以使用的方法。

c)消息可能會部分傳遞。例如,如果我將該命令作爲字符串「get variableThreeValue」發送,則可能只會收到「get」或諸如「get varia」之類的內容(這會導致諸如「get get」等消息。 )我該如何處理這種情況?再次,我沒有要求實施。只是一些準則和可以使用的方法。

+0

你不想同步。串行連接通常是異步的:開始和停止位由HW處理。如果你不相信連接,你將不得不設計一個協議:消息格式(長度,序列號,字節,CRC),acknolwedge /否定確認請求重發,...爲什麼不使用以太網? – laune 2015-02-11 05:12:19

+0

@laune我必須同時支持wi-fi和Serail端口通信。無線電發射器/接收器將被插入串行端口並且通信將以無線方式發生。感謝您的建議。但我也提出了一些問題來提高我的理解力。你能幫助我解決上述問題嗎? – 2015-02-11 05:27:46

+0

檢查並寫出答案。 – laune 2015-02-11 06:07:27

回答

1

經典的「串口」是非常「低級」的東西。必須設置波特率,開始和停止位以及流量控制等參數,然後讀取和寫入字節序列。 Java庫使用偵聽器來接收事件,這些事件直接來自串行驅動程序感知的事件(您可以在javadoc中找到像「line」這樣的術語)。如何反應,取決於「另一面」。

流量控制是用來避免溢出或溢出接收器。 RS-232的線路包含C(lear)T(o)S(end)和R(equest)TS,因此「硬件握手」是一種選擇。或者,US-ASCII定義的控制字符XON和XOFF可以嵌入數據流,如果它不是二進制數據。如果發送端沒有全速發送或計算機速度顯着不同,流量控制不應該成爲問題。

據我所知,你會連接一些無線設備到端口,其文檔應該指定所有的參數,以及更高層的協議,即如何發送和接收數據。該設備可能有特殊要求,例如,您必須在傳輸實際數據之前傳遞一些設置數據。 (如果你只用一根電纜連接兩臺電腦,那麼一切都取決於你。)

一旦你基本上可以發送和接收,你將不得不考慮安全傳輸。您需要設計一個協議:

  • 消息格式,例如包含長度,序列號,數據字節,CRC。
  • 消息排序,即誰可以發送什麼和什麼時候,例如,,消息A到B,從B到A的確認,重複。或者來自B的NAK,並且A必須重新發送。
  • 也許你需要一個「會話協議」,即登錄(如ftp)和註銷。超時:如果任何一方在T內沒有收到其他消息,該怎麼辦?
  • 您是否需要心跳,即在頻道空閒時發送的消息,以瞭解對方仍然「活着」。

無線局域網連接應該使這些不必要的大部分。真正的「收音機」(一些短波?)我從來沒有聽說過,但我不是一個無線電專家。

+0

該設備是https://learn.sparkfun.com/tutorials/exploring-xbees-and-xctu,僅用於您的信息 – 2015-02-11 08:33:56

+0

謝謝!好玩具。 - 我見過「流量控制」。你知道XON/XOFF與「硬件」是什麼意思嗎? – laune 2015-02-11 08:48:56

+0

不,我不知道那是什麼 – 2015-02-11 08:52:56

0

XON/XOFF是軟件流程控制。假定生產者a和b之間的雙向串行字節。如果要麼發送一個XON字節,這意味着whoa,停止發送我的字節,直到我發送一個XOFF字節。

對於硬件,用RTS替換帶有CTS和XOFF字節的XON字節。