CVI驱动程序编写入门
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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输出。动态链接库函数的输出由这里决定,否则没有函数输出。