示例:通过静态变量HR_Start_Offset 进行寻址 Modbus 保持性寄存器的起始地址为 0(MB_CLIENT 为40.001)。在保持性寄存器中,这 些地址与 CPU 存储区的地址区域相对应。也可通过定义 HR_Start_Offset 变量,将Modbus 保持性寄存器的起始地址设置为不为 0。将 Modbus 地址映射到过程映像 “MB_SERVER”指令允许到达的Modbus 功能(1、2、4、5 和 15)直接读取和写入访问 CPU 的过程映像输入和输出(使用数据类型 BOOL 和WORD)。 对于 S7-1200-CPU,输入和输出过程映像的地址空间为 1 KB;对于 S7-1500-CPU,为 32 KB。下表列出了上述 Modbus 功能的地址空间。变量 数据类型 起始值 说明 Server_Message_ Count WORD 0相关服务器接收的报警的总数。 Xmt_Rcv_Count WORD 0 在发生错误时统计传输数的计数器。只有接收到无效 Modbus消 息时,该计数器才会递增。 Exception_Count WORD 0 专门统计 Modbus导致“MB_CLIENT”产生错误消息的错误数量的 计数器。 Success_Count WORD 0统计服务器成功执行的请求数量的事件计数器。 Connected BOOL FALSE 指示是否已建立与所指定客户端的连接:TRUE =已连接,FALSE = 未连接。
示例:保持性寄存器的起始地址为MW100,长度为 100 WORD。HR_Start_Offset 参数中的 偏移值表示,保持性寄存器的起始地址从 0 变为20。在低于 20 或高于 119 的地址对保持 性寄存器进行寻址时,将导致错误发生。Modbus 功能下表列出了“MB_SERVER”指令支持的所有 Modbus 功能。 功能代码 说明 01 读取输出位 02 读取输入位 03读取保持性寄存器 04 读取输入字 05 写入输出位 06 写入保持性寄存器 08 诊断功能: • 回送测试(子功能0x0000):“MB_SERVER”指令接收数据字并按原样返回 Modbus 客户端。 • 复位事件计数器(子功能0x000A):使用指令“MB_SERVER”,可复位以下事件计数器:“Success_Count”、“Xmt_Rcv_Count”、“Exception_Count”、“Server_Message_Count”和“Request_Count”。 11 诊断功能:获取通信的事件计数器“MB_SERVER”指令使用一个通信的内部事件计数器,记录发送到 Modbus 服务器上成功执行的 读写请求数。 执行功能 8 或11 时,事件计数器不会递增。这种情况同样适用于会导致通信错误的请求。例 如,发生协议错误(如,不支持所接收 Modbus请求中的功能代码)。 15 写入多个输出位 16 写入保持性寄存器 23 通过请求写入和读取保持性寄存器。有关两个 S7-1500CPU 之间的 Modbus TCP 通信的示例项目,请参见服务与支持网站中的条 目 ID 94766380 。 本例中使用了两个Modbus 功能。对于每个 Modbus 功能,使用 Modbus 块对(MB_CLIENT 和 MB_SERVER)建立Modbus TCP 连接。MB_HOLD_REG 参数 (S7-1200, S7-1500) 说明 MB_HOLD_REG参数是一个指向数据缓冲区的指针,该缓冲区用于存储从 Modbus 服务器读 取或向 Modbus服务器写入的数据。可使用全局数据块或位存储器 (M) 作为存储区。 • 数据块 (D) 中地址的Zui大数量取决于 CPU的Zui大数据块大小。 • 位存储器 (M) 中地址的Zui大数量取决于 CPU 的Zui大位存储区。下表举例说明了针对 Modbus 功能3(读取多个 WORD)、6(写入一个 WORD)、16(写 入多个 WORD)和 23(读写多个字)将 Modbus地址映射到保持寄存器的情况。CONNECT 参数 (S7-1200, S7-1500) MB_SERVER 指令版本 V4.2及以下版本的 CONNECT 参数的连接描述 “MB_SERVER”指令可使用 2 种不同的连接描述: • TCON_IP_v4结构的设定连接 该连接参数存储在 TCON_IP_v4 结构中,并通过调用指令“MB_SERVER”来建立连接。 • 通过结构TCON_Configured 组态的连接(jinxian S7-1500) CPU 已建立了组态连接。使用TCON_Configured 结构指定指令使用的现有连接。指令“MB_SERVER”的每个实例都需要一个唯一的连接。为每个指令实例都创建一个单独的 TCON_IP_v4 或TCON_Configured 结构来描述连接。 设定连接的连接描述 对于 CONNECT 参数的设定连接,使用以下结构的TCON_IP_v4. 描述连接确保仅在 TCON_IP_v4 结构中指定了 TCP 类型的连接。 字节 参数 数据类型 起始值 说明0 … 1 InterfaceID HW_ANY - 本地接口的硬件标识符 2 … 3 ID CONN_OUC -引用该连接(值范围:1 到 4095)。 该参数将唯一确定 CPU 中的连接。指令“MB_SERVER” 的每个实例必须使用唯一的ID。该 ID 还不得被不同通 信类型的其他指令使用。 注:对于固件版本为 V2.9 或更高版本的 S7-1500 CPU和固件版本为 V4.5 或更高版本的 S7-1200 CPU,ID 也 可能由指令“TCONSettings”提供。此时,ID超出值范 围 1 到 4095。 4 ConnectionType BYTE 11 连接类型 对于 TCP,选择11(十进制)。不允许使用其它连接 类型。如果使用了其它连接类型(如 UDP),该指令 的 STATUS 参数将输出相应的错误消息。5 ActiveEstablishe d BOOL FALSE 建立连接的方式所对应的 ID 对于被动连接建立,应选择 FALSE。6 … 9 RemoteAddress ARRAY [1..4] of BYTE 0.0.0.0 连接伙伴的 IP地址,例如,192.168.0.1: • addr[1] = 192 • addr[2] = 168 • addr[3] = 0 •addr[4] = 1 如果指令“MB_SERVER”要接受来自任何连接伙伴的连接 请求,应将“0.0.0.0”用作 IP 地址。10 … 11 RemotePort UINT 0 远程连接伙伴的端口号(值范围:1 到 49151)。如果指令“MB_SERVER”要接受来自远程伙伴任何端口的 连接请求,应将“0”用作端口号。 12 … 13 LocalPortUINT 502 本地连接伙伴的端口号(值范围:1 到 49151)。 此 IP 端口号定义 Modbus 客户端连接请求中要监视的IP 端口。 默认值为 502。说明 移植 V2.1 版“MB_SERVER”指令 参数 CONNECT_ID 和 IP_PORT映射到 TCON_IP_v4 结构中的 3.0 版“MB_SERVER”指令。 • “MB_SERVER”V2.1 指令的CONNECT_ID 参数对应于 TCON_IP_v4 的参数 ID。 • “MB_SERVER”V2.1 指令的 IP_PORT参数对应于 TCON_IP_v4 的参数 LocalPort。 组态连接的连接描述 对于 CONNECT参数的组态连接,使用以下结构的 TCON_Configured 描述连接。 确保仅在 TCON_Configured 结构中指定了TCP 类型的连接。 字节 参数 数据类型 起始值 说明 0 … 1 InterfaceID HW_ANY -本地接口的硬件标识符(值范围:0 到 65535)。 2 … 3 ID CONN_OUC - 引用该连接(值范围:1 到 4095)。ID 在 CPU 范围内必须是唯一的。ID 还不得被不同通信 类型的其他指令使用。 输入现有连接的连接 ID。 4ConnectionType BYTE - 连接类型 对于组态连接,选择 254(十进制)。