西门子PLC开放式用户通信中用于TCP通信的TCON指令有一个参数:ActiveEstablished,它用来表征该连接是主动连接还是被动连接。今天这篇文章,我们来讨论下什么是主动连接?什么是被动连接?它们之间有什么不同?
要明白主动连接和被动连接的不同,我们需要明白TCP通信的模式。
所有的TCP通信中都有两个角色——服务器和客户端。
①服务器是一种被动通信的角色。当它启动后,会开放本地的端口并等待客户端的连接。一旦有客户端成功连接,服务器就可以通过该端口接收和发送数据;
②客户端是一种主动通信的角色。当它启动后,会主动去连接指定IP地址的服务器,并通过指定的端口进行数据的发送和接收;
由此看来,西门子PLC的开放式用户通信中,TCON指令的ActiveEstablished参数可以指定其连接的类型为TCP服务器还是TCP客户端。
下面以S7-1200为例,具体看下:
在指令列表【通信】-【开放式用户通信】-【其它】中添加TCON指令如下图所示:
该指令的CONNECT参数用来存储连接的相关数据,比如:连接的ID、主动连接/被动连接、远程通信伙伴的IP地址、端口号等等。早期S7-1200使用数据类型TCON_Param,现在一般都使用通用型数据类型TCON_IP_v4,该数据类型即可用于S7-1200系列PLC,也可以用于S7-1500系列,可以指定通信的硬件标识符。
我们创建一个全局数据块DB10_TCPConnectParam。在其中新建变量tconParam,修改其数据类型为TCON_IP_v4,如下图所示:
图中参数ActiveEstablished就是用来表征该连接为主动连接还是被动连接。
当该值为true时,表示该连接为主动连接,也就是将当前PLC作为TCP通信的客户端。此时,PLC会尝试与RemoteAddress指定的IP地址及RemotePort指定的端口号进行连接,并开放LocalPort指定的本地端口号接收数据;
当该值为false时,表示该连接为被动连接,也就是将当前PLC作为TCP通信的服务器。此时,PLC会开放本地端口号LocalPort并等待客户端的连接;此时,远程地址RemoteAddress可以设置为0.0.0.0,表示接收任意IP地址的连接请求;如果设置为具体的IP,则仅接收该IP地址的请求,其它的IP将忽略;该模式下PLC将忽略远程端口号,可以设置为0或不做设置;
在服务器模式下(被动连接),TCON指令启动后输出参数BUSY将被置1,表示等待客户端连接;当有客户端成功连接后,BUSY置0,DONE输出为1并保持一个扫描周期;
好了,关于TCP通信的主动连接和被动连接就先介绍到这里。
我之前也写了一些关于通信的文章,你可以点击下面的链接查看:
我的微信视频号分享一些工控小知识,欢迎扫描下面的二维码观看:
发表评论