ABPLC通过Modbus TCP读取设备压力值

使用罗克韦尔(AB)-PLC以客户端形式通过Modbus TCP于设备通讯,并读取压力值。

Modbus TCP客户端AOI程序导入

罗克韦尔官网搜索Modbus TCP Add-On ,并下载例程,或者点击链接直接下载。

在Studio 5000中新建一个梯级例程,选中梯级右键导入例程。

image-20231208160530699

选择raC_Opr_NetModbusTCPClient_Rung.L5X文件,并单击导入

image-20231208160926802

导入对话框打开后选择Tag,根据需要修改Tag名字。

image-20231208161312164

单击确认按钮,完成导入。

image-20231208161626725

配置本地运行参数

Modbus TCP客户端要求EtherNet/IP模块支持Logix套接字。详见链接

右键单击连接到Ref_Connection参数的Tag,然后选择监控。

image-20231208162556767

打开参数Tag,设置相应参数。

Tag 参数
LocalSlot 本地EtherNet/IP模块的插槽
LocalAddress EtherNet/IP模块的.LocalAddress地址。仅对于双IP模式的CompactLogix 5380 和 5480,用于指定Modbus TCP通讯的本地以太网连接的IP地址。其他情况,此字段为空。
DestAddress 指定Modbus服务端设备的以太网IP地址。该地址必须指定,不可为空。
DestinationPort 指定ModbusTCP端口为502,该值为ModbusTCP协议标准值。

image-20231208162756121

将连接到Inp_Enable参数的Tag值设置为1,启动ModbusTCP客户端。

如果在运行中修改了参数,请务必重置Inp_Enable参数。

image-20231208164403827

确认数据位置

根据压力测量模块寄存器地址表格,确认压力值读取地址:40001/40002。

image-20231211091447848

配置数据交换

监控Ref_Transactions参数连接的Tag。

  1. PollInterval标签中配置轮询间隔时间(单位:毫秒)。

    默认值为1000(1秒),最小值为80毫秒,如何轮询低于80毫秒的任务都将以1000毫秒的速率进行轮询。

    image-20231208165214734

  2. TransType标签中设置Modbus功能代码。

    image-20231208165523479

    功能代码 名称 说明 Modbus地址范围
    01 读取线圈 用于读取线圈的状态,它可以读取一个或多个线圈的状态,返回结果为状态字节,每个字节可以表示8个线圈的状态。 本地地址:00001-01024;服务端地址:00001-065536
    02 读取离散输入 用于读取离散输入的状态,它可以读取一个或多个离散输入的状态,返回结果为状态字节,每个字节可以表示8个离散输入的状态。 本地地址:10001-11024;服务端地址:10001-165536
    03 读取保持寄存器 用于读取保持寄存器的值,它可以读取一个或多个保持寄存器的值,返回结果为寄存器值,每个寄存器可以表示一个16位二进制值。 本地地址:40001-41024;服务端地址:40001-465536
    04 读取输入寄存器 用于读取输入寄存器的值,它可以读取一个或多个输入寄存器的值,返回结果为寄存器值,每个寄存器可以表示一个16位二进制值。 本地地址:30001-31024;服务端地址:30001-365536
    05 写单个线圈 用于写入单个线圈的状态,它可以写入一个线圈的状态,返回结果为写入的状态字节,每个字节可以表示8个线圈的状态。 本地地址:00001-01024;服务端地址:00001-065536
    06 写单个保持寄存器 用于写入单个寄存器的值,它可以写入一个寄存器的值,返回结果为写入的寄存器值,每个寄存器可以表示一个16位二进制值。 本地地址:40001-41024;服务端地址:40001-465536
    15 写入多个线圈 用于写入多个线圈,它可以写入一个或多个线圈的状态。 本地地址:00001-01024;服务端地址:00001-065536
    16 写入多个保持寄存器 用于写入多个保持寄存器,它可以写入一个或多个保持寄存器的状态。 本地地址:40001-41024;服务端地址:40001-465536
  3. 在对等服务器设备中需要设置StationID标签,大多数情况下ModbusTCP服务器会忽略该字段。

    image-20231208171706660

  4. 设置BeginAddress标签。该值表示要从TCP服务端读取或者写入的起始地址。

    根据上面设置功能代码,该数值分别代表不同的Modbus地址。

    image-20231208172013912

  5. 设置Count标签。该值表示要从ModbusTCP服务端读取或写入的项目数。

    image-20231211092051869

  6. 设置LocalAddress标签。该值表示从ModbusTCP服务端读取或写入的数据放置到“Data”数组的起始地址。

    前面配置的功能代码为读取保持寄存器,所以读取地址为4xxx。

    image-20231211092952178

    将读取数据从数组的第0为开始存放。

    image-20231211093045827

  7. Enabled标签设置为1,启用第一组参数。

image-20231208164957692

使用限制

  1. 必须使用Import Rung函数来实现,以保留Message指令配置。不要使用复制/粘贴,因为它不会带来完整的消息指令配置和标签。一旦rung实现,不要使用Search/Replace标签。所有的替换只能在梯级导入期间进行。
  2. 每个控制器支持多个客户机AOI实例。每个实例必须使用自己的一组backing和Message标记,但是“…_Data”标记结构可以在aoi之间共享。
  3. Modbus TCP Server和Modbus TCP Client aoi可以驻留在同一个程序中。但是,服务器应用程序可能会由于共享的Logix Sockets对象而导致客户端暂时断开连接。
  4. 当在ControlLogix Redundancy系统中实现时,用户应该期望在Modbus TCP Client AOI导致控制器切换后至少有5秒的Modbus通信丢失。由于正在使用的服务器设备的行为,可能会有额外的Modbus通信延迟。

监控Modbus TCP客户端

  1. ModbusTCP数据标签位于Ref_ModbusData参数标签下。

    image-20231211100839818

    该标签包含线圈(0xxxx),离散输入(1xxxx),输入寄存器(3xxxx)和保持寄存器(4xxxx)四个独立的数据区域。
    用户应用程序可以不受任何限制地读取和填充这些标记值。

    image-20231211101008143

  2. Modbus TCP AOI 状态位

    image-20231211101427161

    a. Sts_EN输出表示Modbus TCP Client功能已启用。

    b. “Sts_Connected”输出表示客户端连接请求被服务器接受。它不指示活动数据流。
    应该检查单个事务的状态以验证数据交换。

    c. Sts_Faulted输出表示消息指令有一条出错。

    d. Sts_Overlap输出表示一个或多个事务在下一次触发之前没有完成

    e. Sts_Overload输出表示在一个或多个事务中存在过多的重叠。

  3. 单个任务状态信息。这些TAg存在于5个内建任务中的每个任务中。
    任务0 - 4)。

    当请求的任务完成时,TransComplete位被置位。当它被要求进行下一次任务时,被程序清除。

    TransStatus值表示任务的当前状态。0=成功,1=正在处理中,2=重试,-1=异常。

    image-20231211102538268

  4. 任务诊断Tag表示任务在处于活动状态时提供的内部动态信息。请勿修改这些Tag

image-20231211102759109

中文参考文档下载

Modbus TCP 客户端AOI中文文档

Modbus TCP服务端AOI中文文档