Modbus

您所在的位置:网站首页 博途v15更新固件版本 Modbus

Modbus

2024-07-12 20:01| 来源: 网络整理| 查看: 265

Modbus RTU V4 及以上版本新功能介绍

TIA Portal V15 版本开始,Modbus (RTU)指令集更新到 V4.0 及以上版本:

注意:S7-1200 固件至少需要 V4.2 版本

以 V16 为例,如图 1 所示,Modbus (RTU)指令集为 V4.4 版本。

图 1. Modbus RTU V4 指令集

V4 版本的 Modbus RTU 指令有以下重要功能的更新。

Modbus_Master 指令变化:

DATA_PTR 接口的 DB 可以支持"优化块访问"

Modbus_Slave 指令变化:

MB_HOLD_REG 接口的 DB 可以支持"优化块访问" 可以选择对输入输出过程映像区的读访问限制 可以自定义访问 DB 中的数据区域,而不是默认的 IQ 区与 MB_HOLD_REG 本文档仅介绍相比指令集 V3.0 基础功能的新变化,指令集 V3.0 基础功能使用请参见链接。 优化块的支持

DATA_PTR 参数指向要写入或读取的 DB 或 M 地址。如果使用数据块,则必须创建一个全局数据块为读写 Modbus 从站提供数据存储位置。

自指令版本 V4.0 起:

该参数可以指向优化的 DB 数据块,在优化数据块中,允许使用以下数据类型的单个元素或者数组:Bool、Byte、Char、Word、Int、DWord、DInt、Real、USInt、UInt、UDInt、SInt或 WChar。

MB_HOLD_REG 指向 Modbus RTU 保持寄存器,可以是 M 存储区或者 DB 数据块。

自指令版本 V4.0 起:

该参数可以指向优化的 DB 数据块,在优化数据块中,允许使用以下数据类型的单个元素或者数组:Bool、Byte、Char、Word、Int、DWord、DInt、Real、USInt、UInt、UDInt、SInt 或 WChar。

例:使用 TIA Portal V16,CPU1215C 配置 CM1241 RS422/485 模块作为 Modbus RTU 主站,CPU1215C 配置 CM1241 RS422/485 模块作为 Modbus RTU 从站

CPU1215C 在 OB1 中编写 Modbus 主站的程序,创建优化 DB 数据块 DB3-Master,DATA_PTR 填写该优化的 DB 块区域:

图 2. CPU1215C 主站 Modbus 编程

图 3. 优化的数据块 DB3-Master

CPU1214C 在 OB1 中编写 Modbus 从站的程序,创建优化的 DB 数据块 DB8,MB_HOLD_REG 填写该优化的 DB 块区域:

图 4. CPU1214C 从站 Modbus 编程

图 5. 优化的数据块 DB8

主站 Master 的 REQ 管脚触发,主站读取从站的保持性寄存器 40001,长度为 5 个字,读取结果如图 6 所示:

图 6. 主站 Master 读取到的数据

Modbus Slave 指令的使用

Modbus_Slave V4 背景 DB 的数据内容

如图 7 所示:

图 7. Modbus_Slave V4 背景数据块

用户程序可以修改图 7 中圈出的变量:

红色为 Modbus RTU V4 指令集中 Modbus_Slave 增加的变量,要求的版本是 TIA PORTAL V15 及其以上,CPU版本 V4.2 及其以上

QB_Read_Start QB_Read_Count IB_Read_Start IB_Read_Count Data_Area_Array

黑色为 Modbus_Slave V3 指令集中 Modbus_Slave V3 增加的变量,要求的版本是 TIA PORTAL V14SP1 及其以上,CPU版本 V4.1.1 及其以上

QB_Start QB_Count

蓝色为 Modbus_Slave V3 指令集中 Modbus_Slave V2 的变量(即初始版本),要求的版本是 TIA PORTAL V13SP1 及其以上,CPU版本 V4.1.1 以及其上

HR_Start_Offset Extended_Addressing

下面将介绍这些可修改变量

过程映像读写访问限制

过程映像中写入区域的定义:

QB_Start:CPU 可写入的输出字节的起始地址

QB_Count:CPU 可写入的输出字节的字节数。如果 QB_Count = 0,则 CPU 的输出字节均无法写入。

默认是 QB_Start 为 0,QB_Count 为65535,即所有输出字节区域均可以写访问。

示例:要想只允许 QB10 到 QB17 可写入,则 QB_Start = 10且 QB_Count = 8。

过程映像中读取区域的定义:

QB_Read_Start:CPU 可读取的输出字节的起始地址

QB_Read_Count:CPU 可读取的输出字节的字节数。如果 QB_Read_Count = 0,则 CPU 的输出字节均无法读取。

默认是 QB_Read_Start 为 0,QB_Read_Count 为 65535,即所有输出字节区域均可以读访问。

示例:要想只允许 QB10 到 QB17 可读取,则 QB_Read_Start = 10 且 QB_Read_Count = 8。

IB_Read_Start:CPU 可读取的输入字节的起始地址

IB_Read_Count:CPU 可读取的输入字节的字节数。如果 IB_Read_Count = 0,CPU 的输入字节均无法读取。

默认是 IB_Read_Start 为 0,IB_Read_Count 为 65535,即所有输入字节区域均可以读访问。

示例:要想只允许 IB10 到 IB17 可读取,则 IB_Read_Start = 10 且 IB_Read_Count = 8。

访问数据块中的数据区域,而不是直接访问 Modbus 地址

Modbus_Slave 指令版本 V4.0 以及 S7-1200 CPU 固件版本 V4.2 起,用户可访问数据块中的数据区域,而不用直接访问过程映像和保持寄存器。为此,在全局 DB 属性页中,必须取消选中"仅存储在装载存储器中和"优化块访问复选框。

如果 MODBUS 请求到达时,尚未定义相应功能代码的 MODBUS 数据类型的数据区域,请求会按之前的指令版本处理,即直接访问过程映像和保持性寄存器。

如果 MODBUS 请求到达时,已定义功能代码的 MODBUS 数据类型的数据区域,则 Modbus_Slave 指令会对此数据区域执行读写操作。具体是读操作还是写操作取决于作业类型。

单个 MODBUS 请求只能对一个数据区域进行读写操作。如果要读取覆盖多个数据区域的保持性寄存器,则需要多个 MODBUS 请求。

数据区域的定义规则如下:

最多可以定义 8 个数据区,位于 Data_Area_Array[1..8] 中。 数据区数组元素定义必须连续,如果中间某数组元素定义无效,则后面的区域不生效。 如果在数据区定义了保持寄存器,则 MB_HOLD_REG 映射失效,如果在数据区定义了过程映像输出,则对应的 Q 区映射失效,如果在数据区定义了过程映像输入,则对应的 I 区映射失效,如果在数据区定义了输入寄存器,则对应的 AI 区映射失效。也就是说,如果在数据区内没有定义哪个区域,则原有的映射依然保留。 单个 MODBUS 请求只能对恰好一个数据区域进行读写操作。 每个字段元素 Data_Area_Array[x](其中 1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3