以上程序是一個用于控制
Profinet 設備連接狀態的全局函數,主要實現對指定 Profinet 設備的 “耦合(連接)” 和 “解耦(斷開)” 操作,并包含錯誤檢查與提示功能。以下是詳細解析:
1.函數定義與參數
- 定義了一個全局函數Profinet,用于 Profinet 設備的連接控制。
- Device_No: IN, INT:設備編號(輸入,整數類型),用于指定需要操作的 Profinet 設備。
- Oper : IN, NETMOTION:操作類型(輸入,NETMOTION枚舉類型),決定執行 “耦合” 還是 “解耦” 操作。
- 輸入參數:
2.變量聲明
3.核心邏輯
通過SWITCH Oper判斷操作類型,分支為#BusOn(耦合)和#BusOff(解耦)。CASE #BusOn:執行 Profinet 設備 “耦合”(連接)操作
步驟 1:驗證設備編號有效性
- NetID_DATA:存儲設備 NetID 的數組(NetID 是 Profinet 設備的唯一標識)。
- 若NetID_DATA[Device_No]== 0,表示該設備編號無效(無對應 NetID),通過MsgQuit顯示錯誤信息 “設備編號錯誤,請輸入正確編號” 并退出操作。
步驟 2:執行耦合操作
- 若設備編號有效(NetID_DATA[Device_No]> 0),調用IOCTL函數執行耦合:
- IOCTL:輸入輸出控制函數,用于與硬件 / 通信模塊交互。
- 參數"PNIO-CTRL":指定操作對象為 Profinet 控制器。
- 參數50:耦合操作的命令碼(Profinet 協議中定義的耦合指令)。
- 參數NetID_DATA[Device_No]:目標設備的 NetID(唯一標識)。
- 執行結果存入NET_OK(0 = 成功,非 0 = 失敗)。
步驟 3:耦合錯誤處理
- 若NET_OK ≠ 0(耦合失敗),等待 2 秒后再次檢查狀態。
- 若仍失敗,通過MsgQuit顯示錯誤信息 “Profinet 耦合錯誤,請檢查” 及設備信息,退出操作。
CASE #BusOff:執行 Profinet 設備 “解耦”(斷開)操作
邏輯與#BusOn類似,核心是執行解耦操作:
步驟 1:同樣驗證設備編號有效性(同#BusOn,略)。
步驟 2:執行解耦操作
與耦合的區別是IOCTL的命令碼為60(Profinet 協議中定義的解耦指令)。
步驟 3:解耦錯誤處理
若解耦失敗,等待 2 秒后再次檢查,仍失敗則顯示 “Profinet 解耦錯誤,請檢查” 并退出。
4.整體功能總結
該函數是 Profinet 設備連接狀態的控制接口,通過輸入 “設備編號” 和 “操作類型(耦合/ 解耦)”:
- 對有效設備執行對應的耦合(#BusOn)或解耦(#BusOff)操作;
- 先驗證設備編號的有效性(通過 NetID 判斷);
- 監控操作結果,若失敗則等待重試,最終失敗時輸出錯誤提示。