久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 防止傳感器串口數據紊亂將數據打包,關于包頭包尾概念? [打印本頁]

作者: 1571324958    時間: 2022-1-14 23:14
標題: 防止傳感器串口數據紊亂將數據打包,關于包頭包尾概念?
想把多個傳感器的數據通過串口上傳到上位機上,為了防止數據紊亂,我在網上找到的解決方案就是將數據打包,一包一包的將數據上傳到上位機上,沒有找到相關的教程,就是想問一下包頭包尾具體要怎么創建,使用的時候要注意些什么(問題可能有點蠢,萌新,請見諒)
作者: wulin    時間: 2022-1-15 07:19
串口傳輸數據的基本單元是一個字節,所謂打包是按通信協議把一串字節集中傳輸。假設某設備需要準確實時傳輸3個字節有效數據。那么制定一個自定義通信協議,由7個字節組成:0xaa、0x07、0x01、0x02、0x04、0x0d、0x55。數據頭,數據長度,3個有效數據,數據和得到的驗證碼,數據尾。當串口收到0xaa,表示有傳輸要求,接著收到0x07表示數據長度7個字節。當收完7個字節并且最后是0x55,就可以解析數據了。把除第6外其它6個字節相加,溢出部分拋棄,再與第6字節比較驗證,相同回復正確信息并執行相應任務,不同回復要求重發信息。簡單敘述,實際應用中驗證方式多種多樣,不一而足。
作者: npn    時間: 2022-1-15 07:36
串口數據包就是所有字節緊挨著發送,超過規定時間沒有接收到字節就開始解析,所謂的包頭包尾就是固定的值 比如A5 5A。
作者: szb314    時間: 2022-1-15 12:15
如果不是很復雜很長的數據,無需所謂包頭包尾,最后一個字節設為CRC校驗即可,傳輸那么多包頭尾完全是浪費時間
作者: rundstedt    時間: 2022-1-18 19:17
上位機實時性非常差的,利用超時標記幀頭是非常不靠譜的?梢岳肕ODBUS/ASC的做法,幀頭是":",幀尾是"\r\n",中間的數據不能出現這三個字符即可。
作者: 名字不是重點    時間: 2022-1-18 21:18
給你一張圖參考一下:





作者: rundstedt    時間: 2022-1-19 01:53
名字不是重點 發表于 2022-1-18 21:18
給你一張圖參考一下:

你這個邏輯上有問題的,要保證中間數據不會出現55AA、0D0A這樣的組合,否則會認錯幀頭幀尾的。
作者: xws245925587    時間: 2022-1-19 08:23
發表于 2022-1-19 01:53
你這個邏輯上有問題的,要保證中間數據不會出現55AA、0D0A這樣的組合,否則會認錯幀頭幀尾的。

這種簡單的協議如果擔心數據里面有特殊值(包頭/包尾),就把數據部分出現包頭/包尾的做個轉義也可以
作者: 名字不是重點    時間: 2022-1-19 09:27
發表于 2022-1-19 01:53
你這個邏輯上有問題的,要保證中間數據不會出現55AA、0D0A這樣的組合,否則會認錯幀頭幀尾的。

不管用什么數值作同步,這個問題都會存在。但用代碼可以輕松解決:
我之前用過的如下:
同步頭:
如果接收計數==1,且接收(計數-1)==0x55 &&  接收(計數)== 0xaa ,則接收計數+1,
否則 接收計數=0;
幀尾:
連續收到0x0d && 0x0a 時 判斷幀長度:
如果接收計數==幀長度,且接收(計數-1)==0x0d &&  接收(計數)== 0x0a,則接收OK=1;
否則 接收OK=0;繼續下一個字節接收。
在main()中只要讀到接收OK=1就開始分配工作了。

歡迎指正~~
作者: ly1972001    時間: 2022-1-19 11:43
可以參考一些成熟協議,如包頭是4個 0xFF ,再加一個 0x55,包尾只需有校驗字。
作者: ZHAOBAO511    時間: 2022-1-19 11:53
自己定義,不過包頭包尾要找的不常用好記的字節,例如AA.BB.FF,00,最好加簡單校驗,例如取反加一等。
作者: wufa1986    時間: 2022-1-19 14:14
就是用特殊符號做開頭結尾方便寫程序,這些符號在正式數據中不會出現
作者: 名字不是重點    時間: 2022-1-19 15:07
wufa1986 發表于 2022-1-19 14:14
就是用特殊符號做開頭結尾方便寫程序,這些符號在正式數據中不會出現

嚴格意義上來講,沒有什么特殊符號,因為數據傳輸的內容不可預知的,只能通過軟件代碼來過濾。
作者: rundstedt    時間: 2022-1-19 15:31
名字不是重點 發表于 2022-1-19 15:07
嚴格意義上來講,沒有什么特殊符號,因為數據傳輸的內容不可預知的,只能通過軟件代碼來過濾。

怎么可能不可預知???MODBUS/ASC的精髓就是幀頭":"幀尾“\r\n”,中間數據不可能出現這三個字符,只能是“01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ+-.”。小伙子你還是見識的太少。
作者: 名字不是重點    時間: 2022-1-19 15:46
你是說,“01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ+-.”這幾個字符就能代表0-255內的任何值了。
嗯呢,受教了!
作者: rundstedt    時間: 2022-1-19 16:02
名字不是重點 發表于 2022-1-19 15:46
你是說,“01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ+-.”這幾個字符就能代表0-255內的任何值了。
嗯呢,受 ...

