C#串口通信——协议格式
?
轉(zhuǎn)自:https://www.cnblogs.com/fyhui/articles/2477733.html
?
串口通信之協(xié)議格式
緩存收到的所有數(shù)據(jù),找到一條完整數(shù)據(jù),分析數(shù)據(jù),界面通知。
?
信令格式:
同步頭?+?數(shù)據(jù)正文?+?同步尾
同步頭?+?命令字?+?數(shù)據(jù)長度?+?數(shù)據(jù)正文?+?同步尾
同步頭?+?地址碼?+?命令字?+?數(shù)據(jù)長度?+?數(shù)據(jù)正文?+?同步尾
?
同步頭?+?數(shù)據(jù)正文?+?校驗碼
同步頭?+?命令字?+?數(shù)據(jù)長度?+?數(shù)據(jù)正文?+?校驗碼
同步頭?+?地址碼?+?命令字?+?數(shù)據(jù)長度?+?數(shù)據(jù)正文?+?校驗碼
?
文本格式可以直觀的定義回車換行是協(xié)議的結(jié)尾,所以我們可以省略數(shù)據(jù)長度,增加協(xié)議尾。即:協(xié)議頭?+?數(shù)據(jù)?+?校驗?+?數(shù)據(jù)尾
一般情況下,同步頭2B,地址碼1B,命令字1B,數(shù)據(jù)長度1B,數(shù)據(jù)正文nB,同步尾2B,校驗碼2B。
?
信令的格式為了3個目的:a>符合業(yè)務(wù)需求;b>方便識別一條完整的數(shù)據(jù);c>進(jìn)一步驗證數(shù)據(jù),如有需要進(jìn)行數(shù)據(jù)還原。
?????? 地址碼、命令字為了目的a;
?????? 同步頭、數(shù)據(jù)長度、同步尾、校驗碼為了目的b;
?????? 校驗碼為了目的c。
?
建議:
1>??? 盡量采用數(shù)據(jù)內(nèi)容不會出現(xiàn)的字符作為同步頭尾。比如數(shù)據(jù)用BCD碼,則同步頭可以用A-E,如5E;
2>??? 如果同步頭尾字符可能會在數(shù)據(jù)正文出現(xiàn),則可能要用轉(zhuǎn)義符,當(dāng)然同步頭+數(shù)據(jù)長度+同步尾3個條件同時成立的正文數(shù)據(jù)出現(xiàn)概率應(yīng)該非 ?????? 常非常低;
3>??? 如果數(shù)據(jù)較短,請使用校驗碼進(jìn)一步驗證數(shù)據(jù)的正確性;
4>??? 如果正確性要求特別高,請采用校驗碼還原可能的錯誤數(shù)據(jù),如果校驗碼不能完成數(shù)據(jù)還原,請重發(fā)信令請求以保證正確。
總結(jié)
以上是生活随笔為你收集整理的C#串口通信——协议格式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android自动化测试】Robot
- 下一篇: PCI驱动框架简单分析