PUT_S:将数据写入远程 CPU (S7-300) 说明 在 S7-300 中,使用该指令可以向远程 CPU 写入数据。 通过集成接口和 CP可建立连接。 在 REQ 的上升沿发送数据。在每一个 REQ 上升沿,都会使用参数 ID、ADDR_1 和 SD_1 的值。作业结束之后,可以为参数 ID、ADDR_1 和 SD_1 赋予新值。远程伙伴将所需数据保存在该数据提供的地址之中,并返回一个执行应答。请确保由参数 ADDR_1 和 SD_1定义的区域在数量、长度和数据类型等方面都匹配。 如果没有出现错误,下一次调用时会用状态参数 DONE=“1”来指示这一点。上一作业已经 结束之后,才可以激活写入过程。 远程 CPU 则可以处于 RUN 模式或 STOP模式。如果写入数据时访问出错,或如果执行检查 出错,则会通过 ERROR 和 STATUS 输出错误和警告。
参数 ERROR和 STATUS 下表包含关于 "GET_S" 指令的、可通过参数 ERROR 和 STATUS 输出的所有特定错误信息。 ERRORSTATUS (十进制) 说明 0 11 警告: • 由于前一作业仍处于忙碌状态,未激活新作业。 •该作业正在处理之中,但其优先级较低。 0 25 已开始通信。 作业正在处理。 1 1 通信故障,例如 •连接描述信息未加载(本地或远程) • 连接中断(例如: 电缆故障、CPU 关闭或者 CP 处于 STOP 模式) •尚未与伙伴建立连接 • 已经超过了并行作业/实例的Zui大数量。 1 2 接收到伙伴设备的否定应答。 该功能无法执行。 1 4 接收区指针RD_1 出错,该错误与数据长度或者数据类型有关。 1 8 访问伙伴 CPU 时出错。 1 10无法访问本地用户存储器(例如,访问某个已经删除的数据块)。参数 声明 数据类型 存储区 说明 ADDR_1 InOut ANY M、D指向伙伴 CPU 上待读取区域的指针。 RD_1 InOut ANY M、D 指向本地 CPU 上用于输入已读数据的区域的 指针。仅允许使用 BOOL 数据类型(不允许使用:位 数组),BYTE、CHAR、WORD、INT、 DWORD、DINT、REAL、COUNTER、TIMER。 注:ANY 指针访问某个数据块时,必须始终指 定该数据块(例如:P#DB10.DBX5.0 字节10)。ERROR STATUS (十进制) 说明 1 12 调用该指令时 • 已指定一个不属于 "GET_S" 的背景数据块 •已指定一个全局数据块,以代替指定背景数据块。 • 未找到背景数据块(补救措施: 装载相关背景 DB)。 1 20 •已经超过了并行作业/实例的Zui大数量 • CPU 处于 RUN 模式时,已经加载了实例,且覆盖了其它的实例(CPU 或者 CP 需要执行 STOP-RUN 切换。) • 首次调用时,可能出现 1 27 CPU 上没有该指令的功能代码。 数据一致性如果做到以下几点,则可以使接收的数据保持一致: 初始化另一个作业之前,需要确定出接收区 RD_1 中当前被完全使用的部分。
下表列出了指令“PUT_S”的参数: 参数 声明 数据类型 存储区 说明 REQ Input BOOL I、Q、M、D、L控制参数 request,在上升沿时激活数据交换功 能。 ID Input WORD M、D 或常数 寻址参数 ID 另请参见:S7通信指令的常见参数 (页 8687) DONE Output BOOL I、Q、M、D、L 状态参数 DONE: • 0:作业未启动,或者仍在执行过程中 • 1: 作业已执行,且无任何错误。 ERROR STATUS Output Output BOOLWORD I、Q、M、D、L I、Q、M、D、L 状态参数 ERROR 和 STATUS,错误代码: • ERROR=0 STATUS的值为: 0000H:既无警告也无错误 <> 0000H:警告,详细信息请参见 STATUS。 • ERROR=1出错。STATUS 提供了有关错误类型的详细信 息。 ADDR_1 InOut ANY M、D 指向伙伴 CPU上用于写入数据的区域的指针。 SD_1 InOut ANY M、D 指向本地 CPU 上包含要发送数据的区域的指针。 仅允许使用BOOL 数据类型(不允许使用:位数 组),BYTE、CHAR、WORD、INT、DWORD、 DINT、REAL、COUNTER、TIMER。 注:ANY 指针访问某个数据块时,必须始终指定 该数据块(例如:P#DB10.DBX5.0 字节10)。 有关有效数据类型的更多信息,请参见“有效数据类型概述。参数 ERROR 和 STATUS 下表包含关于 "PUT_S"的、可通过参数 ERROR 和 STATUS 输出的所有特定错误信息。 ERROR STATUS (十进制) 说明 0 11 警告:• 由于前一作业仍处于忙碌状态,未激活新作业。 • 该作业正在处理之中,但其优先级较低。 0 25 已开始通信。 作业正在处理。1 1 通信故障,例如 • 连接描述信息未加载(本地或远程) • 连接中断(例如: 电缆故障、CPU 关闭或者 CP 处于 STOP模式) • 尚未与伙伴建立连接 • 已经超过了并行作业/实例的Zui大数量。 1 2 接收到伙伴设备的否定应答。 该功能无法执行。 1 4发送区指针 SD_1 出错,该错误与数据长度或者数据类型有关。 1 8 访问伙伴 CPU 时出错。 1 10无法访问本地用户内存(例如,访问某个已经删除的数据块) 1 12 调用该指令时 • 已指定一个不属于 "PUT_S" 的背景数据块 •已指定一个全局数据块,以代替指定背景数据块。 • 未找到背景数据块(补救措施: 装载相关背景 DB)。 1 20 •已经超过了并行作业/实例的Zui大数量 • CPU 处于 RUN 模式时,已经加载了实例,且覆盖了其它的实例(CPU 或者 CP 需要执行 STOP-RUN 切换。) • 首次调用时,可能出现 1 27 CPU 上没有该指令的功能代码。 数据一致性为了保证数据一致性,必须在当前发送作业完成之后,才能对发送区 SD_1 执行写操作。 这种情况下,状态参数 DONE的值将变为“1”。USEND_S: 非协调式发送数据 (S7-300) 说明 在 S7-300中,“USEND_S”指令可以将数据发送至“URCV_S (页 8722)”类型的远程伙伴指 令。在发送过程中,无需与伙伴指令协同工作。 这意味着,数据传输无需伙伴指令的应答。 在 REQ 的上升沿发送数据。 在每一个 REQ上升沿,都会使用参数 R_ID、ID 和 SD_1 的值。 作业结束之后,可以为参数 R_ID、ID 和 SD_1 赋予新值。确保参数 SD_1 和 RD_1(相关伙伴指令 "URCV_S (页 8722)"的)定义的区必须在以下方面 相互匹配: • 编号 • 长度,和 • 数据类型 两个指令中的参数 R_ID 必须相同。 状态参数DONE 的值设置为逻辑值 "1" 时,表明发送操作已经成功完成。 参数 指令“USEND_S”的参数如下表所示: 参数 声明数据类型 存储区 说明 REQ Input BOOL I、Q、M、D、L 控制参数 request,在上升沿时激活数据交换功 能。ID Input WORD M、D 或常量 寻址参数 ID 另请参见: S7 通信指令的常见参数(页 8687) R_ID Input DWORD I、Q、M、D、L 或 常量 寻址参数 R_ID 另请参见:S7 通信指令的常见参数 (页 8687) DONE Output BOOL I、Q、M、D、L 状态参数DONE: • 0: 作业未启动,或者仍在执行之中 • 1: 作业已经执行,且未出现错误。参数 声明 数据类型 存储区 说明ERROR STATUS Output Output BOOL WORD I、Q、M、D、L I、Q、M、D、L 状态参数 ERROR和 STATUS,错误代码: • ERROR=0 STATUS 的值为: 0000H: 既无警告也无错误 <>0000H:警告,详细信息请参见 STATUS • ERROR=1 出错,关于错误类型的详细信息,请参见 STATUS 。 SD_1InOut ANY M、D 指向发送区的指针。 仅允许使用 BOOL 数据类型(不允许使用: 位数组),BYTE、CHAR、WORD、INT、 DWORD、DINT、REAL、DATE、TOD、TIME、S5TIME、DATE_AND_TIME、COUNTER、 TIMER。 注: ANY 指针访问某个数据块时,必须始终指定该数据块(例如: P#DB10.DBX5.0 字节 10)。 有关有效数据类型的更多详细信息,请参见 "有效数据类型概述参数ERROR 和 STATUS ERROR STATUS (十进制) 说明 0 11 警告: •由于前一作业仍处于忙碌状态,未激活新作业。 • 该作业正在处理之中,但其优先级较低。 0 25 已开始通信。 作业正在处理。 11 通信故障,例如 • 连接描述信息未加载(本地或远程) • 连接中断(例如: 电缆问题、CPU 关闭或者 CP 处于 STOP模式) • 尚未与伙伴建立连接。 • 已经超过了并行作业/实例的Zui大数量 1 4 发送区指针 SD_1出错,该错误与数据长度或者数据类型有关。 1 10 无法访问本地用户内存(例如,访问某个已经删除的数据块)。