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