Modbus協議概述
Modbus協議是應用于電子控制器上的一種通用語言。通過此協議,控制器相互之間、控制器經由網絡(例如以太網)和其他設備之間可以通信。它已經成為一種通用工業標準。有了它,不同廠商生產的控制設備可以連成工業網絡,進行集中控制。
此協議定義了一個控制器能認識并使用的消息結構,而不管它們是經過何種網絡進行通信的,它描述了控制器請求訪問其他設備的過程,如何回應來自其他設備的請求以及怎樣偵測錯誤并記錄。它制定了消息的域和內容的公共格式如圖1所示。
在Modbus網絡通信時,協議決定了每個控制器需要知道它們的設備地址,識別按照地址發來的消息,并決定要產生何種行動。如果需要響應,控制器將生成反饋信息并用Modbus協議發出。在其他網絡上通信時,包含了Modbus協議的消息要轉換為此網絡上使用的幀或包結構進行傳輸。
Modbus協議工作傳輸機制
標準的Modbus接口是使用RS-232C兼容串行接口,它定義了連接口的針腳、電纜、信號位、傳輸波特率、奇偶校驗,控制器能直接或經由Modem組網。
控制器之間通信使用主-從技術,僅有主設備能初始化傳輸操作,其他設備(從設備)根據主設備查詢提供的數據作出相應反應。典型的主設備:主機和可編程儀表,典型的從設備:可編程控制器。
主-從技術原理框圖,如圖2所示。
查詢:查詢消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的全部附加信息,例如,功能代碼03是要求從設備讀取保持寄存器并返回它們的內容,數據段必須包含如下信息:從哪個寄存器開始讀以及要讀的寄存器數量。錯誤檢測域為從設備提供了一種驗證消息內容是否正確的方法。
回應:如果從設備產生一個正常的回應,在回應消息中的功能代碼是在查詢消息中的功能代碼的響應。數據段包括了從設備收集的數據,如寄存器值或狀態等。如果有錯誤發生,功能代碼將修改為用于指出回應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。
下面介紹Modbus在不同的網絡環境中主-從技術的應用情況:
1、在單一Modbus網絡上傳輸 主設備可單獨和從設備通信,也能以廣播方式和所有從設備通訊。如果單獨通信,從設備返回一條消息作為回應;如果是以廣播方式查詢的,則不作任何回應。Modbus協議建立了主設備查詢的格式:設備(或廣播)地址、功能代碼、所有要發送的數據、錯誤檢測域。
從設備回應消息也由Modbus協議構成,包括確認要行動的域、任何要返回的數據和錯誤檢測域。如果在消息接收過程中發生錯誤,或從設備不能執行其命令,從設備將建立錯誤消息并把它作為回應發送出去。
2、在其他網絡上傳輸 在其他網絡上,控制器之間使用對等技術通信,故任何控制器都能初始和其他控制器的通信。這樣在單獨的通信過程中,控制器既可作為主設備也可作為從設備。傳輸網絡提供的多個內部通道可允許同時發生的多個傳輸進程執行。
在消息位,Modbus協議仍提供了主-從原則,盡管網絡通信方法是“對等”,如果一個控制器發送一條消息,它只是作為主設備,并期望從從設備得到回應。同樣,當控制器接收到一條消息,它將建立一個從設備回應格式并返回給發送該消息的控制器。
Modbus兩種工作傳輸模式
在標準的Modbus網絡中,控制器可以設置為RTU和ASCII兩種通訊模式中的任何一種,在配置控制器的時候用戶一旦選定某種模式(包括對應的串口通信參數),那么在同一Modbus網絡上的所有設備都必須選擇相同的傳輸模式和串口參數。
兩種不同的傳輸模式對應的傳輸數據單元有不同的格式:
選定了的傳輸模式僅適用于標準的Modbus傳輸網絡,它定義了在網絡上傳輸的消息的每一字節消息段的意義,以及怎樣將消息進行打包和解析。
在其他網絡上,例如MAP或Modbus Plus,Modbus消息首先被轉換成與串行無關的消息幀,再進行傳輸。
1、RTU傳輸模式 RTU通信模式,在Modbus網絡上傳輸的消息中每個8bit字節包含兩個4bit的十六進制數。這種傳輸方式的優點是:同樣的波特率下,比ASCII模式傳輸的數據更多。
代碼編碼:
(1)8bit二進制數分為兩個4bit十六進制數0~9,A~F。
(2)消息中每個8bit域都是由2個十六進制字符組成。
在RTU傳輸模式下,消息至少要以3.5個字符時間的停頓間隔開始發送。在網絡波特率多樣的字符時間下,這是很容易實現的,如下面示例中的T1-T2-T3-T4所示。傳輸的第一個域是設備地址,可使用的傳輸字符是十六進制的0~9,A~F。網絡設備不斷偵測網絡總線,包括停頓間隔時間在內。當接收到第一個傳輸字符之后,一個至少3.5個字符時間的停頓標定了消息的結束。新的消息發送可在此停頓后開始執行。
RTU模式下,整個消息的傳輸必須作為一個連續的流進行。如果在傳輸完成之前有超過1.5個字符時間的停頓時間,接收設備將刷新不完整的消息并假定下一字節是一個新消息的地址域。同樣地,如果一個新消息在小于3.5個字符時間內接著前一個消息開始,接收的設備將認為它是前一消息的延續。這都將導致錯誤的產生,因為在最后CRC域的值不可能是正確的。
典型的RTU消息幀見表1
2、ASCII傳輸模式 ASCII通信模式,在Modbus網絡上傳輸的消息中每個8bit字節作為兩個ASCII字符發送。這種傳輸方式的優點是字符發送的間隔可以達到1s而不產生錯誤。
代碼編碼:
(1)8bit二進制數表示為兩個ASCII字符,0~9,A~F。
(2)消息中每個ASCII字符都是一個十六進制字符組成。
在ASCII傳輸模式下,消息以冒號(:)字符(ASCII碼3AH)開始,以回車換行符結束(ASCII碼0DH,0AH)。
其他域可使用的傳輸字符是十六進制的0~9,A~F。網絡上的設備不斷偵測“:”字符,當有一個冒號接收到時,每個設備都解碼下個域(地址域)來判斷是否發給自己的。
消息中字符間發送的時間間隔最長不能超過1s,否則接收的設備將認為傳輸錯誤。
一個典型ASCII消息幀見表2所示
Modbus消息內各域解析
上述段落中,主要講述了Modbus的不同傳輸模式以及對應傳輸模式的消息幀的典型構成,從中可以發現,兩種傳輸模式在消息的起始端具有不同的特性,消息內各域的編碼方式不同之外,沒有其他的區別。下面將統一進行消息內各域的解析講解。
1、地址域 消息幀的地址包含兩個字符(ASCII)或8bits(RTU)。可能的從設備地址是0~247(十進制)。單個設備的地址范圍是1~247.主設備把要聯系的從設備的地址放入消息中的地址域,發送出去,選通從設備。當從設備發送回應消息時,它把自己的地址放入回應的地址域中,以便主設備知道是哪一個從設備作出了回應。
地址0是用作廣播地址,以使所有的從設備都能認識。當Modbus協議用于更高水準的網絡,可能是不允許廣播或以其他方式代替。
2、功能代碼域 消息幀中的功能代碼域包含了兩個字符(ASCII)或8bits(RTU)。可能的代碼范圍是十進制的1~255.當然,有些代碼是適用于所有控制器,有些是應用于某種控制器,還有些保留以備后用。
當消息從主設備發往從設備時,功能代碼域將告之從設備需要執行哪些行為。例如去讀取輸入的開關狀態,讀一組寄存器的數據內容,讀從設備的診斷狀態,允許調入、記錄、校驗在從設備中的程序等。
當從設備回應時,它使用功能代碼域來指示是正常回應(無誤)還是產生某種錯誤(稱作異常回應)。對正常回應,從設備僅回應相應的功能代碼。對異議回應,從設備返回一等同于正常代碼的代碼,但最重要的位置為邏輯1.
例如:一由主設備發往從設備的消息要求讀一組保持寄存器,將產生如下功能代碼:
00000011(十六進制 03H)
對正常回應,從設備僅回應同樣的功能代碼。對異常回應,它返回:
10000011(十六進制83H)
除功能代碼因異議錯誤作了修改外,從設備將一獨特的代碼放到回應消息的數據域中,以便告訴主設備發生了什么錯誤。
主設備應用程序得到異常的回應后,典型的處理過程是重發消息,或者診斷發給從設備的消息并報告給操作員。
3、數據域 數據域是由兩個十六進制數集合構成的,取值范圍00~FF。根據網絡傳輸模式,這可以是由一對ASCII字符組成或由一RTU字符組成。
主設備發給從設備消息的數據域包含如下附加信息:從設備用于執行由功能代碼所定義的功能所必需的參數,包括了寄存器地址、處理項的數目、域中實際數據字節數等。
例如,如果主設備需要從設備讀取一組保持寄存器的數據(功能代碼03),數據域指定了起始寄存器以及要讀的寄存器數量。主設備要寫一組從設備的寄存器(功能代碼十六制10)數據域則指明了要寫的起始寄存器以及要寫的寄存器數量、數據域的數據字節數、要寫入寄存器的數據。
如果沒有錯誤發生,從設備返回的數據域包含請求的數據。如果有錯誤發生,此域包含了一個異常代碼,主設備應用程序可以用來判斷以采取下一步行動。
在某種消息中數據域可以是不存在的(0長度)。例如,主設備要求從設備回應通信事件記錄(功能代碼十六進制0B),從設備不需任何附加的信息。
4、差錯校驗域 標準的Modbus串行網絡采用兩種錯誤檢測方法。奇偶校驗對每個字符都可用,幀檢測(LRC或CRC)應用于整個消息。它們都是在消息發送前由主設備產生的,從設備在接收過程中檢測每個字符和整個消息幀。
用戶要給主設備配置預定義的超時時間間隔,這個時間間隔要足夠長,以使所有從設備都能作出正常反應。如果從設備檢測到傳輸錯誤,將不會接收消息,也不會向主設備作出回應。這時,超時事件將觸發主設備來處理錯誤。發往不存在的從設備的地址也會產生超時。
責任編輯:tzh
評論
查看更多