Modbus協議是一個master/slave架構的協議。有一個節點是master(主站)節點,其他使用Modbus協議參與通信的節點是slave(從站)節點。每一個slave設備都有一個的地址。在串行網絡中,只有被指定為master的節點可以啟動一個命令(在以太網上,任何一個設備都能發送一個Modbus命令,但是通常也只有一個主節點設備啟動指令)。
一個ModBus命令包含了打算執行的設備的Modbus地址。所有設備都會收到命令,但只有指定位置的設備才會執行及回應指令(地址0例外,指定地址0的指令是廣播指令,所有收到指令的設備都會運行,不過不回應指令)。所有的Modbus命令包含了校驗碼,以確定到達的命令沒有被破壞。基本的ModBus命令能指令一個RTU改變它的寄存器的某個值,控制或者讀取一個I/O端口,以及指揮設備回送一個或者多個其寄存器中的數據。

數據結構

通訊消息幀
ASCII消息幀
(在消息中的每個8Bit 字節都作為兩個ASCII字符發送)
十六進制,ASCII字符0...9,A...F
消息中的每個ASCII字符都是一個十六進制字符組成
每個字節的位
1個起始位
n個數據位,最小的有效位先發送
1個奇偶校驗位,無校驗則無
1個停止位(有校驗時),2個Bit(無校驗時)
錯誤檢測域

LRC(縱向冗長檢測)

有奇偶校驗

無奇偶校驗
RTU消息幀
8位二進制,十六進制數0...9,A...F
消息中的每個8位域都是一個兩個十六進制字符組成
每個字節的位
1個起始位
8個數據位,最小的有效位先發送
1個奇偶校驗位,無校驗則無
1個停止位(有校驗時),2個Bit(無校驗時)
錯誤檢測域

LRC(縱向冗長檢測)

有奇偶校驗

無奇偶校驗
ModBus協議中,CRC校驗碼計算方法為:
1、預置1個16位的寄存器為十六進制FFFF(即全為1);稱此寄存器為CRC寄存器;
2、把個8位二進制數據(既通訊信息幀的個字節)與16位的CRC寄存器的低8位相異或,把結果放于CRC寄存器;
3、把CRC寄存器的內容右移一位(朝低位)用0填補更高位,并檢查右移后的移出位;4、如果移出位為0:重復第3步(再次右移一位);
如果移出位為1:CRC寄存器與多項式A001(1010 0000 0000 0001)進行異或;
5、重復步驟3和4,直到右移8次,這樣整個8Bit數據全部進行了處理;
6、重復步驟2到步驟5,進行通訊消息幀下一個字節的處理;
7、將該通訊消息幀所有字節按上述步驟計算完成后,得到的16位CRC寄存器的高、低字節進行交換;
8、最后得到的CRC寄存器內容即為:CRC碼Modbus的使用限制
● Modbus是在1970年為可編程邏輯控制器通信開發的,這些有限的數據類型在那個時代是可以被PLC理解的,大型二進制對象數據是不支持的;
● 對節點而言,沒有一個標準的方法找到數據對象的描述信息,舉個例子:確定一個寄存器的數據是否表示一個介于30-175度之間的溫度;
● 由于Modbus是一個主/從協議,沒有辦法要求設備"報告異常"(構建在以太網的TCP/IP協議之上,被稱為open-mbus除外)- 主站節點必須循環的詢問每個節點設備,并查找數據中的變化。在帶寬可能比較寶貴的應用中,這種方式在應用中消耗帶寬和網絡時間,例如在低速率的無線鏈路上;
● Modbus在一個數據鏈路上只能處理247個地址,這種情況限制了可以連接到主控站點的設備數量(再一次指出以太網TCP/IP除外);
● Modbus傳輸在遠端通訊設備之間緩沖數據的方式進行,有對通信一定是連續的限制,避免了傳輸中的緩沖區漏洞的問題;
●Modbus協議自身提供針對未經授權的命令或截取數據沒有安全性。
TAG:
10kva伺服電子變壓器 |
15kva伺服電子變壓器 |
15mm伺服電機 |
1kva伺服電子變壓器 |
2000w伺服驅動器 |
20kva伺服電子變壓器 |
220v伺服電子變壓器 |
220v直流無刷電機驅動器 |
220v轉110v電子變壓器 |