Modbus訊息幀

3、地址域
訊息幀的地址域包含兩個字符(ASCII)或8Bit(RTU),可能的從設備地址是0…247 (十進制),單個設備的地址范圍是1…247,
地址0是用作廣播地址,以使所有的從設備都能認識,當Modbus協議用于更高水準的網路,廣播可能不允許或以其它方式代替,
4、如何處理功能域
訊息幀中的功能代碼域包含了兩個字符(ASCII)或8Bits(RTU),可能的代碼范圍是十進制的1…255,當然,有些代碼是適用于所有控制器,有此是應用于某種控制器,還有些保留以備后用,
5、資料域
資料域是由兩個十六進制數集合構成的,范圍00…FF,根據網路傳輸模式,這可以是由一對ASCII字符組成或由一RTU字符組成,
6、錯誤檢測域
標準的Modbus網路有兩種錯誤檢測方法,錯誤檢測域的內容視所選的檢測方法而定,
ASCII
當選用ASCII模式作字符幀,錯誤檢測域包含兩個ASCII字符,這是使用LRC(縱向冗長檢測)方法對訊息內容計算得出的,不包括開始的冒號符及回車換行符,LRC字符附加在回車換行符前面,
RTU
當選用RTU模式作字符幀,錯誤檢測域包含一16Bits值(用兩個8位的字符來實作),錯誤檢測域的內容是通過對訊息內容進行回圈冗長檢測方法得出的,CRC域附加在訊息的最后,添加時先是低位元組然后是高位元組,故CRC的高位位元組是發送訊息的最后一個位元組,
常用功能碼
0x01: 讀線圈暫存器
0x02: 讀離散輸入暫存器
0x03: 讀保持暫存器
0x04: 讀輸入暫存器
0x05: 寫單個線圈暫存器
0x06: 寫單個保持暫存器
0x0f: 寫多個線圈暫存器
0x10: 寫多個保持暫存器
線圈暫存器:
實際上就可以類比為開關量,每個bit都對應一個信號的開關狀態,所以一個byte就可以同時控制8路的信號,比如控制外部8路io的高低, 線圈暫存器支持讀也支持寫,寫在功能碼里面又分為寫單個線圈暫存器和寫多個線圈暫存器,對應上面的功能碼也就是:0x01 0x05 0x0f
離散輸入暫存器:
如果線圈暫存器理解了這個自然也明白了,離散輸入暫存器就相當于線圈暫存器的只讀模式,他也是每個bit表示一個開關量,而他的開關量只能讀取輸入的開關信號,是不能夠寫的,比如我讀取外部按鍵的按下還是松開,所以功能碼也簡單就一個讀的 0x02
保持暫存器:
這個暫存器的單位不再是bit而是兩個byte,也就是可以存放具體的資料量的,并且是可讀寫的,比如我我設定時間年月日,不但可以寫也可以讀出來現在的時間,寫也分為單個寫和多個寫,所以功能碼有對應的三個:0x03 0x06 0x10
輸入暫存器:
只剩下這最后一個了,這個和保持暫存器類似,但是也是只支持讀而不能寫,一個暫存器也是占據兩個byte的空間,類比我我通過讀取輸入暫存器獲取現在的AD采集值,對應的功能碼也就一個 0x04
錯誤回傳:
在對應功能碼基礎上加上0x80
Modbus 通信協議詳解
modbus功能碼定義和樣例
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245272.html
標籤:其他
上一篇:UOS臺式機發射熱點教程
下一篇:C語言一些實體
