Modbus 協議定義了許多功能碼,這些功能碼控制著設備如何讀取或寫入數據。常見的功能碼及其應用如下:
1. 0x01 - 讀線圈狀態(Read Coils):讀取設備的開關狀態,常用於監控開關或繼電器。
2. 0x02 - 讀離散輸入狀態(Read Discrete Inputs):監控設備的二進制輸入,例如按鈕或傳感器狀態。
3. 0x03 - 讀保持寄存器(Read Holding Registers):監控設備的運行參數或狀態,常用於讀取設備的設置或運行數據。
4. 0x04 - 讀輸入寄存器(Read Input Registers):用於監控模擬量輸入,例如溫度、壓力等傳感器數據。
5. 0x05 - 寫單個線圈(Write Single Coil):控制單個設備的開關狀態。
6. 0x06 - 寫單個保持寄存器(Write Single Holding Register):修改設備參數,例如速度或溫度設定。
7. 0x0F (15) - 寫多個線圈(Write Multiple Coils):一次控制多個設備的開關狀態。
8. 0x10 (16) - 寫多個保持寄存器(Write Multiple Holding Registers):同時設定多個設備的運行參數。
5-4、什麼是Modicon Format?
5-5、Modbus功能碼,位置加40001 / 30001是什麼意思呢?
根據Modicon Format,Modbus 透過不同的位址範圍來標識不同類型的寄存器,例如範圍30001-39999是輸入寄存器(功能碼04),40001-49999是保持寄存器(功能碼03)。當使用者輸入一串代碼時,Modbus 的位址編碼已經定義好了這些邏輯關係。
+40001 什麼意思?
根據Modicon Format,我們知道40001-49999是Modbus功能碼03 保持寄存器(Holding Registers)的地址範圍。
功能碼03的邏輯:將「40001」作為基底,讀取時,從這裡開始計數,40001 代表第 1 個寄存器,偏移量是0000,讀取位置是0000。
當使用者輸入40005時,Modbus 會自動識別 40001 至 49999 的範圍對應功能碼 03 保持寄存器,並依照位置編碼邏輯,辨別40005=0004+40001,讀取功能碼03的0004號位置。
六、以PLC與流量計間使用RS485及Modbus RTU實施流量監測
在Modbus協議中,每個數據字段都有特定的含義和位置,使用者需輸入一串代碼,分別表示:「從站地址、功能碼 (讀取輸入寄存器)、寄存器地址、要讀取的寄存器數量 、CRC 校驗碼」,Modbus主機在接收到這些數據後,會依照Modbus規範的格式逐一解析各個字段,以確認要對目標從站進行的操作,如讀取或寫入寄存器。以下以PLC與流量計間使用RS485及Modbus RTU實施流量監測作為施作範例:
硬體設置
:確保流量計和PLC 都具備 RS485 接口,並支持 Modbus RTU 通訊。將 PLC 和流量計通過 RS485 通訊線路連接在一起。
Modbus RTU 設置與程序設計
:設定流量計的 Modbus 位址(如從站地址)和波特率等參數,在 PLC 中設定相應的 Modbus 主站功能,並定義主站要讀取的數據,確保 PLC 和流量計的通信參數(波特率、數據位、停止位、校驗位)匹配。