Modbus 協議可以走串口,可以走網口。
我們就先以Modbus RTU為主,畢竟Modbus RTU用的實在太多了。
其實只要把Modbus RTU掌握了,理解了,其它衍生出來的協議,自然也就理解了。
那Modbus 協議長啥樣呢。
我們先來直接看一組數據。
主站發送:01 03 00 14 00 01 C4 0E
從站回復:01 03 02 00 63 F8 6D
好,不管你有沒有學過Modbus協議,我們先假裝看懂了上面的報文。
我們進入情景中。
現場有一個HMI。
還有一個PLC。
PLC接了100個燈,100個門,100個稱。
“誰家PLC會接這么多個燈,接這么多稱呀。”
“你管的著么,雙十一打折,多買了幾個不行呀。”
那燈的數據呢,就只有開還是關。也就是非0即1了。是開關類型。
那稱的數據呢,如果單位是克,那可以是0到9999克,比如,這個稱只能稱到9999克上限。
那HMI通過Modbus協議,理應可以讀到100個燈里,任意一個或者連續幾個燈的數據。
也可以讀一個稱或者連續幾個稱的數據。
也就是報文上,要能把這些表現出來。
比如HMI想讀第20個稱的數據,只讀一個。
那20,也就是十六進制0x14。
讀一個,1,也就是0x01 。
我們看一下報文。
01 03 00 14 00 01 C4 0E。
真的有14 這個字節。
但是是00 14 呢還是14 00 還是14 呢。
如果只有一個字節,只能表示0到255。不行,數量太少了,肯定不夠。那必須兩個字節表示。
所以,0014就是第20個稱。也就是我們所說的地址了。
這么乍一看,好像只需要三個字段,就可以表示HMI所需要讀的數據了。
確實也是呀。HMI只是想讀一個稱的數據,沒必要發其它不相關的數據的呀。
“HMI可以連接多個PLC嘛,怎么連接?”
“HMI可以通過485,接幾個PLC的哦。”
“可是我要怎么知道我要讀哪個PLC的數據呢”
“這樣吧,我們給不同的PLC起一個編號,也就是站號,這樣就可以了。”
“那Modbus協議上,我是不是也帶這個站號呢。”
“是的,我們在Modbus上面加個站號就是行了。這樣,如果PLC收到的報文,是自己的站號的,就回復,不是自己站號的,就不要回復,就解決了呀。”
“嗯,好辦法。那就用第一個字節表示吧。”
這樣,一個Modbus RTU協議,就此誕生了。
我們再回過頭來總結看一下,這個modbus 協議,大概就五個參數。
我們每個字段開始聊一下。
第一個字段,就是站號。
主設備是沒有站號的。只有從設備有站號。
為什么主設備沒有站號呢。
主要是因為在一個modbus 通信里,有且只能有一個主站。只有主站才能主動發報文,從設備接到報文再判斷是否要回復。
那從設備是否只能一個呢。
如果是接到485總線上面,從站就可以有多個了。一般建議不超過32個。這個梗下期會聊的。
主設備要訪問哪個設備的時候呢,就根據站號來區分了。
不過,有時候呢,如果需要同時操作多個從設備,比如,想讓10個從設備同時開燈,怎么做比較合適呢。
逐個發送寫請求,那效率就有點慢了。
于是就有廣播站號的概念了。站號0代表廣播站號,當主站對站號0進行寫操作的時候,所有的從設備收到命令之后,一般只執行,不回復。
第二個字段,是功能碼。
這個功能碼呢,我們換一個角度去講解。
我們回歸到協議本身,這個協議主要就是用于通信,采集和控制的。那采集什么數據呢。
就是位變量和數值變量。有只讀的,可讀可寫的。
其實到這里,我們基本就把modbus協議掌握了。
modbus ascii和modbus tcp 也離不了這幾個參數。
一般來說新手只要了解到這里,基本可以了。modbus 就算是入門了。
至于是要繼續還是從入門到放棄,就看緣分了。
筆者從事物聯網以來,接觸的設備支持modbus的,不在少數。可以說,99%就只用到前面介紹的內容,真的不能更多了。
所以,本文就不再深入講解modbus rtu更多的功能碼和內容了。
國內外常見的PLC,還有各種單片機做出來的控制器,基本也就圍繞0X,1X,4X,3X功能碼的這幾個功能碼。
所以當你網上搜索出來各種中英文介紹Modbus 協議,講一大堆,不知道哪些要看,哪些不要看。筆者的經驗告訴我,不需要全都了解。
我們先看看讀的。
位寄存器比較特殊,8個位占一個字節。在Modbus回復的數據里,并不是用一個字節表示一個位寄存器。而是用一個位,表示一個位寄存器。
這樣讀20個寄存器,就需要3個字節了。
這樣從站回復的數據就是FF FF 0F了。
也就是從站是至少一個字節起回復,不夠一個字節的位,按一個字節回復。
大概的公式就是 位寄存器個數/8 得到字節個數,然后再看是否整除,如果不整除,有余數,則再補一個寄存器。
20/8=2,然后有余數,余數是4。所以是三個字節。最后一個字節,只取低4位有效。
4.[功能碼02]讀1X寄存器,地址10,讀16個寄存器
總結起來,Modbus協議,也就常見8種功能碼。由于多寫可以兼容單寫,甚至有的控制器,直接去掉單寫命令,用多寫實現,這樣就只有6種功能碼了。
-
單片機
+關注
關注
6032文章
44518瀏覽量
633059 -
ModBus協議
+關注
關注
3文章
174瀏覽量
33388 -
CRC校驗
+關注
關注
0文章
84瀏覽量
15188 -
RTU
+關注
關注
0文章
404瀏覽量
28626 -
PLC控制器
+關注
關注
0文章
41瀏覽量
9118
發布評論請先 登錄
相關推薦
評論