S7 通信 (S7-300,S7-400) S7 通信指令概述 (S7-300, S7-400) 分类 S7 通信需要对连接进行组态。用户程序中,可以通过各种指令调用已集成的通信函数。 这些指令可以分为以下几类: • 数据交换指令 • 操作模式更改指令 •操作模式查询指令 • 用于查询连接的各种指令 说明 如果 S7-300 CPU 没有以太网接口,则需要使用 S7-300 产品系列中的SIMATIC NET CP (页 9075) 来执行 S7-300 指令。 详细信息,请参见相关文档事件错误:模块不存在• 组态的插槽未占用。 • 实际模块类型与目标类型不匹配。 • 无可用分布式 I/O。 • 相应 SDB 中没有该模块的条目。对于“X_GET (页 9424)”、“X_PUT (页 9426)”、“I_GET(页 9406)”和 “I_PUT (页 9408)”可行。 80B3 只能读或只能写数据,例如,DB 写 保护对于“X_GET (页 9424)”、“X_PUT (页 9426)”、“I_GET(页 9406)”和 “I_PUT (页 9408)”可行。 80B4 指针 ANY 的数据类型错误,或不允许指定数据类型 ARRAY。 "对于“X_GET (页 9424)”、“X_PUT(页 9426)”、“I_GET (页 9406)”和 “I_PUT (页 9408)”:通信伙伴不支持VAR_ADDR 中指定的数据类型。 80B5 执行由于模式非法被拒绝 对于“X_SEND (页 9417)”可行。通过“AS_DIAL (页 9434)”: • 由于“AS_DIAL”的“DIAL”函数尚未完 成,通信指令处理被本地 TS适配器 拒绝。 • 已为 AS-AS 远程耦合设置了远 程连接,仍会请求“AS_DIAL”的 DIAL 函数。 80B6接收到的确认包含未知的错误代码。 - 80B7 传送数据的数据类型和/或长度与要 写入数据类型和/或长度的伙伴 CPU 上的区域不符。对于“X_PUT (页 9426)”和“I_PUT (页 9408)”: 80B8 - "对于“X_SEND(页 9417)”:通信伙伴 的“X_RCV (页 9419)”拒绝验收数据 (RD=NIL)。 80B9 -"对于“X_SEND (页 9417)”:数据块由 通信伙伴标识(EN_DT=0 时调用 “X_RCV(页 9419)”),因为伙伴处于 STOP 模式而未输入到用户程序中。 80BA 通信伙伴响应与通信帧不符。 - 80C0指定的连接正在由其它作业使用。
执行指令的 CPU上的资源不足,例 如: • 模块上正在执行的各种发送作业 已达到Zui大数量。 • 正在使用连接资源,例如接收数 据。 - 80C2通信伙伴上资源短缺,例如: • 通信伙伴当前正在处理Zui大数量 的作业。 • 所需的资源(存储器等)被占用。 • 工作存储器容量不足。(压缩存 储器)。 通过“AS_DIAL (页 9434)”: • 远程 CPU 上资源短缺。 • 具有 MPI 地址的远程CPU 不可用或 不存在。 80C3 建立连接时出错,例如: • 本地 S7 站未连接到 MPI 子网。 • 在 MPI子网中寻址到本地站。 • 不再能访问通信伙伴。 • 远程伙伴上资源短缺数据交换指令数据交换通信指令用于实现两个通信伙伴之间的数据交换。 如果通信指令仅存在于本地模 块上,则称之为单端组态数据交换。如果通信指令不仅存在于本地模块,也存在于远程模 块之上,则称之为双端组态数据交换。 指令 简要说明 "USEND(页 8700)" / "URCV (页 8703)" 快速非确认型的数据交换,与通信伙伴上的通信函数("URCV") 的顺序处理无关 (例如,运行和维护报警)。 这意味着,通信伙伴上的Zui新数据可以覆盖掉 原来的数据。 "BSEND(页 8706)" / "BRCV (页 8709)"将数据块安全地传送至通信伙伴。这意味着,通信伙伴上的接收功能 ("BRCV") 已经接收到数据之后,数据发送过程才算结束。 "GET(页 8694)" 在程序控制下读取变量,该功能无需通信伙伴用户程序中的任何其它通信函 数。 "PUT(页 8697)" 在程序控制下写入变量,该功能无需通信伙伴用户程序中的任何其它通信函 数。 "PRINT(页 8727)" 将数据发送至打印机(仅适用于 S7-400: CP441)。 操作模式更改指令使用操作模式更改指令,可以控制远程设备的操作模式。 用于更改操作模式的数据交换指令采用单端组态方式。 指令 简要说明 "START(页 8734)" 当 S7-300/400 CPU 处于 STOP 模式时,该指令可以触发其暖启动过程。 "STOP(页 8736)" S7-300/400 CPU 处于 RUN、HOLD 或者启动模式时,该指令可以使其处于 STOP模式。 "RESUME (页 8738)" 当 S7-400 CPU 处于 STOP模式时,该指令可以触发其热启动过程。操作模式查询指令 使用操作模式查询指令,可以获得远程设备操作模式的相关信息。 使用"STATUS" 指令时,数据交换在单端进行组态;使用 "USTATUS (页 8743)" 指令时,数据 交换在双端进行组态。 指令简要说明 "STATUS (页 8740)" 在用户请求时为用户提供通信伙伴 (S7-400 CPU) 的操作模式。"USTATUS (页 8743)" 如果已经设置了相应的连接属性(发送操作模式消息),则在 S7-400 CPU 的操作模式发生更改时,该指令会接收到 S7-400 CPU 的操作模式信息。 连接查询指令 S7-400 指令 S7-300 指令简要说明 "CONTROL (页 8725)" - 查询属于某个指令实例的连接的状态。 - "C_CNTRL )" 使用连接ID 查询连接的状态。 说明 也可以使用指令 "C_DIAG (页 7978)" 诊断当前的连接状态(仅适用于S7-400)。 数据一致性 (S7-300, S7-400) 定义 并发过程可以同步更改的数据区称为一致性数据区。将其大小超出一致性数据区的 数据区可作为一个整体。这意味着,其大小超出一致性数据区的连续数据区中,可能包含新的数据块和旧的一致 性数据块。示例如果中断通信块的执行过程(例如,由优先级更高的硬件中断 OB 中断),则会出现不一致 性现象。 如果该 OB中的用户程序对已由该通信块局部处理的数据进行更改,则传送数据开 始于: • 部分开始于处理硬件中断之前 • 部分开始于处理硬件中断之后这意味着,这些数据是不一致的(不连续)。 结论 传输大型数据包时,如果需要保证被传输数据的一致性,则不能中断传输过程。 可以通过 延长CPU 的中断响应时间,来避免中断传输过程。 SIMATIC 的数据一致性 • 如果用户程序中包含通信函数(例如,用于访问普通数据的"BSEND (页 8706)" / "BRCV(页 8709)"),则可能要协调对该数据区的访问。例如,使用 DONE 参数。 据此,在用户程序中,可以确保采用通信块本地传输的通信区的数据一致性。 • 对于 S7 通信函数(例如, "PUT (页8697)" /"GET (页8694)" 或者使用 OP 通信的读/ 写函数),在编程或者组态时就必须考虑到一致性数据区的大小。这是因为,目标设备(服务器)的用户程序中没有可用于同步用户程序中通信数据的通信块。 • 使用 S7-300时,在操作系统的循环控制点,在保持数据一致性的情况下将通信数据复制 到各个块(每块为 32 字节)中的用户存储器。对于大型数据区,无法确保数据的一致 性。 如果要求达到规定的数据一致性,则用户程序中的通信数据不应超过 32 个字节(Zui 多为 8个字节,视具体版本而定)。 • 与此不同是,在 S7-400 中,通信数据的处理不是在循环控制点、而是在程序循环期间的固定时间片内完成。 变量的一致性则由系统保证。 • 使用指令 "PUT (页8697)" / "GET (页8694)"或者在读/写变量(例如,由 OP 或 OS 读/ 写)时可以在保持一致性的情况下访问这些通信区。 说明关于数据一致性的其它信息,请参见具体指令的描述信息。S7 通信指令的常见参数 (S7-300, S7-400) 分类 S7通信指令的参数按照功能可以分为以下五类: 1. 控制参数用于激活某条指令。 2. 寻址参数用于远程通信伙伴的寻址。 3.发送参数用于指向将发送至远程伙伴的数据区。 4. 接收参数用于指向将从远程伙伴接收数据的存放数据区。 5.状态参数用于监控指令是否正确地完成任务,也可以用来分析已经出现的错误。 控制参数调用该指令时,仅当相应的控制参数持有某个确定值(例如,被置位),或者自前一次调用后该值发生了某个特定改变(例如,上升沿),才会激活数据交换功能。 说明 S7-300 的首次调用 对于首次调用,参数 REQ 被设置为FALSE 。 寻址参数 参数 说明 ID 请参见本地连接说明(由连接组态指定)。 注: S7 通信指令中不得使用 IDW#16#EEEE。 R_ID 使用参数 R_ID,可以指定一个发送和接收指令对: 发送端和接收端的指令中 的参数 R_ID必须相互匹配。 据此,通过同一个逻辑连接,可以实现多个指令对之间的通信。 • R_ID 的格式必须为:DW#16#。• 对于当前连接来说, R_ID 中指定的逻辑连接指令对必须具备惟一性。 指令 4.2 指令 (S7-300,S7-400) 对 PLC 进行编程 编程和操作手册, 11/2023 8687 参数 PI_NAME的描述仅适用于相关指令 说明 寻址参数 ID 和 R_ID S7-300: 在运行期间,可以更改寻址参数 ID 和 R_ID的设置。 前一个作业结束后,都会对 每个新作业验证新参数。 使用以下选项,可以减少背景数据块的数量,进而减少必需的工作存储器: 1.借助变量 ID,通过单个背景数据块,可以使用多个连接。 2. 使用变量R_ID,对于单个背景的单个作业,可以为其定义多个发送和接收指令对。 3. 可以组合使用情景 1 和情景 2.请注意,在上一个作业完成之后,新参数才会生效。激活发送操作时,发送端指令内的参数 R_ID 必须与接收端的对应指令参数相匹配。S7-400: 仅在首次调用指令或将实例装载到另一实例上时(从实例获得实参或预定义值), 才会对寻址参数 ID 和 R_ID进行求值。 在下一次暖启动或冷启动之前,首次调用将确 定与远程伙伴之间的通信关系(连接)。 状态参数使用状态参数,可以监视指令是否已经正确地完成自己的任务,或者,该指令是否仍处于运 行状态。 状态参数也可以用来显示错误。 说明状态参数仅在一个循环之内有效。即,从当前调用开始后的第一条命令到下一次调用开始之 前。每一个指令循环之后,都必须对这些参数进行求值。