在LabVIEW下使用ZLGCAN接口函数库.docx
- 文档编号:29529821
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:8
- 大小:17.64KB
在LabVIEW下使用ZLGCAN接口函数库.docx
《在LabVIEW下使用ZLGCAN接口函数库.docx》由会员分享,可在线阅读,更多相关《在LabVIEW下使用ZLGCAN接口函数库.docx(8页珍藏版)》请在冰豆网上搜索。
在LabVIEW下使用ZLGCAN接口函数库
在LabVIEW下使用ZLGCAN接口函数库
VirtualCANInterface〔VCI〕函数库是专门为ZLGCAN设备在PC上使用而提供的应用程序接口。
库里的函数从ControlCAN.dll中导出,在LabVIEW7.0中可以直接使用这些库函数而无需额外的操纵。
VCI函数的使用流程如图1.1所示。
[align=center]
图1.1VCI函数使用流程[/align]
2、使用VCI函数
2.1数据构造
VCI函数库中定义了一些数据构造用于数据交换,在使用VCI函数前应该先创立这些数据构造。
在LabVIEW中创立这些构造时应该使用簇——Cluster。
一个簇就是一个由假设干不同的数据类型的成员组成的集合体,类似于C语言中的构造。
其成员可以是任意的数据类型,但必须都是控件或者都是显示件。
成员的逻辑顺序是由它们被放入簇的先后顺序决定的。
2.1.1VCI_BOARD_INFO构造
VCI_BOARD_INFO构造体包含ZLGCAN系列接口卡的设备信息。
构造体将在VCI_ReadBoardInfo函数中被填充。
typedefstruct_VCI_BOARD_INFO{
USHORThw_Version;
USHORTfw_Version;
USHORTdr_Version;
USHORTin_Version;
USHORTirq_Num;
BYTEcan_Num;
CHARstr_Serial_Num[20];
CHARstr_hw_Type[40];
USHORTReserved[4];
}VCI_BOARD_INFO,*PVCI_BOARD_INFO;
[align=center]
图2.1VCI_BOARD_INFO构造[/align]
2.1.2VCI_CAN_OBJ构造
VCI_CAN_OBJ构造体在VCI_Transmit和VCI_Receive函数中被用来传送CAN信息帧。
typedefstruct_VCI_CAN_OBJ{
UINTID;
UINTTimeStamp;
BYTETimeFlag;
BYTESendType;
BYTERemoteFlag;
BYTEExternFlag;
BYTEDataLen;
BYTEData[8];
BYTEReserved[3];
}VCI_CAN_OBJ,*PVCI_CAN_OBJ;
[align=center]
图2.2VCI_CAN_OBJ构造[/align]
2.1.3VCI_CAN_STATUS构造
VCI_CAN_STATUS构造体包含CAN控制器状态信息。
构造体将在VCI_ReadCanStatus函数中被填充。
typedefstruct_VCI_CAN_STATUS{
UCHARErrInterrupt;
UCHARregMode;
UCHARregStatus;
UCHARregALCapture;
UCHARregECCapture;
UCHARregEWLimit;
UCHARregRECounter;
UCHARregTECounter;
DWORDReserved;
}VCI_CAN_STATUS,*PVCI_CAN_STATUS;
[align=center]
图2.3VCI_CAN_STATUS构造[/align]
2.1.4VCI_ERR_INFO构造
VCI_ERR_INFO构造体用于装载VCI库运行时产生的错误信息。
构造体将在VCI_ReadErrInfo函数中被填充。
typedefstruct_ERR_INFO{
UINTErrCode;
BYTEPassive_ErrData[3];
BYTEArLost_ErrData;
}VCI_ERR_INFO,*PVCI_ERR_INFO;
[align=center]
图2.4VCI_ERR_INFO构造[/align]
2.1.5VCI_INIT_CONFIG构造
VCI_INIT_CONFIG构造体定义了初始化CAN的配置。
构造体将在VCI_InitCan函数中被填充。
typedefstruct_INIT_CONFIG{
DWORDAccCode;
DWORDAccMask;
DWORDReserved;
UCHARFilter;
UCHARTiming0;
UCHARTiming1;
UCHARMode;
}VCI_INIT_CONFIG,*PVCI_INIT_CONFIG;
[align=center]
图2.5VCI_INIT_CONFIG构造[/align]
下面以VCI_CAN_OBJ构造为例,在LabVIEW7.0中创立VCI_CAN_OBJ构造。
先在Array&Cluster控件子模板选择一个簇的空壳放到前面板上,将其命名为VCI_CAN_OBJ,然后根据需要放置的控件多少用定位工具调整簇空壳的大小;按照VCI_CAN_OBJ构造成员的顺序,从Numeric控件子模板中取NumericIndicator控件或者从前面板上挪动控件到簇的空壳中,并按图2.6将各NumericIndicator控件重命名。
[align=center]
图2.6在前面板上创立VCI_CAN_OBJ构造的簇[/align]
此时,簇壳内的成员的数据类型都为默认的Double类型。
在簇壳内的边框上弹出快捷菜单,选择Representation。
在下一级子菜单中选择与VCI_CAN_OBJ构造成员类型一致的类型。
[align=center]
图2.7设置成员类型[/align]
2.2调用VCI库函数
在LabVIEW中调用VCI库函数的经过比拟简单。
LabVIEW在Advanced函数子模板中提供了CallingLibraryFunctionNode,只要知道动态连接库里被导出的函数名称及其参数,就可以通过CallingLibraryFunctionNode调用。
ZLGVCI函数库已经提供了库里的函数声明,因此,在LabVIEW中使用VCI函数库将通过CallingLibraryFunctionNode来实现。
以调用VCI_OpenDevice函数为例。
在LabVIEW图形代码窗口中放上调用库函数节点,用鼠标双击节点或者使用快捷菜单命令Configure弹出如图2.8所示的对话框。
[align=center]
图2.8调用库函数1[/align]
单击Browse…按钮,翻开一个文件对话框,找到ControlCAN.dll文件。
或直接输入库文件途径和名称。
在FunctionName下拉列表框中照到VCI_OpenDevice函数。
或者直接输入函数名。
[align=center]
图2.9调用库函数2[/align]
在CallingConventions下拉列表框中选中stdcall〔WINAPI〕,由于VCI库函数使用的是stdcall调用约定。
Parameter框中的returntype不变。
Type框中选Numeric。
DataType框中选Unsigned32-bitInterger。
即指定返回32位整形数。
单击AddaParameterAfter按钮,Parameter框中的选项变为图2.10所示。
将缺省值agr1改为DevType,由于在VCI_OpenDevice函数声明中定义了参数DevType。
[align=center]
图2.10调用库函数3[/align]
Type框中选Numeric,并在DataType框中选Unsigned32-bitInteger。
表示将编程时指定的LabVIEW数据类型为32位无符号整型。
Pass框中选择Value。
同样,按以上步骤添加DevIndex、Reserved参数。
单击OK按钮退出这个对话框。
调用库函数节点变为图2.11所示中的情况。
图中的参数端口由上到下分别为returntype、DevType、DevIndex和Reserved。
每个端口均有一个输入端和一个输出端,左边的端口为输入端,右边的端口位输出端。
由于第一个端口是函数的返回值,所以没有输入端,在图中可以看到其输入端为填充的蓝色。
其他端口那么是函数的参数,假如参数的类型是指针的话,可以通过参数的输出端输出数据。
在其他情况下,不需要使用参数的输出端。
[align=center]
图2.11调用库函数程序框图[/align]
2.3应用例如
应用例如Demo演示了在LabVIEW7.0下怎样使用VCI库函数。
其界面如图2.12所示。
[align=center]
图2.12demo界面[/align]
在Demo中实现了数据的收发,并将在CAN总线上收发的数据在列表示图中显示。
Demo程序当中有3个主要的While循环:
主循环、发送数据循环和接收数据循环。
这三个循环是并行运行的。
其中,主循环处理与用户交互的界面,并通过用户事件TREvent与发送数据循环和接收数据循环通讯。
在主循环中使用事件驱动机制处理用户在前面板的操纵。
翻开设备的程序框图如图2.13所示。
在图中调用VCI_OpenDevice函数翻开设备,假如翻开成功,那么调用VCI_InitCAN函数初始化设备,成功的话就处理一下前面板控件的状态。
[align=center]
图2.13翻开设备框图[/align]
图2.14所示是接收数据的程序框图。
接收数据的经过是在一个while循环中,这个循环在程序已开场时就一直运行,直到前面板上的stop按钮被按下并在其ValueChange事件中使stop2的值变为False时才停顿。
在循环当中,只有设备已经启动时才会进展读操纵。
在Demo中VCI_Reveive函数一次只读取一帧,输出的数据保存到VCI_CAN_OBJ_R构造中,假如VCI_Reveive函数执行成功的话,就把接收到的数据通过事件传递给主循环处理。
[align=center]
图2.14接收数据[/align]
发送数据的经过与接收数据的经过相似。
当前面板上的Transmit按钮被按下时,才会把VCI_CAN_OBJ_T构造中的数据通过VCI_Transmit函数发送到CAN总线上。
发送成功后,生成一个TREvent事件,并通过这个事件把VCI_CAN_OBJ_T构造的内容传递给主循环显示。
[align=center]
图2.15发送数据[/align]
3、VCI函数调用参考
在LabVIEW中使用CallingLibraryFunctionNode调用VCI库函数的配置如下各表所示。
3.1VCI_OpenDevice
3.2VCI_CloseDevice
3.3VCI_InitCan
[align=center]
[/align]
3.4VCI_ReadBoardInfo
3.5VCI_ReadErrInfo
[align=center]
[/align]
3.6VCI_ReadCanStatus
3.7VCI_GetReference
[align=center]
[/align]
3.8VCI_SetReference
3.9VCI_GetReceiveNum
3.10VCI_ClearBuffer
3.11VCI_StartCAN
3.12VCI_ResetCAN
[align=center]
[/align]
3.13VCI_Transmit
3.14VCI_Receive
[align=center]
[/align]
0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LabVIEW 使用 ZLGCAN 接口 函数库
![提示](https://static.bdocx.com/images/bang_tan.gif)