日本欧美一区-日本欧美一区二区三区片-日本强好片久久久久久AAA-日本-区一区二区三区A片-日本人伦一区二区三区-日本人妻A片成人免费看

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> PLC基礎(chǔ)入門教程 >> 正文

MODBUS常用功能碼學(xué)習(xí)及實例 modbus報文格式

作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2022/8/30

Modbus常用功能碼學(xué)習(xí)及實例

一.MODBUS寄存器種類說明

雖然MODBUS支持諸多功能碼,但其中只涉及到四種寄存器:線圈寄存器、離散輸入寄存器、保持寄存器、輸入寄存器。
只要搞清楚寄存器的本質(zhì)和功能碼的聯(lián)系,其實理解功能碼就很簡單。

寄存器種類 讀寫狀態(tài) 位操作字操作 適用功能碼
線圈寄存器 讀/寫 01H(讀); 05H(寫單個位); 0FH(寫多個位)
離散輸入寄存器 只讀 02H
保持寄存器 讀/寫 03H(讀); 06H(寫單個字節(jié)); 0FH(寫多個字節(jié))
輸入寄存器 只讀 04H

線圈寄存器:可以類比為開關(guān)量,每個bit都對應(yīng)一個信號的開關(guān)狀態(tài)。所以一個字節(jié)可以同時控制8路的信號。比如控制外部8路io的高低。 線圈寄存器支持讀也支持寫,比如控制或者讀取電磁閥的開關(guān)志狀態(tài)。對應(yīng)的功能碼有:0x01 0x05 0x0f

離散輸入寄存器:離散輸入寄存器相當(dāng)于線圈寄存器的只讀模式,每個bit表示一個開關(guān)量,而他的開關(guān)量只能讀取,不能夠?qū)懭搿V荒芡ㄟ^外部設(shè)定改變輸入狀態(tài),比如我可以讀取外部按鍵的按下還是松開,但是控制不了按鍵。對應(yīng)的功能碼有:0x02

保持寄存器:寄存器的單位不再是bit而是兩個byte,也就是可以存放具體的數(shù)據(jù)量的,并且是可讀寫的。比如我不到那可以讀取傳感器報警上限下限,也可以設(shè)置它的大小。對應(yīng)的功能碼有:0x03 0x06 0x10

輸入寄存器:輸入寄存器相當(dāng)于保持寄存器的只讀模式,也是只支持讀而不能寫。一個寄存器也是占據(jù)兩個字節(jié)的空間。比如通過讀取輸入寄存器獲取現(xiàn)在的模擬量采樣值。對應(yīng)的功能碼有 0x04

二.MODBUS部分功能碼

MODBUS支持很多功能碼,但是在實際應(yīng)用的時候常用的也就那么幾個。

上面介紹了Modbus的四個寄存器種類:線圈寄存器、離散輸入寄存器、保持寄存器、輸入寄存器,從寄存器角度理解了對應(yīng)功能碼。下面列出常用功能碼,具體如下:

功能碼 名稱 數(shù)據(jù)類型 作用
0x01 讀線圈寄存器 取得一組邏輯線圈的當(dāng)前狀態(tài)(ON/OFF )
0x02 讀離散輸入寄存器 取得一組開關(guān)輸入的當(dāng)前狀態(tài)(ON/OFF )
0x03 讀保持寄存器 整型、浮點型、字符型 在一個或多個保持寄存器中取得當(dāng)前的二進制值
0x04 讀輸入寄存器 整型、浮點型 在一個或多個輸入寄存器中取得當(dāng)前的二進制值
0x05 寫單個線圈寄存器 強置一個邏輯線圈的通斷狀態(tài)
0x06 寫單個保持寄存器 整型、浮點型、字符型 把具體二進值裝入一個保持寄存器
0x0f 寫多個線圈寄存器 強置一串連續(xù)邏輯線圈的通斷
0x10 寫多個保持寄存器 整型、浮點型、字符型 把具體的二進制值裝入一串連續(xù)的保持寄存器
三.MODBUS功能碼實例

1.功能碼:01H 讀線圈寄存器

1)功能:讀從站線圈寄存器,位操作,可讀單個或者多個
2)主機發(fā)送指令:
主機發(fā)送數(shù)據(jù)包括:從站地址+功能碼+寄存器起始地址+寄存器數(shù)量+校驗碼
假設(shè)從站地址為0x01,線圈寄存器開始地址0x0021,結(jié)束地址0x002c,即寄存器地址范圍為:0x0021~0x0032,總共讀取12個連續(xù)線圈的狀態(tài)值,則主機發(fā)送指令如下圖所示:

