摘要: 自V4.0及以上版本的Modbus_Slave指令,可把多个DB数据映射到任意Modbus地址开始的数据区域,实现了数据的灵活访问
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 使用条件:
本示例通过以下产品使用V4.3版本Modbus_Slave指令构建Modbus RTU从站,实现了在1217 CPU 中构建多个DB数据块与不同Modbus寄存器地址的映射关系,并进行了数据读写访问验证。
创建项目完成后,添加用于ModbusRTU通信的串口模块,本例选择的是CB1241串口通信板,接口参数如图3-1所示。
图3-1 接口参数
在 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 通信指令
创建用于映射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 数据块属性
映射关系在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数据类型
借助Modbus Poll测试对不同数据区域的访问,通信配置如图3-6所示,测试结果如图3-7所示。
注意:一个Modbus请求只能对一个数据区域进行读写操作,如果需要访问多个数据区域,需要多个Modbus请求。
图3-6通信配置
图3-7 数据访问