今天这篇文章,想和大家分享下我最近调试西门子PLC开放式以太网通信的一些经验。关于西门子开放式以太网通信,我之前曾写过系列文章介绍相关内容,你可以点击下面的链接查看:
1、关于建立连接
无论是基于UDP协议还是TCP协议,西门子PLC开放式以太网通信的第一步都是调用TCON指令建立连接。该指令如下图所示:
对于TCP通信来说,TCON指令会在两个通信伙伴之间建立真正的通信链路。因此,需要在该指令的connect参数中指定对方的IP地址和端口号;
对于UDP通信来说,由于它是一种无连接的协议,TCON指令不会建立真实的通信链路,因此通信伙伴的IP和端口号是可以不填写的。那么为什么还要调用TCON指令呢?其实,对于UDP通信,调用TCON指令的目的是开放本地端口号,并创建一个通信的ID。开放本地端口后才能接收对方发送到这个端口的数据,而通信的ID则用于后续的发送/接收指令。
在博途环境下,可以直接点击TCON指令右上方的"小房子"符号对通信参数进行配置的。
2、关于请求信号
请求信号建议使用上升沿触发,如下图所示:
3、创建通信成功建立标识变量
由于TCON指令的输出参数DONE只在一个扫描周期内有效,因此,需要另外创建静态变量来表示是否已经建立通信或者端口已经成功开放,比如下面图片中的statConnectBuildUpOK。
对于TCON指令的输出值,我之前使用临时变量,调试过程发现偶尔会出现无法置位statConnectBuildUpOK变量的情况。因此对于TCON的输出值也建议使用静态变量,如下图所示:
4、数据发送指令TUSEND
TUSEND指令可以发送UDP数据,它是异步执行指令,也就是说其执行过程可能需要多个扫描周期。因此,其Req请求发送信号要使用上升沿,并且配合指令的输出值,比如busy、error等信号使用。
该指令的ADDR参数是通信伙伴的IP地址和端口号,其数据类型为TADDR_Param,必须在这里指明IP地址和端口号。
可以创建全局数据块存放发送的地址,如下图所示:
数据发送的指令示例如下(未指明发送的数据):
5、数据接收指令
数据接收指令TURCV用来接收UDP数据,同样的,也需要在其ADDR参数中指明通信伙伴的IP地址和端口号。
这个指令强调一点,其使能接收EN_R参数,最好使用之前创建的静态变量statConnectBuildUpOK作为其中之一的条件,下图是一个示例(数据部分未填写,你要根据实际情况填写):
6、断开连接
在某些情况下(比如关机)需要将连接断开,这时要使用TDISCON指令。
该指令与TCON类似,需要使用上升沿信号触发。需要注意的是,在断开连接成功执行后,将之前的静态变量statConnectBuildUpOK复位,如下图所示:
好了,这就是我的关于UDP通信的一些经验分享。文章没有对所有的细节进行介绍,只是强调了一些需要注意的地方。关于更多的细节,请点击本文开头处的链接查看。
欢迎扫描下方的二维码关注我的微信视频号:
发表评论