自版本 V5.0起,访问数据块中的数据区域,而不是直接访问 MODBUS 地址 (S7-1200, S7-1500) 自版本 V5.0起,访问数据块中的数据区域,而不是直接访问 MODBUS 地址 对于 MB_SERVER 指令版本 V5.0 以及固件版本 V2.5(S7-1500 CPU) 和 V4.2 (S7-1200 CPU),用户可访问数据块中的数据区域,而不用直接访问过程映像和保持性寄存器。在此情况下, 必须禁用数据块的“优化块访问”(Optimizedblock access) 属性,并且该属性不得单独存在 于装载存储器中。 如果 MODBUS 请求到达时尚未定义相应功能代码的MODBUS 数据类型的数据区域,请求会 按之前的指令版本处理,即直接访问过程映像和保持性寄存器。 另一方面,如果已为功能代码的MODBUS 数据类型定义了数据区域,则指令 MB_SERVER 可 对该数据区域进行读写操作。具体是读操作还是写操作取决于作业类型。单个 MODBUS 请求只能对一个数据区域进行读写操作。如果要读取覆盖多个数据区域的保 持性寄存器,则需要多个 MODBUS 请求。数据区域定义规则 用户Zui多可在不同数据块中定义八个数据区域,每个数据块只能包含一个数据区域。单个 MODBUS请求只能对恰好一个数据区域进行读写操作。每个数据区域对应于一个 MODBUS 地址区域。数据区域用背景数据块的静态变量Data_Area_Array 定义;Data_Area_Array 是 一个包含八个元素的字段。如果要使用的数据区域不到八个,则所需数据区域必须紧密相连,没有间隙。在处理过程中,数据区域中的第一个空白条目会终止数据区域搜索。如果已定义字段元素 1、2、4 和 5,由 于字段元素 3 留空,则只会识别字段元素 1和 2。参数 STATUS (S7-1200, S7-1500) 参数 STATUS(常规状态信息) STATUS* (W#16#)说明 0000 指令已执行,且无任何错误。 0001 连接已建立。 0003 连接已终止。 7000 未激活任何调用且未建立任何连接(REQ=0, DISCONNECT=1)。 7001 首次调用。已触发连接建立操作。 7002中间调用。正在建立连接。STATUS* (W#16#) 说明 7003 正在终止连接。 7005 正在发送数据。 7006正在接收数据。 * 在程序编辑器中,状态代码可显示为整数或十六进制值。有关切换显示格式的信息,请参见“另请参见”。 参数STATUS(协议错误) STATUS* (W#16#) 来自“MB_SERVER” 的错误消息中的错误 代码 (B#16#) 说明8380 - 接收到的 Modbus 帧格式错误或字节数过少。 8381 01 不支持功能代码。 8382 03 数据长度错误: •接收到的 Modbus 帧长度无效。 • Modbus 帧头中输入的帧长度与实际接收到的字节数不一致。 • Modbus帧头中输入的字节数与实际接收到的字节数不一致(功能 15 和 16)。 8383 02数据地址错误或访问了保持寄存器(MB_HOLD_REG (页 6293) 参数)地 址以外的区域。 8384 03 数据值错误(功能05)。 8385 03 诊断代码不受支持(jinxian功能 08)。 *在程序编辑器中,状态代码可显示为整数或十六进制值。有关切换显示格式的信息,请参见“另请参见”。 参数 STATUS(参数错误)STATUS* (W#16#) 说明 80BB ActiveEstablished参数值无效(建立此类连接的标识符,请参见“CONNECT 参数 (页 6294)”): 只允许对服务器建立被动连接(active_established = FALSE)。 8187 参数 MB_HOLD_REG 中的指针无效。数据区过小。
STATUS*(W#16#) 说明 8389 数据区域定义无效: • data_type 值无效 • 数据块编号无效或不存在: – db 值无效 –数据块编号不存在 – 数据块编号已由另一个数据区域使用 – 对数据块进行了优化访问 – 数据块不在工作存储器中 • length值无效 • 属于同一 MODBUS 数据类型的 MODBUS 地址范围重叠 *在程序编辑器中,状态代码可显示为整数或十六进制值。有关切换显示格式的信息,请参见“另请参见”。 说明 内部使用的通信指令的错误代码对于“MB_SERVER”指令,除了会发生表中列出的错误外,还会发生由该指令所使用的通信指令(“TCON”、“TDISCON”、“TSEND”、“TRCV”、“T_DIAG”和“T_RESET”)所引起的错误。错误代码通过“MB_SERVER”指令的背景数据块来指定。相应指令的错误代码会显示在 "Static" 部分中的 STATUS 下。错误代码的含义在相应通信指令文档中提供。 说明 发送或接收数据时发生通信错误如果发送或接收数据时发生通信错误(80C4(临时通信错误。指定的连接临时终止。)、80C5(远程伙伴主动终止连接。)、80A1(指定的连接中断或尚未建立。)),现有连接 会终止。 即,可查看连接终止时所有返回的STATUS 值,以及连接中止时仅输出造成连接终止原因的 STATUS 代码。 示例:如果接收数据时发生临时通信错误,则先输出STATUS 7003 (ERROR=false),再 输出 80C4 (ERROR=true)。参数 数据 类型 含义data_ty pe UInt 映射到此数据区域的 MODBUS 数据类型的标识符: •0:空字段元素或未使用数据区域的标识符。此时,db、start 和 length 的值不相关。 • 1:过程映像输出(与功能代码1、5 和 15 一起使用) • 2:过程映像输入(与功能代码 2 一起使用) • 3:保持性寄存器(与功能代码 3、6 和 16一起使用) • 4:输入寄存器(与功能代码 4 一起使用) 注:如果已定义 MODBUS 数据类型的数据区域,则指令MB_SERVER 不能再直接访问此 MODBUS 数据类型。如果该数据类型的 MODBUS 请求的地址与定义的数据区域不对应,则STATUS 中会返回一个值 W#16#8383。 db UInt 后续定义的 MODBUS 寄存器或位所映射的目标数据块的编号。数据块编号在数据区域中必须是唯一的。不得在多个数据区域中定义相同的数据块编号。数据块必须支持标准访问,并且不得单独存在于加载存储器中。 数据区域也是从数据块的字节地址 0 开始。 允许值:1 到 60999start UInt 映射到数据块中的首个 MODBUS 地址(从地址 0.0 开始)。 允许值:0 到 65535 lengthUInt 位数(对于 data_type 的值 1 和 2)或寄存器数量(对于 data_type 的值 3 和 4)。 相同MODBUS 数据类型的 MODBUS 地址区域不得重叠。 允许值:1 到 65535 数据区域定义示例 •第一个示例:data_type = 3,db = 1,start = 10,length = 6 保持性寄存器 (data_type= 3) 映射在数据块 1 (db = 1)。Modbus 地址 10 (start = 10) 位 于数据字 0。Zui后有效的Modbus 地址 15 (length = 6) 位于数据字 5。 • 第二个示例:data_type = 2,db =15,start = 1700,length = 112 输入 (data_type = 2) 映射在数据块 15 (db =15)。Modbus 地址 1700 (start = 1700) 位 于数据字 0。Zui后有效的 Modbus 地址 1811(length = 112) 位于数据字 111。自版本 V5.0 起的过程映像读访问限制 (S7-1200, S7-1500)过程映像读访问限制 对于 MB_SERVER 指令版本 V5.0,用户可在过程映像输入中定义一个区域,在过程映像输出中定义一个区域,方便远程 MODBUS 设备 进行读访问。随后,远程 MODBUS 设备便不能对超出这些过程映像区域的地址进行读访问。 说明 过程映像写访问限制 自指令版本 V4.2起,可提供限制对特定区域的过程映像输出进行写访问的选项。 过程映像中读取区域的定义背景数据块的以下静态变量定义了过程映像中的读取区域: • QB_Read_Start:可由远程 MODBUS设备读取的过程映像输出中的第一个字节的地址(应 用于功能代码 1) • QB_Read_Count:可由远程 MODBUS设备读取的过程映像输出中的字节数(应用于功能 代码 1) • IB_Read_Start:可由远程 MODBUS设备读取的过程映像输入中的第一个字节的地址(应 用于功能代码 2 和 4) • IB_Read_Count:可由远程 MODBUS设备读取的过程映像输入中的字节数(应用于功能 代码 2 和 4) 背景数据块中用于定义过程映像中的读写区域的静态变量 下表介绍了指令MB_SERVER 背景数据块中的上述静态变量,可用于定义过程映像中的读区 域。 为确保完整性,表格中还列出了自版本 V4.2起,用于定义过程映像中的写区域的静态变量 (QB_Start 和 QB_Count)。