Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/ 2. 更詳細的驅動程式安裝說明, 請參考 UniDAQ SDK 使用手冊 使用手冊下載位置 : CD:\NAPDOS\PCI\UniDAQ\Manual\ http://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/manual/ 步驟 2: 安裝 DAQ Card 至電腦上 1. 關掉電腦電源 2. 打開電腦機殼 3. 將 I/O 板卡插入至一個未使用的 PCI 插槽 4. 裝上機殼 5. 重新啟動電源 步驟 3: 取得.h 檔及.lib 檔案 您可從 VC 範列程式中取得 UniDAQ.h 檔及 UniDAQ.lib 檔來使用 VC 範列程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Demo\ http://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/ Copyright 2013 ICP DAS Co., Ltd. All Rights Reserved. 1
步驟 4: 執行 LabWindows/CVI 後, 選擇 File New Project from Template 來建立一個新的專案 1 2 步驟 5: 選擇 User Interface Application 3 4 在此變更專案名稱 5 在此設定專案的儲存路徑 6 取消此項目 ( 不勾選 ) 7 Copyright 2013 ICP DAS Co., Ltd. All Rights Reserved. 2
步驟 6: 新增.lib 檔至新增的專案中 1. 在 LabWindows/CVI 開發軟體功能選單上, 單擊 Edit Add Files to Project Library (*.lib) 8 9 10 2. 選擇 UniDAQ.lib 檔後, 單擊 Add 按鈕, 再單擊 OK 按鈕 11 12 13 Copyright 2013 ICP DAS Co., Ltd. All Rights Reserved. 3
步驟 7: 在專案的.c 檔中的 Include files 區塊, 新增 #include<windows.h> 及 #include UniDAQ.h 雙擊.c 檔 14 15 Copyright 2013 ICP DAS Co., Ltd. All Rights Reserved. 4
步驟 8: 您可以開始設計您所需的使用介面 (.uir 檔 ) 及編寫程式碼 (.c 檔 ) 範例 : DIO 功能範例程式如下 : 1. 設定 DIO 使用介面 IDC_COMBO_Selectboard Callback function: OnSelchangeCOMBOSelectBoard IDC_EDIT_DO IDC_COMBO_OutputPort IDC_BTN_DO Callback function: OnBtnDo IDC_COMBO_InputPort butexit Callback function: OnCancel IDC_EDIT_DI 2. 撰寫程式碼, 如下 : #include <Windows.h> #include <cvirte.h> #include <userint.h> #include "UniDAQ_DIO.h" #include "UniDAQ.h" static int panelhandle; WORD wrtn; int wboardno; int wboardindex; WORD PortIndex; IXUD_DEVICE_INFO sdevinfo[max_board_number]; IXUD_CARD_INFO scardinfo[max_board_number]; char szmodelname[20]="unknow Device"; int main (int argc, char *argv[]) int icardnum =0; WORD wtotalboards; if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelhandle = LoadPanel (0, "UniDAQ_DIO.uir", PANEL)) < 0) return -1; Copyright 2013 ICP DAS Co., Ltd. All Rights Reserved. 5
//Initial the resource and get total board number form driver wrtn=ixud_driverinit(&wtotalboards); if (wrtn!=0) return wrtn; ClearListCtrl(panelHandle, PANEL_IDC_COMBO_SelectBoard); InsertListItem (panelhandle, PANEL_IDC_COMBO_SelectBoard, 0, --Select Board--,0); //Get DAQ Card Information for(word wboardindex = 0; wboardindex<wtotalboards ; wboardindex++) wrtn = Ixud_GetCardInfo(wBoardIndex,&sDevInfo[wBoardIndex],&sCardInfo[wBoardIndex],szModelName); InsertListItem (panelhandle, PANEL_IDC_COMBO_SelectBoard, -1, szmodelname, wboardindex); DisplayPanel (panelhandle); RunUserInterface (); DiscardPanel (panelhandle); int CVICALLBACK OnSelchangeCOMBOSelectBoard (int panel, int control, int event, void *callbackdata, int eventdata1, int eventdata2) WORD wportchnum; char sportno[32]; GetCtrlIndex (panelhandle, PANEL_IDC_COMBO_SelectBoard, &wboardno); wportchnum = scardinfo[wboardno].wdioportwidth; switch (event) case EVENT_COMMIT: //Total D/O port ClearListCtrl(panelHandle, PANEL_IDC_COMBO_OutputPort); for (PortIndex = 0; PortIndex < (scardinfo[wboardno].wdioports + scardinfo[wboardno].wdoports) ;PortIndex++) sprintf(sportno, "%02d", PortIndex); InsertListItem (panelhandle, PANEL_IDC_COMBO_OutputPort, -1, sportno,portindex); //Total D/I port ClearListCtrl(panelHandle, PANEL_IDC_COMBO_InputPort); for (PortIndex = 0; PortIndex < (scardinfo[wboardno].wdioports + scardinfo[wboardno].wdiports) ;PortIndex++) sprintf(sportno, "%02d", PortIndex); InsertListItem (panelhandle, PANEL_IDC_COMBO_InputPort, -1, sportno, PortIndex); break; Copyright 2013 ICP DAS Co., Ltd. All Rights Reserved. 6
int CVICALLBACK OnBtnDo (int panel, int control, int event, void *callbackdata, int eventdata1, int eventdata2) WORD wrtn; int woutputportno; int winputportno; DWORD dwdoval; DWORD dwdival; GetCtrlIndex (panelhandle, PANEL_IDC_COMBO_SelectBoard, &wboardno); GetCtrlIndex (panelhandle, PANEL_IDC_COMBO_OutputPort, &woutputportno); GetCtrlIndex (panelhandle, PANEL_IDC_COMBO_InputPort, &winputportno); switch (event) case EVENT_COMMIT: break; //Config the DIO Port if(scardinfo[wboardno].wdioports>0) wrtn = Ixud_SetDIOModes32(wBoardNo, 1<<wOutputPortNo); //Write digital output port Value GetCtrlVal (panelhandle, PANEL_IDC_EDIT_DO, &dwdoval); wrtn = Ixud_WriteDO(wBoardNo,wOutputPortNo,dwDOVal); //Read digital input port Value wrtn = Ixud_ReadDI(wBoardNo,wInputPortNo,&dwDIVal); SetCtrlVal (panelhandle, PANEL_IDC_EDIT_DI, dwdival); int CVICALLBACK OnCancel (int panel, int control, int event, void *callbackdata, int eventdata1, int eventdata2) switch (event) case EVENT_COMMIT: //Release the resource form Driver wrtn = Ixud_DriverClose(); QuitUserInterface (0); break; 更多更詳細的 UniDAQ DLL 函式資訊, 請參考至 UniDAQ DLL 使用手冊 手冊下載位置如下 : http://ftp.icpdas.com/pub/cd/i ocard/pci/napdos/pci/unidaq/ manual/ Copyright 2013 ICP DAS Co., Ltd. All Rights Reserved. 7