图文详解|S7-200SMART的TCP通信(下)
上次为大家介绍了200SMART的TCP_CONNECT指令,这次继续介绍TCP_SEND指令和TCP_RECV指令。
TCP_SEND指令和TCP_RECV这两个指令比较简单,就放在一起介绍。
EN:使能,对于接收指令,建议常1触发。
Req:发送指令触发发送指令,建议使用上升沿触发。
ConnID:连接标识,与各自的TCP_CONNECT的ConnID相同。
DataLen发送数据的长度,最多1024个字节。
MaxLen:接收数据的最大长度,最多1024个字节。
Length:实际接收数据的长度。
DataPtr:发送数据的地址指针,发送数据的首地址。
其他的Done,Busy等与TCP_CONNECT指令相同。
接下来对这些参数进行一个详细的解释:
如图,是TCP_SEND的调用时序图,蓝色为Req上升沿触发,红色为Req电平触发。
使用Req上升沿触发→Busy=1→完成后DONE=1(一个扫描周期)→Error=1且Status=24,然后等待下一次上升沿触发信号进行循环,这里Status=24表示指令调用但是未触发操作,并不代表错误。
使用Req电平触发→Busy=1→完成后DONE=1(一个扫描周期),然后不停循环Busy和Done。
这里建议使用上升沿触发TCP_SEND指令。
如图,是TCP_RECV的调用时序图,蓝色为EN上升沿触发,红色为EN电平触发。
EN上升沿触发,需要两次触发才可以接收数据,DONE保持为1,直至下次上升沿的到来;而EN电平触发,有数据就接收,大部分时间处于Busy,Done为1一个周期,所以建议EN使用电平触发TCP_RECV指令。
对于TCP_RECV的MaxLen,当MaxLen<发送方数据的长度时,按照MaxLen设置的长度进行接收,多余部分舍弃,Done不置位,同时Error=1,Status=25。
所以建议MaxLen=发送方数据的长度,如果发送方的长度是变化的,则MaxLen按照最大长度进行填写。
最后以下题为例:本地客户端IP为192.168.0.100,ConnID为10,端口号为2000;远程服务器IP为192.168.0.101,ConnID为20,端口号为2001,将本地站从VB200开始的10个字节发送到远程站的VB100开始的10个字节。
首先我们在系统块中设置本地站和远程站的IP地址
然后设置TCP_CONNECT参数,如图
接着分别设置TCP_SEND和TCP_RECV
按下I0.4,启动客户端TCP_CONNECT的连接,SM0.5不断触发SEND的Req,
如图所示,数据成功发送,通讯成功。