18luck网站

18luck网站電子設計 | 18luck网站Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 18luck网站 >> 18luck平台 >> 梯形圖實例 >> 正文

【圖文詳解】西門子PLC之S7-200SMART的TCP通信 TCP_CONNECT和TCP_SEND、TCP_RECV指令用法

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2024/6/2

西門子plc之S7-200SMART的TCP通信 (上)

200SMART的開放式通信(Open User Communication)包括TCP通信,UDP通信以及ISO-on-TCP通信,支持CPU固件版本V2.2以上,常用於(yu) 與(yu) 第三方支持相同協議的設備通信。

開放式通信(OUC)編程可以通過指令或者調用OUC的指令庫,通信雙方均要調用指令,通信數據量可以達到1024個(ge) 字節,這次我們(men) 將介紹OUC通信中的TCP通信。

TCP通信是一種麵向連接的通信協議,通信之前需要先建立連接,是一種數據流的服務,不傳(chuan) 輸開始消息和結束消息,是一種可靠,安全的數據傳(chuan) 輸。所謂數據流,舉(ju) 一個(ge) 簡單的例子來說,發送方第一次發送10個(ge) 數據,然後第二次再發送10個(ge) 數據,然後接收方啟用接受會(hui) 一下子接收到20個(ge) 數據。

TCP通信的編程可以通過通信指令或者開放式用戶通信庫指令,如圖:

 

圖一:通信指令

 

  圖二: 開放式用戶通信庫指令

這裏建議使用開放式用戶通信庫指令,編程和填寫(xie) 參數都能簡單一點。

下麵開始介紹一下TCP通信的流程:

①:建立連接(關(guan) 鍵!必須!)TCP_CONNECT和TCP_SEND、TCP_RECV指令用法

 

②:交換數據(發送/接收)

         

③:斷開連接(一般不用)

 

④:分配庫存儲(chu) 器(必須!建議選擇較大的地址避免衝(chong) 突)

 

接下來介紹一下各個(ge) 指令的每個(ge) 引腳的含義(yi) ,

首先介紹TCP_CONNECT指令

參數

數據類型

描述

EN

BOOL

使能輸入

Req

BOOL

如果Req=TRUE,CPU啟動連接操作。如果 Req = FALSE,則輸出顯示連接的當前狀態。

Active

BOOL

設置本地CPU在通信中的角色

Active= TRUE為(wei) 主動連接(一般用於(yu) 客戶端)

Active= FALSE為(wei) 被動連接(一般用於(yu) 服務器)

ConnID

WORD

CPU使用連接 ID (ConnID) 為(wei) 其它指令標識該連接。可能的ConnID範圍為(wei) 0到65534。

ipadsd

ipadsdr4

BYTE

這些是IP地址的四個(ge) 八位字節。ipadsdr1到ipadsdr4 填寫(xie) 通信夥(huo) 伴的IP地址

RemPort

WORD

RemPort 是遠程設備上的端口號。遠程端口號範圍為(wei) 1 到 49151。對於(yu) 被動連接,使用零。

LocPort

WORD

LocPort 是本地設備上的端口號。本地端口號範圍為(wei) 1 到 49151,但存在一些限製。

Done

BOOL

完成標誌位,建立通信連接之後一直保持1。

Busy

BOOL

當連接操作正在進行時,指令置位 Busy 輸出。

Error

BOOL

當連接操作完成但發生錯誤時,指令置位 Error 輸出。

Status

BYTE

如果指令置位 Error 輸出,Status 輸出會(hui) 顯示錯誤代碼。如果指令置位 Busy 或 Done 輸出,Status 為(wei) 零(無錯誤)。

這裏我們(men) 再對一些參數進行一些補充解釋

  1. ConnID:ConnID用於(yu) 標識通信連接,不同的ConnID不能重複,且占用開放式通信資源最多16個(ge) ,客戶端的ConnID與(yu) 服務器的ConnID無關(guan) 。

  2. ipadsdr:填寫(xie) 通信夥(huo) 伴的IP地址,客戶端填寫(xie) 服務器的IP,服務器填寫(xie) 客戶端的IP。主動連接不能填0.0.0.0,被動連接可以填0.0.0.0,表示接受任意遠程IP地址的連接。

  3. RemPort 和LocPort:端口號設置,建議采用2000~5000,主動方和被動方的RemPort 和LocPort交叉對應;對於(yu) 被動連接,本地端口號必須唯一(不重複),且可以忽略遠程端口號,RemPort可以填0。

  4. Req & Active:CPU作為(wei) 客戶端:Active設置為(wei) TURE,然後再觸發Req,主動發送報文,請求建立連接。如圖Active設置SM0.0。

 

