7-1200 與 S7-300 PN/S7-400 PN UDP 通信 TIA 相同項目
S7-1200 與 S7-300 PN 口之間的以太網通信可以通過 UDP 協議來實現,使用的通信指令是在雙方 CPU 調用通信-開放式用戶通信TSEND_C,TRCV_C(1200支持,300不支持)或TCON,TDISCON,TUSEND,TURCV 指令來實現。通信方式為雙邊通信,因此 TUSEND 和 TURCV 必須成對出現。
此外對于伙伴是S7-400PN 也可以參考本文檔。
硬件和軟件需求及所完成的通信任務
測試軟/硬件:
① S7-1214 DC/DC/DC V4.4
② S7-315-2PN/DP V2.6
③ STEP7 V16
所完成的通信任務:
① S7-1200 CPU將通訊數據區 DB4 塊中的 10 個字節的數據發送到 S7-300 CPU的接收數據區 DB5 塊中。
② S7-300 CPU將通訊數據區 DB5 塊中的 10 個字節的數據發送到 S7-1200 CPU的接收數據區 DB4 塊中。
1200 / 300 CPU 硬件組態配置
1.使用 STEP7 V16 軟件新建一個項目并完成硬件配置
在 STEP7 V16 的 “Portal 視圖” 中選擇 “創建新項目” 創建一個新項目。
2.添加1200CPU硬件并命名PLC
然后進入 “項目視圖”,在“項目樹” 下雙擊 “添加新設備”,在對話框中選擇所使用的 S7-1200 CPU添加到機架上,命名為 1200,如圖1所示。
圖1. 添加1200 CPU設備
為了編程方便,使用 CPU 屬性中定義的時鐘位,定義方法如下:
在 “項目樹” > “1200” > “設備組態” 中,選中 CPU ,然后在下面的屬性窗口中,“屬性” > “系統和時鐘存儲器” 下,將系統位定義在 MB1,時鐘字節定義在 MB0,如圖2所示。
時鐘位使用 M0.5,以 1Hz 的速率自動激活發送任務。
圖2. 啟用系統字節與時鐘字節
3.為 PROFINET 通信口分配以太網地址
在 “設備視圖”中點擊 CPU 上代表 PROFINET 通信口的綠色小方塊,在下方會出現 PROFINET 接口的屬性,在 “以太網地址” 下分配 IP 地址為 192.168.0.12 ,子網掩碼為255.255.255.0,如圖3所示。
圖3. 分配1200CPU IP 地址
4.添加300CPU硬件并命名PLC
然后進入 “項目視圖”,在“項目樹” 下雙擊 “添加新設備”,在對話框中選擇所使用的 S7-300 CPU 添加到機架上,命名為 300PN,如圖4所示。
圖4. 添加300 CPU設備
為了編程方便,使用 CPU 屬性中定義的時鐘位,定義方法如下:
在 “項目樹” > “300PN” > “設備組態” 中,選中 CPU ,然后在下面的屬性窗口中,“屬性” > “時鐘存儲器” 下時鐘字節定義在 MB0,如圖5所示。
時鐘位使用 M0.5,以 1Hz 的速率自動激活發送任務。
圖5. 啟動時鐘存儲器
5.為 PROFINET 通信口分配以太網地址
在 “設備視圖”中點擊 CPU 上代表 PROFINET 通信口的綠色小方塊,在下方會出現 PROFINET 接口的屬性,在 “以太網地址” 下分配 IP 地址為 192.168.0.3,子網掩碼為255.255.255.0,如圖6所示。
圖6. 分配300CPU IP 地址
7.創建 CPU之間的網絡連接
在項目樹 “項目樹”>“設備和網絡” >“網絡視圖” 視圖下,創建兩個設備的連接。用鼠標點中 S7-1200 上的PROFINET通信口的綠色小方框,然后拖拽出一條線,到另外一個 315-2PN/DP 上的PROFINET通信口上,松開鼠標,連接就建立起來了,如圖7所示。
圖7. 建立兩個 CPU的網絡連接
S7-1200 側編程和連接參數的配置
1.在OB1調用“TSEND_C”通信指令
在 S7-1200 CPU 中調用發送通信指令,進入 “項目樹” > “ 1200” > “程序塊” > “OB1” 主程序中,從右側窗口 “指令” > “通信” > “開放式用戶通信”下調用 “TSEND_C” 指令,創建連接,如圖8所示。
圖8. 調用 TSEND_C 通信指令
參數說明:
輸入接口參數:
REQ | := %M0.5 | // 使用 1Hz 的時鐘脈沖,上升沿激活發送任務; |
CONT | := TRUE | // 創建連接,默認TRUE; |
CONNECT | :=“_1200_Receive_DB".ConnectionData | // UDP連接結構描述; |
DATA | := "Data".USEND | // 發送數據區的數據; |
ADDR | :=“_1200_Receive_DB".ADDR_Send | // UDP通訊伙伴的連接參數,包括對方IP地址及端口; |
輸出接口參數:
DONE | := %M10.1 | // 任務執行完成并且沒有錯誤,該位置 1; |
BUSY | := %M10.2 | // 該位為 1,代表任務未完成,不能激活新任務; |
ERROR | := %M10.3 | // 通信過程中有錯誤發生,該位置 1; |
STATUS | := %MW12 | // 有錯誤發生時,會顯示錯位信息號。 |
2.配置 S7-1200 的 “TSEND_C”連接參數
S7-1200 的 “TSEND_C”指令的連接參數需要在指令下方的屬性窗口“屬性”> “組態”>“連接參數中”中設置,如圖9所示。
圖9. 配置 TSEND_C 連接參數
連接參數說明:
端點 | :可以通過點擊選擇按鈕選擇指定伙伴PLC; |
連接類型 | :選擇通信協議為 UDP; |
連接 ID | :連接的地址 ID 號,這個 ID 號在后面的編程里會用到; |
連接數據 | :點擊新建自動生成該數據塊; |
主動建立連接 | :此功能在UDP連接時,不能選擇; |
地址詳細信息 | :定義本地通信的端口號為:2000,伙伴端口為:2000; |
3.創建并定義 S7-1200 的發送/接收數據區 DB4 塊
通過“項目樹”>“1200”>“程序塊”>“添加新塊”,選擇“數據塊” 創建 DB4 命名為“Data”。定義發送數據區USDED為 10 個字節的數組,接收數據區URCV為 10 個字節的數組,如圖10所示。
圖10. 創建發送/接收數據區 DB 塊
4.在OB1調用“TRCV_C”通信指令
進入 “項目樹” > “1200” > “程序塊” > “OB1 ” 主程序中,從右側窗口 “指令” > “通訊” > “開放式用戶通信”下調用 “TRCV_C” 指令,如圖11所示。
圖11. 調用 TRCV_C 通信指令
參數說明:
輸入接口參數:
REQ | := %M20.0 | // 準備好接收數據 M20.0=TRUE; |
CONT | := TRUE | // 創建連接,默認TRUE; |
CONNECT | :=“_1200_Receive_DB".ConnectionData | // UDP連接結構描述; |
DATA | := "Data".URCV | // 接收數據區的數據; |
ADDR | :=“_1200_Receive_DB".ADDR_Send | // UDP通訊伙伴的連接參數,包括對方IP地址及端口; |
輸出接口參數:
DONE | := %M20.1 | // 任務執行完成并且沒有錯誤,該位置 1; |
BUSY | := %M20.2 | // 該位為 1,代表任務未完成,不能激活新任務; |
ERROR | := %M20.3 | // 通信過程中有錯誤發生,該位置 1; |
STATUS | := %MW22 | // 有錯誤發生時,會顯示錯位信息號。 |
5.配置 S7-1200 的 “TRCV_C”連接參數
S7-1200 的 “TRCV_C”指令的連接參數需要在指令下方的屬性窗口“屬性”> “組態”>“連接參數中”中設置,如圖12所示。
圖12. 配置 TRCV_C 連接參數
連接參數說明:
端點 | :可以通過點擊選擇按鈕選擇指定伙伴PLC; |
連接類型 | :選擇通信協議為 UDP; |
連接 ID | :連接的地址 ID 號,這個 ID 號在后面的編程里會用到; |
連接數據 | :點擊新建自動生成該數據塊; |
主動建立連接 | :此功能在UDP連接時,不能選擇; |
地址詳細信息 | :定義本地通信的端口號為:2000。 |
1200CPU側配置和編程完成,編譯并存盤。
S7-300PN 側編程和連接參數的配置
1.在 S7-300 中調用“TCON”(300不支持TSEND_C和TRCV_C)通信指令
在S7-300 CPU 中調用通信指令,進入 “項目樹” > “ 300PN” > “程序塊” > “OB1” 主程序中,從右側窗口 “指令” > “通訊” > “開放式用戶通信”下調用 “TCON” 指令,創建連接,如圖13所示。
圖13. 調用 TCON 通信指令
2.配置S7-300 的 “TCON”連接參數
S7-300 的 “TCON”指令的連接參數需要在指令下方的屬性窗口“屬性”> “組態”>“連接參數中”中設置,如圖14所示。
圖14. 配置 TCON 連接參數
連接參數說明:
端點 | :可以通過點擊選擇按鈕選擇指定伙伴PLC; |
連接類型 | :選擇通信協議為 UDP; |
連接 ID | :連接的地址 ID 號,這個 ID 號在后面的編程里會用到; |
連接數據 | :點擊新建自動生成該數據塊; |
主動建立連接 | :此功能在UDP連接時,不能選擇; |
地址詳細信息 | :定義本地通信的端口號為:2000。 |
3.創建并定義 S7-300 的發送/接收數據區和UDP 連接參數數據塊 DB5 塊
通過“項目樹”>“300PN”>“程序塊”>“添加新塊”,選擇“數據塊” 創建 DB5 命名為“Data”。定義發送數據區USEND為 10 個字節的數組,接收數據區URCV為 10 個字節的數組;
定義UDP 伙伴參數數據,數據類型為“TADDR_PAR”,包含伙伴的IP地址和端口號信息(如對方1200 CPU 的 IP:192.168.0.12,端口號:2000)。如圖15所示。
圖15. 創建發送/接收數據區和UDP 連接參數數據塊DB 塊
4.在 OB1 內調用“TUSEND” 通信指令
進入 “項目樹” > “300PN” > “程序塊” > “OB1 ” 主程序中,從右側窗口 “指令” > “通訊” > “開放式用戶通信”下調用 “TUSEND” 指令,配置接口參數,如圖16所示。
圖16. 調用 TUSEND 通信指令
參數說明:
輸入接口參數:
REQ | : = %M0.5 | // 使用 1Hz 的時鐘脈沖,上升沿激活發送任務; |
ID | : = 1 | // 創建連接ID; |
LEN | := 10 | // 發送數據長度; |
DATA | : = "Data".usend | // 發送數據區的數據; |
ADDR | : = "Data".Param | // UDP通訊伙伴的連接參數,包括對方IP地址及端口,使用指針尋址; |
輸出接口參數:
DONE | := %M20.1 | // 任務執行完成并且沒有錯誤,該位置 1; |
BUSY | := %M20.2 | // 該位為 1,代表任務未完成,不能激活新任務; |
ERROR | := %M20.3 | // 通信過程中有錯誤發生,該位置 1; |
STATUS | := %MW22 | // 有錯誤發生時,會顯示錯位信息號。 |
5.在 OB1 內調用“TURCV” 通信指令
進入 “項目樹” > “300PN” > “程序塊” > “OB1 ” 主程序中,從右側窗口 “指令” > “通訊” > “開放式用戶通信”下調用 “TURCV” 指令,配置接口參數,如圖17所示。
圖17. 調用 TURCV 指令并配置接口參數
參數說明:
輸入接口參數:
EN_R | := M30.0 | // 準備好接收數據 M30.0=TRUE; |
ID | := 1 | // 連接號,使用的是 TCON 的連接參數中 ID號; |
LEN | := 10 | // 接收數據長度為 10 個字節; |
DATA | : = "Data".urcv | // 接收數據區的地址; |
ADDR | : = "Data".Param | // UDP通訊伙伴的連接參數,包括對方IP地址及端口,使用指針尋址; |
輸出接口參數:
NDR | := %M30.1 | // 該位為 1,接收任務成功完成; |
BUSY | := %M30.2 | // 該位為 1,代表任務未完成,不能激活新任務; |
ERROR | := %M30.2 | // 通信過程中有錯誤發生,該位置 1; |
STATUS | := %MW32 | // 有錯誤發生時,會顯示錯誤信息號; |
RCVD_LEN | // 實際接收數據的字節數。 |
300CPU側配置和編程完成,編譯并存盤。
下載硬件組態及程序并監控通信結果
下載兩個 CPU 中的所有硬件組態及程序,實現兩個 CPU 之間數據交換,監控結果如圖18所示。
圖18. 監控結果
附加說明
如果通信異常,請參考以下附加說明文檔。