modbus是美國的modicon公司開發的一種報文傳輸協議,1979年該公司成為施耐德公司的一部分。modbus協議在工業控制中得到了廣泛的應用,它已經成為一種通用的工業標準,該協議支持rs-232、rs-422、rs-485和以太網設備。不同廠商生產的控制設備通過modbus協議可以連成通信網絡,進行集中監控。許多工控產品,例如plc、變頻器、人機界面、dcs和自動化儀表等,都在廣泛地使用modbus協議。
根據傳輸網絡類型的不同分為串行鏈路上的modbus和基于tcp/ip協議的modbus。
modbus串行鏈路協議是一個主-從協議,采用請求-響應方式,主站發出帶有從站地址的請求報文,具有該地址的從站接收到后發出響應報文進行應答。
modbus協議位于osi模型的第二層。串行總線中只有一個主站,可以有1~247個從站。modbus通信只能由主站發起,從站在沒有收到來自主站的請求時,不會發送數據,從站之間也不會互相通信。
2.modbus的報文傳輸模式
串行鏈路上的modbus協議有ascii和rtu(遠程終端單元)這兩種報文傳輸模式,同一modbus網絡上所有的站都必須選擇相同的傳輸模式和串口參數。
(1)ascii模式
當控制器設為在modbus網絡上以ascii(美國標準信息交換代碼)模式通信時,報文幀中的每個8位字節都轉換為兩個ascii字符發送。下面是ascii模式的報文格式:
:地址 功能碼 數據字節數 數據1……數據n lrc高字節 lrc低字節 回車 換行
報文中的每個ascii字符都由十六進制字符組成,傳輸的每個字符包含一個起始位、7個數據位、一個奇偶校驗位和一個停止位;如果沒有校驗位,則有兩個停止位。modbus協議需要對數據進行校驗,串行協議中除了奇偶校驗外,ascii模式采用縱向冗余校驗(lrc),計算lrc時不包括開始的冒號符、lrc本身和回車換行符。
(2)rtu模式
modbus網絡上的rtu模式的報文以字節為單位進行傳輸,一個字節由兩個十六進制數組成。在同樣的波特率下,傳輸效率比ascii模式的高。
傳輸的每個字節包含一個起始位,8個數據位(先發送最低的有效位),奇偶校驗位、停止位與ascii模式的相同,報文最長為256字節。
modbus的rtu模式報文的最后兩個字節是循環冗余校驗碼(crc)。其校驗方式是將整個報文的所有字節(不包括最后兩個字節)按規定的方式進行位移并進行xor(異或)計算。接收方在收到該字符串時按同樣的方式進行計算,并將結果與收到的循環冗余校驗碼進行比較,如果一致則認為通信正確,如果不一致,則認為通信有誤,從站將發送crc錯誤應答。modbus中rtu采用crc-16的冗余校驗方式。
下圖是modbus rtu通信幀的基本結構,從站地址為0~247,它和功能碼均占一個字節,命令幀中plc地址區的起始地址和crc各占一個字,數據以字或字節為單位(與功能碼有關),以字為單位時高字節在前,低字節在后。但是crc的低字節在前,高字節在后。
地址 功能碼 數據1……數據n crc高字節 crc低字節
modbus包括多種功能,每一功能都有相應的功能代碼。最基本的功能主要包括ai/ao、di/do數據的傳送。
modbus除了定義通信功能碼外,同時還定義了出錯碼,這有助于通信主站發現通信的錯誤內容和原因,并采取相應措施,從而保證了通信的可靠進行。
modbus定義的出錯信息為:指定的地址錯誤、指定的數據量出錯、從站自身的錯誤、無法應答請求或執行要求指令、從站無暇處理主站發送的通信請求指令等。錯誤信息對應錯誤代碼。主站在接收到錯誤碼后,根據錯誤的原因采取相應措施。例如改變數據地址、加大發送間隔和重發等。