本文以綜科智控品牌的IO控制器為例,直接以實際例子講解modbus協(xié)議
目錄
一、MODBUS協(xié)議簡介4
1.什么是MODBUS協(xié)議4
2.MODBUS協(xié)議格式5
2.1MODBUS-RTU報文模型(用于串口通訊)5
2.2MODBUS-TCP報文模型(用于網(wǎng)絡(luò)TCP/IP通信)5
3.MODBUS的功能碼及寄存器介紹5
3.1功能碼5
3.2寄存器分類說明6
3.3寄存器地址說明6
二、MODBUS-RTU協(xié)議詳解7
1.X輸入口開關(guān)量狀態(tài)讀取 (讀取:DI寄存器,命令號:0x02)7
2.X輸入口脈沖計數(shù)讀取 (讀取:AI寄存器,命令號:0x04)9
3.X輸入口脈沖計數(shù)清空 (寫入:DO寄存器,命令號:0x0F)12
4.Y輸出口ON/OFF寫入 (寫入:DO寄存器,命令號:0x0F)14
5.Y輸出口ON/OFF讀取 (讀取:DO寄存器,命令號:0x01)16
6.AI模擬量采集讀取(讀取:AI寄存器,命令號:0x04)18
7.AO模擬量輸出寫入(寫入:AO寄存器,命令號:0x10)20
8.AO模擬量輸出讀取(讀取:AO寄存器,命令號:0x03)22
三、MODBUS-TCP協(xié)議詳解24
1.X輸入口開關(guān)量狀態(tài)讀取 (讀取:DI寄存器,命令號:0x02)24
2.X輸入口脈沖計數(shù)讀取 (讀取:AI寄存器,命令號:0x04)27
3.X輸入口脈沖計數(shù)清空 (寫入:DO寄存器,命令號:0x0F)30
4.Y輸出口ON/OFF寫入 (寫入:DO寄存器,命令號:0x0F)33
5.Y輸出口ON/OFF讀取 (讀取:DO寄存器,命令號:0x01)36
6.AI模擬量采集讀取(讀取:AI寄存器,命令號:0x04)39
7.AO模擬量輸出寫入(寫入:AO寄存器,命令號:0x10)42
8.AO模擬量輸出讀取(讀取:AO寄存器,命令號:0x03)45
MODBUS協(xié)議簡介
什么是MODBUS協(xié)議
Modbus協(xié)議是一種已廣泛應(yīng)用于當(dāng)今工業(yè)控制領(lǐng)域的通用通訊協(xié)議,按其格式可分為MODBUS-RTU,MODBUS-ASCII,MODBUS-TCP,其中前兩者適用于串行通信控制網(wǎng)絡(luò)中,例如RS485,RS232等,而MODBUS-TCP主要應(yīng)用于基于以太網(wǎng)TCP/IP通信的控制網(wǎng)絡(luò)中。
通過此協(xié)議,控制器相互之間、或控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))可以和其它設(shè)備之間進行通信。Modbus協(xié)議使用的是主從通訊技術(shù),即由主設(shè)備主動查詢和操作從設(shè)備。一般將主控設(shè)備方所使用的協(xié)議稱為Modbus Master,從設(shè)備方使用的協(xié)議稱為Modbus Slave。典型的主設(shè)備包括工控機和工業(yè)控制器等;典型的從設(shè)備如PLC可編程控制器等。Modbus通訊物理接口可以選用串口(包括RS232和RS485),也可以選擇以太網(wǎng)口。其通信遵循以下的過程:
● 主設(shè)備向從設(shè)備發(fā)送請求
● 從設(shè)備分析并處理主設(shè)備的請求,然后向主設(shè)備發(fā)送結(jié)果
● 如果出現(xiàn)任何差錯,從設(shè)備將返回一個異常功能碼
Modbus協(xié)議具有以下幾個特點:
(1)標(biāo)準(zhǔn)、開放,用戶可以免費、放心地使用Modbus協(xié)議,不需要交納許可證費,也不會侵犯知識產(chǎn)權(quán)。
(2)Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質(zhì)上傳送,如雙絞線、光纖、無線等。
(3)Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發(fā)簡單。
MODBUS-RTU報文模型(用于串口通訊)
設(shè)備地址 |
功能碼 |
數(shù)據(jù) |
CRC校驗L |
CRC校驗H |
1BYTE |
1BYTE |
N*BYTE |
1BYTE |
1BYTE |
MODBUS-TCP報文模型(用于網(wǎng)絡(luò)TCP/IP通信)
傳輸標(biāo)識符TID |
協(xié)議標(biāo)識符PID |
后面要傳輸?shù)淖止?jié)數(shù) |
設(shè)備地址 |
功能碼 |
數(shù)據(jù) |
2BYTE |
2BYTE |
2BYTE |
1BYTE |
1BYTE |
N*BYTE |
注意:
Modbus-RTU一般用于串口RS232/RS485/RS422通訊
Modbus-TCP一般用于網(wǎng)口、WIFI的TCP/UDP通訊
MODBUS的功能碼及寄存器介紹
功能碼
下表列出 MODBUS支持的部分功能代碼:以十進制表示
功能碼 (十進制) |
作用 |
信息地址 |
位操作/字操作 |
操作數(shù)量 |
01 |
讀單個/多個DO寄存器 |
00001-09999 |
位操作 |
單個/多個 |
02 |
讀單個/多個DI寄存器 |
10001-19999 |
位操作 |
單個/多個 |
03 |
讀單個/多個AO寄存器 |
40001-49999 |
字操作 |
單個/多個 |
04 |
讀單個/多個AI寄存器 |
30001-39999 |
字操作 |
單個/多個 |
05 |
寫單個DO寄存器 |
00001-09999 |
位操作 |
單個 |
06 |
寫單個AO寄存器 |
40001-49999 |
字操作 |
單個 |
15 |
寫單個/多個DO寄存器 |
00001-09999 |
位操作 |
單個/多個 |
16 |
寫單個/多個AO寄存器 |
40001-49999 |
字操作 |
單個/多個 |
寄存器分類說明
寄存器種類 |
說明 |
DI寄存器 |
只讀,主要用于讀模塊的DI離散量輸入信號的 ON/OFF狀態(tài)。 |
DO寄存器 |
可讀/可寫,主要用于控制相應(yīng)DO輸出,例如:Y點的開關(guān)狀態(tài)。也可以用于控制某些功能的啟動或停止、打開或關(guān)閉,例如:PWM的輸出/停止,計數(shù)的清空等。 |
AI寄存器 |
只度,主要用于讀取模塊中的輸入型數(shù)據(jù),例如AD模擬采集到的電壓值,電流值,壓力值等,或者X輸入脈沖計數(shù)值等。 |
AO寄存器 |
可讀/可寫,主要用于存放的用戶下發(fā)的參數(shù),例如AO模擬量輸出值、PWM輸出頻率、占空比等。 |
寄存器地址說明
- 寄存器信息地址(PLC地址):
寄存器信息地址指的是存放于控制器中的地址,這些控制器可以是 PLC,也可以使觸
摸屏,或是文本顯示器。例如 4x0001、3x0002等,這些地址一般使用十進制描述。
- 寄存器尋址地址(協(xié)議地址):
寄存器尋址地址指的是通信時使用的寄存器地址,例如信息地址 40001對應(yīng)尋址地址
0x0000,40002對應(yīng)尋址地址 0x0001,寄存器尋址地址一般使用 16進制描述。再如,信息寄存器 40003對應(yīng)尋址地址 0002,信息寄存器 30003對應(yīng)尋址地址 0002,雖然兩個信息寄存器通信時使用相同的地址,但是需要使用不同的命令才可以訪問,所以訪問時不存在沖突。
MODBUS-RTU協(xié)議詳解
X輸入口開關(guān)量狀態(tài)讀取 (讀取:DI寄存器,命令號:0x02)
- 描述
讀模塊的X輸入口輸入信號的 ON/OFF狀態(tài)。
- 例子:讀X1當(dāng)前輸入狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 02 00 00 00 01 B9 CA
解釋:
01:子站地址
02:指令號,02讀DI
00 00:從哪一路開始讀,0x0000=X1開始讀
00 01:要讀多少路,十六進制0x0001=十進制1,讀取1路
B9 CA:CRC校驗
響應(yīng):
//X1 輸入ON(1)時的回復(fù)
01 02 01 01 60 48
解釋:
01:子站地址
02:指令號,02讀DI
01:后面跟的數(shù)據(jù)字節(jié)數(shù)
01:換成二進制就是 0000 0001 =X8-X7-X6-X5-X4-X3-X2-X1輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
60 48:CRC校驗
//X1 輸入OFF(0)時的回復(fù)
01 02 01 00 A1 88
解釋:
01:子站地址
02:指令號,02讀DI
01:后面跟的數(shù)據(jù)字節(jié)數(shù)
00:換成二進制就是 0000 0000 =X8-X7-X6-X5-X4-X3-X2-X1輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
A1 88:CRC校驗
- 例子:讀X1-X8當(dāng)前輸入狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 02 00 00 00 08 79CC
解釋:
01:子站地址
02:指令號,02讀DI
00 00:從哪一路開始讀,0x0000=X1開始讀
00 08:要讀多少路十六進制0x0008=十進制8,讀取8路
79CC:CRC校驗
響應(yīng):
//X1,X8輸入ON(1)時,其他都輸入OFF(0)時的回復(fù)
01 02 01 81 61 E8
解釋:
01:子站地址
02:指令號,02讀DI
01:后面跟的數(shù)據(jù)字節(jié)數(shù)
81:換成二進制就是1000 0001 =X8-X7-X6-X5-X4-X3-X2-X1輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
61 E8:CRC校驗
- 例子:讀X1-X24當(dāng)前輸入狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 02 00 00 00 18 78 00
解釋:
01:子站地址
02:指令號,02讀DI
00 00:從哪一路開始讀,0x0000=X1開始讀
00 18:要讀多少路十六進制0x0018=十進制24,讀取24路
78 00:CRC校驗
響應(yīng):
//X1,X2,X9,X24 輸入ON(1)時,其他都輸入OFF(0)時的回復(fù)
01 02 03 03 01 80 88 7E
解釋:
01:子站地址
02:指令號,02讀DI
03:后面跟的數(shù)據(jù)字節(jié)數(shù)
03:換成二進制就是 0000 0011 =X8-X7-X6-X5-X4-X3-X2-X1輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
01:換成二進制就是 0000 0001 =X16-X15-X14-X13-X12-X11-X10-X9輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
80:換成二進制就是 1000 0000 =X24-X23-X22-X21-X20-X19-X18-X17輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
88 7E:CRC校驗
X輸入口脈沖計數(shù)讀取 (讀取:AI寄存器,命令號:0x04)
- 描述
讀模塊的X輸入口的脈沖計數(shù)值。
- 例子:讀當(dāng)前X1輸入點脈沖計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 04 00 18 00 02 F1 CC
解釋:
01:子站地址
04:指令號,04讀AI
00 18:從哪一路開始讀,0x0018對應(yīng)的是X1脈沖計數(shù)寄存器起始地址
00 02:要讀多少個寄存器,因為一路X脈沖計數(shù)占用2個寄存器地址,所以這里寄存器數(shù)量要填2,十六進制0x0002=十進制2
F1 CC:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 04 04 00 00 27 10 E1 B8
解釋:
01:子站地址
04:指令號,04讀AI
04:后面跟的數(shù)據(jù)字節(jié)數(shù),0x04=十進制4,后面數(shù)據(jù)區(qū)有4字節(jié)數(shù)據(jù)
00002710:換成十進制就是 0x00002710 =10000,即讀取到X1輸入口當(dāng)前脈沖計數(shù)值為10000
E1 B8:CRC校驗
- 例子:讀當(dāng)前X1-X4輸入點脈沖計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 04 00 18 00 08 71 CB
解釋:
01:子站地址
04:指令號,04讀AI
00 18:從哪一路開始讀,0x0018對應(yīng)的是X1脈沖計數(shù)寄存器起始地址
00 08:要讀多少個寄存器,因為一路X脈沖計數(shù)占用2個寄存器地址,這里讀4路,所以這里寄存器數(shù)量要填8,十六進制0x0008=十進制8
71 CB :CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 04 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 EC C3
解釋:
01:子站地址
04:指令號,04讀AI
10:后面跟的數(shù)據(jù)字節(jié)數(shù),0x10=十進制16,后面數(shù)據(jù)區(qū)有16字節(jié)數(shù)據(jù)
00002710:換成十進制就是 0x00002710 =10000,即讀取到X1輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X2輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X3輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X4輸入口當(dāng)前脈沖計數(shù)值為10000
EC C3:CRC校驗
- 例子:讀當(dāng)前X1-X8輸入點脈沖計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 04 00 18 00 10 71 C1
解釋:
01:子站地址
04:指令號,04讀AI
00 18:從哪一路開始讀,0x0018對應(yīng)的是X1脈沖計數(shù)寄存器起始地址
00 10:要讀多少個寄存器,因為一路X脈沖計數(shù)占用2個寄存器地址,這里讀8路,所以這里寄存器數(shù)量要填十六進制0x0010=十進制16
71 C1 :CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 04 20 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 36 38
解釋:
01:子站地址
04:指令號,04讀AI
20:后面跟的數(shù)據(jù)字節(jié)數(shù),0x20=十進制32,后面數(shù)據(jù)區(qū)有32字節(jié)數(shù)據(jù)
00002710:換成十進制就是 0x00002710 =10000,即讀取到X1輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X2輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X3輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X4輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X5輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X6輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X7輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X8輸入口當(dāng)前脈沖計數(shù)值為10000
36 38:CRC校驗
- 例子:讀當(dāng)前X1-X12輸入點脈沖計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 04 00 18 00 18 70 07
解釋:
01:子站地址
04:指令號,04讀AI
00 18:從哪一路開始讀,0x0018對應(yīng)的是X1脈沖計數(shù)寄存器起始地址
00 18:要讀多少個寄存器,因為一路X脈沖計數(shù)占用2個寄存器地址,這里讀12路,所以這里寄存器數(shù)量要填十六進制0x0018=十進制24
70 07 :CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 04 30 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 C1 D9
解釋:
01:子站地址
04:指令號,04讀AI
30:后面跟的數(shù)據(jù)字節(jié)數(shù),0x30=十進制48,后面數(shù)據(jù)區(qū)有48字節(jié)數(shù)據(jù)
00002710:換成十進制就是 0x00002710 =10000,即讀取到X1輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X2輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X3輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X4輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X5輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X6輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X7輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X8輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X9輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀到X10輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀到X11輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀到X12輸入口當(dāng)前脈沖計數(shù)值為10000
C1 D9:CRC校驗
X輸入口脈沖計數(shù)清空 (寫入:DO寄存器,命令號:0x0F)
- 描述
清空模塊的X輸入口的脈沖計數(shù)值。
- 例子:清空X1輸入計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 0f 00 40 00 01 01 01 ee 98
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 01:要清空多少路計數(shù),十六進制0x0001=十進制1路
01:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x01=十進制1,寫入1字節(jié)數(shù)據(jù)
01:寫入的數(shù)據(jù),寫1清空
ee 98:CRC校驗
響應(yīng):
//模塊回復(fù)
01 0F 00 40 00 01 95 df
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 01:要清空多少路計數(shù),十六進制0x0001=十進制1路
95 df:CRC校驗
- 例子:清空X1-X12輸入計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 0f 00 40 00 0C 02 ff 0f ea 84
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 0C:要清空多少路計數(shù),十六進制0x000C=十進制12路
02:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x02=十進制2,寫入2字節(jié)數(shù)據(jù)
ff:十六進制0xff=二進制1111 1111=X8計數(shù)清空-X7計數(shù)清空-X6計數(shù)清空-X5計數(shù)清空-X4計數(shù)清空-X3計數(shù)清空-X2計數(shù)清空-X1計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
0f: 十六進制0x0f=二進制0000 1111=X16計數(shù)清空-X15計數(shù)清空-X14計數(shù)清空-X13計數(shù)清空-X12計數(shù)清空-X11計數(shù)清空-X10計數(shù)清空-X9計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
ea 84:CRC校驗
響應(yīng):
//模塊回復(fù)
01 0F 00 40 00 0C 54 1A
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 0C:要清空多少路計數(shù),十六進制0x000C=十進制12路
54 1A:CRC校驗
- 例子:指定清空X1,X4,X8,X12,X24輸入計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 0f 00 40 00 18 03 85 08 80 16 39
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 18:要清空多少路計數(shù),十六進制0x0018=十進制24路
03:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x03=十進制3,寫入3字節(jié)數(shù)據(jù)
85:十六進制0x85=二進制1000 1001=X8計數(shù)清空-X7計數(shù)清空-X6計數(shù)清空-X5計數(shù)清空-X4計數(shù)清空-X3計數(shù)清空-X2計數(shù)清空-X1計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
08: 十六進制0x08=二進制0000 1000=X16計數(shù)清空-X15計數(shù)清空-X14計數(shù)清空-X13計數(shù)清空-X12計數(shù)清空-X11計數(shù)清空-X10計數(shù)清空-X9計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
80: 十六進制0x80=二進制1000 0000=X24計數(shù)清空-X23計數(shù)清空-X22計數(shù)清空-X21計數(shù)清空-X20計數(shù)清空-X19計數(shù)清空-X18計數(shù)清空-X17計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
16 39:CRC校驗
響應(yīng):
//模塊回復(fù)
01 0F 00 40 00 18 54 15
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 18:操作了多少路計數(shù),十六進制0x0018=十進制24路
54 15:CRC校驗
Y輸出口ON/OFF寫入 (寫入:DO寄存器,命令號:0x0F)
- 描述
用于控制模塊Y輸出點的開關(guān)狀態(tài)。
- 例子:控制Y1當(dāng)前輸出ON/OFF的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 0f 00 00 00 01 01 01 ef 57
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 01:要寫多少路,十六進制0x0001=十進制1,寫1路
01:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x01=十進制1,寫入1字節(jié)數(shù)據(jù)
01:寫入的數(shù)據(jù),0x01換算成二進制00000001 = Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1輸出狀態(tài),ON=0,OFF=1
ef 57:CRC校驗
響應(yīng):
//模塊回復(fù)
01 0F 00 00 00 01 94 0B
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 01:寫了多少路,十六進制0x0001=十進制1,寫1路
94 0B:CRC校驗
- 例子:控制Y1-Y8當(dāng)前輸出ON/OFF的請求&響應(yīng)報文
//將Y1,Y2,Y8輸出ON,其他路輸出OFF
請求:
發(fā)送數(shù)據(jù)(HEX): 01 0f 00 00 00 08 01 83 bf 34
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 08:要寫多少路,十六進制0x0008=十進制8,寫8路
01:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x01=十進制1,寫入1字節(jié)數(shù)據(jù)
83:寫入的數(shù)據(jù),0x83換算成二進制10000011 = Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1輸出狀態(tài),ON=0,OFF=1
bf 34:CRC校驗
響應(yīng):
//模塊回復(fù)
01 0F 00 00 00 08 54 0D
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 08:寫了多少路,十六進制0x0008=十進制8,寫8路
54 0D:CRC校驗
- 例子:控制Y1-Y24當(dāng)前輸出ON/OFF的請求&響應(yīng)報文
//將Y1,Y2,Y9,Y24輸出ON,其他路輸出OFF
請求:
發(fā)送數(shù)據(jù)(HEX): 01 0f 00 00 00 18 03 03 01 80 b0 44
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 18:要寫多少路,十六進制0x0018=十進制24,寫24路
03:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x01=十進制1,寫入1字節(jié)數(shù)據(jù)
03:寫入的數(shù)據(jù),0x03換算成二進制00000011 = Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1輸出狀態(tài),ON=0,OFF=1
01:寫入的數(shù)據(jù),0x01換算成二進制00000001 = Y16-Y15-Y14-Y13-Y12-Y11-Y10-Y9輸出狀態(tài),ON=0,OFF=1
80:寫入的數(shù)據(jù),0x80換算成二進制10000000 = Y24-Y23-Y22-Y21-Y20-Y19-Y18-Y17輸出狀態(tài),ON=0,OFF=1
b0 44:CRC校驗
響應(yīng):
//模塊回復(fù)
01 0F 00 00 00 18 55 C1
解釋:
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 18:寫了多少路,十六進制0x0018=十進制24,寫24路
55 C1:CRC校驗
Y輸出口ON/OFF讀取 (讀取:DO寄存器,命令號:0x01)
- 描述
用于讀取當(dāng)前Y輸出口的開關(guān)狀態(tài)。
- 例子:讀Y1當(dāng)前輸出狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 01 00 00 00 01 FD CA
解釋:
01:子站地址
01:指令號,01讀取多路DO
00 00:從哪一路開始讀,00 00=Y1開始讀
00 01:要讀多少路,十六進制0x0001=十進制1,讀取1路
FD CA:CRC校驗
響應(yīng):
//Y1 輸出ON(1)時的回復(fù)
01 01 01 01 90 48
解釋:
01:子站地址
01:指令號,01讀取多路DO
01:后面數(shù)據(jù)區(qū)字節(jié)數(shù)
01:數(shù)據(jù),換算成二進制0x01=0000 0001,對應(yīng)Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1的狀態(tài)
90 48 :CRC校驗
//Y1 輸出OFF(0)的時回復(fù)
01 01 01 00 51 88
解釋:
01:子站地址
01:指令號,01讀取多路DO
01:后面數(shù)據(jù)區(qū)字節(jié)數(shù)
00:數(shù)據(jù),換算成二進制0x00=0000 0000,對應(yīng)Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1的狀態(tài)
51 88 :CRC校驗
- 例子:讀Y1-Y8當(dāng)前輸出狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 01 00 00 00 08 3D CC
解釋:
01:子站地址
01:指令號,01讀取多路DO
00 00:從哪一路開始讀,00 00=Y1開始讀
00 08:要讀多少路,十六進制0x0008=十進制8,讀取8路
3D CC:CRC校驗
響應(yīng):
//Y1,Y2,Y8輸出ON(1),其他輸出OFF(0)時的回復(fù)
01 01 01 83 10 29
解釋:
01:子站地址
01:指令號,01讀取多路DO
01:后面數(shù)據(jù)區(qū)字節(jié)數(shù),0x01=十進制1,后面數(shù)據(jù)區(qū)有1字節(jié)數(shù)據(jù)
83:數(shù)據(jù)區(qū),換算成二進制0x83=1000 0011,對應(yīng)Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1的狀態(tài)
10 29 :CRC校驗
- 例子:讀Y1-Y24當(dāng)前輸出狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 01 00 00 00 18 3C 00
解釋:
01:子站地址
01:指令號,01讀取多路DO
00 00:從哪一路開始讀,00 00=Y1開始讀
00 18:要讀多少路,十六進制0x0018=十進制24,讀取24路
3C00:CRC校驗
響應(yīng):
//Y1,Y2,Y9,Y24輸出ON(1),其他輸出OFF(0)時的回復(fù)
01 01 03 03 01 80 CC 7E
解釋:
01:子站地址
01:指令號,01讀取多路DO
03:后面數(shù)據(jù)區(qū)字節(jié)數(shù),0x03=十進制3,后面數(shù)據(jù)區(qū)有3字節(jié)數(shù)據(jù)
03:數(shù)據(jù),換算成二進制0x03=0000 0011,對應(yīng)Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1的狀態(tài)
01:數(shù)據(jù),換算成二進制0x01=0000 0001,對應(yīng)Y16-Y15-Y14-Y13-Y12-Y11-Y10-Y9的狀態(tài)
80:數(shù)據(jù),換算成二進制0x80=1000 0000,對應(yīng)Y24-Y23-Y22-Y21-Y20-Y19-Y18-Y17的狀態(tài)
CC 7E :CRC校驗
AI模擬量采集讀取(讀取:AI寄存器,命令號:0x04)
- 描述
讀模塊中的輸入型數(shù)據(jù),例如AD模擬采集到的電壓值,電流值,壓力值等。
- 例子:讀當(dāng)前AI通道AI1模擬量輸入值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 04 00 00 00 02 71CB
解釋:
01:子站地址
04:指令號,04讀AI
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 02:要多少個寄存器,因為一個AI通道占用2個寄存器地址,所以這里讀1路模擬量的話,寄存器數(shù)量要填2,十六進制0x0002=十進制2
71CB:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 04 04 00 00 BF 11 4B B8
解釋:
01:子站地址
04:指令號,04讀AI
04:后面跟的數(shù)據(jù)字節(jié)數(shù),0x04=十進制4,后面數(shù)據(jù)區(qū)有4字節(jié)數(shù)據(jù)
0000BF11:換成十進制就是 0x0000BF11 =48913,即讀取到AI1模擬量輸入口當(dāng)前值為48913
4B B8:CRC校驗
- 例子:讀當(dāng)前AI通道AI1-AI4模擬量輸入值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 04 00 00 00 08 F1 CC
解釋:
01:子站地址
04:指令號,04讀AI
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 08:要多少個寄存器,因為一個AI通道占用2個寄存器地址,所以這里讀4路模擬量的話,寄存器數(shù)量要填8,十六進制0x0008=十進制8
F1 CC:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 04 10 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 76 C5
解釋:
01:子站地址
04:指令號,04讀AI
10:后面跟的數(shù)據(jù)字節(jié)數(shù),0x10=十進制16,后面數(shù)據(jù)區(qū)有16字節(jié)數(shù)據(jù)
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI1模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI2模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI3模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI4模擬量輸入口當(dāng)前值為48913
76 C5:CRC校驗
- 例子:讀當(dāng)前AI通道AI1-AI8模擬量輸入值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 04 00 00 00 10 F1 C6
解釋:
01:子站地址
04:指令號,04讀AI
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 10:要多少個寄存器,因為一個AI通道占用2個寄存器地址,所以這里讀8路模擬量的話,寄存器數(shù)量要填16,換算成十六進制就是0x0010
F1 C6:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 04 20 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 C0 F7
解釋:
01:子站地址
04:指令號,04讀AI
20:后面跟的數(shù)據(jù)字節(jié)數(shù),0x20=十進制32,后面數(shù)據(jù)區(qū)有32字節(jié)數(shù)據(jù)
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI1模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI2模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI3模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI4模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI5模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI6模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI7模擬量輸入口當(dāng)前值為48913
00 00 BF 11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI8模擬量輸入口當(dāng)前值為48913
C0 F7:CRC校驗
AO模擬量輸出寫入(寫入:AO寄存器,命令號:0x10)
- 描述
用于設(shè)定DA模擬量輸出值。
- 例子:寫當(dāng)前AO通道AO1模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 10 00 00 00 01 02 10 D2 2B CD
解釋:
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 01:要寫多少路,十六進制0x0001=十進制1,寫1路
02:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x02=十進制2,寫2個字節(jié)
10 D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO1輸出口模擬量輸出值為4306
2B CD:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 10 00 00 00 01 01 C9
解釋:
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 01:寫了多少路,十六進制0x0001=十進制1,寫1路
01 C9:CRC校驗
- 例子:寫當(dāng)前AO通道AO1-AO4模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 10 00 00 00 04 08 10 D2 10 D2 10 D2 10 D2 D6 9D
解釋:
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 04:要寫多少路,十六進制0x0004=十進制4,寫4路
08:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x08=十進制8,寫8個字節(jié)
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO1輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO2輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO3輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO4輸出口模擬量輸出值為4306
D6 9D:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 10 00 00 00 04 C1 CA
解釋:
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 04:寫了多少路,十六進制0x0004=十進制4,寫4路
C1 CA:CRC校驗
- 例子:寫當(dāng)前AO通道AO1-AO8模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 10 00 00 00 08 10 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 E8 0C
解釋:
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 08:要寫多少路,十六進制0x0008=十進制8,寫8路
10:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x10=十進制16,16個字節(jié)
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO1輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO2輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO3輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO4輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO5輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO6輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO7輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO8輸出口模擬量輸出值為4306
E8 0C:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 10 00 00 00 08 C1 CF
解釋:
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 08:寫了多少路,十六進制0x0008=十進制8,寫8路
C1 CF:CRC校驗
AO模擬量輸出讀取(讀取:AO寄存器,命令號:0x03)
- 描述
用于讀取當(dāng)前DA模擬量輸出值。
- 例子:讀當(dāng)前AO通道AO1模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 03 00 00 00 01 84 0A
解釋:
01:子站地址
03:指令號,03讀AO
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 01:要讀多少路,十六進制0x0001=十進制1,讀取1路
84 0A:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 03 02 10 D2 35 D9
解釋:
01:子站地址
03:指令號,03讀AO
02:后面跟的數(shù)據(jù)字節(jié)數(shù)
10 D2:換成十進制就是0x10D2 =十進制4306,即讀取到AO1輸出模擬量當(dāng)前輸出值為4306
35 D9:CRC校驗
- 例子:讀當(dāng)前AO通道AO1-AO4模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 03 00 00 00 04 44 09
解釋:
01:子站地址
03:指令號,03讀AO
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 04:要讀多少路,十六進制0x0004=十進制4,讀取4路
44 09:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 03 08 10 D2 10 D2 10 D2 10 D2 F5 30
解釋:
01:子站地址
03:指令號,03讀AO
08:后面跟的數(shù)據(jù)字節(jié)數(shù)
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO1輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO2輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO3輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO4輸出模擬量當(dāng)前輸出值為4306
F5 30:CRC校驗
- 例子:讀當(dāng)前AO通道AO1-AO8模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 01 03 00 00 00 08 44 0C
解釋:
01:子站地址
03:指令號,03讀AO
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 08:要讀多少路,十六進制0x0008=十進制8,讀取8路
44 0C:CRC校驗
響應(yīng):
接收數(shù)據(jù)(HEX): 01 03 10 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 15 98
解釋:
01:子站地址
03:指令號,03讀AO
10:后面跟的數(shù)據(jù)字節(jié)數(shù),十六進制0x10=十進制16
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO1輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO2輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO3輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO4輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO5輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO6輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO7輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO8輸出模擬量當(dāng)前輸出值為4306
15 98:CRC校驗
MODBUS-TCP協(xié)議詳解
X輸入口開關(guān)量狀態(tài)讀取 (讀取:DI寄存器,命令號:0x02)
- 描述
讀模塊X輸入點的ON/OFF狀態(tài)等。
- 例子:讀X1當(dāng)前輸入狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 02 00 00 00 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
02:指令號,02讀DI
00 00:從哪一路開始讀,0x0000=X1開始讀
00 01:要讀多少路,十六進制0x0001=十進制1,讀取1路
響應(yīng):
//X1 輸入ON(1)時的回復(fù)
00 00 00 00 00 04 01 02 01 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 04:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
02:指令號,02讀DI
01:后面跟的數(shù)據(jù)字節(jié)數(shù)
01:換成二進制就是 0000 0001 =X8-X7-X6-X5-X4-X3-X2-X1輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
//X1 輸入OFF(0)時的回復(fù)
00 00 00 00 00 04 01 02 01 00
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 04:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
02:指令號,02讀DI
01:后面跟的數(shù)據(jù)字節(jié)數(shù)
00:換成二進制就是 0000 0000 =X8-X7-X6-X5-X4-X3-X2-X1輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
- 例子:讀X1-X8當(dāng)前輸入狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 02 00 00 00 08
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
02:指令號,02讀DI
00 00:從哪一路開始讀,0x0000=X1開始讀
00 08:要讀多少路十六進制0x0008=十進制8,讀取8路
響應(yīng):
//X1,X8輸入ON(1)時,其他都輸入OFF(0)時的回復(fù)
00 00 00 00 00 04 01 02 01 81
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 04:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
02:指令號,02讀DI
01:后面跟的數(shù)據(jù)字節(jié)數(shù)
81:換成二進制就是1000 0001 =X8-X7-X6-X5-X4-X3-X2-X1輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
- 例子:讀X1-X24當(dāng)前輸入狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX):00 00 00 00 00 06 01 02 00 00 00 18
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
02:指令號,02讀DI
00 00:從哪一路開始讀,0x0000=X1開始讀
00 18:要讀多少路十六進制0x0018=十進制24,讀取24路
響應(yīng):
//X1,X2,X9,X24 輸入ON(1)時,其他都輸入OFF(0)時的回復(fù)
00 00 00 00 00 06 01 02 03 03 01 80
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
02:指令號,02讀DI
03:后面跟的數(shù)據(jù)字節(jié)數(shù)
03:換成二進制就是 0000 0011 =X8-X7-X6-X5-X4-X3-X2-X1輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
01:換成二進制就是 0000 0001 =X16-X15-X14-X13-X12-X11-X10-X9輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
80:換成二進制就是 1000 0000 =X24-X23-X22-X21-X20-X19-X18-X17輸入口的當(dāng)前狀態(tài)0=OFF,1=ON
X輸入口脈沖計數(shù)讀取 (讀取:AI寄存器,命令號:0x04)
- 描述
讀模塊的X輸入口的脈沖計數(shù)值。
- 例子:讀當(dāng)前X1輸入點脈沖計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 04 00 18 00 02
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
00 18:從哪一路開始讀,0x0018對應(yīng)的是X1脈沖計數(shù)寄存器起始地址
00 02:要讀多少個寄存器,因為一路X脈沖計數(shù)占用2個寄存器地址,所以這里寄存器數(shù)量要填2,十六進制0x0002=十進制2
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 07 01 04 04 00 00 27 10
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 07:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
04:后面跟的數(shù)據(jù)字節(jié)數(shù),0x04=十進制4,后面數(shù)據(jù)區(qū)有4字節(jié)數(shù)據(jù)
00002710:換成十進制就是 0x00002710 =10000,即讀取到X1輸入口當(dāng)前脈沖計數(shù)值為10000
- 例子:讀當(dāng)前X1-X4輸入點脈沖計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 04 00 18 00 08
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
00 18:從哪一路開始讀,0x0018對應(yīng)的是X1脈沖計數(shù)寄存器起始地址
00 08:要讀多少個寄存器,因為一路X脈沖計數(shù)占用2個寄存器地址,這里讀4路,所以這里寄存器數(shù)量要填8,十六進制0x0008=十進制8
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 13 01 04 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 13:后面要發(fā)送的字節(jié)數(shù),0x13=十進制19
01:子站地址
04:指令號,04讀AI
10:后面跟的數(shù)據(jù)字節(jié)數(shù),0x10=十進制16,后面數(shù)據(jù)區(qū)有16字節(jié)數(shù)據(jù)
00002710:換成十進制就是 0x00002710 =10000,即讀取到X1輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X2輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X3輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X4輸入口當(dāng)前脈沖計數(shù)值為10000
- 例子:讀當(dāng)前X1-X8輸入點脈沖計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 04 00 18 00 10
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
00 18:從哪一路開始讀,0x0018對應(yīng)的是X1脈沖計數(shù)寄存器起始地址
00 10:要讀多少個寄存器,因為一路X脈沖計數(shù)占用2個寄存器地址,這里讀8路,所以這里寄存器數(shù)量要填十六進制0x0010=十進制16
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 23 01 04 20 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 23:后面要發(fā)送的字節(jié)數(shù),0x23=十進制35
01:子站地址
04:指令號,04讀AI
20:后面跟的數(shù)據(jù)字節(jié)數(shù),0x20=十進制32,后面數(shù)據(jù)區(qū)有32字節(jié)數(shù)據(jù)
00002710:換成十進制就是 0x00002710 =10000,即讀取到X1輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X2輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X3輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X4輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X5輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X6輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X7輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X8輸入口當(dāng)前脈沖計數(shù)值為10000
- 例子:讀當(dāng)前X1-X12輸入點脈沖計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 04 00 18 00 18
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
00 18:從哪一路開始讀,0x0018對應(yīng)的是X1脈沖計數(shù)寄存器起始地址
00 18:要讀多少個寄存器,因為一路X脈沖計數(shù)占用2個寄存器地址,這里讀12路,所以這里寄存器數(shù)量要填十六進制0x0018=十進制24
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 33 01 04 30 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10 00 00 27 10
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 33:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
30:后面跟的數(shù)據(jù)字節(jié)數(shù),0x30=十進制48,后面數(shù)據(jù)區(qū)有48字節(jié)數(shù)據(jù)
00002710:換成十進制就是 0x00002710 =10000,即讀取到X1輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X2輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X3輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X4輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X5輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X6輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X7輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X8輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀取到X9輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀到X10輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀到X11輸入口當(dāng)前脈沖計數(shù)值為10000
00002710:換成十進制就是 0x00002710 =10000,即讀到X12輸入口當(dāng)前脈沖計數(shù)值為10000
X輸入口脈沖計數(shù)清空 (寫入:DO寄存器,命令號:0x0F)
- 描述
清空模塊的X輸入口的脈沖計數(shù)值。
- 例子:清空X1輸入計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 08 01 0f 00 40 00 01 01 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 08:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 01:要清空多少路計數(shù),十六進制0x0001=十進制1路
01:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x01=十進制1,寫入1字節(jié)數(shù)據(jù)
01:寫入的數(shù)據(jù),寫1清空
響應(yīng):
//模塊回復(fù)
00 00 00 00 00 06 01 0F 00 40 00 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 01:要清空多少路計數(shù),十六進制0x0001=十進制1路
- 例子:清空X1-X12輸入計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 09 01 0f 00 40 00 0C 02 ff 0f
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 09:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 0C:要清空多少路計數(shù),十六進制0x000C=十進制12路
02:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x02=十進制2,寫入2字節(jié)數(shù)據(jù)
ff:十六進制0xff=二進制1111 1111=X8計數(shù)清空-X7計數(shù)清空-X6計數(shù)清空-X5計數(shù)清空-X4計數(shù)清空-X3計數(shù)清空-X2計數(shù)清空-X1計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
0f: 十六進制0x0f=二進制0000 1111=X16計數(shù)清空-X15計數(shù)清空-X14計數(shù)清空-X13計數(shù)清空-X12計數(shù)清空-X11計數(shù)清空-X10計數(shù)清空-X9計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
響應(yīng):
//模塊回復(fù)
00 00 00 00 00 06 01 0F 00 40 00 0C
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 0C:要清空多少路計數(shù),十六進制0x000C=十進制12路
- 例子:指定清空X1,X4,X8,X12,X24輸入計數(shù)值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 0A 01 0f 00 40 00 18 03 85 08 80
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 0A:后面要發(fā)送的字節(jié)數(shù),0x0A=十進制10
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 18:要清空多少路計數(shù),十六進制0x0018=十進制24路
03:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x03=十進制3,寫入3字節(jié)數(shù)據(jù)
85:十六進制0x85=二進制1000 1001=X8計數(shù)清空-X7計數(shù)清空-X6計數(shù)清空-X5計數(shù)清空-X4計數(shù)清空-X3計數(shù)清空-X2計數(shù)清空-X1計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
08: 十六進制0x08=二進制0000 1000=X16計數(shù)清空-X15計數(shù)清空-X14計數(shù)清空-X13計數(shù)清空-X12計數(shù)清空-X11計數(shù)清空-X10計數(shù)清空-X9計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
80: 十六進制0x80=二進制1000 0000=X24計數(shù)清空-X23計數(shù)清空-X22計數(shù)清空-X21計數(shù)清空-X20計數(shù)清空-X19計數(shù)清空-X18計數(shù)清空-X17計數(shù)清空,對應(yīng)的bit位寫1清空,寫0保持不變
響應(yīng):
//模塊回復(fù)
00 00 00 00 00 06 01 0F 00 40 00 18
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 40:從哪一路開始清空,0x00 40是X1計數(shù)清空DO寄存器起始地址
00 18:操作了多少路計數(shù),十六進制0x0018=十進制24路
Y輸出口ON/OFF寫入 (寫入:DO寄存器,命令號:0x0F)
- 描述
用于控制模塊Y輸出點的開關(guān)狀態(tài)。
- 例子:控制Y1當(dāng)前輸出ON/OFF的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 08 01 0f 00 00 00 01 01 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 08:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 01:要寫多少路,十六進制0x0001=十進制1,寫1路
01:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x01=十進制1,寫入1字節(jié)數(shù)據(jù)
01:寫入的數(shù)據(jù),0x01換算成二進制00000001 = Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1輸出狀態(tài),ON=0,OFF=1
響應(yīng):
//模塊回復(fù)
00 00 00 00 00 06 01 0F 00 00 00 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 01:寫了多少路,十六進制0x0001=十進制1,寫1路
- 例子:控制Y1-Y8當(dāng)前輸出ON/OFF的請求&響應(yīng)報文
//將Y1,Y2,Y8輸出ON,其他路輸出OFF
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 08 01 0f 00 00 00 08 01 83
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 08:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 08:要寫多少路,十六進制0x0008=十進制8,寫8路
01:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x01=十進制1,寫入1字節(jié)數(shù)據(jù)
83:寫入的數(shù)據(jù),0x83換算成二進制10000011 = Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1輸出狀態(tài),ON=0,OFF=1
響應(yīng):
//模塊回復(fù)
00 00 00 00 00 06 01 0F 00 00 00 08
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 08:寫了多少路,十六進制0x0008=十進制8,寫8路
- 例子:控制Y1-Y24當(dāng)前輸出ON/OFF的請求&響應(yīng)報文
//將Y1,Y2,Y9,Y24輸出ON,其他路輸出OFF
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 0a 01 0f 00 00 00 18 03 03 01 80
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 0a:后面要發(fā)送的字節(jié)數(shù),0x0a=十進制10
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 18:要寫多少路,十六進制0x0018=十進制24,寫24路
03:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x01=十進制1,寫入1字節(jié)數(shù)據(jù)
03:寫入的數(shù)據(jù),0x03換算成二進制00000011 = Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1輸出狀態(tài),ON=0,OFF=1
01:寫入的數(shù)據(jù),0x01換算成二進制00000001 = Y16-Y15-Y14-Y13-Y12-Y11-Y10-Y9輸出狀態(tài),ON=0,OFF=1
80:寫入的數(shù)據(jù),0x80換算成二進制10000000 = Y24-Y23-Y22-Y21-Y20-Y19-Y18-Y17輸出狀態(tài),ON=0,OFF=1
響應(yīng):
//模塊回復(fù)
00 00 00 00 00 06 01 0F 00 00 00 18
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
0f:指令號,0x0f=十進制15,寫多路DO
00 00:從哪一路開始寫,00 00=Y1開始寫
00 18:寫了多少路,十六進制0x0018=十進制24,寫24路
Y輸出口ON/OFF讀取 (讀取:DO寄存器,命令號:0x01)
- 描述
用于讀取模塊Y輸出點的開關(guān)狀態(tài)。
- 例子:讀Y1當(dāng)前輸出狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 01 00 00 00 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
01:指令號,01讀取多路DO
00 00:從哪一路開始讀,00 00=Y1開始讀
00 01:要讀多少路,十六進制0x0001=十進制1,讀取1路
響應(yīng):
//Y1 輸出ON(1)時的回復(fù)
00 00 00 00 00 04 01 01 01 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 04:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
01:指令號,01讀取多路DO
01:后面數(shù)據(jù)區(qū)字節(jié)數(shù)
01:數(shù)據(jù),換算成二進制0x01=0000 0001,對應(yīng)Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1的狀態(tài)
//Y1 輸出OFF(0)的時回復(fù)
00 00 00 00 00 04 01 01 01 00
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 04:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
01:指令號,01讀取多路DO
01:后面數(shù)據(jù)區(qū)字節(jié)數(shù)
00:數(shù)據(jù),換算成二進制0x00=0000 0000,對應(yīng)Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1的狀態(tài)
- 例子:讀Y1-Y8當(dāng)前輸出狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 01 00 00 00 08
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
01:指令號,01讀取多路DO
00 00:從哪一路開始讀,00 00=Y1開始讀
00 08:要讀多少路,十六進制0x0008=十進制8,讀取8路
響應(yīng):
//Y1,Y2,Y8輸出ON(1),其他輸出OFF(0)時的回復(fù)
00 00 00 00 00 04 01 01 01 83
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 04:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
01:指令號,01讀取多路DO
01:后面數(shù)據(jù)區(qū)字節(jié)數(shù),0x01=十進制1,后面數(shù)據(jù)區(qū)有1字節(jié)數(shù)據(jù)
83:數(shù)據(jù)區(qū),換算成二進制0x83=1000 0011,對應(yīng)Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1的狀態(tài)
- 例子:讀Y1-Y24當(dāng)前輸出狀態(tài)的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 01 00 00 00 18
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
01:指令號,01讀取多路DO
00 00:從哪一路開始讀,00 00=Y1開始讀
00 18:要讀多少路,十六進制0x0018=十進制24,讀取24路
響應(yīng):
//Y1,Y2,Y9,Y24輸出ON(1),其他輸出OFF(0)時的回復(fù)
00 00 00 00 00 06 01 01 03 03 01 80
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
01:指令號,01讀取多路DO
03:后面數(shù)據(jù)區(qū)字節(jié)數(shù),0x03=十進制3,后面數(shù)據(jù)區(qū)有3字節(jié)數(shù)據(jù)
03:數(shù)據(jù),換算成二進制0x03=0000 0011,對應(yīng)Y8-Y7-Y6-Y5-Y4-Y3-Y2-Y1的狀態(tài)
01:數(shù)據(jù),換算成二進制0x01=0000 0001,對應(yīng)Y16-Y15-Y14-Y13-Y12-Y11-Y10-Y9的狀態(tài)
80:數(shù)據(jù),換算成二進制0x80=1000 0000,對應(yīng)Y24-Y23-Y22-Y21-Y20-Y19-Y18-Y17的狀態(tài)
AI模擬量采集讀取(讀取:AI寄存器,命令號:0x04)
- 描述
讀模塊中的輸入型數(shù)據(jù),例如AD模擬采集到的電壓值,電流值,壓力值等。
- 例子:讀當(dāng)前AI通道AI1模擬量輸入值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 04 00 00 00 02
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 02:要多少個寄存器,因為一個AI通道占用2個寄存器地址,所以這里讀1路模擬量的話,寄存器數(shù)量要填2,十六進制0x0002=十進制2
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 07 01 04 04 00 00 BF 11
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 07:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
04:后面跟的數(shù)據(jù)字節(jié)數(shù),0x04=十進制4,后面數(shù)據(jù)區(qū)有4字節(jié)數(shù)據(jù)
0000BF11:換成十進制就是 0x0000BF11 =48913,即讀取到AI1模擬量輸入口當(dāng)前值為48913
- 例子:讀當(dāng)前AI通道AI1-AI4模擬量輸入值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 04 00 00 00 08
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 08:要多少個寄存器,因為一個AI通道占用2個寄存器地址,所以這里讀4路模擬量的話,寄存器數(shù)量要填8,十六進制0x0008=十進制8
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 13 01 04 10 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 13:后面要發(fā)送的字節(jié)數(shù),0x13=十進制19
01:子站地址
04:指令號,04讀AI
10:后面跟的數(shù)據(jù)字節(jié)數(shù),0x10=十進制16,后面數(shù)據(jù)區(qū)有16字節(jié)數(shù)據(jù)
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI1模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI2模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI3模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI4模擬量輸入口當(dāng)前值為48913
- 例子:讀當(dāng)前AI通道AI1-AI8模擬量輸入值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 04 00 00 00 10
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
04:指令號,04讀AI
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 10:要多少個寄存器,因為一個AI通道占用2個寄存器地址,所以這里讀8路模擬量的話,寄存器數(shù)量要填16,換算成十六進制就是0x0010
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 23 01 04 20 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11 00 00 BF 11
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 23:后面要發(fā)送的字節(jié)數(shù),0x23=十進制35
01:子站地址
04:指令號,04讀AI
20:后面跟的數(shù)據(jù)字節(jié)數(shù),0x20=十進制32,后面數(shù)據(jù)區(qū)有32字節(jié)數(shù)據(jù)
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI1模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI2模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI3模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI4模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI5模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI6模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI7模擬量輸入口當(dāng)前值為48913
0000BF11:數(shù)據(jù)區(qū),換成十進制就是 0x0000BF11 =48913,即讀取到AI8模擬量輸入口當(dāng)前值為48913
AO模擬量輸出寫入(寫入:AO寄存器,命令號:0x10)
- 描述
用于設(shè)定DA模擬量輸出值。
- 例子:寫當(dāng)前AO通道AO1模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 09 01 10 00 00 00 01 02 10 D2
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 09:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 01:要寫多少路,十六進制0x0001=十進制1,寫1路
02:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x02=十進制2,寫2個字節(jié)
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO1輸出口模擬量輸出值為4306
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 10 00 00 00 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 01:寫了多少路,十六進制0x0001=十進制1,寫1路
- 例子:寫當(dāng)前AO通道AO1-AO4模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 0f 01 10 00 00 00 04 08 10 D2 10 D2 10 D2 10 D2
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 0f:后面要發(fā)送的字節(jié)數(shù),0x0f=十進制15
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 04:要寫多少路,十六進制0x0004=十進制4,寫4路
08:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x08=十進制8,寫8個字節(jié)
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO1輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO2輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO3輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO4輸出口模擬量輸出值為4306
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 10 00 00 00 04
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 04:寫了多少路,十六進制0x0004=十進制4,寫4路
- 例子:寫當(dāng)前AO通道AO1-AO8模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 17 01 10 00 00 00 08 10 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 17:后面要發(fā)送的字節(jié)數(shù),0x17=十進制23
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 08:要寫多少路,十六進制0x0008=十進制8,寫8路
10:后面要寫入的數(shù)據(jù)字節(jié)數(shù),0x10=十進制16,16個字節(jié)
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO1輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO2輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO3輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO4輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO5輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO6輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO7輸出口模擬量輸出值為4306
10D2:要寫入的AO輸出值,0x10D2=十進制4306,即寫入AO8輸出口模擬量輸出值為4306
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 10 00 00 00 08
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
10:指令號,0x10=十進制16,寫AO
00 00:從哪一路開始寫,0x0000=AIO1開始寫
00 08:寫了多少路,十六進制0x0008=十進制8,寫8路
AO模擬量輸出讀取(讀取:AO寄存器,命令號:0x03)
- 描述
用于讀取當(dāng)前DA模擬量輸出值。
- 例子:讀當(dāng)前AO通道AO1模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 03 00 00 00 01
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
03:指令號,03讀AO
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 01:要讀多少路,十六進制0x0001=十進制1,讀取1路
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 05 01 03 02 10 D2
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 05:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
03:指令號,03讀AO
02:后面跟的數(shù)據(jù)字節(jié)數(shù)
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO1輸出模擬量當(dāng)前輸出值為4306
- 例子:讀當(dāng)前AO通道AO1-AO4模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 03 00 00 00 04
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
03:指令號,03讀AO
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 04:要讀多少路,十六進制0x0004=十進制4,讀取4路
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 0B 01 03 08 10 D2 10 D2 10 D2 10 D2
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 0B:后面要發(fā)送的字節(jié)數(shù),0x000B=十進制11
01:子站地址
03:指令號,03讀AO
08:后面跟的數(shù)據(jù)字節(jié)數(shù)
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO1輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO2輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO3輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO4輸出模擬量當(dāng)前輸出值為4306
- 例子:讀當(dāng)前AO通道AO1-AO8模擬量輸出值的請求&響應(yīng)報文
請求:
發(fā)送數(shù)據(jù)(HEX): 00 00 00 00 00 06 01 03 00 00 00 08
解釋:
00 00:TID 傳輸標(biāo)識符(用于上位機傳輸報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 06:后面要發(fā)送的字節(jié)數(shù)
01:子站地址
03:指令號,03讀AO
00 00:從哪一路開始讀,0x0000=AIO1開始讀
00 08:要讀多少路,十六進制0x0008=十進制8,讀取8路
響應(yīng):
接收數(shù)據(jù)(HEX): 00 00 00 00 00 13 01 03 10 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2 10 D2
解釋:
00 00:TID 傳輸標(biāo)識符(用于模塊回送報文序列號),也可為0
00 00:PID 協(xié)議標(biāo)識符,默認(rèn)0
00 13:后面要發(fā)送的字節(jié)數(shù),0x0013=十進制19
01:子站地址
03:指令號,03讀AO
10:后面跟的數(shù)據(jù)字節(jié)數(shù),十六進制0x10=十進制16
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO1輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO2輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO3輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO4輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO5輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO6輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO7輸出模擬量當(dāng)前輸出值為4306
10 D2:換成十進制就是 0x10D2 =十進制4306,即讀取到AO8輸出模擬量當(dāng)前輸出值為4306