您好,欢迎来到微智科技网。
搜索
您的当前位置:首页PLC寄存器地址与Modbus地址对应的问题

PLC寄存器地址与Modbus地址对应的问题

来源:微智科技网
PLC寄存器地址与Modbus地址对应的问题

Modbus 地址

通常 Modbus 地址由 5 位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbus Master 协议库把标准的 Modbus 地址映射为所谓 Modbus 功能号,读写从站的数据。Modbus Master 协议库支持如下地址:

• • • •

00001 - 09999:数字量输出( 线圈) 10001 - 19999:数字量输入(触点)

30001 - 39999:输入数据寄存器(通常为模拟量输入) 40001 - 49999:数据保持寄存器

Modbus Master 协议库支持的功能

为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能: 表 1. 需要从站支持的功能 Modbus 地址 00001 - 09999 功能 5:写单输出点 数字量输出 10001 - 19999 读 写 功能 2 - 1 / 7

读/写 读 Modbus 从站须支持的功能 功能 1 写 功能 15:写多输出点 PLC寄存器地址与Modbus地址对应的问题

数字量输入 30001 - 39999 输入寄存器 读 40001 - 功能 6:写单寄存器49999 单元 保持寄存器 单元 如何理解 Modbus 地址与功能码的区别?

Modbus 地址与 Modbus 的功能码是两个层次的概念。

根据 Modbus 通信协议,Modbus 数据的地址使用 0xxxx、1xxxx、3xxxx 和 4xxxx 的形式,分别表示数字量输出、数字量输入、模拟量输入等数据地址。在使用 S7-200 的指令库时,Modbus 数据地址与 S7-200 的 I/O 和数据存储区地址间有特定的对应关系。 有些设备表明它支持 Modbus RTU 通信协议,但也详细提供了读写数据的详细通信帧格式,其中包括如何指定 Modbus 站的地址,需要读写数据类型、长度等等。数据帧有特定字节指出此指令读写的数据类型和地址,此字节的数据内容即所谓“功能码”,如功能 1 指定读取单个/多个数字量输出点的值。

2 / 7

读 功能 4 写 - 功能 3 写 功能 16:写多寄存器PLC寄存器地址与Modbus地址对应的问题

支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种“功能”读写而来。功能码是 Modbus 地址的底层。如果 Modbus 通信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此功能号与 Modbus 地址间的对应关系。

使用modbus地址时应注意下述问题:

1)40001~4xxxx是美国modicon公司和ge公司plc使用的modbus地址,它是基于1的地址,即同类元件的首地址为1。西门子plc的modbus地址是基于0的地址。

2)美国的modbus地址左起第2位用来表示元件的类型,例如i0.0的modbus地址为010001。因为数据类型已经包含在功能码中了,西门子的i0.0的modbus地址实际上为000000,i2.0的modbus地址为000016(或十六进制数16#0010),而不是010017。

3 / 7

PLC寄存器地址与Modbus地址对应的问题

其他问题:

1、modbus的保持和输入寄存器是以word(16bit)为单位的。(Data is packed as two bytes per register.)

比如4****(保持寄存器/输出寄存器)和3****(输入寄存器)是以字为单位的。

所以,如果读40001寄存器开始的一个16位的无符号数,那么返回2个Byte,并可以从40002开始读下一个16位的无符号数。

但是,如果读40001寄存器开始的一个32位浮点数,那么,返回4个Byte,而且,下一个32位浮点数必须从40003开始。 客户问题:

1)、将40001定义为一个Byte的数据;

2)、将40001定义为32位浮点数,40002为下一个32位浮点数。 我们可以参考一下国标GBT_19582-1 2008 (基于Modubs协议的工业自动化网络规范)的功能码表:

4 / 7

PLC寄存器地址与Modbus地址对应的问题

2、寄存器最小地址为1,而报文起始地址为0。(Register 1 is addressed as 0)

在数据报文中,所有的modbus地址都是从0开始的。也就是首次出现的数据项在报文中的地址为0。比如:(All data addresses in Modbus messages are referenced to zero. The first occurrence of a data item is addressed as item number zero. For example:)

1.

在控制器中,“线圈1”在Modbus报文的地址域中的地址为00 00。

5 / 7

PLC寄存器地址与Modbus地址对应的问题

(The coil known as ‘coil 1’ in a programmable controller is addressed as coil

0000 in the data address field of a Modbus message.)

2.

线圈127的十六进制报文地址为007E hex(十进制的126)

Coil 127 decimal is addressed as coil 007E hex (126 decimal).

3.

保持寄存器40001的报文地址为00 00。因为报文功能码明确要操作“保持寄存器”,所以,协议就以“4XXXX”代表这个寄存器。

Holding register 40001 is addressed as register 0000 in the data address field

of the message. The function code field already specifies a ‘holding register’

operation. Therefore the ‘4XXXX’ reference is implicit.

4.

保持寄存器40108的报文地址为006B hex (十进制107) Holding register 40108 is addressed as register 006B hex (107 decimal).

上面摘自Modicon_Modbus协议.pdf Page27

总之,Modbus地址一般指4****(保持寄存器/输出寄存器)和3****(输入寄存器),这时应用层面的:

比如设备说明书可以简要说明设备支持Modbus RTU标准协议,并详细描述其地址对应关系为:40001 —— 模拟量采集通道1,16位有符号数,.....。

6 / 7

PLC寄存器地址与Modbus地址对应的问题

比如组态软件的地址设置,一般为输出寄存器,从地址1开始,连续多少个。或者指明400001:16位有符号数。

但是,在数据报文层面,寄存器起始地址从0开始。

数据报文包括:设备地址+功能码+起始地址+寄存器个数+校验位。其中,起始地址是从0开始的。

举例说明:从设备11读40001开始的2个寄存器数据的报文 设备地址 功能码 起始地址 寄存器个数 校验 11 03 00 00 00 02 --

7 / 7

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务