功能碼

功能碼

功能碼用於標明一個Modbus信息幀的用途,如功能碼01為讀取線圈狀態,02為讀取輸入狀態等。當主設備向從設備發送信息時,功能碼將告訴從設備需要執行哪些行為。例如,去讀取輸入的開關狀態、讀一組寄存器的數據內容等。當從設備響應時,使用功能碼用於指示是正常響應(無誤)還是有某種錯誤發生(稱作異議回應)。正常應答時,主機發送的功能碼等於從機應答的功能碼。

常用功能碼


01和02

功能碼01的作用是讀取線圈狀態。在數字量輸出(Digital Output,DO)中,一個DO接點就能夠控制一個線圈的通電和斷電,所以讀取線圈狀態就是讀取數字量輸出點的狀態,是1bit的信息。例如,對於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或021位元組1位元組1位元組1位元組2位元組
從機應答主機命令的幀格式如下:
地址功能碼返回數據位元組個數返回數據位元組1返回數據位元組2......返回數據位元組nCRC校驗
1位元組01或021位元組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或041位元組1位元組1位元組1位元組2位元組
從機應答主機命令的幀格式如下:
地址功能碼返回數據位元組個數返回第一個寄存器數據高位元組返回第一個寄存器數據低位元組......CRC校驗
1位元組03或041位元組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位元組051位元組1位元組1位元組1位元組2位元組
寫入值為FF00時為ON,寫入值為0000時為OFF。
功能碼15的作用是強置多個線圈。
RTU模式下,主機發送功能碼15命令的幀格式如下:
地址功能碼寫入線圈起始地址高位元組寫入線圈起個數低位元組寫入線圈個數高位元組寫入線圈個數低位元組寫入值位元組數寫入值位元組1......CRC校驗
1位元組OF1位元組1位元組1位元組1位元組1位元組1位元組......2位元組
從機應答主機命令的幀格式如下:
地址功能碼寫入線圈起始地址高位元組寫入線圈起始地址低位元組已寫入線圈個數高位元組寫入線圈個數低位元組CRC校驗
1位元組OF1位元組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位元組061位元組1位元組1位元組1位元組2位元組
功能碼16的作用是預置多寄存器。
RTU模式下,主機發送功能碼16命令的幀格式如下:
地址功能碼寫入寄存器起始地址高位元組寫入寄存器起始地址低位元組寫入寄存器個數高位元組寫入寄存器個數低位元組寫入值位元組數寫入值位元組1......CRC校驗
1位元組101位元組1位元組1位元組1位元組1位元組1位元組......2位元組
從機應答主機命令的幀格式如下:
地址功能碼寫入寄存器起始地址高位元組寫入寄存器起始地址低位元組已寫入寄存器個數高位元組已寫入寄存器個數低位元組CRC校驗
1位元組101位元組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)回應
如果從設備產生一正常的回應,在回應消息中的功能代碼是在查詢消息中的功能代碼的回應。數據段包括了從設備收集的數據:象寄存器值或狀態。如果有錯誤發生,功能代碼將被修改以用於指出回應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。