AG_RECV/AG_LRECV/AG_SRECV (S7-300, S7-400)AG_RECV/AG_LRECV/AG_SRECV(工业以太网) (S7-300, S7-400) 说明AG_RECV/AG_LRECV/AG_SRECV 指令将接收来自以太网 CP 的已组态连接上传送的数据。为接收数据指定的数据区可以是一个存储位区域或一个数据块区域。 当可以从以太网 CP 上接收数据时,指示无错执行该功能。 注:除非声明,否则下面的所有信息对 AG_RECV 和 AG_LRECV/AG_SRECV 都适用。
AG_RECV/AG_LRECV/AG_SRECV 的参数 (IE) (S7-300, S7-400)形式参数的说明 下表对 AG_RECV/AG_LRECV/AG_SRECV 指令的所有形式参数进行了说明: 参数 声明 数据类 型取值范围 说明 ID INPUT INT 1、2 到 64 (S7-400) 1、2 到 16 (S7-300) 在 ID 参数中指定ISO 传输连接的连接数目。 LADDR INPUT WORD 模块起始地址 如果通过 STEP 7 组态 CP,则会在组态表中显示模块起始地址。 在此指定该地址。参数 声明 数据类 型 取值范围 说明 RECV INPUT ANY 指定地址和长度数据区的地址指向下列两个位置之一: • 存储器位区 • 数据块区 关于长度的注意事项: 如果通过 RECV 参数将长度也限制为 212字节, 则当传送的数据记录不超过 212 字节时,性能将 得到改善。 使用 AG_SRECV 时的注意事项: 使用 AG_SRECV时,始终应将 RECV 设为Zui大接收 缓冲区长度,即 1452 字节。 否则,在某些情况 下会出现下列错误:NDR=0;ERROR=1;STATUS=8185H NDR OUTPUT BOOL 0: - 1:新数据该参数指示是否接受了新数据。 对于与 ERROR 和 STATUS 参数一起使用时的含义, 请参见AG_RECV/AG_LRECV/AG_SRECV(工业以 太网) (页 9087) ERROR OUTPUT BOOL0: - 1:错误 错误代码 对于与 NDR 和 STATUS 参数一起使用时的含义, 请参见AG_RECV/AG_LRECV/AG_SRECV(工业以 太网)状态代码 对于与 NDR 和 ERROR 参数一起使用时的含义,请参见 AG_RECV/AG_LRECV/AG_SRECV(工业以太 网) (页 9087)。 LEN OUTPUT INT在 ISO 传输和 ISO– on–TCP 上: 1,2,...8192 在 UDP 上: 1,2,...2048 指定从以太网 CP接受的字节数,将其输入到数据 区中。 请注意指令的类型: • 对于 S7-300 AG_RECV 的当前版本Zui多允许传送 8192个字 节(对于 UDP 来说为 2048 个字节)。 • 对于 S7-400 使用 AG_RECV 时,将数据区限制为Zui多 240个字节。 使用 AG_SRECV 时,将数据区限制为Zui多 1452 个字节。 参数 DONE、ERROR 和 STATUS (IE)(S7-300, S7-400) 条件代码 下表显示了由 NDR、ERROR 和 STATUS参数构成的代码,其中的参数必须由用户程序进行评 估。 说明 对于 STATUS 中以 8FxxH编码的条目,请参见引用的系统程序块说明中的输出参数 RET_VAL 的相关信息。 可在 STEP 7中查询使用了哪些系统程序块以及哪些系统程序块与错误评估相关。NDR ERROR STATUS 含义 0 1 8183H • 组态丢失;• 以太网 CP 上尚未启动 ISO 传输服务; • 不建立连接。 0 1 8184H • 为 RECV 参数指定非法类型; •系统错误。 0 1 8185H 目标缓冲区(RECV)太短。 0 1 8186H ID 参数无效。 ID != 1、2 到 16(S7-300)。 ID != 1、2 到 64 (S7-400)。 0 1 8304H 不建立连接。 在等待至少 100毫秒之后,才能尝试发送作业。 0 1 8F23H 源区域无效,例如: 该区在 DB 中不存在。 0 1 8F25H写入参数时发生区域错误。 0 1 8F29H 写入参数时发生对准错误 0 1 8F30H 该参数位于具有写保护的第一个当前数据块中。0 1 8F31H 该参数位于具有写保护的第二个当前数据块中。 0 1 8F32H 参数包含的 DB 编号太大。 0 1 8F33HDB 编号错误 0 1 8F3AH 没有装载目标区域(DB)。 0 1 8F43H 将参数写入 I/O 区域超时。 0 1 8F45H在访问路径中要写入的参数地址被禁用。 0 1 8F7FH 内部错误,例如非法 ANY 引用。 0 1 8090H •具有该模块起始地址的模块不存在或 CPU 处于 STOP 模式 • 所使用的指令与正在使用的系统系列不匹配(请记住为 S7300 和S7400 使 用不同的指令)。 0 1 8091H 模块起始地址不是一个双字边界。 0 1 8092H 在 ANY引用中,指定了一个非 BYTE 的类型。 (jinxian S7-400) 0 1 80A0H 从模块中读取否定确认。 0 180A4H 没有建立 CPU 与 CP 之间的通讯总线连接。 0 1 80B0H 该模块不能识别数据记录。可能的原因: •目标区域无效。 • 目标区域过短。 • 用于接收数据的目标区域不够大。解决方法:运行另一个具有Zui大接收缓冲区的接收调用。无论采用何种连接类 型(单播/组播/广播)和设备系列(S7-300/S7-400),均可采用此方法。 0 1 80B2H 没有建立 CPU 与 CP 之间的通讯总线连接。 0 180C0H 无法读取数据记录。 0 1 80C1H 当前正在处理所指定的数据记录。 0 1 80C2H 未决的作业太多。 0 180C3H CPU 资源(存储器)被占用。 0 1 80C4H 通信错误 临时发生,且在用户程序中重复执行通常可以纠正该故障 0 180D2H 模块起始地址错误。通过 FETCH/WRITE 进行访问协调的指令 (S7-300, S7-400) 通过FETCH/WRITE 进行访问协调的指令 (S7-300, S7-400) 概述 下列指令均可用于 FETCH/WRITE功能,以便协调访问: 指令 可用于: 含义 S7-300 S7-400 AG_LOCK通过 FETCH/WRITE 锁定外部数据访问。 AG_UNLOCK通过 FETCH/WRITE 释放外部数据 访问。组态时须当心 如果使用 AG_LOCK 和AG_UNLOCK,则必须在组态中为 S7400 站中的 CP 指定下列信息: • 在?属性 > 地址?下 必须选择揕OCK/UNLOCK 的地址设置?选项(若提供该选项)。 工作原理可以通过这些指令协调对系统存储区的访问,从而避免创建及传送不一致数据。通过 S7 CPU 中的用户程序进行控制,在必要时,可以调用AG_LOCK 禁止外部 FETCH/WRITE 访问。经过 一定时间后或在完成本地写/读访问后,可使用 AG_UNLOCK作业来重新启用外部访问。 它的另一个优点是该访问锁定只针对在调用中指定的 FETCH/WRITE 连接。 例如,如果组态 一个以上FETCH/WRITE 连接,那么这些连接可用于特定的专用系统区,并可实现选择性访 问协调。 下列图表说明了在用户程序中使用AG_LOCK 和 AG_UNLOCK 进行控制的、存储器访问协调 的常用时间序列。锁定作业必须在用户程序中使用返回参数LOCKED 中的代码进行监视。 只要指示 LOCKED=0,则必须认定仍然正在进行 FETCH/WRITE 访问。 如果指示LOCKED=1,那么,这表明开启了锁定;数据现在即可通过用户程序进行修改。 每次进行指令调用时都会更新状态代码。AG_LOCK(S7-300, S7-400) AG_LOCK (S7-300, S7-400) 说明 使用 AG_LOCK 指令,会禁用在通过参数ID 选择的连接上使用 FETCH 或 WRITE 进行数据交 换。 LOCKED 输出指示锁定是否成功。如果锁定失败,那么必须在后面的 CPU 周期中重新 触发该作业。 STATUS 输出指示了该连接的 CP 状态。 调用 FBD表达式中的调用接口AG_LOCK 的参数 (S7-300, S7-400) 形式参数的说明 下表对 AG_LOCK的所有形式参数进行了说明: 参数 声明 数据类 型 取值范围 说明 ID INPUT INT 1、2 到 16(对于 S7300)1、2 到 64(对于 S7400) 在参数 ID 中指定连接的连接数。 LADDR INPUT WORD 模块起始地址 如果通过STEP 7 组态 CP,则会在组态表中显示模 块起始地址。 在此指定该地址。 LOCKED OUTPUT BOOL 0:未(还未)锁定 1: 已锁定 显示在指定的 FETCH/WRITE 连接上请求的访问锁 定状态。 STATUS OUTPUT WORD状态代码 有关含义,请参见 STATUS 参数 。