如題,我使用定時器,每隔離50MS發送一次,AA 01 02 03 05 FF到下位機。然后也可以手動按鍵發送AA 02 03 04 05 FF。到下位機。發現,有時候下位機收到的是錯誤的。
請問怎么在上位機修改,自動和手動發送的資料發過去能完整
uj5u.com熱心網友回復:
資料校驗。自己寫一個最簡單的CRC16演算法、奇校驗、偶校驗之類的,校驗不對的重發。uj5u.com熱心網友回復:
這個東西就和網路通信的校驗一樣的。上位機把命令放在佇列里,連接、執行、斷開等每一個訊息都需要下位機校驗,校驗成功、執行結果都給上位機一個回復;同樣的,上位機也需要對下位機的訊息進行校驗,不成功的訊息進行重發。另外有一個需要特別注意的地方,連接的埠的波特率不要太高,夠用就可以,過高的波特率導致過高的錯誤率。
uj5u.com熱心網友回復:
發出去的校驗一下嗎?還是怎么樣?關鍵是,發出去的資料,是沒有回傳成功或者什么之類的。uj5u.com熱心網友回復:
加鎖,確保每次只能發送一串資料uj5u.com熱心網友回復:
佇列是個正確的解決辦法。uj5u.com熱心網友回復:
佇列??怎么實作?感覺你說的很有道理,只是不知道哪里有道理了~!~
uj5u.com熱心網友回復:
1. 佇列先進先出,2. 將所有需要發出的命令入隊,
3. 發送程式,做出列操作,將出列的命令發給下位機。
uj5u.com熱心網友回復:
佇列應該可行,但是,處理起來感覺哪里錯了。還在看轉載請註明出處,本文鏈接:https://www.uj5u.com/net/48065.html
標籤:C#
上一篇:Nhiberate資料庫表欄位與軟體物體類及xxx.hxb.xml組態檔不兼容問題
下一篇:SuperGridControl
