通訊協議是指需要通信的各方事先約定好的通訊規則,可以簡單地理解為各個計算機之間進行相互會話所使用的共同語言,區域網中通常使用的通信協議主要包括TCP/iP、netbeui、ipx/spx三種協議,每個協議都有其適用的環境。
Modbus通訊協議:
Modbus是一種串列通訊協議,(串列通訊是指在數據傳輸過程中,每次只有一個數據位在設備之間傳輸,並行通訊時指在數據傳輸過程中, 同時有多組數據在傳輸。)是工業電子設備中最常用的一種通訊協議。
一個modbus指令包含了所有準備執行命令的設備其modbus地址,發送指令時所有的設備都可以收到,但是只有指定的某個設備會回傳信息。
01 03 00 01 00 02 95 CB指令中每個數字代表的含義:
第一個01:是指從站地址,簡單地說就是,由於modbus通訊中,一個上位機可以連接很多台設備,具體需要哪台設備進行回傳信息,通過這裡來確定,01代表1號設備,此處也可以是02、03等。
第二個03:是指功能碼,也就是說需要做什麼動作,03代表的是讀取的意思,
第三第四個00 01:代表的是寄存器地址,(儀錶中存放程序的虛擬地址),這裡表示要從01號寄存器中讀取信息。
第五個第六個00 02 : 表示在這裡需要讀取幾位,因為01號寄存器中,重量值存儲位置為0001 和0002佔據兩個寄存器 ,所以輸入2,
最後兩位95CB代表的是校驗碼,意思是通過輸入這些字元表示,讀取的指令已經結束。這兩位數字不是固定的,是通過這裡計算出來的
下邊以實例來說明具體該怎麼進行通訊。
一、1號從站數據的讀取和回傳
1、首先將儀錶的從站地址選擇成01,該設置可以通過說明書。
2、將稱體標定好,分度值設置成5,小數點設置成2位,
3、經過稱量,我手機的重量為225.05g,
4、通過串口測試工具,通過查詢說明書,找到重量值寄存器地址為00 01、 00 02 兩個,
輸入01 03 00 01 00 02 95 CB
回傳信息01 03 04 00 00 57 E9 05 8D
經過計算57E9轉換成10進位為22505,回傳正確。
01 03 04 00 00 57 E9 05 8D該組數據的含義:01:從站地址,03:功能碼,04:回傳的數據從後邊第四位開始讀取,57E9回傳的重量值(16進位),05 8D校驗碼(表示該組回傳指令已經結束),下同。
5、讀取儀錶的峰值,峰值的寄存器地址為0006、0007
輸入01 03 00 06 00 02 24 0A
回傳 01 03 04 00 00 5F F0 C3 87
5F F0轉換成10進位為24560,回傳正確,因為在稱台上放置手機的時候,會有向下的力,導致峰值會大於22505。
6、小數點位數的讀取,小數點位數寄存器地址為00 00
輸入 01 03 00 00 00 01 84 0A
回傳 01 03 02 00 02 39 85
回傳小數點位數為2,回傳正確。
7、分度值的讀取,分度值的寄存器地址為0014
輸入 01 03 00 14 00 01 C4 04
回傳 01 03 02 00 02 39 85
回傳數據不正確。
二、5號從站數據的讀取和回傳
8、首先將儀錶的從站地址選擇成05,該設置可以通過說明書。
9、將稱體標定好,分度值設置成5,小數點設置成2位,
10、經過稱量,手機的重量為225.05g,
11、通過串口測試工具,通過查詢說明書,找到重量值寄存器地址為 0001 0002 兩個,
輸入05 03 00 01 00 02 94 4F
回傳信息05 03 04 00 00 58 11 44 3F
經過計算58 11轉換成10進位為22596,讀取的時候儀錶顯示重量值為22545,回傳正確。
12、讀取儀錶的峰值,峰值的寄存器地址為0006、0007
輸入05 03 00 06 00 02 25 8E
回傳 05 03 04 00 00 58 CF C4 67
58 CF轉換成10進位為22735,回傳正確。
13、小數點位數的讀取,小數點位數寄存器地址為00 00
輸入 05 03 00 00 00 01 85 8E
回傳 05 03 02 00 02 C8 45
14、分度值的讀取,分度值的寄存器地址為0014
輸入 05 03 00 14 00 01 C5 8A
回傳 05 03 02 00 02 C8 45
回傳數據不正確。
問題:經過反覆測試,分度值無法正確的讀取,每次回傳的都是上一次測試的回傳數據。
分析:
1. 可能是該儀錶內部沒有0014號寄存器地址。
2. 儀錶內部程序亂了,導致無法讀取正確的分度值。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/224352.html