CPU作為(wei) 服務器先就緒,客戶端發送請求報文後,才可建立連接,否則被拒絕。

 

例如我設置本地客戶端IP為(wei) 192.168.0.100,ConnID為(wei) 10,端口號為(wei) 2000;

遠程服務器IP為(wei) 192.168.0.101,ConnID為(wei) 20,端口號為(wei) 2001;如圖

 

 

這次關(guan) 於(yu) 200SMART的TCP通信就暫時介紹到這裏,下一篇將繼續為(wei) 大家介紹TCP的發送和接收指令,以及TCP程序編寫(xie) 。


西門子plc之S7-200SMART的TCP通信 (下)

上次為(wei) 大家介紹了200SMART的TCP_CONNECT指令,這次繼續介紹TCP_SEND指令和TCP_RECV指令。

TCP_SEND指令和TCP_RECV這兩(liang) 個(ge) 指令比較簡單,就放在一起介紹。

 

EN:使能,對於(yu) 接收指令,建議常1觸發。

Req:發送指令觸發發送指令,建議使用上升沿觸發。

ConnID:連接標識,與(yu) 各自的TCP_CONNECT的ConnID相同。

DataLen發送數據的長度,最多1024個(ge) 字節。

MaxLen:接收數據的最大長度,最多1024個(ge) 字節。

Length:實際接收數據的長度。

DataPtr:發送數據的地址指針,發送數據的首地址。

其他的Done,Busy等與(yu) TCP_CONNECT指令相同。



接下來對這些參數進行一個(ge) 詳細的解釋:

如圖,是TCP_SEND的調用時序圖,藍色為(wei) Req上升沿觸發,紅色為(wei) Req電平觸發。

 

使用Req上升沿觸發→Busy=1→完成後DONE=1(一個(ge) 掃描周期)→Error=1且Status=24,然後等待下一次上升沿觸發信號進行循環,這裏Status=24表示指令調用但是未觸發操作,並不代表錯誤。

使用Req電平觸發→Busy=1→完成後DONE=1(一個(ge) 掃描周期),然後不停循環Busy和Done。

這裏建議使用上升沿觸發TCP_SEND指令。

如圖,是TCP_RECV的調用時序圖,藍色為(wei) EN上升沿觸發,紅色為(wei) EN電平觸發。

 

EN上升沿觸發,需要兩(liang) 次觸發才可以接收數據,DONE保持為(wei) 1,直至下次上升沿的到來;而EN電平觸發,有數據就接收,大部分時間處於(yu) Busy,Done為(wei) 1一個(ge) 周期,所以建議EN使用電平觸發TCP_RECV指令。

對於(yu) TCP_RECV的MaxLen,當MaxLen<發送方數據的長度時,按照MaxLen設置的長度進行接收,多餘(yu) 部分舍棄,Done不置位,同時Error=1,Status=25。

所以建議MaxLen=發送方數據的長度,如果發送方的長度是變化的,則MaxLen按照最大長度進行填寫(xie) 。

最後以下題為(wei) 例:本地客戶端IP為(wei) 192.168.0.100,ConnID為(wei) 10,端口號為(wei) 2000;遠程服務器IP為(wei) 192.168.0.101,ConnID為(wei) 20,端口號為(wei) 2001,將本地站從(cong) VB200開始的10個(ge) 字節發送到遠程站的VB100開始的10個(ge) 字節。

首先我們(men) 在係統塊中設置本地站和遠程站的IP地址

 

 

然後設置TCP_CONNECT參數,如圖

 

 

接著分別設置TCP_SEND和TCP_RECV

 

按下I0.4,啟動客戶端TCP_CONNECT的連接,SM0.5不斷觸發SEND的Req,

如圖所示,數據成功發送,通訊成功。

 

Tags:TCP通訊,SMART,西門子plc  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
推薦文章
最新推薦
關於我們 - 聯係我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁麵
下到頁底
晶體管查詢