10.5Modbus功能碼詳解
本節(jié)大部分內(nèi)容參考《Modbus軟件開(kāi)發(fā)實(shí)戰(zhàn)指南》。
10.5.1
功能碼概要
Modbus標(biāo)準(zhǔn)在協(xié)議中規(guī)定了以下3類Modbus功能碼。
公共功能碼:
①被明確定義的功能碼
②保證唯一性
③由Modbus協(xié)會(huì)確認(rèn),并提供公開(kāi)的文檔
④可進(jìn)行一致性測(cè)試
⑤包括協(xié)議定義的功能碼和保留將來(lái)使用的功能碼
用戶自定義功能碼:
①有兩個(gè)用戶自定義功能碼區(qū)域,分別是65~72和100~110。
②用戶自定義,無(wú)法保證唯一性。
保留功能碼:
保留功能碼因?yàn)闅v史遺留原因,某些公司的傳統(tǒng)產(chǎn)品現(xiàn)行使用的功能碼不作為公共使用。
10.5.2
0x01)讀取線圈
1. 功能說(shuō)明
01功能碼用于讀取從設(shè)備的線圈或離散量輸出的狀態(tài),即各Do(DiscreteOutput,離散輸出)的ON/OFF狀態(tài)。消息幀中指定了需要讀取的線圈起始地址和線圈數(shù)目。需要注意的是,在Modbus協(xié)議規(guī)定的PDU中,所有線圈或寄存器地址都必須從0開(kāi)始計(jì)算。
2. 查詢報(bào)文
如下表所示,查詢幀的消息中定義了從設(shè)備地址為3,并讀取從設(shè)備的Modbus地址0001900055(線圈地址 0002000056)共計(jì)37個(gè)狀態(tài)值。起始線圈地址為0x13(即十進(jìn)制00019),因?yàn)榫€圈地址是從0開(kāi)始計(jì)數(shù)的。
功能碼01查詢報(bào)文示例:
字段 | 例(Hex) | ASCII模式字符型 | RTU模式8位(Hex) |
幀頭 | “:” | ||
從設(shè)備地址 | 0x03 | “0”,“3” | 0x03 |
功能碼 | 0x01 | “0”,“1” | 0x01 |
起始地址 (高位) |
0x00 | “0”,“0” | 0x00 |
起始地址 (低位) |
0x13 | “1”,“3” | 0x13 |
寄存器數(shù) (高位) |
0x00 | “0”,“0” | 0x00 |
寄存器數(shù) (低位) |
0x25 | “2”,“5” | 0x25 |
差錯(cuò)校驗(yàn) | LRC(2字符) | CRC(2字節(jié)) | |
幀尾 | CR/LF | ||
合計(jì)字節(jié)數(shù) | 17 | 8 |
Modbus協(xié)議規(guī)定,起始地址由2字節(jié)構(gòu)成,取值范圍為0x0000~0xFFFF。
線圈數(shù)量由2字節(jié)構(gòu)成,取值范圍為0x0001~0x07D0(即+進(jìn)制1~2000)另外,注意觀察ASCII模式和RTU模式的區(qū)別,ASCII模式直接按每4位拆分成對(duì)應(yīng)的字符表示。
3. 響應(yīng)報(bào)文
在響應(yīng)報(bào)文的數(shù)據(jù)字段中,每個(gè)線圈占用1位(bit),狀態(tài)被表示為1=ON和O=OFF兩種類型。第1個(gè)數(shù)據(jù)字節(jié)的LSB(最低有效位)標(biāo)識(shí)查詢報(bào)文中的起始地址線圈的狀態(tài)值,其他線圈以此類推,一直到這個(gè)字節(jié)的MSB(最高有效位)為止,并在后續(xù)字節(jié)中按照同樣的方式(由低到高)排列。
例如,下表中線圈20~27的狀態(tài)值分別是ON-ON-OFF OFF-ON-OFF-ON-OFF表示為二進(jìn)制則為01010011(0x53),注意觀察對(duì)應(yīng)的順序。1字節(jié)可以表示8個(gè)線圈的狀態(tài)如果最后的數(shù)據(jù)字節(jié)中不能填滿8個(gè)線圈的狀態(tài),則用0填充。對(duì)應(yīng)于查詢報(bào)文中需要讀取37個(gè)線圈的狀態(tài),共需要5字節(jié)保存狀態(tài)值。
功能碼01響應(yīng)報(bào)文示例:
字段 | 例(Hex) | ASCII模式字符型 | RTU模式8位(Hex) |
幀頭 | “:” | ||
從設(shè)備地址 | 0x03 | “0”,“3” | 0x03 |
功能碼 | 0x01 | “0”,“1” | 0x01 |
數(shù)據(jù)域字節(jié)數(shù) | 0x05 | “0”,“5” | 0x05 |
數(shù)據(jù)1 | 0x53 | “5”,“3” | 0x53 |
數(shù)據(jù)2 | 0x6B | “6”,“B” | 0x6B |
數(shù)據(jù)3 | 0x01 | “0”,“1” | 0x01 |
數(shù)據(jù)4 | 0xF4 | “F”,“B” | 0xF4 |
數(shù)據(jù)5 | 0x1B | “1”,“B” | 0x1B |
差錯(cuò)校驗(yàn) | LRC(2字符) | CRC(2字節(jié)) | |
幀尾 | CR/LF | ||
合計(jì)字節(jié)數(shù) | 21 | 10 |
10.5.3
(0x02)讀取離散量輸入值
1. 功能說(shuō)明
02功能碼用于讀取從設(shè)備的離散輸入,即DI(Discrete Input)的ON/OFF狀態(tài)。消息頓中指定了需要讀取的離散輸入寄存器的起始地址和數(shù)目,可以讀取1~2000個(gè)連續(xù)的離散量輸入狀態(tài)如果從設(shè)備接受主設(shè)備的請(qǐng)求則回復(fù)功能碼02,并返回離散量且輸入各變量的當(dāng)前狀態(tài)。如果返回的離散輸入數(shù)量的個(gè)數(shù)不是8的整數(shù)倍,將用0填充最后的數(shù)據(jù)字節(jié)的剩余位。
2. 查詢報(bào)文
如下表所示,查詢頓的消息中定義了從設(shè)備的地址為3,并讀取從設(shè)備的離散輸入寄存器中地址10101~10120(Modbus地址表示為十進(jìn)制100~119)共計(jì)20個(gè)離散輸入狀態(tài)值。從下表中可以發(fā)現(xiàn),起始地址為0x64(即十進(jìn)制100),因?yàn)橄DU中的Modbus地址從0開(kāi)始計(jì)數(shù)。
功能碼02查詢報(bào)文示例:
字段 | 例(Hex) | ASCII模式字符型 | RTU模式8位(Hex) |
幀頭 | “:” | ||
從設(shè)備地址 | 0x03 | “0”,“3” | 0x03 |
功能碼 | 0x02 | “0”,“2” | 0x02 |
起始地址 (高位) |
0x00 | “0”,“0” | 0x00 |
起始地址 (低位) |
0x64 | “6”,“4” | 0x64 |
寄存器數(shù) (高位) |
0x00 | “0”,“0” | 0x00 |
寄存器數(shù) (低位) |
0x14 | “1”,“4” | 0x14 |
差錯(cuò)校驗(yàn) | LRC(2字符) | CRC(2字節(jié)) | |
幀尾 | CR/LF | ||
合計(jì)字節(jié)數(shù) | 17 | 8 |
與5.4.2節(jié)中的功能碼(01(0x01)讀取線圈/離散量輸出狀態(tài)(ReadCoil status/DOs))一樣,本功能碼的起始地址由2字節(jié)構(gòu)成,取值范圍為0x0000~0xFFFF;離散量數(shù)量由2字節(jié)構(gòu)成,取值范圍為0x0001~0x07D0(即十進(jìn)制1~2000),最多一次性可讀取2000人離散輸入狀態(tài)值。
3. 響應(yīng)報(bào)文
響應(yīng)報(bào)文的各項(xiàng)構(gòu)成和意義與5.4.2章節(jié)的功能碼(01(0x01)讀取線圈/離散量輸出狀態(tài)(Re-ad Coil Status/DOs))一樣,如下表所示:
功能碼02響應(yīng)報(bào)文示例
字段 | 例(Hex) | ASCII模式字符型 | RTU模式8位(Hex) |
幀頭 | “:” | ||
從設(shè)備地址 | 0x03 | “0”,“3” | 0x03 |
功能碼 | 0x02 | “0”,“2” | 0x02 |
數(shù)據(jù)域字節(jié)數(shù) | 0x03 | “0”,“3” | 0x03 |
數(shù)據(jù)1 | 0x53 | “5”,“3” | 0x53 |
數(shù)據(jù)2 | 0x6B | “6”,“B” | 0x6B |
數(shù)據(jù)3 | 0x01 | “0”,“1” | 0x01 |
差錯(cuò)校驗(yàn) | LRC(2字符) | CRC(2字節(jié)) | |
幀尾 | CR/LF | ||
合計(jì)字節(jié)數(shù) | 21 | 10 |
需要技術(shù)支持?
如您在使用瑞薩MCU/MPU產(chǎn)品中有任何問(wèn)題,可識(shí)別下方二維碼或復(fù)制網(wǎng)址到瀏覽器中打開(kāi),進(jìn)入瑞薩技術(shù)論壇尋找答案或獲取在線技術(shù)支持。
-
MODBUS
+關(guān)注
關(guān)注
28文章
1799瀏覽量
76947 -
設(shè)備
+關(guān)注
關(guān)注
2文章
4502瀏覽量
70598 -
ModBus協(xié)議
+關(guān)注
關(guān)注
3文章
177瀏覽量
33416 -
功能碼
+關(guān)注
關(guān)注
0文章
10瀏覽量
2117
原文標(biāo)題:Moubus功能碼詳解 - RZ MPU工業(yè)控制教程連載(30)
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論