ASCII碼當然可以表示任意值,“-9999.888”也是ASCII,可比你以為的0~255范圍大太多了。
作者: 名字不是重點    時間: 2022-1-19 16:05
發表于 2022-1-19 15:31
怎么可能不可預知???MODBUS/ASC的精髓就是幀頭":"幀尾“\r\n”,中間數據不可能出現這三個字符,只能 ...

如果傳送一幅240*320的圖片,本來只要傳240*320*2(16位色值)的圖片, 是不是要多傳一倍的數據量?
MODBUS/ASC貌似對大數據傳輸不太友好來的。。
作者: 名字不是重點    時間: 2022-1-19 16:10
發表于 2022-1-19 16:02
ASCII碼當然可以表示任意值,“-9999.888”也是ASCII,可比你以為的0~255范圍大太多了。

是的,我沒接觸過MODBUS的相關協議。。如我上一貼所言,傳輸速度會不會被打折扣了?因為你每一個字節都被拆成2個字節來發送,上位機要拆分、下位機要組合,感覺對實時性要求高的地方不太適用,比如在電機控制方面,速度慢了可能會出事的。望指點~~
作者: rundstedt    時間: 2022-1-19 16:10
名字不是重點 發表于 2022-1-19 16:05
如果傳送一幅240*320的圖片,本來只要傳240*320*2(16位色值)的圖片, 是不是要多傳一倍的數據量?
MOD ...

傳圖片用串口,你是不是有點兒什么疾患?
作者: rundstedt    時間: 2022-1-19 16:21
名字不是重點 發表于 2022-1-19 16:10
是的,我沒接觸過MODBUS的相關協議。。如我上一貼所言,傳輸速度會不會被打折扣了?因為你每一個字節都被 ...

上位機本來就沒實時性你要求本身就不合理。

單片機和單片機之間我更喜歡用MODBUS/RTU的形式來進行,幀數據一個字節內容可以是0~255之間任意值,總線空閑3.5字節時間,下面到來的第一個字符就是幀頭。
作者: 名字不是重點    時間: 2022-1-19 16:24
別急躁!
一些設備只有串口。即使看上去是USB的接口,但還是走串口的通道的。你不能更換新設備。沒得說。
作者: 名字不是重點    時間: 2022-1-19 16:30
發表于 2022-1-19 16:10
傳圖片用串口,你是不是有點兒什么疾患?

手持對講機(用的就是1.77的屏),終端客戶要求能更換開機LOGO,以及一些特定聲音文件,而主控不支持USB,又沒有插卡接口,只能走串口通道。這事多了去了。


作者: 名字不是重點    時間: 2022-1-19 16:36
發表于 2022-1-19 16:21
上位機本來就沒實時性你要求本身就不合理。

單片機和單片機之間我更喜歡用MODBUS/RTU的形式來進行,幀 ...

客戶的要求,就是合理的。。
即使以專業的角度來分析不合理,我們也要將就他們的不合理。。說的很窩囊、很委曲,事實如此,競爭太激烈了。。
作者: ly1972001    時間: 2022-1-20 11:09
包頭不與數據重復可以加長字節。小概率事件不用考慮,非要考慮,還有糾錯機制。
作者: 188610329    時間: 2022-1-20 21:40
個人覺得,如果不用 ASCII 傳輸,沒什么必要加包頭包尾的,開啟串口的9位模式,外加每發送16個字節 + 接收端回應一個效驗值,就足夠了。
作者: 嵌入式大菜雞    時間: 2022-4-10 12:15
發表于 2022-1-19 15:31
怎么可能不可預知???MODBUS/ASC的精髓就是幀頭":"幀尾“\r\n”,中間數據不可能出現這三個字符,只能 ...

請問,為什么以“:”為幀頭,數據中可以出現冒號呀
作者: Hephaestus    時間: 2022-4-10 18:48
嵌入式大菜雞 發表于 2022-4-10 12:15
請問,為什么以“:”為幀頭,數據中可以出現冒號呀

你要傳輸什么數據一定要有冒號?寫出來看々。
作者: DoneDone    時間: 2022-4-11 07:40
包頭即可。用一串不會或者極小概率出現的數據作為你要傳輸數據的頭。僅用來表示數據的起點。
作者: bigbigcong    時間: 2022-4-11 09:20
數據頭-功能碼-數據長度-有效數據~-CRC校驗




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91精品国产乱码久久久久久久久 | 亚洲精品福利视频 | 久久精品久久精品久久精品 | 91精品久久久久久久久久入口 | 日本一二三区电影 | 欧美精品综合在线 | 天堂在线www | 美女视频.| 国产精品久久久久久一区二区三区 | 国产一区二区久久 | 亚洲精品国产偷自在线观看 | 色播视频在线观看 | 一区二区精品 | 国产精品一区二区三区四区五区 | 午夜影院在线观看 | 日本精品一区 | 91久久国产精品 | 九九久久精品视频 | 久久88| 国产日韩欧美一区二区 | 久久精品亚洲精品国产欧美 | 一区在线视频 | 一区二区在线不卡 | 国产传媒毛片精品视频第一次 | 国产日韩精品视频 | 欧美日韩一区在线 | 国产一区二区久久 | 精品一区二区免费视频 | 国内久久 | 欧美一级久久 | 欧洲一区视频 | 国产一区久久久 | 免费一级黄色 | 久久激情网 | 久草在线 | 国产综合在线视频 | 成人免费视频久久 | 欧美精品在线免费观看 | 亚洲不卡av在线 | 成人久久久久 | 免费精品 |