您现在的位置:智能制造网>技术首页>

在LabVIEW下使用ZLGCAN接口函数库

2007年07月29日 10:01来源:烟台勾股通信技术有限公司 >>进入该公司展台人气:2371

1、概述 
   Virtual CAN Interface (VCI) 函数库是专门为ZLGCAN 设备在PC 上使用而提供的应用程序接口。库里的函数从ControlCAN.dll 中导出,在LabVIEW7.0 中可以直接使用这些库函数而无需额外的操作。VCI 函数的使用流程如图 1.1 所示。


图 1.1 VCI 函数使用流程
2、使用VCI 函数
2.1 数据结构
    VCI 函数库中定义了一些数据结构用于数据交换,在使用VCI 函数前应该先创建这些数据结构。在LabVIEW 中创建这些结构时应该使用簇——Cluster。一个簇就是一个由若干不同的数据类型的成员组成的集合体,类似于C 语言中的结构。其成员可以是任意的数据类型,但必须都是控件或都是显示件。成员的逻辑顺序是由它们被放入簇的先后顺序决定的。
2.1.1 VCI_BOARD_INFO 结构
    VCI_BOARD_INFO 结构体包含ZLGCAN 系列接口卡的设备信息。结构体将在VCI_ReadBoardInfo 函数中被填充。
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;
2.1.2 VCI_CAN_OBJ 结构
    VCI_CAN_OBJ 结构体在VCI_Transmit 和VCI_Receive 函数中被用来传送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;

2.1.3 VCI_CAN_STATUS 结构
    VCI_CAN_STATUS 结构体包含CAN 控制器状态信息。结构体将在VCI_ReadCanStatus函数中被填充。
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;

2.1.4 VCI_ERR_INFO 结构
    VCI_ERR_INFO结构体用于装载VCI库运行时产生的错误信息。结构体将在VCI_ReadErrInfo函数中被填充。
typedef struct _ERR_INFO {
UINT ErrCode;
BYTE Passive_ErrData[3];
BYTE ArLost_ErrData;
} VCI_ERR_INFO, *PVCI_ERR_INFO;

2.1.5 VCI_INIT_CONFIG 结构
    VCI_INIT_CONFIG 结构体定义了初始化CAN 的配置。结构体将在VCI_InitCan 函数中被填充。
typedef struct _INIT_CONFIG {
DWORD AccCode;
DWORD AccMask;
DWORD Reserved;
UCHAR Filter;
UCHAR Timing0;
UCHAR Timing1;
UCHAR Mode;
} VCI_INIT_CONFIG, *PVCI_INIT_CONFIG; 

    下面以VCI_CAN_OBJ 结构为例,在LabVIEW7.0 中创建VCI_CAN_OBJ 结构。先在Array&Cluster 控件子模板选择一个簇的空壳放到前面板上,将其命名为VCI_CAN_OBJ,然后根据需要放置的控件多少用定位工具调整簇空壳的大小;按照VCI_CAN_OBJ 结构成员的顺序,从Numeric 控件子模板中取Numeric Indicator 控件或从前面板上移动控件到簇的空壳中,并按图 2.6 将各Numeric Indicator 控件重命名。 
    此时,簇壳内的成员的数据类型都为默认的Double 类型。在簇壳内的边框上弹出快捷菜单,选择Representation。在下一级子菜单中选择与VCI_CAN_OBJ 结构成员类型一致的类型。
2.2 调用VCI 库函数
    在LabVIEW 中调用VCI 库函数的过程比较简单。LabVIEW 在Advanced 函数子模板中提供了Calling Library Function Node,只要知道动态连接库里被导出的函数名称及其参数,就可以通过Calling Library Function Node 调用。ZLG VCI 函数库已经提供了库里的函数声明,因此,在LabVIEW 中使用VCI 函数库将通过Calling Library Function Node 来实现。
    以调用VCI_OpenDevice 函数为例。在LabVIEW 图形代码窗口中放上调用库函数节点,用鼠标双击节点或使用快捷菜单命令Configure 弹出如图 2.8 所示的对话框。 

    单击Browse…按钮,打开一个文件对话框,找到ControlCAN.dll 文件。或者直接输入库文件路径和名称。
    在Function Name 下拉列表框中照到VCI_OpenDevice 函数。或直接输入函数名。 

    在Calling Conventions 下拉列表框中选中stdcall(WINAPI),因为VCI 库函数使用的是stdcall 调用约定。
    Parameter 框中的return type 不变。Type 框中选Numeric。Data Type 框中选Unsigned 32-bitInterger。即返回32 位整形数。
    单击Add a Parameter After 按钮,Parameter 框中的选项变为图 2.10 所示。将缺省值agr1改为DevType,因为在VCI_OpenDevice 函数声明中定义了参数DevType。 
    Type 框中选Numeric,并在Data Type 框中选Unsigned 32-bit Integer。表示将编程时的LabVIEW 数据类型为32 位无符号整型。Pass 框中选择value。
    同样,按以上步骤添加DevIndex、Reserved 参数。
    单击OK 按钮退出这个对话框。调用库函数节点变为图 2.11 所示中的情况。图中的参数端口由上到下分别为return type、DevType、DevIndex 和Reserved。每个端口均有一个输入端和一个输出端,左边的端口为输入端,右边的端口位输出端。因为*个端口是函数的返回值,所以没有输入端,在图中可以看到其输入端为填充的蓝色。其他端口则是函数的参数,如果参数的类型是指针的话,可以通过参数的输出端输出数据。在其他情况下,不需要使用参数的输出端。

