当前位置: 首页 > news >正文

Modbus_TCP_V5 新功能

odbus TCP 服务器指令 MB_SERVER V5.0 新功能概述

如下图1所示服务器指令 MB_SERVER 从 V5.0 以后增加了三个新功能,分别为:

  1. 访问数据块中的数据区域,而不是直接访问 MODBUS 地址
  2. 过程映像区的读访问限制
  3. 统计变量 NDR_immediate 和 DR_immediate

A screenshot of a computerDescription automatically generated

图1. MB_SERVER 指令

SIMATIC S7-1200 使用要求

  • TIA Portal V15 及以上版本
  • CPU 固件 V4.2 及以上版本

新功能实验环境和内容

在本应用实例中,通过以下产品进行Modbus TCP服务器V5.0新功能编程,实现了访问1217C CPU 中数据块的数据区域以及限制对1217 CPU过程映像区的读访问。

软件:

TIA Professional V16
Modbus Poll

硬件:

CPU1217C DC/DC/DC V4.4

新功能通信程序

1、指令调用及参数分配

1.1、打开 TIA Portal V16软件,新建一个项目命名为 "ModbusTCP V5.0",在项目中添加CPU1217C DC/DC/DC V4.4,为以太网接口新建一个子网并设置 IP地址为 "192.168.0.1",如下图 3 所示。

A screenshot of a computerDescription automatically generated

图2. 分配IP地址

1.2、在 OB1组织块中添加Modbus TCP Server功能块 "MB_SERVER",软件将提示会为该 FB块增加一个背景数据块,本例中为 DB1"MB_SERVER_DB",如下图3所示。

A screenshot of a computerDescription automatically generated

图3. 指令创建

2、访问数据块中的数据区域

用户可访问数据块中的数据区域,而不用直接访问过程映像和保持性寄存器。在此情况下,必须禁用数据块的“优化块访问”(Optimized block access) 属性,并且该属性不得单独存在于装载存储器中。

2.1、创建标准数据块,DB10(Area 1 for Input)、DB11(Area 2 for Input Register)、DB12(Area 3 for Holding Register)、DB13(Area 4 for Holding Register)如下图 4 所示。并修改数据块属性为标准访问数据块,如下图5所示。

A screenshot of a computerDescription automatically generated

图4. 创建数据块

A screenshot of a computerDescription automatically generated

图5. 数据块属性

2.2、分配数据区域及注意事项

  • 用户最多可在不同数据块中定义八个数据区域,每个数据块只能包含一个数据区域。单个MODBUS 请求只能对恰好一个数据区域进行读写操作。每个数据区域对应于一个 MODBUS 地址区域。可以在MB_SERVER背景数据块的静态变量中"Data_Area_Array"中定义数据区域。
  • 如果要使用的数据区域不到八个,则所需数据区域必须紧密相连,没有间隙。在处理过程中,数据区域中的第一个空白条目会终止数据区域搜索。例如,如果已定义字段元素 1、2、4 和 5,由于字段元素 3 留空,则"Data_Area_Array"只会识别字段元素 1 和 2。
  • 如果 MODBUS 请求到达时尚未定义相应功能代码的 MODBUS 数据类型的数据区域,请求会按之前的指令版本处理,即直接访问过程映像和保持性寄存器。如果已为功能代码的 MODBUS 数据类型定义了数据区域,则指令 MB_SERVER 可对该数据区域进行读写操作。具体是读操作还是写操作取决于作业类型。如果有两个区域都是03呢,是否会读写搞混了?测试一下功能码1和15可以放在2个功能区吗,并且起始地址和长度一样
  • 单个 MODBUS 请求只能对一个数据区域进行读写操作。如果要读取覆盖多个数据区域的保持性寄存器,则需要多个 MODBUS 请求。

Data_Area_Array 字段包含八个元素:Data_Area_Array[1] 到 Data_Area_Array[8],每个字段元素 Data_Area_Array[x](其中 1 <= x <= 8)都是 MB_DataArea 类型的 UDT,结构如下表1。

表1:Data_Area_Array结构

参数数据类型含义
data_typeUInt映射到此数据区域的 MODBUS 数据类型的标识符:
• 0:空字段元素或未使用数据区域的标识符。此时,db、start和length的值无效。
• 1:过程映像输出(与功能代码 1、5 和 15 一起使用)
• 2:过程映像输入(与功能代码 2 一起使用)
• 3:保持寄存器(与功能代码 3、6 和 16 一起使用)
• 4:输入寄存器(与功能代码 4 一起使用)
dbUInt映射的数据区编号,该DB必须是非优化DB
startUInt映射到数据块中的首个 MODBUS 地址,从0开始
lengthUIntBool数(对于data_type 1或者2),Word数(data_type 3或者4)

本例中使用了4个区域,进入MB_SERVER背景数据块DB1“MB_SERVER_DB”的静态变量中Data_Area_Arry,分别为区域1访问输入位、区域2访问输入字、区域3访问保持寄存器、区域4访问保持寄存器、区域5~8保持默认为0,如下图6所示。

A screenshot of a computerDescription automatically generated

图6. 数据区域

2.3、仿真软件设置,如下图7-8所示。

A screenshot of a computerDescription automatically generated

图7. 通信配置

A screenshot of a computerDescription automatically generated

图8. 读写配置

2.4、测试结果,如下图9所示。

A screenshot of a computerDescription automatically generated

图9. 测试结果

3、过程映像区的读访问限制

