第 8 章開發屬於自己的 Function 與 Function Block 本章介紹以 Visual Studio 008 開發工具來開發自定義的 Function/Function Block 的 DLL 檔 相關 範例程式 / 專案可以在 XP-8xx8-CE6, WP-8xx8, WP-8xx8-CE7,WP-5xx8-CE7, VP-xx8-CE7 產品盒內附的 CD-ROM 內找到 相關範例 : 光碟 : \napdos\win-graf\demo-project\user_c_lib\ \demo_user_c : VS 008 的專案資料夾, 可用來產生自定的 Function 或 Function Block 的 user_c.dll 檔案 ( 參考 8.4 節 )..\user_c.dll : 預先編譯好的 DLL 檔, 包含此範例中 Function ( bytes_to_long ) 和 Function Block ( long_to_bytes ) 的 user_c.dll 檔案 適用於 WP-8xx8, WP-8xx8-CE7,VP-xx8-CE7, WP-5xx8-CE7: \wp_vp\user_c.dll 適用於 XP-8xx8-CE6: \xpac\user_c.dll \user : Win-GRAF Library 資料夾, 包含此範例中 Function ( bytes_to_long ) 和 Function Block ( long_to_bytes ) 的 Library 相關檔案 ( 參考 8.3 節 ) Win-GRAF 範例 : 光碟 : \napdos\win-graf\demo-project\demo_user_c.zip ICP DAS 標準出貨的 Win-GRAF PAC 沒有包含 user_c.dll 檔案, 若想在 PAC 內新增自定的 Function 與 Function Block, 使用者就必需加入自己編譯產生的 DLL 檔 請將該檔案放在 PAC 內與 Win-GRAF Driver 相同的資料夾內 ( 即,\System_disk\Win-GRAF\) 然後, 將該 PAC 重新開機一次, 它就會支持使用者自定的 Function 與 Function Block Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-
8. 自定義的 Function/Function Block 開發流程 建立開發環境 使用 VS 008 並安裝好 對應平台之 SDK 套件 ( 參考 8. 節 ) 建立 Function / Function Block 使用 Win-GRAF Library Manager 並產生對應的 Source Code ( 參考 8.3 節 ) 編寫 Function / Function Block 邏輯 將上個步驟中產生的 Source Code 匯入 VS 008 專案中, 編寫邏輯 ( 參考 8.4 節 ) 測試自定義的 Function / Function Block 建立一個有使用自定義的 Function / Function Block 的 Win-GRAF 專案並 下載至 Win-GRAF PAC ( 參考 8.5 節 ) Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-
8. 建立開發編譯環境 下載相關 SDK 開發套件 : 客戶可在下列網頁下載相關的開發套件 (SDK). 適用 XPAC (XP-8xx8-CE6) ftp://ftp.icpdas.com/pub/cd/xp-8000-ce6/sdk/platformsdk/ (pacsdk_ce_x.x.x_vs008.msi). 適用 ViewPAC (VP-xx8-CE7) WinPAC (WP-8xx8, WP-8xx8-CE7,WP-5xx8-CE7) ftp://ftp.icpdas.com/pub/cd/winpac/napdos/wp-8x4x_ce50/sdk/platformsdk/ (pac70_sdk_yyyymmdd.msi) 8.. 安裝 ViewPAC 或 WinPAC 的開發套件 (SDK) 注意 : 請確認您的 PC 內已經安裝了 Microsoft VS008, 才能進行以下步驟. 滑鼠雙擊下載的 SDK 檔案 ( 例如 : pac70_sdk_005.msi), 將其安裝至 VS008 中. 點擊 Next 按鈕 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-3
3. 點選 Accept, 再點擊 Next 按鈕 4. 點擊 Next 按鈕 5. 點擊 Complete 按鈕 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-4
6. 點擊 Next 按鈕 7. 點擊 Install 按鈕, 開始安裝 SDK 8. 待安裝結束後, 點擊 Finish 按鈕離開安裝程序 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-5
8.. 安裝 XPAC (XP-8xx8-CE6, XP-8xx8-Atom-CE6) 的開發套件 (SDK) 注意 : 請確認您的 PC 內已經安裝了 Microsoft VS008, 才能進行以下步驟. 滑鼠雙擊下載的 SDK 檔案 ( 例如 : pacsdk_ce_.4.3_vs008.msi), 將其安裝至 VS008 中. 其他步驟, 請參考 8.. 節的步驟 () ~ (8) Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-6
8.3 定義 Function 或 Function Block 8.3. 定義 Function Lib 這個範例說明如何建立 Function 的 Library - bytes_to_long 該 Function 的功能是將 4 個 Byte (0 ~ 55) 轉換成一個長整數 (3-bit Signed Integer) 步驟如下:. 請開啟 程式集 Win-GRAF Libraries OEM (如下圖 或參考..3 節) 注意: 若打開 Win-GRAF Workbench 會無法新增/編輯 Win-GRAF Library. 建立一個名為 "User" 的 Library 群組 以方便維護及管理 3 3. 選擇 "Function and FBs" 頁籤 並按下 New 按鈕 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-7
4. 填入 Function 的名稱 註解, 並選擇 Function 的型態為 Function, 最後按下 OK 按鈕 3 5. 宣告該 Function 的原型 參數的宣告請依照 變數名稱 : 變數型態 ; 的方式來宣告參數, 而變數型態可以參考附錄 A, "VAR_INPUT" 與 "END_VAR" 之間為傳入參數 ; "VAR_OUTPUT" 與 "END_VAR" 之間為回傳參數, 完成後按 Store 按鈕儲存, 再點選 Description 頁籤, 可在此處編輯該 Function 的技術說明, 完成後也請按 Store 按鈕儲存 3 6. 點選 Wizard Function/Block Source Code 產生該 Function 的 Source Code Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-8
7. 點選 Windows DLL 按下 Copy 按鈕, 複製產生的 Source Code 8. 新增一個純文字檔案且命名為 bytes_to_long.c, 並將剛剛複製的內容貼入並儲存以供備用 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-9
8.3. 定義 Function Block Lib 本節的方法與前一節類似 本範例是要定義出 Function Block ( long_to_bytes ) 的 Win-GRAF Lib 並 產生出 Source code ("long_to_bytes.c") 檔案. 參考 前一節 開啟 "Library Manager" (程式集 Win-GRAF Libraries OEM) 再開啟先前 新增的 Library 群組 - "User" 並按下 New 按鈕來新增一個 Function Block. 填入 Function 的名稱 註解 並選擇型態為 Function Block 最後按下 OK 的按鈕 3 3. 宣告該 Function 的原型 參數的宣告請依照 變數名稱 變數型態 的方式來宣告參數 而變數型態可以參考附錄 A "VAR_INPUT" 與 "END_VAR" 之間為傳入參數; "VAR_OUTPUT" 與 "END_VAR" 之間為回傳參數 完成後按 Store 按鈕儲存 再點選 Description 頁籤 可在此處編輯該 Function Block 的技術 說明 完成後也請按 Store 按鈕儲存 3 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-0
4. 點選 Wizard Function/Block Source Code 產生該 Function Block 的 Source Code 5. 點選 Windows DLL 按下 Copy 按鈕, 複製產生的 Source Code 6. 新增一個純文字檔案且命名為 long _to_bytes.c, 並將剛剛複製的內容貼入並儲存以供備用 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-
8.4 編寫 Function 或 Function Block 的邏輯程式 注意: 請確認您的 PC 內已經安裝了 Visual Studio 008 軟體且已安裝 WinPAC SDK / XPAC SDK 才能進行以下步驟. 把剛剛產生的 Function 與 Function block 的 Source Code 檔案 (如圖) 複製到 PC 內相對應的 專案資料夾內 (您可在光碟的路徑中找到該範例專案: \napdos\win-graf\demo-project\user_c_lib\demo_user_c) 將 Function 與 Function block 的 Source Code 檔案 複製到 PC 內 VS 008 專案資料夾中. 接下來 需確認 VS 008 的 Project 設定是否正確? (注意: 不同的 PAC 採用的設定會不相同) 若 PAC 使用 WP-8xx8, WP-8xx8-CE7,VP-xx8-CE7 或 WP-5xx8-CE7 必需設定為 PXA70(ARMV4I) Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-
若 PAC 使用 XP-8xx8-CE6 必需設定為 "XPacSDK (x86)" 3. 將 Function 與 Function block 的 C 檔案加入此 VS 008 Project 內 在 "Source Files" 上叫出右鍵 選單 Add Existing Item, 並選擇剛剛加入的 C 檔案, 再按下 Add 按鈕 3 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-3
8.4. 編寫 T5BLOCKS.cpp 將 T5BLOCKS.cpp 內的 libinfo 與 libver 修改為您想要顯示的資訊 這 項資訊會顯示在 PAC 內 Win-GRAF Driver 的視窗上 (如下圖) 如果您想要在 Win-GRAF 專案程式 一開始運行 與 結束運行前 進行一些動作 請編寫 T5BLOCKS.cpp 內 Project_Begin 與 Project_End 這 個函式的程式 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-4
8.4. 編寫 Function 內的邏輯程式 (本例是 bytes_to_long.c ) 先將 Function 的處理邏輯寫在 switch case - "T5FBCMD_ACTIVE 指令中 再將此 Function 的名稱 ( BYTES_TO_LONG ) 加到 T5BLOCKS.cpp 檔案內 "T5Blocks_GetBlockName" 的 switch case 中 注意: switch case 的編號一定要由 開始 且不得跳號 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-5
8.4.3 編寫 Function Block 內的邏輯程式 (本例是 long_to_bytes.c ) 每個 Function Block 都有一個配置好的 "Private structure 記憶體空間 User 可依照自己的需求來做運用 或 改寫 每個 Cycle 都會執行該區塊 當 Project 啟動時 主要用來 初始化 Private structure 實體 當 Project 停止時 主要用來 關閉 Private structure 實體 當 Project 熱啟動 (Hot restart) 或 On Line Change 時 可以更新 Private structure 的資料 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-6
最後 記得將該 Function Block 的名稱 ( LONG_TO_ BYTES ) 加到 T5BLOCKS.cpp 檔案內的 "T5Blocks_GetBlockName" 的 switch case 中 (注意: switch case 的編號一定要由 開始 且不得跳號 ) Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-7
8.4.4 編譯專案. 點選功能表 "Build" > "Build Solution" 來執行編譯. 若編譯成功 複製 USER_C.dll 到您的 PAC 內的 "\System_disk\Win-GRAF\" 路徑下 並重開機 一次即可 Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-8
8.5 測試自定義的 Function 與 Function Block. 使用 FTP 的方式, 將 "user_c.dll" 檔案放到 PAC 內與 Win-GRAF Driver 相同的資料夾中 ( 即, \System_disk\Win-GRAF\), 再將控制器重新上電 若 Win-GRAF Driver 有偵測到正確的 DLL 檔, 會顯示如下 :. 開啟 Win-GRAF Workbench 中含有自定義的 Function/Function Block 的專案, 編譯後下載該專案 至 Win-GRAF PAC 中 另外,Win-GRAF PAC 隨貨光碟中含有一些預先準備好的檔案, 也可以用來測試一下效果 : () WP-8xx8,VP-xx8-CE7,WP-5xx8-CE7: \napdos\win-graf\demo-project\user_c_lib\wp_vp\user_c.dll () XP-8xx8-CE6: \napdos\win-graf\demo-project\user_c_lib\xpac\user_c.dll (3) 將 Win-GRAF Library 資料夾 "User" 複製到 PC 的以下路徑中 C:\Win-GRAF\DATA\HWDEF\ (4) 開啟 Win-GRAF 範例專案 "demo_user_c.zip, 編譯後下載該專案至 Win-GRAF PAC 中 ( 可以參考 3. 節使用 Win-GRAF Workbench 來開啟範例專案 ) Win-GRAF 使用手冊,. 07 版, 09 年 月 ICP DAS 8-9