首頁>科技>

今天這篇文章,想和大家分享下我最近除錯西門子PLC開放式乙太網通訊的一些經驗。關於西門子開放式乙太網通訊,我之前曾寫過系列文章介紹:

西門子PLC乙太網開放式使用者通訊連載(1)-TCON;西門子PLC乙太網開放式使用者通訊連載(2)-TRCV;西門子PLC乙太網開放式使用者通訊連載(3)-TURCV;西門子PLC乙太網開放式使用者通訊連載(4)-TSEND;西門子PLC乙太網開放式使用者通訊連載(5)-TUSEND;

1、關於建立連線

無論是基於UDP協議還是TCP協議,西門子PLC開放式乙太網通訊的第一步都是呼叫TCON指令建立連線。該指令如下圖所示:

對於TCP通訊來說,TCON指令會在兩個通訊夥伴之間建立真正的通訊鏈路。因此,需要在該指令的connect引數中指定對方的IP地址和埠號;

對於UDP通訊來說,由於它是一種無連線的協議,TCON指令不會建立真實的通訊鏈路,因此通訊夥伴的IP和埠號是可以不填寫的。那麼為什麼還要呼叫TCON指令呢?其實,對於UDP通訊,呼叫TCON指令的目的是開放本地埠號,並建立一個通訊的ID。開放本地埠後才能接收對方傳送到這個埠的資料,而通訊的ID則用於後續的傳送/接收指令。

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通訊的一些經驗分享。文章沒有對所有的細節進行介紹,只是強調了一些需要注意的地方。關於更多的細節,請檢視我之前的文章介紹。

12
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 「優質供應鏈獎」科爾摩根最新NDC8控制系統