從站地址 功能碼 寄存器起始地址高8位 寄存器起始地址低8位 寄存器數(shù)量高8位 寄存器數(shù)低8位 CRC校驗低8位 CRC校驗高8位
0x01 0x01 0x00 0x21 0x00 0x0c 0xXX 0xXX

3)從站響應(yīng)返回:
從站響應(yīng)返回數(shù)據(jù)包括:從站地址+功能碼+返回字節(jié)數(shù)+數(shù)據(jù)值+校驗碼
其中,返回數(shù)據(jù)值的每一位對應(yīng)線圈狀態(tài),線圈狀態(tài)為ON時,其值為1;狀態(tài)為OFF時,其值為0;
【數(shù)據(jù)以小端的形式進行存儲,即最低有效位存放于內(nèi)存最低位地址(位于二進制的右側(cè))。每8個位組成一個字節(jié),當(dāng)線圈的數(shù)量不是8的倍數(shù)時,剩余的位數(shù)添0補位。】

從站地址 功能碼 返回字節(jié)數(shù) data1 data2 CRC校驗低8位 CRC校驗高8位
0x01 0x01 0x02 0xCB 0x0B 0xXX 0xXX

本例中讀取12個線圈,12/8商1余4,因此需要2個字節(jié)存放應(yīng)答數(shù)據(jù),返回字節(jié)數(shù)為2。
字節(jié)1存放線圈編號21~28的數(shù)值(小端字節(jié)序,線圈28的值存放在bit7,線圈21的值存放在bit0);
字節(jié)2存放線圈編號29~32的數(shù)值,剩余位數(shù)添0補位;

上表中data1表示0x0021-0x0028的線圈狀態(tài),data1的最低位代表最低地址的線圈狀態(tài);
data1:0xCB=1100 1011,則data1線圈狀態(tài)如下表所示:

線圈地址 功能碼 0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21
數(shù)值 0x01 1 1 0 0 1 0 1 1

data2表示地址0x0030-0x0038的線圈狀態(tài),不夠8位,字節(jié)高位填充為0。
data2:0x0B=0000 1011,則data2線圈狀態(tài)如下表所示:

線圈地址 功能碼 0x30 0x2f 0x2e 0x2d 0x2c 0x2b 0x2a 0x29
數(shù)值 0x01 0 0 0 0 1 0 1 1

2.功能碼:02H 讀離散輸入寄存器

1)功能:讀離散輸入寄存器,位操作,可讀單個或多個,類似功能碼0X01,此處省略;

3.功能碼:03H 讀保持寄存器

1)功能:讀從站保持寄存器,字節(jié)操作,可讀單個或者多個;每個保持寄存器占2個字節(jié)(16位);
2)主機發(fā)送指令:
主機發(fā)送數(shù)據(jù)包括:從站地址+功能碼+寄存器起始地址+寄存器數(shù)量+校驗碼
假設(shè)從站地址為0x03,保持寄存器開始地址為0x003B,結(jié)束地址0x003D,即寄存器地址范圍為:0x003B~0x003D,總共讀取3個保持寄存器的數(shù)據(jù),則主機發(fā)送指令如下圖所示:

從站地址 功能碼 寄存器起始地址高8位 寄存器起始地址低8位 寄存器數(shù)量高8位 寄存器數(shù)量低8位 CRC校驗低8位 CRC校驗高8位
0x03 0x03 0x00 0x3B 0x00 0x03 0xXX 0xXX

3)從站響應(yīng)返回:
從站響應(yīng)返回數(shù)據(jù)包括:從站地址+功能碼+返回字節(jié)數(shù)+數(shù)據(jù)值+校驗碼

從站地址 功能碼 返回字節(jié)數(shù) data1H data1L data2H data2L data3H data3L CRC校驗低8位 CRC校驗高8位
0x03 0x03 0x06 0x1B 0x0B 0x0A 0x01 0xC2 0xDB 0xXX 0xXX

本例中讀取3個保持寄存器,每個保持寄存器占2個字節(jié),因此需要6個字節(jié)存放應(yīng)答數(shù)據(jù),返回字節(jié)數(shù)為6。
0x003B~0x003D保持寄存器的數(shù)值如下圖所示:

寄存器地址 0x003D 0x003C 0x003A
數(shù)值 0xC2 DB 0x0A 01 0x1B 0B

4.功能碼:04H 讀輸入寄存器

1)功能:讀輸入寄存器,字節(jié)操作,可讀單個或多個,類似功能碼0X03,此處省略;

5.功能碼:05H 寫單個線圈寄存器

