首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[技巧]把多个DB数据映射到任意Modbus地址开始的数据区域,实现了数据的灵活访问

[技巧]把多个DB数据映射到任意Modbus地址开始的数据区域,实现了数据的灵活访问

作者头像
科控物联
发布于 2022-03-29 06:50:27
发布于 2022-03-29 06:50:27
5.9K0
举报
文章被收录于专栏:科控自动化科控自动化

摘要: 自V4.0及以上版本的Modbus_Slave指令,可把多个DB数据映射到任意Modbus地址开始的数据区域,实现了数据的灵活访问

1 S7-1200/1500 Modbus RTU 通信概述

SIMATIC S7-1200/1500 PLC 支持标准的Modbus RTU通信协议,可以作为主站或者从站与西门子及第三方设备进行通信。目前 TIA Portal 中集成用于ModbusRTU通信的指令版本有V1.x、V2.x、V3.x、V4.x ,V3.0及以下版本的Modbus_Slave指令是直接访问过程映像区和保持性寄存器,对于保持性寄存器,只能把固定某一个DB数据映射到以40001开始的寄存器地址。自V4.0及以上版本的Modbus_Slave指令,可把多个DB数据映射到任意Modbus地址开始的数据区域,实现了数据的灵活访问,如下图 1-1 所示。

图1-1 Modbus RTU指令

Modbus RTU从站V5.0及以上版本指令Modbus_Slave 使用条件:

  • TIA Portal V15及以上版本
  • S7-1200 CPU V4.2及以上版本
  • S7-1500 CPU V2.5及以上版本

2 测试环境和内容

本示例通过以下产品使用V4.3版本Modbus_Slave指令构建Modbus RTU从站,实现了在1217 CPU 中构建多个DB数据块与不同Modbus寄存器地址的映射关系,并进行了数据读写访问验证。

  • 软件: TIA Portal Professional V16 Modbus Poll 调试软件
  • 硬件: CPU1217C DC/DC/DC V4.4 CB1241(RS485) V1.0

3 配置过程

3.1 硬件组态

创建项目完成后,添加用于ModbusRTU通信的串口模块,本例选择的是CB1241串口通信板,接口参数如图3-1所示。

图3-1 接口参数

3.2 指令调用

在 OB1组织块中添加“Modbus_Comm_Load”和“Modbus_Slave”指令块,软件将提示会为该指令生成一个背景数据块,本例中为 DB5“Modbus_Comm_Load_DB”和DB6 “Modbus_Slave_DB”,如下图3-2所示。指令各引脚具体含义及如何分配请参考以下链接:Modbus RTU通信。

注意:当使用指令背景数据块DB6“Modbus_Slave_DB”中“Data_Area_Array”变量构建寄存器与数据块的映射关系时(如图3-5),则输入变量“MB_HOLD_REG”与Modbus的保持性寄存器地址的映射关系失效,由于引脚不分配变量会报错,可任意分配空闲地址区域。

图3-2 通信指令

3.3 创建数据块

创建用于映射Modbus寄存器地址的数据块,DB10(Area 1 for Holding Register)、DB11(Area 2 for Holding Register)、DB12(Area 3 for Holding Register)如下图 3-3 所示。

图 3-3 创建数据块

对于需要访问的数据必须存储在标准数据块,创建的数据块默认是优化访问,需要禁用数据块的“优化的块访问”属性,且不得“仅存储在装载内存中”,如下图3-4所示。

图3-4 数据块属性

3.4 定义数据块与Modbus寄存器地址映射关系

映射关系在Modbus_Slave指令背景数据块DB6“Modbus_Slave_DB”的静态变量Data_Area_Arry中定义,Data_Area_Array 包含八个元素,本例中使用了3个区域,区域1定义DB10映射到保持性寄存器40001-40005、区域2定义DB11映射到保持性寄存器40021-40025、区域3定义DB12映射到保持寄存器40031-40035、区域4~8保持默认为0,如下图3-5所示。

图3-5分配数据区域

注意:如果要使用的数据区域不到八个,则分配的数据区域必须是从元素1开始的连续区域,不然数据区域中的第一个空白元素会终止数据区域。比如定义元素1、2、4 和5,由于字段元素3 空白,则只会识别到元素1 和2。

Data_Area_Array[x](其中 1 <= x <= 8)中每个元素都是 MB_DataArea 类型的 UDT,其结构如下表3-1所示:

参数

数据类型

含义

data_type

UInt

映射到此数据区域的 MODBUS 数据类型的标识符:0:空字段元素或未使用数据区域的标识符。此时,db、start 和 length 的值不相关。1:过程映像输出(与功能代码 1、5 和 15 一起使用)2:过程映像输入(与功能代码 2 一起使用)3:保持性寄存器(与功能代码 3、6 和 16 一起使用)4:输入寄存器(与功能代码 4 一起使用)注:如果已定义 MODBUS 数据类型的数据区域,则指令 Modbus_Slave 不能再直接访问此MODBUS 数据类型。如果该数据类型的 MODBUS 请求的地址与定义的数据区域不对应,则 STATUS 中会返回一个值 W#16#8383。

db

UInt

MODBUS 寄存器或位所映射的目标数据块的编号。注:数据块编号在数据区域中必须是唯一的,不得在多个数据区域中定义相同的数据块编号。数据块必须支持标准访问,并且不得仅存储在装载存储区中。默认从DB中起始地址0.0开始映射。允许值:1 到 60999

start

UInt

映射到数据块中的首个 MODBUS 地址(从地址 0.0 开始)。允许值:0 到 65535

length

UInt

位数(对于 data_type 的值 1 和 2)或寄存器数量(对于 data_type 的值 3 和 4)。注:相同 MODBUS 数据类型的 MODBUS 地址区域不得重叠。允许值:1 到 65535

表3-1 MB_DataArea数据类型

3.5 测试软件设置及数据访问

借助Modbus Poll测试对不同数据区域的访问,通信配置如图3-6所示,测试结果如图3-7所示。

注意:一个Modbus请求只能对一个数据区域进行读写操作,如果需要访问多个数据区域,需要多个Modbus请求。

图3-6通信配置

图3-7 数据访问

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 S7-1200/1500 Modbus RTU 通信概述
  • 2 测试环境和内容
  • 3 配置过程
    • 3.1 硬件组态
    • 3.2 指令调用
    • 3.3 创建数据块
    • 3.4 定义数据块与Modbus寄存器地址映射关系
    • 3.5 测试软件设置及数据访问
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档