2.3 应用示例
    应用示例Demo 演示了在LabVIEW7.0 下如何使用VCI 库函数。其界面如图 2.12 所示。 
    在Demo 中实现了数据的收发,并将在CAN总线上收发的数据在列表示图中显示。Demo程序当中有3 个主要的While 循环:主循环、发送数据循环和接收数据循环。这三个循环是并行运行的。其中,主循环处理与用户交互的界面,并通过用户事件TREvent 与发送数据循环和接收数据循环通信。
    在主循环中使用事件驱动机制处理用户在前面板的操作。打开设备的程序框图如图2.13 所示。在图中调用VCI_OpenDevice 函数打开设备,如果打开成功,则调用VCI_InitCAN函数初始化设备,成功的话就处理一下前面板控件的状态。 
     接收数据的过程是在一个while 循环中,这个循环在程序已开始时就一直运行,直到前面板上的stop 按钮被按下并在其value Change 事件中使stop2 的值变为False 时才停止。在循环当中,只有设备已经启动时才会进行读操作。在Demo 中VCI_Reveive 函数一次只读取一帧,输出的数据保存到VCI_CAN_OBJ_R 结构中,如果VCI_Reveive 函数执行成功的话,就把接收到的数据通过事件传递给主循环处理。 
    发送数据的过程与接收数据的过程相似。当前面板上的Transmit 按钮被按下时,才会把VCI_CAN_OBJ_T 结构中的数据通过VCI_Transmit 函数发送到CAN 总线上。发送成功后,生成一个TREvent 事件,并通过这个事件把VCI_CAN_OBJ_T 结构的内容传递给主循环显示。

3、VCI 函数调用参考
    在LabVIEW 中使用Calling Library Function Node 调用VCI 库函数的配置如下各表所示。
3.1 VCI_OpenDevice

3.2 VCI_CloseDevice

3.3 VCI_InitCan
 

3.4 VCI_ReadBoardInfo

3.5 VCI_ReadErrInfo
 

3.6 VCI_ReadCanStatus

3.7 VCI_GetReference
 

3.8 VCI_SetReference

3.9 VCI_GetReceiveNum

3.10 VCI_ClearBuffer

3.11 VCI_StartCAN

3.12 VCI_ResetCAN
 

3.13 VCI_Transmit

3.14 VCI_Receive
 
关键词:CAN控制器
全年征稿/资讯合作 联系邮箱:1271141964@qq.com
  • 凡本网注明"来源:智能制造网"的所有作品,版权均属于智能制造网,转载请必须注明智能制造网,https://www.gkzhan.com。违反者本网将追究相关法律责任。
  • 企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。


编辑精选

更多


宣传样本推荐图书

旗下子站

工控网机器人仪器仪表物联网3D打印工业软件金属加工机械包装机械印刷机械农业机械食品加工设备制药设备仓储物流环保设备造纸机械工程机械纺织机械化工设备电子加工设备水泥设备海洋水利装备矿冶设备新能源设备服装机械印染机械制鞋机械玻璃机械陶瓷设备橡塑设备船舶设备电子元器件电气设备



关于我们|本站服务|会员服务|企业建站|旗下网站|友情链接| 兴旺通| 产品分类浏览|产品sitemap

智能制造网 - 工业4.0时代智能制造领域“互联网+”服务平台

Copyright gkzhan.comAll Rights Reserved法律顾问:浙江天册律师事务所 贾熙明律师

客服热线:0571-87756395加盟热线:0571-87759904媒体合作:0571-89719789

客服部:编辑部:展会合作:市场部:

关闭