概述
S7-1200 CPU V4.1 版与 STEP 7 V13 SP1 一起,扩展了 Modbus TCP
的功能,可使用增强型 T 块指令。 出于这个原因,S7-1200 支持两组 PtP 指令:
- 早期ModbusTCP 指令: 这些 Modbus RTU 指令存在于 S7-1200 的 V4.0版本之前。
- ModbusTCP指令: 这些 Modbus TCP 指令提供了早期指令的全部功能。
选择Modbus TCP 指令的版本
在 STEP 7 中可使用两个版本的 Modbus TCP 指令:
- 版本0 最初在 STEP 7 Basic/Professional V13 中提供。
- 版本1 在 STEP 7 Basic/Professional V13 SP1 中提供。 可以从兼容性和移植便利性方面考虑,选择将相应的指令版本插入用户程序中。
不要在同一 CPU 程序中同时使用 3.0 和 3.1 指令版本。 用户程序的 Modbus TCP 指令必须具有相同的主版本号(1.x、2.y 或 V.z)。 主版本组内的各个指令可具有不同的次版本号 (1.x)。
单击指令树任务卡上的图标可启用指令树的标题和列。
要更改 Modbus TCP指令的版本,请从下拉列表中选择相应版本。 可以选择一组指令或分别选择各个指令。
使用指令树将 Modbus TCP 指令放入程序时,将在项目树中创建新的 FB 实例。 在项目树的“PLC_x > 程序块 > 系统块 > 程序资源”(PLC_x > Program blocks > System blocks > Program resources) 下可看到新的 FB 实例。
要确认程序中 Modbus TCP 指令的版本,必须检查项目树的属性而不是程序编辑器中显示的框的属性。 选择项目树的 Modbus TCP FB 实例,单击右键,选择“属性”(Properties),然后选择“信息”(Information) 页查看 Modbus TCP 指令的版本号。
Modbus TCP 指令
MB_CLIENT(作为 Modbus TCP 客户端使用 PROFINET 进行通信)指令
表格 13- 53 MB_CLIENT 指令
表格 13- 54 参数的数据类型
说明
CPU 固件版本要求
本手册中所述的 Modbus TCP 指令要求固件版本为 V4.1 或更高版本。
REQ 参数
FALSE = 无 Modbus 通信请求
TRUE = 请求与 Modbus TCP 服务器通信
如果 MB_CLIENT 的实例没有激活且参数 DISCONNECT=0,当 REQ=1
时,将启动一个新的 Modbus 请求。 如果尚未建立连接,则建立一个新的连接。
如果在当前请求完成前 DISCONNECT=0 且 REQ=1,从而再次执行 MB_CLIENT 的同一个实例,则不会进行后续 Modbus 传送。 但是,一旦完成当前请求,如果通过 REQ=1 执行 MB_CLIENT,可处理新的请求。
完成当前 MB_CLIENT 通信请求后,DONE 位将在一个周期内保持为 TRUE。 DONE位可用作定时门,对多个 MB_CLIENT 请求进行排序。
说明
MB_CLIENT 处理期间输入数据的一致性
Modbus 客户端启动 Modbus 操作后,将在内部保存所有输入状态,然后在每次后续调用时进行比较。 比较用于确定此特定调用是否是活动客户端请求的发起者。 可使用一个公用背景数据块执行多个 MB_CLIENT 调用。
在主动处理 MB_CLIENT 操作期间应不改变输入,这一点很重要。 若不遵循此规则,MB_CLIENT 无法确定活动实例。
MB_MODE 和 MB_DATA_ADDR 参数用于选择 Modbus 通信功能
MB_CLIENT 指令使用 MB_MODE 输入而非功能代码。MB_DATA_ADDR 分配远程数据的起始 Modbus 地址。
MB_MODE 和 MB_DATA_ADDR 一起确定实际 Modbus 消息中使用的功能代码。 下表列出了参数 MB_MODE、MB_DATA_ADDR 和 Modbus 功能之间的对应关系。
表格 13- 55 Modbus 功能
说明
MB_DATA_PTR 分配一个缓冲区来存储从 Modbus TCP 服务器读取或写入到该服务器的数据 数据缓冲区可定位于标准全局 DB 或 M 存储区地址中。
对于 M 存储器中的缓冲区,使用 Any 指针格式。 具体格式为 P#“位地址” “数据类型”“长度”,例如 P#M1000.0 WORD 500。
MB_DATA_PTR 参数指定一个通信缓冲区
- MB_CLIENT通信功能:
– 从 Modbus 服务器地址(00001 到 09999)读写 1 位数据
– 从 Modbus 服务器地址(10001 到 19999)读取 1 位