面向连接协议的工作原理
简介
面向连接的协议会在数据传输开始之前建立到通信伙伴的逻辑连接。 数据传输完成后,这些协议会在必要时终止连接。 当可靠数据传输非常重要时,会专门使用面向连接的协议。 一条物理线路上可以存在多个逻辑连接。
开放式用户通信支持以下连接类型:
TCP
ISO-on-TCP
ISO(** S7-1500)
UDP
两个通信伙伴必须支持相同的连接类型才能进行连接。 例如,如果一个通信伙伴不支持 ISO-on-TCP 类型的连接,则改用它支持的 TCP 连接类型。
对于无法在 TIA Portal 中组态的通信伙伴,例如第三方设备或 PC,则在分配连接参数时为伙伴端点输入“未*”(unspecified)。 未*设备所需的连接类型列在各自的文档中。
提示 与 ISO 的连接对于 S7-1500 CPU,已组态的 ISO 类型连接可以通过 TSEND_C 和 TRCV_C 指令来创建。 有关这些连接类型的更多信息,请参见常规连接描述。 |
TCP 的特征
TCP 是一种流协议,其中的数据流长度传送给接收方,使其可以接收数据流作为各个 TCP 段。 这意味着在通过 TCP 连接传送数据期间,不传送关于消息开始和结束的信息。 接收方无法通过接收到的数据流段来确定数据流中的一条消息在何处结束,下一条消息又在何处开始。 因此,建议为要接收的字节数(参数 LEN,指令 TRCV/TRCV_C)和要发送的字节数(参数 LEN,指令 TSEND/TSEND_C)分配相同的值。
如果所发送数据的长度和所要求数据的长度不一致,将出现以下情况:
要接收的数据的长度(参数 LEN,指令 TRCV/TRCV_C)大于要发送的数据的长度(参数 LEN,指令 TSEND/TSEND_C):
仅当达到所分配的长度后,TRCV/TRCV_C 才会将接收到的数据复制到*的接收区(参数 DATA)。 达到所分配的长度时,已经接收了下一个作业的数据。 因此,接收区包含的数据来自两个不同的发送作业。 如果不知道**条消息的确切长度,将无法识别**条消息的结束以及*二条消息的开始。
要接收的数据的长度(参数 LEN,指令 TRCV/TRCV_C)小于要发送的数据的长度(参数 LEN,指令 TSEND/TSEND_C):
TRCV/TRCV_C 将 LEN 参数中*字节的数据复制到接收数据区(参数 DATA)。 然后,将 NDR 状态参数设置为 TRUE(作业成功完成)并将 LEN 的值分配给 RCVD_LEN(实际接收的数据量)。 对于每次后续调用,都会接收已发送数据的另一个块。
具有固定数据长度的接收区可以在 TRCV/TRCV_C 指令中*,并使用 Ad-hoc 模式的协议版本。
ISO-on-TCP 的特征
ISO-on-TCP 是面向消息的协议,它在接收端检测消息的结束,并向用户指出属于该消息的数据。 这不取决于消息的*接收长度。 这意味着在通过 ISO-on-TCP 连接传送数据时传送关于消息长度和结束的信息。
如果所发送数据的长度和所要求数据的长度不一致,将出现以下情况:
要接收的数据的长度(参数 LEN,指令 TRCV/TRCV_C)大于要发送的数据的长度(参数 LEN,指令 TSEND/TSEND_C):
TRCV/TRCV_C 将所有发送数据复制到接收数据区(参数 DATA)。 然后,将 NDR 状态参数设置为 TRUE(作业成功完成)并将所发送数据的长度分配给 RCVD_LEN(实际接收的数据量)。
要接收的数据的长度(参数 LEN,指令 TRCV/TRCV_C)小于要发送的数据的长度(参数 LEN,指令 TSEND/TSEND_C):
TRCV/TRCV_C 并不会将任何数据复制到接收数据区(参数 DATA),而是提供以下错误信息: ERROR=1,STATUS=W#16#8088(目标缓冲区太小)。
UDP 的特征
UDP 是面向消息的协议,它在接收端检测消息的结束,并向用户指出属于该消息的数据。 这不取决于消息的*接收长度。 这意味着在通过 UDP 连接传送数据时传送关于消息长度和结束的信息。
如果所发送数据的长度和所要求数据的长度不一致,将出现以下情况:
要接收的数据的长度(参数 LEN,指令 TRCV/TRCV_C)大于要发送的数据的长度(参数 LEN,指令 TUSEND/TSEND_C):
TURCV/TRCV_C 将所有发送数据复制到接收数据区(DATA 参数)。 然后,将 NDR 状态参数设置为 TRUE(作业成功完成)并将所发送数据的长度分配给 RCVD_LEN(实际接收的数据量)。
要接收的数据的长度(参数 LEN,指令 TRCV/TRCV_C)小于要发送的数据的长度(参数 LEN,指令 TUSEND/TSEND_C):
TRCV/TRCV_C 将数据量符合 LEN 参数要求的发送数据复制到接收数据区(参数 DATA)。 不再产生错误消息。 在这种情况下,用户需要再次调用 T_URCV 来接收剩下的字节。
shtxjd.cn.b2b168.com/m/