部分通訊協議如下:
八個IO輸入查詢:(括號內為校驗位2byte)
下發: C1 C2 06 02 (00 00) 0A 0D
回報: C1 C2 06 0A ... (00 00) 0A 0D(...依次為八個IO狀態,0為低電平 1為高電平)
備注:子命令決議失敗:C9 C8 FF 02 (00 00) 0A 0D
看了一些關于串口資料,問了一些大佬
我的了解是:
上位機發送一個資料包x給下位機
下位機再回傳一個資料包y給上位機
按照通訊協議中校驗位的計算方法,計算y得到其校驗碼a,再計算上面通訊協議中回報的校驗值得到b
a和b對比,如果相等就執行操作
我的理解對嗎?
uj5u.com熱心網友回復:
協議格式:位元組頭(2bit)+功能碼(1bit)+位元組長度(1bit)+資料位(nbit)+校驗位(2bit)+位元組尾(2bit)
位元組頭:C1 C2
位元組尾:0A 0D
位元組長度(1bit)= 資料位(nbit)+校驗位(2bit)
校驗位:
計算方法:先把位元組頭+功能碼+位元組長度+資料位累加求和,累加的值高16bit的值加到低16bit上,即把累加中最高位的進位加到最低位上,最后進行取反。
疑問1. 回報: C1 C2 06 0A ... (00 00) 0A 0D(...依次為八個IO狀態,0為低電平 1為高電平),
這里的八個IO狀態從哪里看?這八個IO狀態是要從下位機回傳的資料包y中決議出來嗎?
疑問2. 上位機發送資料包給下位機,下位機再回傳一個資料包給上位機,請問這兩個資料包的格
式是一樣的嗎,遵循的是不是同一個通訊協議?
疑問3. 我看一些不用校驗的串口通信,只要發送了資料包給下位機,機器就會開始作業;我這個
要校驗的,校驗位正確后,怎么控制機器,換句話說,機器開始作業的代碼怎么寫?
uj5u.com熱心網友回復:
我感覺我成了一個大大的問題少年了
uj5u.com熱心網友回復:
有沒有大佬幫忙看一下,好困惑啊uj5u.com熱心網友回復:
一般的 主從系統中, 和人機互動的 主動控制的 部分 叫上位機, 被動接收命令&執行操作的稱為下位機那么, 下發 一般就是指 上位機發送給下位機 ; 回報(有時也叫回應)就是指下位機發送給上位機
下發: C1 C2 06 02 (00 00) 0A 0D ===> 就是給下位機發送想要讀取輸入狀態的請求命令
回報: C1 C2 06 0A ... (00 00) 0A 0D ==> 下位機反饋給上位機當前狀態。 0A=10(8個位元組的輸入狀態資料 + 2位元組校驗); … 8個位元組輸入狀態
從協議說明看 上位機下位機傳輸遵從相同的協議
正常的發送 { 按通訊協議構造幀(幀頭+功能碼+資料長度+資料),加上校驗 ,加幀尾, 發送資料 }
正常的接收 { 接收資料,檢查幀完整性(幀頭,幀尾,資料長度),校驗和正確? 按回應碼區分進一步處理 }
一般的協議中會有典型的資料幀例子,可以直接使用串口助手發送資料 ,分析對應的回應資料,有助于進一步加深對協議的理解
uj5u.com熱心網友回復:
疑問1. 回報: C1 C2 06 0A ... (00 00) 0A 0D(...依次為八個IO狀態,0為低電平 1為高電平),這里的八個IO狀態從哪里看?這八個IO狀態是要從下位機回傳的資料包y中決議出來嗎?
那這個呢
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/263090.html
標籤:基礎類
上一篇:VS2019無法轉到定義
