分享

图文详解|S7-200SMART的TCP通信(下)

 金玉满堂jjnla8 2020-11-25

上次为大家介绍了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,

如图所示,数据成功发送,通讯成功。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多