可以使用DATA_ADDR 和 MODE 参数来选择 Modbus 功能代码。 DATA_ADDR(从站中的 Modbus 起始地址):指定在Modbus 从站中访问的数据的起始地址。 Modbus_Master 指令使用 MODE 输入,不使用功能代码输入。MODE 和DATA_ADDR 结合 使用可指定在实际 Modbus 帧中使用的功能代码。下表显示了 MODE 参数、Modbus 功能代 码和DATA_ADDR 中 Modbus 地址范围之间的关系。1 在扩展寻址中(请参见 Extended_Adressing参数),Zui大数据长度根据功能的数据类型而缩减 1 字节或 1 个字。 2 MODE 2 允许使用 Modbus 功能 15 和 16写入 1 个或多个输出位和 1 个或多个保持寄存器。 MODE 1 使用 Modbus 功能 5 和 6 写入 1 个输出位和 1个保持寄存器,使用 Modbus 功能 15 和 16 写入多个输 出位和多个保持寄存器。 3 以下情况适用于S7-300/400/WinAC:不支持。 DATA_PTR 参数 DATA_PTR参数指向在其中执行读取或写入的数据块或位存储器地址。如果使用数据块,则 必须创建全局数据块,以便为 Modbus从站上的读取或写入过程提供数据存储器。 说明 S7-1200/1500 - 使用 DATA_PTR 的访问的数据块必须支持直接寻址数据块必须允许直接(juedui)寻址和符号寻址。 说明 使用功能代码 5 功能代码 5 用于设置或删除各个位。 设置位时,必须在通过DATA_PTR 寻址到的 DB 或位存储区的首个字中指定值“16#FF00”。 • 对于S7-1200,也可以指定值“16#0100”以设置位。 • 为复位某个位,必须在通过 DATA_PTR 寻址到 DB或位存储区的首个字中指定值“16#0000”。 所有其它值通过 ERROR = TRUE 和 STATUS = 16#8384拒绝。
DATA_PTR 参数的数据块结构• 这些数据类型对读取 Modbus 地址范围 (DATA_PTR) 30001 到 39999、40001 到 49999 和400001 到 465535 中的字有效,以及对写入 Modbus 地址范围(DATA_PTR 参数) 40001 到 49999和 400001 到 465535 中的字有效。 – 数据类型 WORD、UINT 或 INT 的标准数组 – WORD、UINT 或INT 类型的指定结构,其中每个元素都有唯一的名称和一个 16 位的 数据类型。 – 指定的复杂结构,其中每个元素都有唯一的名称和一个16 位或 32 位的数据类型。 • 用于读/写 Modbus 地址范围(DATA_PTR 参数)00001 到 09999中的位和用于读取 10001 到 19999 中的位。 – 布尔数据类型的标准字段。 – 来自明确指定的布尔变量的指定布尔结构。 •为了降低数据损坏的风险,推荐为每个 Modbus_Master 指令保留其自身的独立存储区。 • DATA_PTR的数据区不必位于相同的全局数据块中。可以为 Modbus 读取过程创建具有多 个区域的数据块,为 Modbus写入过程创建数据块或为每个从站创建数据块。 指令版本 版本 3.0 的功能与版本 2.4完全相同,本次版本升级仅仅体现在内部措施方面。 参见 Modbus_Slave: 作为 Modbus 从站进行通信(页 8894) Modbus_Slave: 作为 Modbus 从站进行通信 (S7-300, S7-400) 说明 使用CM1241 自模块的固件版本 V2.1 起,才能通过 CM1241 使用该指令。说明 程序可利用 CM(RS422/485 或RS232)端口,使用 Modbus_Slave 指令来作为 Modbus 从 站进行通信。添加指令时,STEP 7将自动创建背景数据块。Modbus_Comm_Load 指令的 MB_DB 参数必须连接到 Modbus_Slave指令的(静态)MB_DB 参数。 说明 无法为 Modbus_Slave 指令的背景数据块激活保持 (Retain)。 参数 参数声明 数据类型 标准 说明 S7- 1200/15 00 S7- 300/400 / WinAC MB_ADDR IN UIntWord ‑ Modbus 从站的标准寻址: 标准寻址范围(1 到 247) 扩展寻址范围(0 到 65535) 注:0 是广播地址COM_RST IN/OUT --- Bool FALSE Modbus_Slave 指令的初始化 将使用 TRUE对指令进行初始化。随后会将 COM_RST 复位为 FALSE。 注: 该参数仅适用于 S7-300/400 指令。S7-1200/15 00 S7- 300/400 / WinAC MB_HOLD _REG IN/OUT Variant Any ‑Modbus 保持寄存器 DB 的指针:Modbus 保持寄存 器可能为标志的存储区或者数据块。 自指令版本 V4.0 起:该参数必须指向长度为 16 位以上的存储区,否则会 导致出现错误消息 16#8187。这一要求对于单个元 素、数组、STRUCT 和UDT 均适用。例如,如果 Single Bool 或数组中包含的布尔元素个数小于 16, 则会导致出现错误消息。 如果长度不是 16位的倍数,则存储区末端的剩余位 无法通过 Modbus_Slave 指令读取或写入。 该参数可指向优化存储区。在优化存储区中,允许使用以下数据类型的单个元素或数组:Bool, Byte, Char, Word, Int, DWord, DInt, Real,USInt, UInt, UDInt, SInt, WChar。所有其它数据类型都会导致出 现错误消息 16#818C。 NDROUT Bool FALSE 可用的新数据: • FALSE - 无新数据 • TRUE – 表示新数据已由 Modbus 主站写入如果上一个请求完成并且没有错误,NDR 位将变为 TRUE 并保持一个周期。 DR OUT Bool FALSE 读取数据: •FALSE - 未读取数据 • TRUE - 表示该指令已将 Modbus 主站接收到的数 据存储在目标区域中。如果上一个请求完成并且没有错误,DR 位将变为 TRUE 并保持一个周期。 ERROR OUT Bool FALSE如果上一个请求完成出错,则 ERROR 位将变为 TRUE 并保持一个周期。如果执行因错误而终止,则 STATUS参数中的错误代码仅在 ERROR = TRUE 的周期 内有效。 STATUS OUT Word 0错误代码(请参见错误消息。Modbus 通信的功能代码(1、2、4、5 和 15)可直接在 CPU 的过程映像输入和过程映像输出中读取或写入位和字。对于这些功能代码,必须将 MB_HOLD_REG 参数定义为大于一个 字节的数据类型。下表显示了将 Modbus地址分配给 CPU 中过程映像的示例。Modbus 通信的功能代码(3、6 和 16)使用 Modbus保持寄存器,此寄存器是标志的存储 区或者数据块中的一个地址区。保持寄存器的类型由 Modbus_Slave 指令的MB_HOLD_REG 参数指定。 说明 S7-1200/1500 - MB_HOLD_REG 数据块的类型 具有 Modbus保持存器的数据块必须允许直接(juedui)寻址和符号寻址。 表格 4-389 诊断功能 S7-1200 Modbus_Slave 的Modbus 诊断功能 功能代码 子功能 说明 08 0000H 输出回应测试的请求数据:Modbus_Slave指令会将所接收数据字的回应返回 到 Modbus 主站。 08 000AH 清除通信事件计数器:Modbus_Slave指令将清除用于 Modbus 功能 11 的通 信事件计数器。 11 调用通信事件计数器:Modbus_Slave指令使用内部通信事件计数器来检测将 发送到 Modbus 从站的成功的 Modbus 读取和 Modbus 写入数量。该计数器不随功能 8、功能 11 和广播请求而递增。它也不会随导致通信错误(例如,奇 偶校验或 CRC 错误)的请求而递增。Modbus_Slave 指令支持来自 Modbus 主站的广播写入请求,只要该请求包括到有效地址的访问即可。针对广播功能不支持的功能代码,Modbus_Slave 指令将生成错误代码 16#8188。 指令版本 V3.0 中Modbus 从站的变量 下表显示了可在程序中使用的 Modbus_Slave 背景数据块中的公共静态变量。 表格 4-390Modbus 从站的变量 变量 数据类 型 标准 说明 HR_Start_Offset Word 0 为 Modbus保持寄存器指定起始地址(默认 = 0) QB_Start Word 0 输出的有效可写入寻址范围起始地址(字节 0 到 65535)注: 该变量不适用于 S7-300、S7-400 和 WinAC。