北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章528 浏览8033653

TCP通信的主动连接和被动连接有什么不同?

西门子PLC开放式用户通信中用于TCP通信的TCON指令有一个参数:ActiveEstablished,它用来表征该连接是主动连接还是被动连接。今天这篇文章,我们来讨论下什么是主动连接?什么是被动连接?它们之间有什么不同?

cover.jpg

要明白主动连接和被动连接的不同,我们需要明白TCP通信的模式。

所有的TCP通信中都有两个角色——服务器和客户端。

①服务器是一种被动通信的角色。当它启动后,会开放本地的端口并等待客户端的连接。一旦有客户端成功连接,服务器就可以通过该端口接收和发送数据;

②客户端是一种主动通信的角色。当它启动后,会主动去连接指定IP地址的服务器,并通过指定的端口进行数据的发送和接收;

由此看来,西门子PLC的开放式用户通信中,TCON指令的ActiveEstablished参数可以指定其连接的类型为TCP服务器还是TCP客户端。

下面以S7-1200为例,具体看下:

在指令列表【通信】-【开放式用户通信】-【其它】中添加TCON指令如下图所示:

tcon.png

该指令的CONNECT参数用来存储连接的相关数据,比如:连接的ID、主动连接/被动连接、远程通信伙伴的IP地址、端口号等等。早期S7-1200使用数据类型TCON_Param,现在一般都使用通用型数据类型TCON_IP_v4,该数据类型即可用于S7-1200系列PLC,也可以用于S7-1500系列,可以指定通信的硬件标识符。

我们创建一个全局数据块DB10_TCPConnectParam。在其中新建变量tconParam,修改其数据类型为TCON_IP_v4,如下图所示:

tconParam.png

图中参数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通信的主动连接和被动连接就先介绍到这里。

我之前也写了一些关于通信的文章,你可以点击下面的链接查看:

西门子PLC以太网开放式用户通信连载(1)-TCON

西门子PLC以太网开放式用户通信连载(2)-TRCV

西门子PLC以太网开放式用户通信连载(3)-TURCV

西门子PLC以太网开放式用户通信连载(4)-TSEND

西门子PLC以太网开放式用户通信连载(5)-TUSEND

西门子PLC开放式以太网通信经验分享

我的微信视频号分享一些工控小知识,欢迎扫描下面的二维码观看:

founderchip.png

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论