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