技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 應(yīng)用方案 > 在LabVIEW下使用ZLGCAN接口函數(shù)庫(kù)

在LabVIEW下使用ZLGCAN接口函數(shù)庫(kù)

時(shí)間:2007-07-28 14:35:00來(lái)源:shixiang

導(dǎo)語(yǔ):?在LabVIEW下使用ZLGCAN接口函數(shù)庫(kù)
1、概述 Virtual CAN Interface (VCI) 函數(shù)庫(kù)是專門為ZLGCAN 設(shè)備在PC 上使用而提供的應(yīng)用程序接口。庫(kù)里的函數(shù)從ControlCAN.dll 中導(dǎo)出,在LabVIEW7.0 中可以直接使用這些庫(kù)函數(shù)而無(wú)需額外的操作。VCI 函數(shù)的使用流程如圖 1.1 所示。 [align=center] 圖 1.1 VCI 函數(shù)使用流程[/align] 2、使用VCI 函數(shù) 2.1 數(shù)據(jù)結(jié)構(gòu) VCI 函數(shù)庫(kù)中定義了一些數(shù)據(jù)結(jié)構(gòu)用于數(shù)據(jù)交換,在使用VCI 函數(shù)前應(yīng)該先創(chuàng)建這些數(shù)據(jù)結(jié)構(gòu)。在LabVIEW 中創(chuàng)建這些結(jié)構(gòu)時(shí)應(yīng)該使用簇——Cluster。一個(gè)簇就是一個(gè)由若干不同的數(shù)據(jù)類型的成員組成的集合體,類似于C 語(yǔ)言中的結(jié)構(gòu)。其成員可以是任意的數(shù)據(jù)類型,但必須都是控件或都是顯示件。成員的邏輯順序是由它們被放入簇的先后順序決定的。 2.1.1 VCI_BOARD_INFO 結(jié)構(gòu) VCI_BOARD_INFO 結(jié)構(gòu)體包含ZLGCAN 系列接口卡的設(shè)備信息。結(jié)構(gòu)體將在VCI_ReadBoardInfo 函數(shù)中被填充。 typedef struct _VCI_BOARD_INFO { USHORT hw_Version; USHORT fw_Version; USHORT dr_Version; USHORT in_Version; USHORT irq_Num; BYTE can_Num; CHAR str_Serial_Num[20]; CHAR str_hw_Type[40]; USHORT Reserved[4]; } VCI_BOARD_INFO, *PVCI_BOARD_INFO; [align=center] 圖 2.1 VCI_BOARD_INFO 結(jié)構(gòu)[/align] 2.1.2 VCI_CAN_OBJ 結(jié)構(gòu) VCI_CAN_OBJ 結(jié)構(gòu)體在VCI_Transmit 和VCI_Receive 函數(shù)中被用來(lái)傳送CAN信息幀。 typedef struct _VCI_CAN_OBJ { UINT ID; UINT TimeStamp; BYTE TimeFlag; BYTE SendType; BYTE RemoteFlag; BYTE ExternFlag; BYTE DataLen; BYTE Data[8]; BYTE Reserved[3]; } VCI_CAN_OBJ, *PVCI_CAN_OBJ; [align=center] 圖 2.2 VCI_CAN_OBJ 結(jié)構(gòu)[/align] 2.1.3 VCI_CAN_STATUS 結(jié)構(gòu) VCI_CAN_STATUS 結(jié)構(gòu)體包含CAN 控制器狀態(tài)信息。結(jié)構(gòu)體將在VCI_ReadCanStatus函數(shù)中被填充。 typedef struct _VCI_CAN_STATUS { UCHAR ErrInterrupt; UCHAR regMode; UCHAR regStatus; UCHAR regALCapture; UCHAR regECCapture; UCHAR regEWLimit; UCHAR regRECounter; UCHAR regTECounter; DWORD Reserved; } VCI_CAN_STATUS, *PVCI_CAN_STATUS; [align=center] 圖 2.3 VCI_CAN_STATUS 結(jié)構(gòu)[/align] 2.1.4 VCI_ERR_INFO 結(jié)構(gòu) VCI_ERR_INFO結(jié)構(gòu)體用于裝載VCI庫(kù)運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤信息。結(jié)構(gòu)體將在VCI_ReadErrInfo函數(shù)中被填充。 typedef struct _ERR_INFO { UINT ErrCode; BYTE Passive_ErrData[3]; BYTE ArLost_ErrData; } VCI_ERR_INFO, *PVCI_ERR_INFO; [align=center] 圖 2.4 VCI_ERR_INFO 結(jié)構(gòu)[/align] 2.1.5 VCI_INIT_CONFIG 結(jié)構(gòu) VCI_INIT_CONFIG 結(jié)構(gòu)體定義了初始化CAN 的配置。結(jié)構(gòu)體將在VCI_InitCan 函數(shù)中被填充。 typedef struct _INIT_CONFIG { DWORD AccCode; DWORD AccMask; DWORD Reserved; UCHAR Filter; UCHAR Timing0; UCHAR Timing1; UCHAR Mode; } VCI_INIT_CONFIG, *PVCI_INIT_CONFIG; [align=center] 圖 2.5 VCI_INIT_CONFIG 結(jié)構(gòu)[/align] 下面以VCI_CAN_OBJ 結(jié)構(gòu)為例,在LabVIEW7.0 中創(chuàng)建VCI_CAN_OBJ 結(jié)構(gòu)。先在Array&Cluster 控件子模板選擇一個(gè)簇的空殼放到前面板上,將其命名為VCI_CAN_OBJ,然后根據(jù)需要放置的控件多少用定位工具調(diào)整簇空殼的大?。话凑誚CI_CAN_OBJ 結(jié)構(gòu)成員的順序,從Numeric 控件子模板中取Numeric Indicator 控件或從前面板上移動(dòng)控件到簇的空殼中,并按圖 2.6 將各Numeric Indicator 控件重命名。 [align=center] 圖 2.6 在前面板上創(chuàng)建VCI_CAN_OBJ 結(jié)構(gòu)的簇[/align] 此時(shí),簇殼內(nèi)的成員的數(shù)據(jù)類型都為默認(rèn)的Double 類型。在簇殼內(nèi)的邊框上彈出快捷菜單,選擇Representation。在下一級(jí)子菜單中選擇與VCI_CAN_OBJ 結(jié)構(gòu)成員類型一致的類型。 [align=center] 圖 2.7 設(shè)置成員類型[/align] 2.2 調(diào)用VCI 庫(kù)函數(shù) 在LabVIEW 中調(diào)用VCI 庫(kù)函數(shù)的過(guò)程比較簡(jiǎn)單。LabVIEW 在Advanced 函數(shù)子模板中提供了Calling Library Function Node,只要知道動(dòng)態(tài)連接庫(kù)里被導(dǎo)出的函數(shù)名稱及其參數(shù),就可以通過(guò)Calling Library Function Node 調(diào)用。ZLG VCI 函數(shù)庫(kù)已經(jīng)提供了庫(kù)里的函數(shù)聲明,因此,在LabVIEW 中使用VCI 函數(shù)庫(kù)將通過(guò)Calling Library Function Node 來(lái)實(shí)現(xiàn)。 以調(diào)用VCI_OpenDevice 函數(shù)為例。在LabVIEW 圖形代碼窗口中放上調(diào)用庫(kù)函數(shù)節(jié)點(diǎn),用鼠標(biāo)雙擊節(jié)點(diǎn)或使用快捷菜單命令Configure 彈出如圖 2.8 所示的對(duì)話框。 [align=center] 圖 2.8 調(diào)用庫(kù)函數(shù)1[/align] 單擊Browse…按鈕,打開一個(gè)文件對(duì)話框,找到ControlCAN.dll 文件?;蛘咧苯虞斎霂?kù)文件路徑和名稱。 在Function Name 下拉列表框中照到VCI_OpenDevice 函數(shù)。或直接輸入函數(shù)名。 [align=center] 圖 2.9 調(diào)用庫(kù)函數(shù)2[/align] 在Calling Conventions 下拉列表框中選中stdcall(WINAPI),因?yàn)閂CI 庫(kù)函數(shù)使用的是stdcall 調(diào)用約定。 Parameter 框中的return type 不變。Type 框中選Numeric。Data Type 框中選Unsigned 32-bitInterger。即指定返回32 位整形數(shù)。 單擊Add a Parameter After 按鈕,Parameter 框中的選項(xiàng)變?yōu)閳D 2.10 所示。將缺省值agr1改為DevType,因?yàn)樵赩CI_OpenDevice 函數(shù)聲明中定義了參數(shù)DevType。 [align=center] 圖 2.10 調(diào)用庫(kù)函數(shù)3[/align] Type 框中選Numeric,并在Data Type 框中選Unsigned 32-bit Integer。表示將編程時(shí)指定的LabVIEW 數(shù)據(jù)類型為32 位無(wú)符號(hào)整型。Pass 框中選擇Value。 同樣,按以上步驟添加DevIndex、Reserved 參數(shù)。 單擊OK 按鈕退出這個(gè)對(duì)話框。調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)變?yōu)閳D 2.11 所示中的情況。圖中的參數(shù)端口由上到下分別為return type、DevType、DevIndex 和Reserved。每個(gè)端口均有一個(gè)輸入端和一個(gè)輸出端,左邊的端口為輸入端,右邊的端口位輸出端。因?yàn)榈谝粋€(gè)端口是函數(shù)的返回值,所以沒有輸入端,在圖中可以看到其輸入端為填充的藍(lán)色。其他端口則是函數(shù)的參數(shù),如果參數(shù)的類型是指針的話,可以通過(guò)參數(shù)的輸出端輸出數(shù)據(jù)。在其他情況下,不需要使用參數(shù)的輸出端。 [align=center] 圖 2.11 調(diào)用庫(kù)函數(shù)程序框圖[/align] 2.3 應(yīng)用示例 應(yīng)用示例Demo 演示了在LabVIEW7.0 下如何使用VCI 庫(kù)函數(shù)。其界面如圖 2.12 所示。 [align=center] 圖 2.12 demo 界面[/align] 在Demo 中實(shí)現(xiàn)了數(shù)據(jù)的收發(fā),并將在CAN總線上收發(fā)的數(shù)據(jù)在列表示圖中顯示。Demo程序當(dāng)中有3 個(gè)主要的While 循環(huán):主循環(huán)、發(fā)送數(shù)據(jù)循環(huán)和接收數(shù)據(jù)循環(huán)。這三個(gè)循環(huán)是并行運(yùn)行的。其中,主循環(huán)處理與用戶交互的界面,并通過(guò)用戶事件TREvent 與發(fā)送數(shù)據(jù)循環(huán)和接收數(shù)據(jù)循環(huán)通信。 在主循環(huán)中使用事件驅(qū)動(dòng)機(jī)制處理用戶在前面板的操作。打開設(shè)備的程序框圖如圖2.13 所示。在圖中調(diào)用VCI_OpenDevice 函數(shù)打開設(shè)備,如果打開成功,則調(diào)用VCI_InitCAN函數(shù)初始化設(shè)備,成功的話就處理一下前面板控件的狀態(tài)。 [align=center] 圖 2.13 打開設(shè)備框圖[/align] 圖 2.14 所示是接收數(shù)據(jù)的程序框圖。接收數(shù)據(jù)的過(guò)程是在一個(gè)while 循環(huán)中,這個(gè)循環(huán)在程序已開始時(shí)就一直運(yùn)行,直到前面板上的stop 按鈕被按下并在其Value Change 事件中使stop2 的值變?yōu)镕alse 時(shí)才停止。在循環(huán)當(dāng)中,只有設(shè)備已經(jīng)啟動(dòng)時(shí)才會(huì)進(jìn)行讀操作。在Demo 中VCI_Reveive 函數(shù)一次只讀取一幀,輸出的數(shù)據(jù)保存到VCI_CAN_OBJ_R 結(jié)構(gòu)中,如果VCI_Reveive 函數(shù)執(zhí)行成功的話,就把接收到的數(shù)據(jù)通過(guò)事件傳遞給主循環(huán)處理。 [align=center] 圖 2.14 接收數(shù)據(jù)[/align] 發(fā)送數(shù)據(jù)的過(guò)程與接收數(shù)據(jù)的過(guò)程相似。當(dāng)前面板上的Transmit 按鈕被按下時(shí),才會(huì)把VCI_CAN_OBJ_T 結(jié)構(gòu)中的數(shù)據(jù)通過(guò)VCI_Transmit 函數(shù)發(fā)送到CAN 總線上。發(fā)送成功后,生成一個(gè)TREvent 事件,并通過(guò)這個(gè)事件把VCI_CAN_OBJ_T 結(jié)構(gòu)的內(nèi)容傳遞給主循環(huán)顯示。 [align=center] 圖 2.15 發(fā)送數(shù)據(jù)[/align] 3、VCI 函數(shù)調(diào)用參考 在LabVIEW 中使用Calling Library Function Node 調(diào)用VCI 庫(kù)函數(shù)的配置如下各表所示。 3.1 VCI_OpenDevice
3.2 VCI_CloseDevice
3.3 VCI_InitCan [align=center] [/align] 3.4 VCI_ReadBoardInfo
3.5 VCI_ReadErrInfo [align=center] [/align] 3.6 VCI_ReadCanStatus
3.7 VCI_GetReference [align=center] [/align] 3.8 VCI_SetReference
3.9 VCI_GetReceiveNum
3.10 VCI_ClearBuffer
3.11 VCI_StartCAN
3.12 VCI_ResetCAN [align=center] [/align] 3.13 VCI_Transmit
3.14 VCI_Receive [align=center] [/align]

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:SunyPLC250可編成邏輯控制器...

下一篇:微能WIN-V63矢量控制變頻器在...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)