上一篇我們聊了Modbus最常用的四個(gè)讀取數(shù)據(jù)的功能碼,它們分別是:
● 01(讀線圈): 讀取設(shè)備內(nèi)部用于控制輸出的開關(guān)狀態(tài),比如燈亮不亮。
● 02(讀離散輸入):讀取設(shè)備接收到的外部開關(guān)信號(hào),比如按鈕是否被按下。
● 03(讀保持寄存器): 讀取設(shè)備內(nèi)部的配置參數(shù)或設(shè)定值,比如設(shè)定溫度或目標(biāo)轉(zhuǎn)速。
● 04(讀輸入寄存器):讀取設(shè)備的實(shí)時(shí)測(cè)量數(shù)據(jù)或動(dòng)態(tài)運(yùn)行狀態(tài)。
今天我們一起來看看寫入數(shù)據(jù)的功能碼。畢竟工控嘛,只能看不能控可不行,對(duì)吧?
Modbus功能碼人話版
功能碼05 - 寫單個(gè)線圈
(Write Single Coil)
有時(shí)也被稱為強(qiáng)制單線圈(Force Single Coil),但還是“寫單個(gè)線圈”這個(gè)說法更好理解。
還記得功能碼01是用來讀取開關(guān)量的嗎?那功能碼05就是用來改變這個(gè)開關(guān)量狀態(tài)的。
這就好比你對(duì)智能家居下達(dá)指令:"把客廳的燈打開!"或者"把空調(diào)關(guān)掉!"
● 寫入值 = 0xFF00 表示開(ON)
● 寫入值 = 0x0000 表示關(guān)(OFF)
以上兩個(gè)值是Modbus協(xié)議推薦的值。為什么不是直接用1和0呢?這是為了提高數(shù)據(jù)傳輸?shù)目煽啃裕孟嗖钶^大的特殊數(shù)值來確保指令的準(zhǔn)確性。
實(shí)際使用中,設(shè)備支持的寫入值應(yīng)以說明書為準(zhǔn)。
功能碼06 - 寫單個(gè)保持寄存器
(Write Single Register)
還記得功能碼03可以讀取保持寄存器的值嗎?功能碼06就是用來修改這些值的。請(qǐng)注意,修改的一般是設(shè)備參數(shù)或設(shè)定值。
例如:
● 把空調(diào)的目標(biāo)溫度從25度改成26度
● 把傳送帶的目標(biāo)速度從50轉(zhuǎn)/分鐘改成60轉(zhuǎn)/分鐘
它就像是一個(gè)"設(shè)定按鈕",每次只能調(diào)整一個(gè)參數(shù)。
功能碼15 - 寫多個(gè)線圈
(Write Multiple Coils)
功能碼05每次只能控制一個(gè)開關(guān),而Modbus協(xié)議是請(qǐng)求-響應(yīng)這種一問一答式的協(xié)議,當(dāng)需要控制多個(gè)狀態(tài)時(shí),多次一問一答很低效。
功能碼15則可以一次性控制多個(gè)開關(guān)。
想象一下這個(gè)場(chǎng)景:
你要回家了,想一次性關(guān)掉公司所有的燈。與其一個(gè)個(gè)關(guān)(用功能碼05發(fā)送多次),不如用功能碼15一次性發(fā)送"全部關(guān)閉"的指令,既快速又高效。
而且,功能碼15支持混合狀態(tài)設(shè)置,說人話就是,同一條報(bào)文中,可以靈活設(shè)置多個(gè)開關(guān)量的不同狀態(tài),不一定非要全部開啟或全部關(guān)閉。
例如,1、3、5號(hào)燈開,2、4、6號(hào)燈關(guān)。這樣的控制方式功能碼15同樣支持。
功能碼16 - 寫多個(gè)保持寄存器
(Write Multiple Registers)
同樣的道理,功能碼16是功能碼06的"批量版本"。它能一次性修改多個(gè)參數(shù)值。
舉個(gè)例子:空調(diào)系統(tǒng)需要同時(shí)設(shè)置:
● 目標(biāo)溫度
● 風(fēng)速大小
● 運(yùn)行模式
● 定時(shí)時(shí)間
用功能碼16就能一次性搞定,不用發(fā)送四次功能碼06的寫入命令。
極簡(jiǎn)總結(jié)
Modbus協(xié)議的功能碼可以按照讀取和寫入兩大類分類:
01~04都是用于讀取數(shù)據(jù):
● 01 讀取開關(guān)量
● 02 讀取外部開關(guān)信號(hào)
● 03 讀取設(shè)備設(shè)定參數(shù)
● 04 讀取實(shí)時(shí)測(cè)量數(shù)據(jù)
05,06,15,16用于寫入數(shù)據(jù):
● 05 寫單個(gè)開關(guān)量
● 15 寫多個(gè)開關(guān)量
● 06 寫單個(gè)設(shè)定值
● 16 寫多個(gè)設(shè)定值
看到這里你或許會(huì)有疑問,為什么介紹完05和06直接就跳到15和16了?07~14這些功能碼呢?16之后還有沒有了?










共0條 [查看全部] 網(wǎng)友評(píng)論