前言
隨著PN1-D25系列ProfiNet轉Modbus網關的上市,最近有很多客戶在使用博圖或STEP 7軟件來配置PN1-D25時,經常反饋網關無法讀寫到正確的數據,同時網關會返回錯誤,表現為網關與PLC的錯誤燈都在閃爍。技術人員在為客戶提供技術支持時發現,大部分客戶都是因為將“寄存器的Modbus地址”當成“寄存器地址”配置到了網關,導致網關讀寫到錯誤的寄存器導致報錯。那么,如何理解寄“寄存器的Modbus地址”與“寄存器地址”,二者有什么區別?什么時侯該用哪種地址?下文將詳細介紹。
寄存器的Modbus地址分區
Modbus地址區分為的0區、1區、3區、4區。
0區、1區、 3區、4區各是一片數據區,是Modbus協議規定的地址范圍,各類地址是互相對應的。0區 :離散量輸出,可讀/可寫【對應PLC: DO】線圈類地址:00001~09999。使用功能碼:01、05、15。1區 :離散量輸入16位,只讀【對應PLC: DI】觸點類地址:10001~19999。使用功能碼:02。3區 :輸入寄存器16位,只讀【對應PLC: AI】模擬輸入地址:30001~39999。使用功能碼:04。4區 :保持寄存器,可讀/可寫【對應PLC: AO(或某些參數區)】模擬輸出地址:40001~49999。使用功能碼:03、06、16。
寄存器地址
要想理解Modbus地址,我們先簡單介紹一下Modbus協議報文。下面是一條讀保持寄存器(地址40001)的Modbus報文。Mdobus請求報文基本由從機地址、功能碼、寄存器地址、讀寫的寄存器數量與CRC16校驗碼組成。讀40001就對應了Modbus報文中的功能碼(0x03)與寄存器地址(0x00)。
博圖中的“Modbus_Master”指令
在博圖中使用“Modbus_Master”指令時,”DATA_ADDR”參數填寫的是寄存器的Modbus地址。這樣的好處是開發者在編寫Modbus指令時不需要關注該用什么功能碼。只需關注是需要讀或寫與讀寫數量。PLC會自動根據參數調用對應的功能碼,提高了開發人員的工作效率。同時目前各Modbus從站設備文檔基本都會提供“Modbus地址表”與“寄存器地址表”。
PN1-D25 Modbus指令參數配置

PN1-D25的Modbus模塊參數在配置時已經劃分好了Coil-線圈-DO-0區、Discrete Input-離散輸入-DI-1區、Holding Register-保持寄存器-AO-4區、Input Register-輸入寄存器-AI-3區。在填寫起始地址(Start Address)時需要填寫寄存器地址,不能寫帶Modbus區的Modbus地址。
可以使用DATA_ADDR和MODE參數來選擇Modbus功能代碼。DATA_ADDR(從站中的Modbus起始地址):指定在Modbus從站中訪問的數據的起始地址。Modbus_Master指令使用MODE輸入,不使用功能代碼輸入。MODE和DATA_ADDR結合使用可指定在實際Modbus幀中使用的功能代碼。下表顯示了MODE參數、Modbus功能代碼和DATA_ADDR中Modbus地址范圍之間的關系。Modbus功能:

-
寄存器
+關注
關注
31文章
5402瀏覽量
122924 -
MODBUS
+關注
關注
28文章
1958瀏覽量
78731 -
網關
+關注
關注
9文章
5057瀏覽量
52295
發布評論請先 登錄
關于LABVIEW OPC與MODBUS通信寄存器地址問題 求助啊
Modbus通訊地址設定方法說明

寄存器的名稱和地址的映射詳細資料分析

STM32寄存器的簡介、地址查找,與直接操作寄存器

STM32F103系列芯片的地址和寄存器映射原理、LED輪流閃爍實現

STM32-寄存器地址名稱映射分析

2020.4.14 第四次 寄存器地址名稱映射

評論