【答疑】网关返回错误?Modbus地址与寄存器地址别混淆!

描述

前言

随着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

 

博图中的“Modbus_Master”指令

在博图中使用“Modbus_Master”指令时,”DATA_ADDR”参数填写的是寄存器的Modbus地址。这样的好处是开发者在编写Modbus指令时不需要关注该用什么功能码。只需关注是需要读或写与读写数量。PLC会自动根据参数调用对应的功能码,提高了开发人员的工作效率。同时目前各Modbus从站设备文档基本都会提供“Modbus地址表”与“寄存器地址表”。

MODBUS

 

PN1-D25 Modbus指令参数配置

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功能:

MODBUS

MODBUS

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分