複製鏈接
請複製以下鏈接發送給好友

功能碼

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

目錄

功能碼簡介

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

功能碼常用功能碼

功能碼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為已寫入寄存器個數。 [1] 

功能碼使用

此協議定義了一個控制器能認識使用的消息結構,而不管它們是經過何種網絡進行通信的。它描述了一控制器請求訪問其它設備的過程,如果迴應來自其它設備的請求,以及怎樣偵測錯誤並記錄。它制定了消息域格局和內容的公共格式。當在一Modbus網絡上通信時,此協議決定了每個控制器須要知道它們的設備地址,識別按地址發來的消息,決定要產生何種行動。如果需要回應,控制器將生成反饋信息並用Modbus協議發出。在其它網絡上,包含了Modbus協議的消息轉換為在此網絡上使用的幀或包結構。這種轉換也擴展了根據具體的網絡解決節地址、路由路徑及錯誤檢測的方法。
1、在Modbus網絡上轉輸
標準的Modbus口是使用一RS-232C兼容串行接口,它定義了連接口的針腳、電纜、信號位、傳輸波特率、奇偶校驗。控制器能直接或經由Modem組網。控制器通信使用主—從技術,即僅一設備(主設備)能初始化傳輸(查詢)。其它設備(從設備)根據主設備查詢提供的數據作出相應反應。典型的主設備:主機和可編程儀表。典型的從設備:可編程控制器。主設備可單獨和從設備通信,也能以廣播方式和所有從設備通信。如果單獨通信,從設備返回一消息作為迴應,如果是以廣播方式查詢的,則不作任何迴應。Modbus協議建立了主設備查詢的格式:設備(或廣播)地址、功能代碼、所有要發送的數據、一錯誤檢測域。從設備迴應消息也由Modbus協議構成,包括確認要行動的域、任何要返回的數據、和一錯誤檢測域。如果在消息接收過程中發生一錯誤,或從設備不能執行其命令,從設備將建立一錯誤消息並把它作為迴應發送出去。
2、在其它類型網絡上轉輸
在其它網絡上,控制器使用對等技術通信,故任何控制都能初始和其它控制器的通信。這樣在單獨的通信過程中,控制器既可作為主設備也可作為從設備。提供的多個內部通道可允許同時發生的傳輸進程。在消息位,Modbus協議仍提供了主—從原則,儘管網絡通信方法是“對等”。如果一控制器發送一消息,它只是作為主設備,並期望從從設備得到迴應。同樣,當控制器接收到一消息,它將建立一從設備迴應格式並返回給發送的控制器。
3、查詢—迴應週期
(1)查詢
查詢消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的任何附加信息。例如功能代碼03是要求從設備讀保持寄存器並返回它們的內容。數據段必須包含要告之從設備的信息:從何寄存器開始讀及要讀的寄存器數量。錯誤檢測域為從設備提供了一種驗證消息內容是否正確的方法。
(2)迴應
如果從設備產生一正常的迴應,在迴應消息中的功能代碼是在查詢消息中的功能代碼的迴應。數據段包括了從設備收集的數據:象寄存器值或狀態。如果有錯誤發生,功能代碼將被修改以用於指出迴應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。
參考資料
  • 1.    王普斌編著,單片機接口與應用,冶金工業出版社,2016.04,222-225