modbus通訊協議是一種工業通訊協議,它定義的是一種設備控制器可以識別和使用的信息幀結構,獨立于物理層介質,可以承載于多種網絡類型中。modbus協議把通信參與者規定為“主站”(master)和“從站”(slave),數據和信息的通信遵從主/從模式,當它應用于標準modbus網絡時,信息被直接傳送。modbus總線網絡中的各個智能設備通過異步串行總線連接起來,只允許一個控制器作為主站,其余智能設備作為從站。采用命令/應答的通信方式,主站發出請求,從站應答請求并送回數據或狀態信息,從站不能夠自己發送信息。modbus協議定義的各種信息幀格式,描述了主站控制器訪問從站設備的過程,規定從站怎樣做出應答響應,以及檢查和報告傳輸錯誤等。網絡中的每個從設備都必須分配給一個唯一的地址,只有符合地址要求的從設備才會響應主設備發出的命令。
由于modbus總線系統開發成本低,簡單易用,并且現在已有很多器、、顯示屏等都具有modbus通信接口,所以它已經成為一種公認的通信標準。通過modbus總線,可以很方便地將不同廠商生產的控制設備連成工業網絡,進行集中監控。
modbus最初為plc通信而設計,它通過24種總線命令實現plc與外界的信息交換。這些總線命令對應的通信功能主要包括ai/ao、di/do的數據傳送。但不是很多modbus設備的控制只使用其中的幾條命令,對其余命令不做反應。
1.modbus通信格式
modbus協議定義了兩種傳輸模式,即rtu(remote terminal unit)和ascii。在rtu模式中,1字節的信息作為一個8位字符被發送,而在ascii模式中則作為兩個ascii字符被發送,如發送字符“20”時,采用rtu模式時為“00100000”,然而采用ascii模式則成為“00110010”+“00110000”(ascii字符的“2”和“0”)??梢?,發送同樣的數據時,rtu模式的效率大約為ascii模式的兩倍。一般來說,數據量少而且主要是文本時采用ascii;通信數據量大而且是二進制數值時,多采用rtu模式。
![]()
主站一次可向一個或所有從站發送通信請求(或指令),主設備通過消息幀的地址域來選通從設備。主站發送的消息幀的內容和順序為:從站地址、功能碼、數據域(數據起始地址、數據量、數據內容)、crc校驗碼;從站應答的信息內容和順序與主站信息幀基本相同。modbus除了定義通信功能碼之外,同時還定義了出錯碼,標志出錯信息。主站接收到錯誤碼后,根據錯誤的原因采取相應的措施。從站應答的數據內容依據功能碼進行響應,例如功能代碼03要求讀取從站設備中保持寄存器的內容。
modbus部分功能碼

2. crc校驗的實現
modbus通信的rtu模式中,規定信息幀的最后兩個字節用于傳遞crc(cyclic redundancy check,循環冗余校驗)碼。發送方將信息幀中地址域、功能碼、數據域的所有字節按規定的方式進行位移并進行xor(異或)計算,即可得到2字節的crc碼,并把包含crc校驗碼的信息幀作為一連續的流進行傳輸。接收方在收到該信息幀時按同樣的方式進行計算,并將結果同收到的crc碼的雙字節比較,如果一致就認為通信正確,否則認為通信有誤,從站將發送crc錯誤應答。
rtu模式一般采用crc-16冗余校驗方法,crc-16的校驗碼為16位(2字節),其中低字節在前,高字節在后。實現crc校驗有兩種方法:根據crc校驗的定義公式進行計算,或者在程序中建立crc校驗值表。在程序中使用前者更容易實現,這里需要使用crc生成多項式x16+x15+x2+1。該多項式對應的碼組系數為18005h(16進制),去除最高位,對應的16位余數為8005h,即為crc-16常數。crc-16校驗過程如下:將crc寄存器的每一位預置為1;把該寄存器值與8bit的信息幀數據進行異或,結果存于該寄存器;對crc寄存器從高到低進行移位,在最高位(msb)的位置補零,而最低位(lsb,移位后已經被移出crc寄存器)如果為1,則把寄存器與crc-16常數進行異或,否則如果lsb為零,則無需進行異或。重復上述的由高至低的移位8次,第一個8bit數據處理完畢,用此時寄存器的值與下一個8bit數據異或并進行如前一樣的8次移位。所有的字符處理完成后crc寄存器內的值即為最終的crc值。crc添加到消息中時,先加入低字節,然后高字節。
3. 鏈路特征
modbus標準的物理層可以采用rs-232串行通信方式,但在長距離通信中常采用rs-422或rs-485代替。在多點通信情況下只采用rs-485方式,所以rtu模式下的modbus系統采用屏蔽雙絞線,通信距離可達1000m。一條總線上最多可配置31個從站設備。傳輸線上的信息交換是半雙工的,即同時只能有一臺設備允許發送信息,主站在發送下一條指令之前等待從站回應,從而避免了線路的沖突。
rtu模式的傳輸格式是1個數據位,2個停止位,沒有奇偶校驗位。通信數據安全由控制參數crc-16碼保證。rtu接收設備依靠接收字符間經過的時間判斷一幀的開始,如果經過3個半的字符時間后仍然沒有新的字符或者沒有完成幀,接收設備就會放棄該幀,并設下一個字符為新一幀的開始。










