ISO onTCP 在数据传输期间,也传输消息长度和结束位置等相关信息。 如果选定的接收区大于已发送数据的容量,则“TRCV (页8780)”指令会将所有的已发送数据 全部复制至接收区内。此后,它会将 NDR 设置为 TRUE,并将已发送数据的长度写入RCVD_LEN。 如果所选择的接收区小于发送数据的长度,则“TRCV (页8780)”不会复制任何数据到接收区,并返回以下错误信息:ERROR = 1,STATUS = W#16#8088。UDP 对于 TCP 和 ISO on TCP协议,没有连接建立过程。调用发送块“TUSEND (页 8785)” 时,必须指定接收方地址参数的引用(IP地址和端口号)。与此类似,接收块“TURCV (页 8788)”完成作业时,将接收到发送方地址参数的引用(IP地址和端口号)。 • 为了使用指令“TUSEND (页 8785)”和“TURCV(页 8788)”,必须在发送端和接收 端调用指令“TCON (页 8771)”,以建立本地通信接入点。 •每次调用“TUSEND (页 8785)”时,如果指定远程通信伙伴的 IP 地址和端口号,则可引用远程通信伙伴。 •在数据传输期间,也传输消息长度和结束位置等相关信息。 如果选定的接收区大于已发送数据的容量,则“TURCV (页8788)”指令会将所有的已发送数 据全部复制至接收区内。此后,它会将 NDR 设置为 TRUE,并将已发送数据的长度写入RCVD_LEN。 如果所选择的接收区小于发送数据的长度,则“TURCV”不会复制任何数据到接收区,并返回以下错误信息:ERROR = 1,STATUS = W#16#8088。 TCP 和 UDP 端口号连接地址的分配过程如下: • 对于 TCP: – 主动连接:通过远程 IP 地址、远程端口和本地端口(显式地指定,或者由操作系统设定本地端口的端口号)。 – 被动连接:通过本地端口。如果希望多次使用该本地端口,则需要预定义远程 IP 地址, 或者预定义远程 IP地址与远程端口。 • 对于 UDP:通过远程 IP 地址、远程端口和本地端口(显式地指定本地端口的端口号)。
在数据传输期间,不传输长度相关信息,也不传输与消息的开始和结束有关的信息。发送时,发送方知道它将要发送的字节数量,不存在任何问题。接收方无法检测数据流中消息的结束位置以及下一条消息的开始位置。在选择“TRCV (页 8780)”指令的接收区容量时,我们建议该容量与通信伙伴上“TSEND (页 8777)”指令的参数 LEN 值相一致(需 要发送的字节数)。 •Ad-hoc 模式下的数据接收: 接收区与“TRCV (页 8780)”指令的 DATA 参数所定义的区域相同。 –接收到一个数据块之后,“TRCV (页 8780)”指令会立即将该数据块传送至接收区,并 将 NDR 设置为 "1"。Zui大长度为8192 个字节。 – 如果选定的接收区大于已发送数据的容量,则“TRCV (页 8780)”指令会将所有的已接收数据全部复制至该接收区内。此后,它会将 NDR 设置为 TRUE,并将已发送数据的 长度写入 RCVD_LEN。 –如果选定的接收区小于已发送数据的容量,则“TRCV (页 8780)”指令会复制尽可能多的已接收数据至该接收区内,直到接收区装满为止。此后,它会将 NDR 设置为 TRUE, 并将接收区的长度写入RCVD_LEN。此后每次调用,都会接收到已发送数据的另一个 块。 • 指定长度的数据接收: – 接收区由“TRCV (页8780)”使用 DATA 参数(接收区起始地址)和 LEN(接收区长度) 来确定。 –如果已接收数据没有填满接收区,则不能使用接收区内的这些数据。当填充更多数据并完全填满整个接收区之后,才可以使用这些数据。请注意,此时会来自两个不同发送作业的数据保存在同一个接收区内。如果无法确定第一条消息的结束位置或者第二条消息的起始位置,那么也就无法识别第一条消息或者第二条消息。 – 如果选定的接收区小于已发送数据的容量,则“TRCV (页8780)”指令将尽可能多的已 接收数据复制至该接收区内,直到接收区完全填满为止。 – “TRCV (页8780)”完全填满接收区之后,会将 NDR 设置为 TRUE,并将 RCVD_LEN 表示 为 LEN的值。此后每次调用,都会接收到已发送数据的另一个块。以下列出的区域适用于本地端口。这些区域适用于远程通信伙伴为 S7 CPU的远程端口。对 于远程端口,无其它任何限制。 • 对于 CPU 31x-2 PN/DP(固件版本为 V2.6 及更低版本)和 CPU41x-3 PN/DP(固件版本为 V5.1 及更低版本): – 组态可用端口号(UDT 65):2000 至 5000 –如果没有明确指定端口号,则操作系统可以分配 49152 至 65534 动态范围内的端口。 • 对于 CPU 31x-2PN/DP(固件版本为 V2.7 或更高)和 CPU 41x-3 PN/DP(固件版本为 V5.2 或更高): –组态可用端口号(UDT 65):1 至 49151 由于西门子将 1 至 1999 和 5001 至 49151这两个范围内的端口号预留给系统使用, 我们建议将端口号限制在 2000 至 5000 范围之内。 –如果没有明确指定端口号,则操作系统可以分配 49152 至 65534 动态范围内的端口。 • 对于 CPU 31x-2PN/DP(固件版本为 V3.2 或更高)、CPU 41x-3 PN/DP(固件版本为 V6.0 或更高)以及 CPU 41x-5HPN/DP(固件版本为 V6.0 或更高): – 端口可多次使用。 下表列出了预留给系统使用的端口号:不得使用为系统预留的端口号。设备中建立主动连接和被动连接时,不得使用相同的端口号。 为 TCP 和 ISO on TCP 通信连接分配参数 (S7-300,S7-400) 用于分配参数的数据块 为了给通信连接分配 TCP 和 ISO on TCP 参数,需要根据 UDT65“TCON_PAR”中的数据结构, 创建一个数据块。该数据结构包含了连接组态所必需的参数。对于每一个连接来说,都需要一个这样的数据结构。该结构在某个共用数据块内就可实现。 CONNECT 连接参数属于“TCON (页8771)”指令,它含有一个引用,指向相关连接描述信息 的地址(例如,P#DB100.DBX0.0 字节 64)。 连接描述表(UDT65) 字节 参数 数据类型 起始值 说明 0 到 1 block_length WORD W#16#40 UDT65 的长度:64 个字节(固定) 2 到 3 id WORD W#16#000 1连接引用(取值范围:W#16#0001 至 W#16#0FFF) 必须将各个块内的该参数值指定给 ID。 4connection_type BYTE B#16#11 协议选项: • B#16#11:TCP(使用 CP 时不支持) •B#16#12:ISO on TCP 5 active_est BOOL FALSE 建立连接的方式所对应的 ID: •FALSE:被动连接建立 • TRUE:主动连接建立。• B#16#00:通过 CP 443-1EX 进行数据通信 (仅 S7-400和 connection_type = B#16#12)。支持的 CP:CP443-1EX4x、CP443-1EX20、CP443-1GX20、 CP443-1EX30、CP443-1GX30 • B#16#01:在 WinACRTX 接口插槽 1 (IF1) 上 基于 IE 接口进行数据通信(仅 TCP) • B#16#02:通过集成的 IE 接口与 CPU315-2 PN/DP 和 317-2 PN/DP 进行数据通信 • B#16#03:通过集成的 IE 接口与 CPU 319-3PN/DP 进行数据通信 • B#16#05:通过集成的 IE 接口与 CPU 414-3 PN/DP、416-3PN/DP、416-3F PN/DP 和 41x-5H PN/DP(机架 0)进行数据通信 • B#16#06:在 WinAC RTX接口插槽 2 (IF2) 上 基于 IE 接口进行数据通信(仅 TCP) • B#16#0B:在 WinAC RTX 接口插槽 3(IF3) 上 基于 IE 接口进行数据通信(仅 TCP) • B#16#0F:在 WinAC RTX 接口插槽 4 (IF4) 上基于 IE 接口进行数据通信(仅 TCP) • B#16#15:通过集成的 IE 接口与 CPUs 41x-5H PN/DP(机架1)进行数据通信 7 local_tsap_id_len BYTE B#16#02 所使用 local_tsap_id参数的长度;可能值: • 0 或 2,对于 connection_type = B#16#01 (主动端:0,被动端:2) • 0 或2,对于 connection_type = B#16#11 (主动端:0 或 2,被动端:2) • 2 至 16。如果connection_type = B#16#12 8 rem_subnet_id_le n BYTE B#16#00该参数目前未使用。分配为 B#16#00。 9 rem_staddr_len BYTE B#16#00 远程连接端点的地址长度: •0:未指定,即,参数 rem_staddr 无关紧要。 • 4:参数 rem_staddr 内的有效 IP 地址。