CPU自帶的以太網接口可以使用OPEN IE的方式實現如下協議,分別介紹如下:
? TCP
? UDP
? ISO-on-TCP
注意:以下內容任何用戶可以免費使用,復制和傳遞他人,程序的作者及擁有者不負責軟件的功能性和兼容性,使用者須自己承擔責任,由于內容免費,所以不保證錯誤的更正和熱線支持!
1. TCP通信
1.1通信程序塊的準備
如下的通信塊可以用來建立TCP通信,您需要把這些程序塊拷貝到您的項目中:
1) FB65 "TCON" 用于建立連接,連接時需要UDT65來提供參數
2) FB66 "TDISCON" 用于斷開連接
3) FB63 "TSEND" 用于發送數據到S7站點、S5站點、PC站或者第三方設備
4) FB64 "TRCV" 用于從S7站點、S5站點、PC站或者第三方設備接收數據
5) UDT65 "TCON_PAR"存放用戶通信參數
6) FC97 "SET_TCP_ENDPOINTx" 用于修改UDT65類型變量內通信對象參數
FB63,64,65,66這四個功能塊可以在Standard Library -> Communication Blocks里得到:

圖 01: FB63,64,65,66
FC97與UDT65需要從如下項目中打開獲得:
( 42 KB )

圖 02: FC97與UDT65
首先建立一個S7-300或者S7-400站,拷貝如上程序塊到項目中。
1.2通信程序編寫
1.2.1 生成數據塊
在程序中生成一個DB塊,塊號不限(本例為DB101),在塊中建立變量DB_VAR,類型為UDT65

圖 03: 生成UDT65類型變量
1.2.2在OB1中編程
首先調用FC97 "SET_TCP_ENDPOINTx"

圖 04: 調用FC97
FC97參數說明如下:
? ID: 連接ID
? DEV_ID
DEV_ID = B#16#1 用于本PLC型號(注意不是通信對方)為 IM151-8 PN/DP CPU
DEV_ID = B#16#2 用于本PLC型號(注意不是通信對方)為 CPU31x-2PN/DP或IM154-8 CPU
DEV_ID = B#16#3 用于本PLC型號(注意不是通信對方)為 CPU319-3PN/DP
DEV_ID = B#16#5用于本PLC型號(注意不是通信對方)為 CPU41x-3PN/DP
? ACTIVE: 主動或是被動建立連接,通信雙方必須一個主動,一個被動
? LOC_PORT: CPU本地的TCP端口
? REM_PORT: 通信伙伴的TCP遠程端口
? IP_ADDR1 ... IP_ADDR4: 通信伙伴的IP地址
? V23:本機是否是CPU31x-2PN/DP FIRMWARE 版本為2.3或以下版本
? CON_DB:用UDT65生成的變量

圖05: 調用FB65 "T_CON"
調用FB65 ,通過提供給FB65的輸入參數"REQ"一個上升沿來建立連接。 “ID”為連接ID,“CONNECT”參數填寫用UDT65生成的變量, 連接建立后會一直保持,直到調用FB66 "TDISCON"斷開連接,CPU停止或者斷電。
1.2.3 調用發送和接收程序

圖06: 調用 FB63,64發送接收數據
FB63 "TSEND" 發送請求依靠輸入參數"REQ"的上升沿來實現,如果“BUSY”位為true時不要觸發"REQ"。輸出參數 "DONE", "ERROR" 和 "STATUS" 用于評估工作的情況。
FB64 "TRECV" 用于接收數據,EN_R始終為true, “ID “填寫連接ID,”DATA”填寫接收數據區,輸出參數"NDR" 用于表示新的數據已經收到,輸出參數"LEN" 表示接收的數據長度。
1.2.4斷開連接
調用FB66 "TDISCON",“ID “填寫連接ID,輸入參數"REQ"的上升沿來實現斷開連接操作。

圖 07: 調用FB66 "TDISCON"
2. UDP通信
2.1通信程序塊的準備
如下的通信塊可以用來建立UDP通信,您需要把這些程序塊拷貝到您的項目中:
1) FB65 "TCON" 用于建立連接,連接時需要UDT65來提供參數
2) FB66 "TDISCON" 用于斷開連接
3) FB67 "TUSEND"用于發送數據到S7站點、S5站點、PC站或者第三方設備
4) FB68 "TURCV"用于從S7站點、S5站點、PC站或者第三方設備接收數據
5) UDT65 "TCON_PAR"存放用戶通信參數
6) UDT66 "TADDR_PAR"存放用戶通信參數
7) FC95"SET_UDP_ENDPOINT"用于建立本地UDP通信參數
8) FC96"SET_UDP_REMOTE"用于建立遠程UDP通信參數
FB65,66,67,68這四個功能塊可以在Standard Library -> Communication Blocks里得到: