Modbus TCP 服务器指令 MB_SERVER V5.0 新功能概述
如下图1所示服务器指令 MB_SERVER 从 V5.0 以后增加了三个新功能,分别为:
访问数据块中的数据区域,而不是直接访问 MODBUS 地址
过程映像区的读访问限制
统计变量 NDR_immediate 和 DR_immediate
图1. MB_SERVER 指令
SIMATIC S7-1200 使用要求
TIA Portal V15 及以上版本
CPU 固件 V4.2 及以上版本
对于 Modbus TCP 基础版本 V4.0,请参见:
客户端:链接
服务器:链接
新功能实验环境和内容
在本应用实例中,通过以下产品进行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软件,新建一个项目命名为 "ModbusTCPV5.0",在项目中添加CPU1217C DC/DC/DC V4.4,为以太网接口新建一个子网并设置 IP地址为"192.168.0.1",如下图 3 所示。
图2. 分配IP地址
1.2、在 OB1组织块中添加Modbus TCP Server功能块 "MB_SERVER",软件将提示会为该FB块增加一个背景数据块,本例中为DB1"MB_SERVER_DB",如下图3所示。指令各引脚具体含义及如何分配与先前版本一致,请参考链接。
图3. 指令创建
2、访问数据块中的数据区域
用户可访问数据块中的数据区域,而不用直接访问过程映像和保持性寄存器。在此情况下,必须禁用数据块的“优化块访问”(Optimizedblock access) 属性,并且该属性不得单独存在于装载存储器中。
2.1、创建标准数据块,DB10(Area 1 for Input)、DB11(Area 2 for InputRegister)、DB12(Area 3 for Holding Register)、DB13(Area 4 for HoldingRegister)如下图 4 所示。并修改数据块属性为标准访问数据块,如下图5所示。
图4. 创建数据块
图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_type | UInt | 映射到此数据区域的 MODBUS 数据类型的标识符: |
db | UInt | 映射的数据区编号,该DB必须是非优化DB |
start | UInt | 映射到数据块中的 MODBUS 地址,从0开始 |
length | UInt | Bool数(对于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所示。
图6. 数据区域
2.3、仿真软件设置,如下图7-8所示。