对于 MB_SERVER 指令V5.0及以上版本,用户可在过程映像输入中定义一个区域,在过程映像输出中定义一个区域,方便远程 MODBUS 设备 进行读访问。随后,远程 MODBUS 设备便不能对超出这些过程映像区域的地址进行读访问。

背景数据块的以下静态变量定义了过程映像中的读取区域:

  • QB_Read_Start:可由远程 MODBUS 设备读取的过程映像输出中的第一个字节的地址(应用于功能代码 1)
  • QB_Read_Count:可由远程 MODBUS 设备读取的过程映像输出中的字节数(应用于功能代码 1)
  • IB_Read_Start:可由远程 MODBUS 设备读取的过程映像输入中的第一个字节的地址(应用于功能代码 2 和 4)
  • IB_Read_Count:可由远程 MODBUS 设备读取的过程映像输入中的字节数(应用于功能代码 2 和 4)

下表2介绍了指令 MB_SERVER 背景数据块中的上述静态变量,可用于定义过程映像中的读区域。为确保完整性,表格中还列出了自版本 V4.2 起,用于定义过程映像中的写区域的静态变量(QB_Start 和 QB_Count)。

表2 读访问限制变量

变量数据类型默认值说明版本
QB_StartUInt0CPU 可写入的输出字节的起始地址V4
QB_CountUInt65535CPU 可写入的输出字节的字节数。
如果 QB_Count = 0,则CPU 的输出字节均无法写入。
V4
QB_Read_StartUInt0CPU 可读取的输出字节的起始地址V5
QB_Read_CountUInt65535CPU 可读取的输出字节的字节数。
如果 QB_Read_Count = 0,则CPU 的输出字节均无法读取。
V5
IB_Read_StartUInt0CPU 可读取的输入字节的起始地址V5
IB_Read_CountUInt65535CPU 可读取的输入字节的字节数。
如果 IB_Read_Count = 0,CPU 的输入字节均无法读取。
V5

3.1、本例中定义过程映像中读取区域如下图9所示,输出过程映像写访问权限QB0~QB9,输出过程映像读访问权限QB10~QB19,输入过程映像读访问权限IB20~IB29。

A screenshot of a computerDescription automatically generated

图9. 过程映像区域设定

3.2、仿真软件设置,如下图10所示。

A screenshot of a computerDescription automatically generated

图10. 通信设置

3.3、测试结果

A screenshot of a computerDescription automatically generated

图11. 读取Q区数据

A screenshot of a computerDescription automatically generated

图12. 读取I区数据

4、统计变量 NDR_immediate 和 DR_immediate

指令 MB_SERVER(自指令版本 V5.0 起)的背景数据块中含有统计变量 NDR_immediate 和 DR_immediate。

表3:NDR_immediate 和 DR_immediate。

变量数据类型默认值说明
NDR_immediateBoolFalse与参数 NDR(新数据就绪)含义相同。MB_SERVER 在处理
Modbus TCP 写请求的同一调用中更新"NDR_immediate"。
DR_immediateBoolFalse与参数 DR(数据读取)含义相同。MB_SERVER 在处理
Modbus TCP 写请求的同一调用中更新"DR_immediate"。

http://www.lryc.cn/news/581770.html

相关文章:

  • C++之路:多态与虚函数
  • 在phpstudy环境下配置搭建XDEBUG配合PHPSTORM的调试环境
  • 【Bluedroid】蓝牙 GATT 客户端注册机制与流程详解(BTA_GATTC_AppRegister)
  • Solidity——pure 不消耗gas的情况、call和sendTransaction区别
  • 【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
  • Node.js特训专栏-实战进阶:13. ORM/ODM工具选型与使用
  • AI做美观PPT:3步流程+工具测评+避坑指南
  • 【论文笔记】【强化微调】Pixel Reasoner:早期 tool call 的调用
  • CppCon 2018 学习:Undefined Behavior is Not an Error
  • 【系统分析师】2022年真题:论文及解题思路
  • (二) TDOA(到达时间差)、AoA(到达角度)、RSSI(接收信号强度)、TOF(飞行时间) 四种定位技术的原理详解及对比
  • 手动使用 Docker 启动 MinIO 分布式集群(推荐生产环境)
  • 从前端转go开发的学习路线
  • 2025 BSidesMumbaiCTF re 部分wp
  • NLP文本预处理
  • Spring AI(12)——调用多模态模型识别和生成图像
  • MyBatis实战指南(九)MyBatis+JSP+MySQL 前端页面实现数据库的增加与删除显示数据
  • 分布式会话的演进和最佳事件,含springBoot 实现(Java版本)
  • 【网络安全】不要在 XSS 中使用 alert(1)
  • 电池预测 | 第33讲 Matlab基于CNN-LSTM-Attention的锂电池剩余寿命预测,附锂电池最新文章汇集
  • 一个简单的脚本,让pdf开启夜间模式
  • 【STM32】通用定时器PWM
  • 李宏毅NLP-8-语音模型
  • 20250706-11-Docker快速入门(下)-构建Nginx镜像和Tomcat镜像_笔记
  • Kotlin lazy 委托的底层实现原理
  • styled-components:现代React样式解决方案
  • 构建下一代智能应用:RAG系统开发深度指南
  • 基于STM32单片机的心率血氧监测系统设计(STM32代码编写+手机APP设计+PCB设计+Proteus仿真)
  • C# 接口(什么是接口)
  • 【机器学习笔记Ⅰ】1 机器学习