CVI驱动程序编写入门

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CVI驱动程序编写入门

仪器驱动程序有一个VPP规范(VXI即插即用),这个VPP规范中介绍仪器驱动的架构,使用的接口及前面板规范,函数原形规范等等。看过这个规范的朋友可能知道,VPP就是对CVI开发仪器驱动的规范。

在开始编写驱动之前,请先安装NI-Visa、labwindows8.0

下面介绍如何用CVI编写仪器驱动

•生成仪器驱动程序工程文件(.prj)

•设计函数树和函数面板(.fp, .c, .h)

•完成驱动程序每个函数的代码(.c)

•编译调试,生成动态链接库

1 新建工程文件

双击labWindows/CVI程序文件,打开CVI。在“File”下拉菜单中选择“New”,再选择“Project”创建工程,弹出如图1-1对话框

图1-1 创建工程

在对话框中有两个单选项,前一个指在当前工作区创建工程,后一个指新建一个工作区创建工程。通常选则后一个,这样在一个工作区对应一个工程,简单明了。其他保持默认。单击确定,创建工程完成。

2 设计函数树和函数面板

这是最关键的一步,创建.fp、.c、.h等文件是仪器驱动中必不可少的文件,其中.fp 是仪器驱动的核心。先介绍.fp创建过程。

在“File”下拉菜单中选择“New”,再选“Function Tree”,如图1-2

图1-2 创建fp文件

在右边白色区域,单击右键并点击”create Instrument”,弹出如下对话框,如图1-3

图1-3 仪器节点

“Name”指当前函数树的名字,”prefix”指函数名的前趋,在后面创建的.h文件中每一个函数名以zyosc开头,后面再跟实际函数名。填写完后单击ok,如图1-4

图1-4 函数树创建

蓝色阴影部分的有这样的提示“create class or function panel window”,意思是在此可以创建类和函数前面板。这里的类指用户如何划分函数,根据用户的需要将某些函数规为一类。通常情况我们将错误消息、错误查询、复位,自检和版本查询等函数规为通用函数,具体操作硬件的部分的函数规为功能函数。

单击阴影部分,再单击鼠标右键,选择创建类,并在对话框中填入“Utility Functions”,单击确定,如图1-5

图1-5 创建类

程序中创建了一个“通用函数”类。下面在这个类中添加错误消息、错误查询、复位,自检和版本查询等函数面板。

同样鼠标右击“create class or function panel window”,选择“创建函数面板”,弹出如图1-6对话框

图1-6 创建函数面板

该对话框中的“name”项指的是该函数面板的名字,而”function name ”指的该函数的函数名。单击ok创建成功。

图1-7

函数面板已经创建好了,但还得编辑函数面板。单击”Reset”函数面板,右击选中“edit function panel window”,出现如图1-8

图1-8

函数面板最上面的是加了前缀的函数名,指示当前正在编辑的函数面板。在面板上右键可以添加输入参数、输出参数、返回值等。参数不能随便放,VPP规定函数面板的输入参数放左边,输出参数与返回值放右边。下面是编辑好的Reset面板如图1-9

图1-9

其他函数的前面板编辑方法与Reset面板相同。

如在创建控件时,需要引入VI数据类型,执行以下两步操作,如图1-9-1、1-9-2:

图1-9-1

图1-9-2

下面我们介绍如何创建.c和.h文件。

其实有了上述函数面板的创建过程,源文件与头文件的创建就非常简单了。回到图1-7,这时必须保证reset面板已经编辑完毕了,并保存完毕。单击“Reset”,右键选择“generate source for function node”,将自动创建出源文件和头文件。保存后加入到工程中来即可。

生成出来头文件和源文件都需要修改,源文件只有函数壳,没有函数体,需要自己手动添加,后面再介绍。先来介绍头文件应该做什么样修改。

在头文件需要加入C编译头,如图1-10

图1-10 c编译头

加入C编译头的目的,如果在C++程序中使用,将自动以C语言方式编译和连接,其意义是强制编译器不要修改你的函数名。只有用这种方式,才能在C++程序中正常使用。

3 编写源代码

在源文件中给reset函数添加代码。

return VI_WARN_NSUP_RESET; //不支持复位

这就是reset函数体内容。复位根据板卡要求,有些板子支持复位,有些板子不支持复位。我们使用的本振,并不支持复位。所以代码就一句。

源代码的实现主要根据负责开发板子的人提出的需求,程序员根据需求来实现的。后面我会讲些具体的例子。怎样去分析需求,来编写源代码。

4 编译生成dll

在编译之前需要对程序的一些属性进行设置。

首先,单击“Build”下拉菜单,选择”target tpye”子菜单,再选中“Dynamic Link Library”。这是最重要的一步,否则无法编译成动态链接库。

其次,单击“Build”下拉菜单,选择“Target setting……”,打开对话框,如图1-11

图1-11 target setting

最上方是设置动态链接库创建的位置和文件名。当前显示的是Debug状态,也可以设置release状态下的输出。

对话框中部有三个按钮分别版本说明、导入库、类型库。它们的设置保持持默认即可。

最下端的两个按钮比较重要:

“Add Files to DLL”:添加文件到DLL,必须将源文件添加进去。如图1-12

图1-12 add files to dll

“C hange…”:设置DLL输出。动态链接库函数的输出由这里决定,否则没有函数输出。

相关文档
最新文档