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