選單

TCP通訊的主動連線和被動連線有什麼不同?

西門子PLC開放式使用者通訊中用於TCP通訊的TCON指令有一個引數:ActiveEstablished,它用來表徵該連線是主動連線還是被動連線。今天這篇文章,我們來討論下什麼是主動連線?什麼是被動連線?它們之間有什麼不同?

TCP通訊的主動連線和被動連線有什麼不同?

要明白主動連線和被動連線的不同,我們需要明白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通訊的主動連線和被動連線就先介紹到這裡。

我的微信影片號分享一些工控小知識,歡迎觀看: