讀線圈狀態(tài)
讀取從設(shè)備的線圈或離散量輸出狀態(tài)登馒,即DO(Discrete Output,離散輸出)
請(qǐng)求碼:01
地址范圍:00000~00016
報(bào)文如下:Tx:006700-44 D4 00 00 00 06 01 01 00 00 00 11
從起始地址0000開始讀取17個(gè)線圈的狀態(tài)
44 D4:標(biāo)識(shí)傳輸標(biāo)識(shí)
00 00:協(xié)議標(biāo)識(shí)
00 06:長(zhǎng)度標(biāo)識(shí)
01:?jiǎn)挝粯?biāo)識(shí)(從站標(biāo)識(shí))
01:功能碼
00 00:起始地址
00 11:線圈數(shù)量
響應(yīng)報(bào)文:Rx:006701-44 D4 00 00 00 06 01 01 03 AB 92 00
如果查詢正確且成功咆槽,響應(yīng)中功能碼與請(qǐng)求中功能碼相同陈轿,否則功能碼+0x80返回。其中03代表長(zhǎng)度秦忿,后面三個(gè)字節(jié)麦射,將AB 92 00轉(zhuǎn)成2進(jìn)制為:
101010111001001000000000
響應(yīng)報(bào)文中每個(gè)線圈占用一個(gè)bit,一個(gè)寄存器占16位兩個(gè)字節(jié)長(zhǎng)度灯谣,即一個(gè)字節(jié)表示8個(gè)線圈的狀態(tài)潜秋,1=on,0=off胎许。Modbus使用低位保存在高位地址的方式峻呛,所以AB 92 00應(yīng)轉(zhuǎn)換為:110101010100100100000000
讀取離散量輸入值
讀取離散輸入DI(Discrete Input)的on/off狀態(tài),可讀取的1-2000個(gè)連續(xù)的離散輸入量狀態(tài)辜窑。
請(qǐng)求碼:02
請(qǐng)求報(bào)文:Tx:006706-55 07 00 00 00 06 01 02 00 00 00 11
響應(yīng)報(bào)文:001-Rx:00 01 00 00 00 06 01 02 03 AB 92 00
查詢某個(gè)線圈的狀態(tài)钩述,例如:查詢地址為00009線圈的狀態(tài)00 01 00 00 00 06 01 02 00 09 00 01;
響應(yīng):003-Rx:00 01 00 00 00 04 01 02 01 01
讀取保持寄存器值
讀取保持寄存器的內(nèi)容穆碎。寄存器數(shù)量占兩個(gè)字節(jié)牙勘,取值范圍0x0001~0x007D(125)最多讀取連續(xù)125個(gè)寄存器的內(nèi)容。Modbus的保持寄存器和輸入寄存器以字為單位所禀。
請(qǐng)求碼:03
請(qǐng)求報(bào)文:000-Tx:00 01 00 00 00 06 01 03 00 00 00 11方面,讀取17個(gè)寄存器的數(shù)值
響應(yīng)報(bào)文:001-Rx:00 01 00 00 00 25 01 03 22 00 0F 00 0E 00 0D 00 0C 00 0B 00 0A 00 09 00 08 00 07 00 06 00 05 00 04 00 03 00 02 00 01 00 01 00 02
其中功能碼后面的數(shù)字代表返回的位數(shù)0x22 = 34個(gè)字節(jié)放钦,共34/2=17個(gè)寄存器,每個(gè)寄存器的值由兩個(gè)字標(biāo)識(shí)葡幸。
讀取輸入寄存器值
讀取從設(shè)備輸入寄存器的內(nèi)容最筒。
請(qǐng)求碼:04
請(qǐng)求報(bào)文:010-Tx:00 01 00 00 00 06 01 04 00 00 00 11,讀取17個(gè)寄存器的值蔚叨。
響應(yīng):011-Rx:00 01 00 00 00 25 01 04 22 00 DF 12 23 34 56 1F 43 00 11 11 22 33 44 55 66 77 88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
響應(yīng)報(bào)文中的字段含義同上床蜘。
寫單個(gè)線圈
用于將單個(gè)線圈寄存器(或離散輸入)設(shè)置為ON或則OFF狀態(tài),支持廣播模式蔑水。在廣播模式下所有從站設(shè)備的同一地址的值將被統(tǒng)一修改邢锯。
請(qǐng)求碼:05
請(qǐng)求報(bào)文:080-Tx:00 01 00 00 00 06 01 05 00 09 FF 00 ,起始地址由兩個(gè)字節(jié)構(gòu)成搀别;目標(biāo)數(shù)據(jù)也由兩個(gè)字節(jié)構(gòu)成丹擎,只能取值:0xFF00或0x0000
響應(yīng)報(bào)文:081-Rx:00 01 00 00 00 06 01 05 00 09 FF 00(如果設(shè)置成功,響應(yīng)報(bào)文與查詢報(bào)文相同)
寫單個(gè)保持寄存器
更新從設(shè)備的單個(gè)保持寄存器的值歇父,支持廣播模式蒂培。
請(qǐng)求碼:06
請(qǐng)求報(bào)文:008-Tx:00 01 00 00 00 06 01 06 00 09 09 03榜苫,將地址為00009的寄存器設(shè)置為09 03。
響應(yīng)報(bào)文:設(shè)置成功后媳荒,響應(yīng)報(bào)文和請(qǐng)求報(bào)文內(nèi)容相同驹饺。例如:
寫多個(gè)線圈
將連續(xù)的多個(gè)線圈或離散輸出設(shè)置為on/off狀態(tài)。支持廣播模式鱼炒。起始地址兩個(gè)字節(jié)蝌借,寄存器數(shù)量由兩個(gè)字節(jié)構(gòu)成。
請(qǐng)求碼:15(0x0F)
測(cè)試內(nèi)容:設(shè)置從00005開始到00016的狀態(tài)如下(使用大端字符序存儲(chǔ))
由于一共12位硬爆,所以需要2個(gè)字節(jié)16位存儲(chǔ)缀磕,起始地址從00005開始計(jì)算,所以二進(jìn)制表示為10101011 00000111糟把,十六進(jìn)制為AB 07牲剃。
請(qǐng)求報(bào)文:017-Tx:00 01 00 00 00 09 01 0F 00 05 00 0C 02 AB 07
0F:請(qǐng)求碼,一個(gè)字節(jié)
00 05:寄存器起始地址缠犀,2個(gè)字節(jié)
00 0C:寄存器個(gè)數(shù)聪舒,2個(gè)字節(jié)
02:后續(xù)字節(jié)數(shù)
AB 07:具體設(shè)置的狀態(tài)值。
響應(yīng)報(bào)文:018-Rx:00 01 00 00 00 06 01 0F 00 05 00 0C(如果設(shè)置成功箱残,響應(yīng)報(bào)文包括請(qǐng)求碼,起始地址和寄存器個(gè)數(shù))
寫多個(gè)保持寄存器
用于設(shè)置或?qū)懭霃脑O(shè)備保持寄存器的多個(gè)連續(xù)的地址快(1123)燎悍,支持廣播模式盼理。起始地址由2個(gè)字節(jié);寄存器數(shù)量2個(gè)字節(jié)勾哩,取值范圍0x00010x007B举哟。
請(qǐng)求碼:10
測(cè)試內(nèi)容:測(cè)試地址從00010開始到00016結(jié)束迅矛。設(shè)置00010~00016地址范圍內(nèi)寄存器的值如下
請(qǐng)求報(bào)文:033-Tx:00 01 00 00 00 13 01 10 00 0A 00 06 0C 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F
00 13:后續(xù)字節(jié)長(zhǎng)度(換算為十進(jìn)制19)
01:?jiǎn)挝粯?biāo)識(shí)
10:請(qǐng)求碼
00 0A:寄存器起始地址
00 06:寫入寄存器數(shù)量
0C:后續(xù)字節(jié)長(zhǎng)度
響應(yīng)報(bào)文:034-Rx:00 01 00 00 00 06 01 10 00 0A 00 06(設(shè)置成功后響應(yīng)報(bào)文中包含功能碼秽褒,起始地址,寄存器個(gè)數(shù))
掩碼寫入寄存器
使用AND掩碼和OR掩碼更新指定寄存器的內(nèi)容庐椒÷煊唬可以用來(lái)設(shè)置或者清除寄存器中各個(gè)位。
請(qǐng)求碼:22(0x16)
請(qǐng)求報(bào)文:Tx:000176-2D 79 00 00 00 08 01 16 00 00 F9 5A FF AA
16:請(qǐng)求碼
00 00:寄存器地址
F9 5A:and掩碼
FF AA:or 掩碼
通過(guò)and和or的計(jì)算公式:
Result = (Current Contents AND And_Mask) OR (Or_Mask AND (NOT And_Mask))
響應(yīng)報(bào)文:001-Rx:00 01 00 00 00 08 01 16 00 00 F9 5A FF AA(設(shè)置成功后響應(yīng)報(bào)文中包含功能碼棱诱,寄存器地址,and掩碼和or掩碼)
讀寫多個(gè)寄存器
將讀和寫功能放在同一個(gè)modbus會(huì)話里炬灭。
請(qǐng)求碼:23(0x17)
請(qǐng)求報(bào)文:Tx:000190-35 2B 00 00 00 1B 01 17 00 00 00 08 00 00 00 08 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
17:功能碼
00 00:讀寄存器的起始地址靡菇,占2字節(jié)
00 08:讀寄存器的個(gè)數(shù),占2字節(jié)
00 00:寫寄存器的起始地址提前,占2字節(jié)
00 08:寫寄存器的個(gè)數(shù)泳唠,占2字節(jié)
10:后續(xù)字節(jié),1個(gè)字節(jié)
00 00 00 00 00 00…:從起始地址開始每個(gè)寄存器設(shè)置的值拓哺,占2字節(jié)。
響應(yīng)報(bào)文:001-Rx:00 01 00 00 00 13 01 17 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00(設(shè)置成功后響應(yīng)報(bào)文中包含功能碼呻征,后續(xù)字節(jié)數(shù)烤礁,每個(gè)寄存器的值脚仔。)