2011年2月5日 星期六

Data Combination

http://4rdp.blogspot.com/2011/02/data-combination.html?m=0

先恭喜大家新年快樂、鴻「兔」大展,已經接連好幾個禮拜談論通訊問題,不過這主題還有一些應用層面問題可以再深入討論,今天的主題就鎖定在指令型資料合併傳輸。

有時候控制需要傳送很多資料,如何能夠快速有效率傳遞資料,資料合併傳輸是常用的方法之一,它的優點是為了降低確認回應次數。一般應用於工業控制場合,為了確認接收端是否收到資料,每傳送一筆資料後,接收端要回應一次,至於回應的內容為何?由設計者自行定義。請注意要降低資料遺失的風險,關鍵在於
雙向通訊有回應確認機制,而非資料合併。

以 Android 手機傳送方位感應器資料為例,若有 XYZ 軸三筆資料要傳,為了確保傳送成功,也為了避免後面的資料覆蓋前面資料,每傳出一筆後,手機就等待 NXT 回應,有正確回應後再傳下一筆,因此傳這三筆資料就要等三次回應,是不是浪費時間?如果這三筆資料合併成一組資料傳送,那只要等一次回應就好。

雖然合併成一組資料字串比較長,藍芽會分段傳送,但是這個字串只要一個結尾字元,接收端以這個結尾字元當結束,因此接收端通常會設置緩衝器 (buffer),先把資料接收,一直等收到結尾字元再處理這個長字串,並回應發射端處理情形。如果你少了接收緩衝器,那也會發生資料覆蓋情形,還好 NXT 每個信箱可接收最長 58 字元,這就是它的資料緩衝區大小。這意思說一般NXT 可一次最多接收 5 (控制字元) + 58 (資料) + 1 (結束字元) = 64 字元。當超過 64 字元會發生甚麼事?我不清楚,有興趣的朋友試看看,我的猜測會蓋到下一個信箱。

當然,手機程式可以採用信箱法(以指令型模擬信箱型)將資料傳給一般 NXT,使用三個信箱分別傳送三種不同軸向資料,若是不在意資料覆蓋,那是可以省略回應機制,只是同軸向資料,會被最新資料覆蓋。

沒有留言:

張貼留言