S7-200SMART的ISO-ON-TCP通信(下)
200SMART的开放式通信(Open User Communication)包括TCP通信,UDP通信以及ISO-on-ISO-ON-TCP通信,支持CPU固件版本V2.2以上,常用于与第三方支持相同协议的设备通信。
上次为大家介绍了200SMART的ISO_ON_TCP_CONNECT指令,这次继续介绍TCP_SEND指令和TCP_RECV指令。
TCP_SEND指令和TCP_RECV这两个指令比较简单,就放在一起介绍
EN:使能,对于接收指令,建议常1触发。
Req:发送指令触发发送指令,建议使用上升沿触发。
ConnID:连接标识,与各自的ISO_ON_TCP_CONNECT的ConnID相同。
DataLen:发送数据的长度,最多1024个字节。
MaxLen:接收数据的最大长度,最多1024个字节。
Length:实际接收数据的长度。
DataPtr:发送/接收数据的地址指针,发送/接收数据的首地址。
其他的Done,Busy等与ISO_ON_TCP_CONNECT指令相同。
接下来对这些参数进行一个详细的解释:
如图,是ISO_ON_TCP_SEND的调用时序图,蓝色为Req上升沿触发,红色为Req电平触发。
使用Req上升沿触发→Busy=1→完成后DONE=1(一个扫描周期)→Error=1且Status=24,然后等待下一次上升沿触发信号进行循环,这里Status=24表示指令调用但是未触发操作,并不代表错误。
使用Req电平触发→Busy=1→完成后DONE=1(一个扫描周期),然后不停循环Busy和Done。
这里建议使用上升沿触发ISO_ON_TCP_SEND指令。
如图,是ISO_ON_TCP_RECV的调用时序图,蓝色为EN上升沿触发,红色为EN电平触发。
EN上升沿触发,需要两次触发才可以接收数据,DONE保持为1,直至下次上升沿的到来;而EN电平触发,有数据就接收,大部分时间处于Busy,Done为1一个周期,所以建议EN使用电平触发ISO_ON_TCP_RECV指令。
对于ISO_ON_TCP_RECV的MaxLen:
MaxLen:填写变量,当前值为0,EN触发后报错1:
Status=1:数据长度输入参数大于允许的最大值1~1024字节。
EN端接通时,不允许修改MaxLen的参数值,否则报错7:
Status=7:实例不符,保存的数据与输入数据不同。
所以建议MaxLen=发送方数据的长度,如果发送方的长度是变化的,则MaxLen按照最大长度进行填写。
最后以下题为例:本地客户端IP为192.168.0.100,ConnID为10,RemTsap 为”ABCD”,LocTsap为”DCBA”;远程服务器IP为192.168.0.101,ConnID为20,emTsap 为” DCBA”,LocTsap为” ABCD”,将本地站从VB200开始的10个字节发送到远程站的VB100开始的10个字节。
首先我们在系统块中设置本地站和远程站的IP地址
然后设置ISO_ON_TCP_CONNECT参数,如图
接着分别设置ISO_ON_TCP_SEND和ISO_ON_TCP_RECV
导通M0.0,启动客户端ISO_ON_TCP_CONNECT的连接
SM0.5不断触发SEND的Req,
如图所示,数据成功发送,通讯成功
S7-200SMART的ISO_ON_TCP通信就这些啦,下期为大家讲解S7-200SMART的PROFINET通讯
今天腊八节,大家记得和腊八粥哦