1)功能:對單個線圈進行寫操作,位操作,只能寫一個。寫入0xFF00表示將線圈置為ON,寫入0x0000表示將線圈置為OFF,其它值無效;
2)主機發(fā)送指令:
主機發(fā)送數(shù)據(jù)包括:從站地址+功能碼+寄存器起始地址+數(shù)據(jù)值+校驗碼
假設(shè)從站地址為0x03,線圈寄存器起始地址為0x0032,要將其設(shè)置為ON,則主機發(fā)送指令如下表所示:

從站地址 功能碼 寄存器起始地址高8位 寄存器起始地址低8位 dataH dataL CRC校驗低8位 CRC校驗高8位
0x03 0x05 0x00 0x32 0xff 0x00 0xXX 0xXX

3)從站響應(yīng)返回:
從站應(yīng)答數(shù)據(jù)包括:從站地址+功能碼+寄存器地址+寫入值+校驗碼
如果數(shù)據(jù)成功寫入,則應(yīng)答數(shù)據(jù)與請求數(shù)據(jù)一樣,如下表所示:

從站地址 功能碼 寄存器起始地址高8位 寄存器起始地址低8位 dataH dataL CRC校驗低8位 CRC校驗高8位
0x03 0x05 0x00 0x32 0xff 0x00 0xXX 0xXX

6.功能碼:06H 寫單個保持寄存器|

1)功能:對單個保持寄存器進行寫操作,字節(jié)操作,只能寫一個。
2)主機發(fā)送指令:
主機發(fā)送數(shù)據(jù)包括:從站地址+功能碼+寄存器起始地址+數(shù)據(jù)值+校驗碼
假設(shè)從站地址為0x01,線圈寄存器起始地址為0x0048,寫入數(shù)值為0x1234,則主機發(fā)送指令如下表所示:

從站地址 功能碼 寄存器起始地址高8位 寄存器起始地址低8位 dataH dataL CRC校驗低8位 CRC校驗高8位
0x01 0x06 0x00 0x48 0x12 0x34 0xXX 0xXX

3)從站響應(yīng)返回:
從站應(yīng)答數(shù)據(jù)包括:從站地址+功能碼+寄存器地址+寫入值+校驗碼
如果數(shù)據(jù)成功寫入,則應(yīng)答數(shù)據(jù)與請求數(shù)據(jù)一樣。

Tags:功能碼,modbus  
責(zé)任編輯:admin
相關(guān)文章列表
西門子PLC S7-200 smart如何使用Modbus 485通訊傳輸接收數(shù)據(jù)_200
S7-200和組態(tài)王的連接,cpu226 PLC 與組態(tài)王如何連接
基于S7-200SMART實現(xiàn)Modbus TCP通信_200smart modbus tcp
三菱plc FX3U與三菱E800變頻器專用指令通信應(yīng)用,IVDR指令和 IVCK
三菱PLC的modbus-rtu通訊實例_三菱小型PLC FX3U系列Modbus 通訊教
西門子200SMART與眾辰變頻器的MODBUS通信實例40001和十六進制的轉(zhuǎn)
西門子S7-200 smart通過modbus rtu 協(xié)議采集K37A數(shù)據(jù)項目案例
昆侖通態(tài)MCGS觸摸屏和西門子V20變頻器之間的MODBUS通訊
Modbus通信協(xié)議介紹以及Modbus Poll、Slave軟件使用介紹_modbus 
【工具教程】Modbus Slave使用教程
干貨 | Modscan32  Modsim32 Modbus協(xié)議調(diào)試分享_modbus調(diào)試
Modscan32軟件的使用 Modsim32
西門子plc控制英威騰變頻器實例,西門子200SMART的MODBUS通訊!
施耐德PM500電量表通過MODBUS協(xié)議與組態(tài)王通訊
組態(tài)軟件的無線485通訊實例,組態(tài)王modbus通訊實例
組態(tài)王和三菱plc 基于數(shù)傳電臺的組態(tài)王控制實現(xiàn)遠(yuǎn)程采集控制器PL
KingView組態(tài)王與信捷PLC通訊解決方案 MODBUS通訊設(shè)置
KingView組態(tài)王通過modbus與第三方設(shè)備通訊,如何實現(xiàn)字節(jié)或字的
組態(tài)王modbus通信用法教程modbus-rtu、modbus-tcp莫迪康通信配置
KingView組態(tài)王如何獲取modbus TCP數(shù)據(jù)?_組態(tài)王數(shù)據(jù)轉(zhuǎn)發(fā)modbust
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網(wǎng)友評論
推薦文章
最新推薦
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