Modbus是一種通信協(xié)議,最初是為工業(yè)自動化系統(tǒng)設(shè)計(jì)的,用于在不同設(shè)備之間進(jìn)行數(shù)據(jù)交換和通信。Modbus通信協(xié)議廣泛應(yīng)用于工業(yè)控制領(lǐng)域,而功能碼是Modbus協(xié)議中用來定義數(shù)據(jù)交換操作的。
線圈寄存器:可以類比為開關(guān)量,每個(gè)bit都對應(yīng)一個(gè)信號的開關(guān)狀態(tài)。所以一個(gè)字節(jié)可以同時(shí)控制8路的信號。比如控制外部8路io的高低。 線圈寄存器支持讀也支持寫,比如控制或者讀取電磁閥的開關(guān)志狀態(tài)。對應(yīng)的功能碼有:0x01 0x05 0x0f
離散輸入寄存器:離散輸入寄存器相當(dāng)于線圈寄存器的只讀模式,每個(gè)bit表示一個(gè)開關(guān)量,而他的開關(guān)量只能讀取,不能夠?qū)懭搿V荒芡ㄟ^外部設(shè)定改變輸入狀態(tài),比如我可以讀取外部按鍵的按下還是松開,但是控制不了按鍵。對應(yīng)的功能碼有:0x02
保持寄存器:寄存器的單位不再是bit而是兩個(gè)byte,也就是可以存放具體的數(shù)據(jù)量的,并且是可讀寫的。比如我不到那可以讀取傳感器報(bào)警上限下限,也可以設(shè)置它的大小。對應(yīng)的功能碼有:0x03 0x06 0x10
輸入寄存器:輸入寄存器相當(dāng)于保持寄存器的只讀模式,也是只支持讀而不能寫。一個(gè)寄存器也是占據(jù)兩個(gè)字節(jié)的空間。比如通過讀取輸入寄存器獲取現(xiàn)在的模擬量采樣值。對應(yīng)的功能碼有 0x04
讀取功能碼(0x04)
讀取功能碼(0x04)是Modbus02功能碼中最常用的功能碼之一,它用于從設(shè)備中讀取數(shù)據(jù)。使用讀取功能碼(0x04)時(shí),您需要指定要讀取的寄存器地址和要讀取的字節(jié)數(shù),然后設(shè)備會返回指定地址的數(shù)據(jù)。
寫入功能碼(0x06)
寫入功能碼(0x06)用于向設(shè)備中寫入數(shù)據(jù)。使用寫入功能碼(0x06)時(shí),您需要指定要寫入的寄存器地址和要寫入的字節(jié)數(shù),然后設(shè)備會將指定地址的數(shù)據(jù)寫入設(shè)備中。
狀態(tài)查詢功能碼(0x08)
狀態(tài)查詢功能碼(0x08)用于查詢設(shè)備的當(dāng)前狀態(tài)。使用狀態(tài)查詢功能碼(0x08)時(shí),您需要指定要查詢的狀態(tài)碼,然后設(shè)備會返回指定狀態(tài)碼的當(dāng)前值。
報(bào)文查詢功能碼(0x0A)
報(bào)文查詢功能碼(0x0A)用于查詢設(shè)備的報(bào)文信息。使用報(bào)文查詢功能碼(0x0A)時(shí),您需要指定要查詢的報(bào)文碼,然后設(shè)備會返回指定報(bào)文碼的當(dāng)前值。
狀態(tài)控制功能碼(0x0C)
狀態(tài)控制功能碼(0x0C)用于控制設(shè)備的狀態(tài)。使用狀態(tài)控制功能碼(0x0C)時(shí),您需要指定要控制的狀態(tài)碼,然后設(shè)備會將指定狀態(tài)碼的值更改為您指定的值。
報(bào)文控制功能碼(0x0E)
報(bào)文控制功能碼(0x0E)用于控制設(shè)備的報(bào)文信息。使用報(bào)文控制功能碼(0x0E)時(shí),您需要指定要控制的報(bào)文碼,然后設(shè)備會將指定報(bào)文碼的值更改為您指定的值。
Modbus協(xié)議在工業(yè)控制領(lǐng)域中的靈活性和實(shí)用性,為設(shè)備間的數(shù)據(jù)交換和控制操作提供了高效的解決方案。