TRCV: 通过通信连接接收数据(S7-300, S7-400) 说明 “TRCV”指令可以通过现有通信连接接收数据。 接收区 表示功能块保存已接收到数据的区域。接收区由以下两个变量指定: • 接收区起始地址指针 • 接收区的长度 根据所用协议选项的不同,可使用参数 LEN(在 LEN<> 0 的情况下)或 DATA 参数的长度信息 (在 LEN = 0 的情况下)来定义该区域的长度。
TRCV 的接收模式下表描述“TRCV”如何将已接收数据输入接收区。 协议选项 正在将数据 输入接收区 connection_type 参数 参数 LEN的值 TCP Ad-hoc 模式 B#16#01, B#16#11 0 TCP 指定长度的数据接收 B#16#01, B#16#11<> 0 ISO on TCP 协议控制 B#16#12 0(推荐值)或者 <> 0 TCP / ad-hoc模式 Ad-hoc 模式仅适用于 TCP 协议选项。 将值“0”赋给参数 LEN,可以设置为 Ad-hoc 模式。 该接收区与DATA 所构成的存储区相同。 Zui多可以接收 8192 个字节。 接收到一个数据块之后,“TRCV”指令会立即将该数据块传送至接收区,并将 NDR 设置为“1”。 TCP / 指定长度的数据接收 为参数 LEN分配一个非零值,可以设置按指定长度接收数据。 接收区由参数 LEN 和 DATA 定义。 一旦接收了 LEN 个字节,TRCV会立即将这些字节传输至 接收区,并将 NDR 设置为“1”。 ISO on TCP / 协议控制的数据传输 使用 ISO-on-TCP协议选项时,将以协议控制的方式传送数据。 接收区由参数 LEN 和 DATA 定义。 所有作业数据一旦接收完毕,TRCV立即将这些数据传输 至接收区,并将 NDR 设置为“1”。 STRING 数据类型的数据交换 如果希望通过 "TSEND" 和"TRCV" 指令交换 STRING 数据类型的数据,只能使用 LEN=0 的点 对点模式。需要将 "TRCV"的字符串长度至少设置为 "TSEND" 指令的字符串长度。 如果不遵守这一规则,可能会在字符串的处理过程中导致错误。 如果使用BYTE 数组作为已发送字符串的接收区,则第一个字节包含由发送方设置的Zui大长度, 第二个字节是实际的字符串长度。功能描述 "TRCV"指令为异步执行,也就是说,它的执行可以延长并跨越多个调用。 调用“TRCV”,且 EN_R = 1,可启动接收作业。其作业状态由输出参数 BUSY 和 STATUS 指示。此时,STATUS 相当于该异步指令的输出参数 RET_VAL。 另请参见:同步指令和异步指令之间的不同之处 (页 6480). 下表列出了 BUSY、NDR 和 ERROR 之间的关系。通过该表,可以确定“TRCV”的当前状态或 接收操作的完成时间。 BUSY NDR ERROR 说明 TRUE 无关 无关作业正在处理。 FALSE TRUE FALSE 作业已成功完成。 FALSE FALSE TRUE 由于出错,导致作业结束。错误的原因可以从参数 STATUS 中找出。 FALSE FALSE FALSE 没有为该指令分配(新)作业。 说明由于“TRCV”为异步执行,仅当参数 NDR 的值为 TRUE 之后,接收区内的数据才具备一致性。 参数下表列出了指令“TRCV”的参数: 参数 声明 数据类型 存储区 说明 EN_R Input BOOL I、Q、M、D、L、 T、C控制参数 enabled to receive: 当 EN_R = 1 时,“TRCV”已处于准备接收状态。 正 在处理接收作业。ID Input WORD M、D 或常数 指向相关连接的引用。ID 必须与本地连接 描述信息内的相关参数 ID 相同。参数 声明数据类型 存储区 说明 LEN Input INT I、Q、M、D、L 接收区长度(以字节为单位) 有关 LEN = 0 或 LEN<> 0 的意义,请参见 本文前面的相关章节(“TRCV”的接收模 式)。 要了解取值范围,另请参见:CPU、所用协议选项(connection_type)以及可以 传输的数据长度之间的关系 (页 8760)。 NDR OutputBOOL I、Q、M、D、L 状态参数 NDR: • NDR = 0:作业未启动,或仍在执行过 程中 • NDR= 1:作业已成功完成 ERROR Output BOOL I、Q、M、D、L 状态参数 ERROR: •ERROR=1:处理期间出现错误。 STATUS 提供有关错误类型的详细信息 BUSY Output BOOL I、Q、M、D、L •BUSY = 1:作业仍未完成。 无法启动 新作业。 • BUSY = 0:作业已经完成。 STATUS Output WORDM、D 状态参数 STATUS: 错误信息 RCVD_LEN Output INT I、Q、M、D、L实际接收到的数据量(以字节为单位) DATA InOut ANY I、Q、M、D 接收区(定义见前述相关章节),包含有 地址和长度该地址引用: • 输入的过程映像 • 输出的过程映像 • 位存储器 • 数据块 注: 不得使用 BOOL 数组作为接收区域。 注:可通过这两种方式输入 DATA 参数: • juedui。 示例:P#DB13.DBX0.0 字节 64 • 符号。示例:DB_name.variable 有关有效数据类型的更多信息,请参见“有效数据类型概述。参数 ERROR 和 STATUSERROR STATUS (W#16#... ) 说明 0 0000 新数据已接收。 RCVD_LEN 可以显示已接收数据的当前长度。0 7000 块还未准备好接收 0 7001 块已经准备好接收,接收作业已激活 0 7002 中间调用,正在处理接收作业 注:在这个处理阶段,指令将数据写入接收区。 错误可能破坏接收区内的数据 一致性。 1 8085 参数 LEN大于Zui大允许值,或者第一次调用之后,您已经更改了参数 LEN 或 DATA 的值。 1 8086 ID 参数不在允许范围之内 18088 • 接收区过小 • LEN 的值大于 DATA 所指定的接收区 1 80A1 通信错误: • 尚未建立指定的连接。 •正在终止指定连接。 无法通过该连接执行接收作业。 • 正在为接口分配新参数设置信息。 1 80B3 协议选项(连接描述信息内的参数connection_type)被设置为 UDP。请使用“TURCV (页 8788)”。 1 80C3 •正在以不同的优先级处理该 ID 所对应的块。 • 内部资源不足。 1 80C4 临时通信错误: • 此时,无法建立至该伙伴的连接。 •接口正在接收新参数设置值或正在建立连接。 1 8xyy 常见错误信息 另请参见: 通过输出参数 RET_VAL评估错误。TUSEND: 通过 UDP 发送数据 (S7-300, S7-400) 说明 通过指令“TUSEND”,可以使用 UDP将数据发送至参数 ADDR 所寻址的远程通信伙伴。 警告 通过 UDP 传送数据 根据 RFC 768,采用 UDP传输数据时,至远程通信伙伴的数据传输没有确认机制,这种数据传输不可靠。这意味着,数据有可能会丢失,而块也不会指示这类丢失现象。 说明对于目标为其它通信伙伴的的后续发送操作,仅需要在调用“TUSEND”时调整参数 ADDR 即 可。 无需调用“TCON(页 8771)”和“TDISCON (页 8775)”指令。 功能描述“TUSEND”指令为异步执行。即,可通过多个调用执行该作业。 使 REQ = 1,调用“TUSEND”, 将启动作业。其作业状态由输出参数 BUSY 和 STATUS 指示。此时,STATUS 相当于该异步指令的输出参数 RET_VAL。 另请参见:同步指令和异步指令之间的不同之处 (页 6480). 下表列出了 BUSY、DONE 和 ERROR 之间的关系。使用该表可以确定“TUSEND”的当前状态 或发送过程结束的时间。 BUSY DONE ERROR 说明 TRUE 无关 无关作业正在处理。 FALSE TRUE FALSE 作业已成功完成。 FALSE FALSE TRUE 由于出错,导致作业结束。错误的原因可以从参数 STATUS 中找出。 FALSE FALSE FALSE 没有为该指令分配(新)作业。 说明由于“TUSEND”采用异步执行方式,在参数 DONE 或者参数 ERROR 的值变为 TRUE 之前,必须保证发送区的数据一致性。