簡介
功能碼用於標明一個Modbus信息幀的用途,如功能碼01為讀取線圈狀態,02為讀取輸入狀態等。當主設備向從設備傳送信息時,功能碼將告訴從設備需要執行哪些行為。例如,去讀取輸入的開關狀態、讀一組暫存器的數據內容等。當從設備回響時,使用功能碼用於指示是正常回響(無誤)還是有某種錯誤發生(稱作異議回應)。正常應答時,主機傳送的功能碼等於從機應答的功能碼。
常用功能碼
01和02
功能碼01的作用是讀取線圈狀態。在數字量輸出(Digital Output,DO)中,一個DO接點就能夠控制一個線圈的通電和斷電,所以讀取線圈狀態就是讀取數字量輸出點的狀態,是1 bit的信息。例如,對於S7-200 PLC,Q0.0就是一個DO接點。對於單片機,若預置P0.0口用於DO,則P0.0就是一個DO接點,讀取線圈狀態就是讀取P0.0連線埠的狀態。
按Modbus協定,功能碼01是讀取輸出點的狀態,但在PLC、單片機方面可以對它有擴展性的解釋。例如,在單片機程式設計時,可以把該功能碼處理為讀取一般意義的位,並不限於DO。
功能碼02的作用是讀取輸入狀態,也就是讀取一個數字量輸如(Digital Input,DI)接點的狀態。例如,對於單片機,若預置P1.0口用於DI,則P1.0就是一個DI接點,讀取輸入狀態就是讀取P1.0連線埠的狀態。同功能碼01一樣,功能碼02在具體實現時,也可以擴展為讀取一般意義的位,並不限於DI。
RTU模式下,主機傳送功能碼01、02命令的幀格式如下:
地址 | 功能碼 | 讀取線圈起始地址高位元組 | 讀取線圈起始地址低位元組 | 讀取線圈個數高位元組 | 讀取線圈個數低位元組 | CRC校驗 |
1位元組 | 01或02 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 2位元組 |
從機應答主機命令的幀格式如下:
地址 | 功能碼 | 返回數據位元組個數 | 返回數據位元組1 | 返回數據位元組2 | ...... | 返回數據位元組n | CRC校驗 |
1位元組 | 01或02 | 1位元組 | 1位元組 | 1位元組 | ....... | 1位元組 | 2位元組 |
下面對主機傳送命令信息和從機應答信息進行實例解析。
主機傳送:03 01 00 00 00 08 3C CC
命令解析:Modbus協定RTU模式的信息都以16進制數表示。03為從機地址:01為功能碼01;00 00為線圈的起始地址;00 08為要讀取的線圈數,共讀取8個線圈;3C為CRC校驗低位元組,CC為CRC校驗高位元組。
從機應答:03 01 01 00 50 30
命令解析:03為從機地址;第一個01為功能碼01;第二個01為返回數據位元組個數;00為數據位元組1,其最低位是起始地址線圈的狀態;50為CRC校驗低位元組,30為CRC校驗高位元組。
03和04
功能碼03的作用是讀取保持暫存器的值。保持暫存器,就是其值不被外部輸入信號改變的暫存器。例如,保存模擬量輸出接點(Analog Output,AO)的數字量(即D/A轉換的數字量)的暫存器,就是保持暫存器。功能碼03也可以被擴展為讀取控制器內部多種16位暫存器的值。
功能碼04的作用是讀取輸入暫存器的值。輸人暫存器,就是保存外部輸入信號數字量的暫存器。例如,保存模擬量輸入接點(Analog Iutput,AI)的數字量(即A/D轉換的數字量)的暫存器,就是輸入暫存器。功能碼04也可以被擴展為讀取控制器內部多種16位暫存器的值。
RTU模式下,主機傳送功能碼03、04命令的幀格式如下:
地址 | 功能碼 | 讀取線圈起始地址高位元組 | 讀取線圈起始地址低位元組 | 讀取線圈個數高位元組 | 讀取線圈個數低位元組 | CRC校驗 |
1位元組 | 03或04 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 2位元組 |
從機應答主機命令的幀格式如下:
地址 | 功能碼 | 返回數據位元組個數 | 返回第一個暫存器數據高位元組 | 返回第一個暫存器數據低位元組 | ...... | CRC校驗 |
1位元組 | 03或04 | 1位元組 | 1位元組 | 1位元組 | ....... | 2位元組 |
下面對主機傳送命令信息和從機應答信息進行實例解析。
主機傳送:01 03 00 00 00 08 44 0C
命令解析:01為從機地址;03為功能碼03;00 00為暫存器的起始地址;00 08為要讀取的暫存器數,共讀取8個暫存器;44為CRC校驗低位元組,OC為CRC校驗高位元組。
從機應答:01 03 10 BD AB 15 A5 8C D4 3E B8 8B CF 86 E1 5E 8F 67 83 26 1B
命令解析:01為從機地址;03為功能碼03;10為返回數據位元組個數,共16個(16進制的10等於16);BD AB……67 83為讀得的各暫存器的數值,其中BDAB為第一個暫存器的值:26為CRC校驗低位元組,1B為CRC校驗高位元組。
05和15
功能碼05的作用是強置單線圈,也就是置某一DO接點為ON或OFF。例如,若預置單片機的P2.0為一個DO,則單片機在接收到主機強置該DO為ON的命令後。應執行使P2.0輸出ON的程式代碼。功能碼05也可以擴展到強置控制器中其他有輸出功能的位。
功能碼05主機傳送和從機接收的信息幀格式相同:
地址 | 功能碼 | 寫入線圈起始地址高位元組 | 寫入線圈起始地址低位元組 | 寫入值高位元組 | 寫入值低位元組 | CRC校驗 |
1位元組 | 05 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 2位元組 |
寫入值為FF00時為ON,寫入值為0000時為OFF。
功能碼15的作用是強置多個線圈。
RTU模式下,主機傳送功能碼15命令的幀格式如下:
地址 | 功能碼 | 寫入線圈起始地址高位元組 | 寫入線圈起個數低位元組 | 寫入線圈個數高位元組 | 寫入線圈個數低位元組 | 寫入值位元組數 | 寫入值位元組1 | ...... | CRC校驗 |
1位元組 | OF | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | ...... | 2位元組 |
從機應答主機命令的幀格式如下:
地址 | 功能碼 | 寫入線圈起始地址高位元組 | 寫入線圈起始地址低位元組 | 已寫入線圈個數高位元組 | 寫入線圈個數低位元組 | CRC校驗 |
1位元組 | OF | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 2位元組 |
下面對主機傳送命令信息和從機應答信息進行實例解析。
主機傳送:01 05 00 00 FF 00 8C 3A
從機應答:01 05 00 00 FF 00 8C 3A
命令解析:01為從機地址;05為功能碼;00 00為寫入線圈起始地址;FF00為寫入值,即ON;8C為CRC校驗低位元組,3A為CRC校驗高位元組。
06和16
功能碼06的作用是預置單暫存器,也就是向一個保持暫存器寫入數值。暫存器為16位,數值範圍是0000~FFFF。
功能碼06主機傳送和從機接收的信息幀格式相同:
地址 | 功能碼 | 寫入暫存器地址高位元組 | 寫入暫存器地址低位元組 | 寫入值高位元組 | 寫入值低位元組 | CRC校驗 |
1位元組 | 06 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 2位元組 |
功能碼16的作用是預置多暫存器。
RTU模式下,主機傳送功能碼16命令的幀格式如下:
地址 | 功能碼 | 寫入暫存器起始地址高位元組 | 寫入暫存器起始地址低位元組 | 寫入暫存器個數高位元組 | 寫入暫存器個數低位元組 | 寫入值位元組數 | 寫入值位元組1 | ...... | CRC校驗 |
1位元組 | 10 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | ...... | 2位元組 |
從機應答主機命令的幀格式如下:
地址 | 功能碼 | 寫入暫存器起始地址高位元組 | 寫入暫存器起始地址低位元組 | 已 寫入暫存器個數高位元組 | 已寫入暫存器個數低位元組 | CRC校驗 |
1位元組 | 10 | 1位元組 | 1位元組 | 1位元組 | 1位元組 | 2位元組 |
下面對主機傳送命令信息和從機應答信息進行實例解析。
主機傳送:01 06 00 00 00 7D 49 EB
從機應答:01 06 00 00 00 7D 49 EB
命令解析:01為從機地址;06為功能碼;00 00為寫入暫存器起始地址;007D為寫入值,即十進制125;49為CRC校驗低位元組,EB為CRC校驗高位元組。
主機傳送:01 10 00 05 00 02 04 52 2B 44 9A E0 4B
從機應答:01 10 00 05 00 02 51 C9
命令解析:01為從機地址;10為功能碼16;0005為寫入暫存器起始地址:0002為寫入暫存器個數;04為寫入值位元組數;522B、449A為寫入值;E0為CRC校驗低位元組.4B為CRC校驗高位元組。從機應答中,0002為已寫入暫存器個數。
使用
此協定定義了一個控制器能認識使用的訊息結構,而不管它們是經過何種網路進行通信的。它描述了一控制器請求訪問其它設備的過程,如果回應來自其它設備的請求,以及怎樣偵測錯誤並記錄。它制定了訊息域格局和內容的公共格式。當在一Modbus網路上通信時,此協定決定了每個控制器須要知道它們的設備地址,識別按地址發來的訊息,決定要產生何種行動。如果需要回應,控制器將生成反饋信息並用Modbus協定發出。在其它網路上,包含了Modbus協定的訊息轉換為在此網路上使用的幀或包結構。這種轉換也擴展了根據具體的網路解決節地址、路由路徑及錯誤檢測的方法。
1、在Modbus網路上轉輸
標準的Modbus口是使用一RS-232C兼容串列接口,它定義了連線口的針腳、電纜、信號位、傳輸波特率、奇偶校驗。控制器能直接或經由Modem組網。控制器通信使用主—從技術,即僅一設備(主設備)能初始化傳輸(查詢)。其它設備(從設備)根據主設備查詢提供的數據作出相應反應。典型的主設備:主機和可程式儀表。典型的從設備:可程式控制器。主設備可單獨和從設備通信,也能以廣播方式和所有從設備通信。如果單獨通信,從設備返回一訊息作為回應,如果是以廣播方式查詢的,則不作任何回應。Modbus協定建立了主設備查詢的格式:設備(或廣播)地址、功能代碼、所有要傳送的數據、一錯誤檢測域。從設備回應訊息也由Modbus協定構成,包括確認要行動的域、任何要返回的數據、和一錯誤檢測域。如果在訊息接收過程中發生一錯誤,或從設備不能執行其命令,從設備將建立一錯誤訊息並把它作為回應傳送出去。
2、在其它類型網路上轉輸
在其它網路上,控制器使用對等技術通信,故任何控制都能初始和其它控制器的通信。這樣在單獨的通信過程中,控制器既可作為主設備也可作為從設備。提供的多個內部通道可允許同時發生的傳輸進程。在訊息位,Modbus協定仍提供了主—從原則,儘管網路通信方法是“對等”。如果一控制器傳送一訊息,它只是作為主設備,並期望從從設備得到回應。同樣,當控制器接收到一訊息,它將建立一從設備回應格式並返回給傳送的控制器。
3、查詢—回應周期
(1)查詢
查詢訊息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的任何附加信息。例如功能代碼03是要求從設備讀保持暫存器並返回它們的內容。數據段必須包含要告之從設備的信息:從何暫存器開始讀及要讀的暫存器數量。錯誤檢測域為從設備提供了一種驗證訊息內容是否正確的方法。
(2)回應
如果從設備產生一正常的回應,在回應訊息中的功能代碼是在查詢訊息中的功能代碼的回應。數據段包括了從設備收集的數據:象暫存器值或狀態。如果有錯誤發生,功能代碼將被修改以用於指出回應訊息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認訊息內容是否可用。