Modbus RTU V4及以上版本新功能
(一)概述以V16为例,如图1所示,Modbus (RTU)指令集为V4.4版本,该版本的 Modbus RTU指令有以下重要功能的更新。https://p6.toutiaoimg.com/img/pgc-image/cb6f7cef164d4f348a7344a95e68febf~tplv-tt-shrink:640:0.image图1 Modbus RTU V4 指令集1、Modbus_Master指令变化:
[*]DATA_PTR 接口的DB可以支持"优化块访问"
2、Modbus_Slave指令变化:
[*]MB_HOLD_REG 接口的DB可以支持"优化块访问"
[*]可以选择对输入输出过程映像区的读访问限制
[*]可以自定义访问DB中的数据区域,而不是默认的IQ区与MB_HOLD_REG)
(二)优化块的支持DATA_PTR 参数指向要写入或读取的 DB 或 M 地址。如果使用数据块,则必须创建一个全局数据块为读写 Modbus 从站提供数据存储位置。1、自指令版本V4.0起:该参数可以指向优化的DB数据块,在优化数据块中,允许使用以下数据类型的单个元素或者数组:Bool、Byte、Char、Word、Int、DWord、DInt、Real、USInt、UInt、UDInt、SInt或 WChar。MB_HOLD_REG指向Modbus RTU保持寄存器,可以是M存储区或者DB数据块。2、自指令版本V4.0起:该参数可以指向优化的DB数据块,在优化数据块中,允许使用以下数据类型的单个元素或者数组:Bool、Byte、Char、Word、Int、DWord、DInt、Real、USInt、UInt、UDInt、SInt或 WChar。3、举例说明:使用V16博途软件,1215CPU配置CM1241 RS422/485模块作为Modbus RTU主站,1214CPU配置CM1241 RS422/485模块作为Modbus RTU从站。(1)1215CPU在OB1中编写Modbus主站的程序,创建优化DB数据块DB3-Master,DATA_PTR填写该优化的DB块区域:https://p26.toutiaoimg.com/img/pgc-image/f12cf857ba1040a9b928cccf6077157a~tplv-tt-shrink:640:0.image
图2 1215CPU主站Modbus编程https://p6.toutiaoimg.com/img/pgc-image/b78d1106b9fa45ec8b047fab2b19ff90~tplv-tt-shrink:640:0.image
图3 优化的数据块DB3-Master(2)1214CPU在OB1中编写Modbus从站的程序,创建优化的DB数据块DB8,MB_HOLD_REG填写该优化的DB块区域:https://p6.toutiaoimg.com/img/pgc-image/947827427f9449cea0c3fd2bd7dfff77~tplv-tt-shrink:640:0.image
图4 1214CPU从站Modbus编程https://p9.toutiaoimg.com/img/pgc-image/a16d71965c0e431eb43102f7fe590076~tplv-tt-shrink:640:0.image
图5 优化的数据块DB8(3)主站Master的REQ管脚触发,主站读取从站的保持性寄存器40001,长度为5个字,读取结果如图所示:https://p3.toutiaoimg.com/img/pgc-image/cb8be71b6f334a24bda5d09c3a47f3da~tplv-tt-shrink:640:0.image
图6 主站Master读取到的数据(二)Modbus Slave指令的使用1、Modbus_Slave V4 背景DB的数据内容如下图7所示:https://p5.toutiaoimg.com/img/pgc-image/9e3a898d5b9c49fa91dfd4ffcbce4168~tplv-tt-shrink:640:0.image
图7 Modbus_Slave V4 背景数据块2、用户程序可以修改图7中圈出的变量:(1)红色为Modbus RTU V4 指令集中 Modbus_Slave 增加的变量,要求的版本是博途V15及其以上,CPU版本 V4.2及其以上。
[*]QB_Read_Start
[*]QB_Read_Count
[*]IB_Read_Start
[*]IB_Read_Count
[*]Data_Area_Array
(2)黑色为Modbus_Slave V3指令集中 Modbus_Slave V3增加的变量,要求的版本是博途V14SP1及其以上,CPU版本 V4.1.1及其以上。
[*]QB_Start
[*]QB_Count
(3)蓝色为Modbus_Slave V3指令集中 Modbus_Slave V2的变量(即初始版本),要求的版本是博途 V13SP1及其以上,CPU版本 V4.1.1以及其上。
[*]HR_Start_Offset
[*]Extended_Addressing
(三)过程映像读写访问限制1、过程映像中写入区域的定义:QB_Start:CPU 可写入的输出字节的起始地址QB_Count:CPU 可写入的输出字节的字节数。如果 QB_Count = 0,则CPU 的输出字节均无法写入。默认是QB_Start为0,QB_Count为65535,即所有输出字节区域均可以写访问。示例:要想只允许 QB10 到 QB17 可写入,则 QB_Start = 10且 QB_Count = 8。2、过程映像中读取区域的定义: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。(四)访问DB中的数据区域而不是直接访问Modbus地址Modbus_Slave 指令版本 V4.0 以及 S7-1200 CPU 固件 (FW) 版本 V4.2 起,用户可访问数据块中的数据区域,而不用直接访问过程映像和保持寄存器。为此,在全局 DB 属性页中,必须取消选中"仅存储在装载存储器中和"优化块访问复选框。1、如果 MODBUS 请求到达时,尚未定义相应功能代码的 MODBUS 数据类型的数据区域,请求会按之前的指令版本处理,即直接访问过程映像和保持性寄存器。2、如果 MODBUS 请求到达时,已定义功能代码的 MODBUS 数据类型的数据区域,则 Modbus_Slave 指令会对此数据区域执行读写操作。具体是读操作还是写操作取决于作业类型。3、单个 MODBUS 请求只能对一个数据区域进行读写操作。如果要读取覆盖多个数据区域的保持性寄存器,则需要多个 MODBUS 请求。4、数据区域的定义规则如下:
[*]最多可以定义8个数据区,位于Data_Area_Array中。
[*]数据区数组元素定义必须连续,如果中间某数组元素定义无效,则后面的区域不生效。
[*]如果在数据区定义了保持寄存器,则MB_HOLD_REG映射失效,如果在数据区定义了过程映像输出,则对应的Q区映射失效,如果在数据区定义了过程映像输入,则对应的I区映射失效,如果在数据区定义了输入寄存器,则对应的AI区映射失效。也就是说,如果在数据区内没有定义哪个区域,则原有的映射依然保留。
[*]单个MODBUS 请求只能对恰好一个数据区域进行读写操作。
[*]每个字段元素 Data_Area_Array(其中 1 <= x <= 8)都是 MB_DataArea 类型的UDT,结构参见表1:
参数数据类型含义
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)
表1 Data_Area_Array数组的元素及其含义4、举例说明:本例中,使用V16博途软件,1215CPU配置CM1241 RS422/485模块作为Modbus RTU主站,1214CPU配置CM1241 RS422/485模块作为Modbus RTU从站,主站访问从站的数据块 (DB) 中的数据区域:(1)主站配置:在OB1中,拖入Modbus_Comm_Load 指令和Modbus_Master 指令,MODE=0,DATA_ADDR=40006,DATA_LEN=5,如图8所示:https://p9.toutiaoimg.com/img/pgc-image/2fdc040d6f5d4219adfc16ec0c800fe5~tplv-tt-shrink:640:0.image
图8 主站调用Master指令(2)从站配置:在OB1中,拖入Modbus_Comm_Load 指令和Modbus_Slave指令,参考图4所示,从站的背景DB中Data_Area_Array进行如图9配置:https://p6.toutiaoimg.com/img/pgc-image/a716389cb1b742dbac226bd2c4ececdc~tplv-tt-shrink:640:0.image
图9 1214CPU Modbus_Slave背景DB中Data_Area_ArrayData_Area_Array:data_type = 3,db = 3,start = 0,length = 5,,即DB3.DBW0-DB3.DBW8对应40001-40005。Data_Area_Array:data_type = 3,db = 4,start = 5,length = 5,,即DB4.DBW0-DB4.DBW8对应40006-40010。Data_Area_Array:data_type = 3,db = 5,start = 10,length = 5,,即DB5.DBW0-DB5.DBW8对应40011-40015。Data_Area_Array:data_type = 0,db = 0,start = 0,length = 0。Data_Area_Array:data_type = 3,db = 6,start = 15,length = 5,即DB6.DBW0-DB6.DBW8对应40016-40020,由于Data_Area_Array参数为空,所以Data_Area_Array参数失效。(3)在1214CPU创建4个非优化DB块,DB3/DB4/DB5/DB6,如图11所示:https://p9.toutiaoimg.com/img/pgc-image/6e79ff8b171e4a038d63b03896e63f7a~tplv-tt-shrink:640:0.image
图11 1214CPU创建数据块(4)1215CPU的Master块读取40006-40010地址,对应1214CPU的DB4块中的DB4.DBW0-DB4.DBW8内容,Master块读取到内容如图12所示:https://p5.toutiaoimg.com/img/pgc-image/ccab3e5429ac414e92d88de6343911ee~tplv-tt-shrink:640:0.image
图12 主站CPU读取到的数据(5)如果主站Master读取从站Modbus地址40016,数据长度5,如图13所示:https://p6.toutiaoimg.com/img/pgc-image/d7afc0e7921942de80be36c41609067f~tplv-tt-shrink:640:0.image
图13 主站调用Master指令(6)由于从站1214CPU没有40016-40020地址对应的数据区域,所以Master指令执行之后报错,如图14所示,16#8383:请求帧中的数据地址无效。https://p5.toutiaoimg.com/img/pgc-image/1673c9375d7c496991d32c0a19820a23~tplv-tt-shrink:640:0.image
图14 Master指令执行报错(五)HR_Start_Offset1、HR_Start_Offset 用于指定 Modbus 保持寄存器的起始地址,存储在Modbus_Slave 背景数据块中,默认是0。2、Modbus 保持寄存器地址从 40001 或 400001 开始。这些地址与保持寄存器的 PLC 存储器起始地址对应。通过组态"HR_Start_Offset"变量,可以将 Modbus 保持寄存器的起始地址定义为除 40001 或 400001 之外的其它值。(1)例如,如果保持寄存器被组态为起始于 MW100 并且长度为 100 个字(即MB_HOLD_REG设置为P#M100.0 WORD 100)。偏移量 20 可指定保持寄存器的起始地址为 40021 而不是 40001。低于 40021 和高于 400119 的任何地址都将导致寻址错误。
HR_Start_Offset地址最小值最大值
0Modbus地址4000140099
S7-1200地址MW100MW298
20Modbus地址4002140119
S7-1200地址MW100MW298
(2)例如,将 Modbus_Slave 放入 LAD 程序段后,可以切换到先前的程序段,分配HR_Start_Offset 值。该值必须在执行 Modbus_Slave 前分配,如图6所示:https://p3.toutiaoimg.com/img/pgc-image/582529d7a966409198ad2def64a7bcbc~tplv-tt-shrink:640:0.image
图15 从站的Slave编程注意:使用Data_Area_Array修改保持寄存器区域,不建议修改HR_Start_Offset。(六)Extended_AddressingModbus 从站寻址可组态为单字节(Modbus 标准方式)或双字节。扩展寻址用于对单一网络内地址超过 247 进行寻址。选择扩展寻址后,最多可以对 65535 个地址进行寻址。1、Extended_Addressing 为FALSE(默认设置):1 字节地址,地址范围0 到 247。2、Extended_Addressing 为TRUE :2 字节地址,地址范围0 到 65535。来源:公众号(自动化与工程技术)
真是被感动的痛哭流涕……
感恩无私的分享与奉献 :) 路过打卡,为优质内容疯狂打 call 路过混个脸熟,顺便为优质内容打 call~ 打卡路过,支持优质原创内容~ 同款经历!我当初也这么过来的😂 已转发给朋友,一起感受这份快乐~ 不请自来,只为说一句:太精彩了! 救命!这波发言太秀了,直接原地封神~
疯狂认同!楼主说出了我不敢说的话
页:
[1]
2