📄 4.虚拟仪器驱动程序.txt
字号:
VI_ERROR_FAIL_ID_RESET 仪器标识查询失败
2、 复位函数:将仪器置为缺省状态。
参数表:
输入参数 描述 类型
vi 仪器句柄 ViSession
返回状态值表:
返回状态值 描述
VI_SUCCESS 复位完成
VI_WARN_NSUP_RESET 复位不支持
3、 自检函数:进行仪器自检。
参数表:
输入参数 描述 类型
vi 仪器句柄 ViSession
输出参数 描述 类型
test_result 自检结果 ViInt16
test_message 自检状态信息 ViString
返回状态值表:
返回状态值 描述
VI_SUCCESS 自检完成
VI_WARN_NSUP_SELF_TEST 自检不支持
4、 错误查询函数:进行仪器错误查询。
参数表:
输入参数 描述 类型
vi 仪器句柄 ViSession
输出参数 描述 类型
error_code 错误代码 ViInt32
error_message 错误消息 ViString
返回状态值表:
返回状态值 描述
VI_SUCCESS 错误查询完成
VI_WARN_NSUP_ERROR_QUERY 错误查询不支持
5、 错误消息函数:将错误代码转换为错误消息。
参数表:
输入参数 描述 类型
vi 仪器句柄 ViSession
error_code 错误代码 ViStatus
输出参数 描述 类型
message 错误消息 ViStrring
返回状态值表:
返回状态值 描述
VI_SUCCESS 错误消息转换完成
6、 版本查询函数:进行仪器驱动程序与固件版本信息查询。
参数表:
输入参数 描述 类型
vi 仪器句柄 ViSession
输出参数 描述 类型
driver_rev 仪器驱动程序版本消息 ViString
instr_rev 仪器固件版本消息 ViString
返回状态值表:
返回状态值 描述
VI_SUCCESS 版本查询完成
VI_WARN_NSUP_REV_QUERY 版本查询不支持
7、 关闭函数:终止软件与仪器的联系,并释放系统资源。
参数表:
输入参数 描述 类型
vi 仪器句柄 ViSession
返回状态值表:
返回状态值 描述
VI_SUCCESS 关闭操作完成
每个仪器不仅有以上列出的通用功能,也具有自己的特定功能。在功能类别函数定
义的仪器类型,从其功能上划分,分为了测量类仪器、源类仪器以及开关类仪器等
。整个仪器驱动程序的结构是树形结构,仪器作为树结构的根结点,包括的功能类
别函数按类别为子结点,再向下分解所包括的子功能为孙结点,一直分解到所有子
功能都能对应到一个仪器功能操作函数为止。
下面分别对三种功能类别函数的结构进行描述:
1、 测量类功能类别函数:在单一操作中,完成对一特定测量任务进行仪器配置,
初始化测量过程并读取测量值。这些函数一般包含在测量类仪器模块中,如万用表
等模块中的仪器驱动程序中。这些功能函数包括多个参数,且不需要与其它驱动函
数操作进行交互。图4.4所示为测量类功能类别函数结构模型。
图4.4 测量类功能类别函数结构模型
l 配置函数:为测量类仪器提供一个高级抽象的功能接口,它为一个特定的测量任
务配置仪器,但不进行测量的初始化工作,一般不提供返回结果。
l 读函数:完成一个完整的测量操作,从测量任务的初始化到提供测量结果。
l 配置函数与读函数相互独立,但其内部具有特定的顺序关系。读函数依赖于由配
置函数产生的仪器工作状态,但并不能修改仪器的配置情况。
2、 源类功能类别函数:在单一操作中,完成对输出一个激励进行仪器配置,并进
行初始化。这些函数一般包含在源输出类模块,如信号发生器、任意波形发生器等
模块的仪器驱动程序中。这些功能函数包括多个参数,且不需要与其它驱动函数操
作进行交互,图4.5所示为源类功能类别函数结构模型。
l 配置函数:为源类仪器提供一个高级抽象的功能接口,它为一个特定的激励输出
任务配置仪器,但不进行仪器初始化,一般不提供返回结果。
l 初始化函数:进行源操作登录,完成激励输出操作的初始化任务,并输出相应信
号。
l 配置函数与初始化函数相互独立,但其内部具有特定的顺序关系。配置函数只为
一种特定激励输出进行仪器配置,如源操作已经初始化,仪器配置可以改变输出,
而初始化函数只输出已配置的激励,并不能修改仪器的配置情况。
图4.5 源类功能类别函数结构模型
3、 开关类功能类别函数:在单一操作中,完成对信号开关选通。这些功能类别函
数一般包含在各类开发模块的仪器驱动程序中,这些功能函数包括多个参数,且不
需要与其它驱动程序函数进行交互,图4.6所示为开关类功能类别函数结构模型。
图4.6 开关类功能类别函数结构模型
l 配置函数:为开关类仪器提供一个高级抽象的功能接口,它为一个特定的开关选
通任务配置仪器,但不进行仪器初始化,一般不提供返回结果。
l 初始化函数:进行开关操作登录,完成开关选通操作初始化。
l 配置函数与初始化函数是相互独立的,但其内部具有特定的顺序关系,配置函数
只为一个特定开关进行仪器配置,而初始化函数只建立已配置的选通状态,并不能
修改仪器的配置情况。
在虚拟仪器系统中,将仪器分为以上三大类是相对模糊的,有的仪器本身既具有测
量功能,同时又具有源输出功能,因此,它必须同时符合测量类功能类别函数与源
类功能类别函数的要求。而上述所有的树结构模型的划分也是相对粗糙的,仪器驱
动程序设计人员必须在以上树结构基础上,进一步细化子结点结构,直到所有的子
结点都可以直接与一个函数操作相对应为止。也由于虚拟仪器系统中的仪器类型实
在太多,要对所有仪器驱动程序的设计作详细的规定与描述,既不可行也不符合扩
展性要求。因此,仪器驱动程序设计人员必须在完全理解仪器驱动程序的外部接口
模型与内部设计模型的基础上,结合本仪器的具体功能要求,设计出标准化、统一
化、模块化的虚拟仪器驱动程序。
4.3 虚拟仪器驱动程序的功能面板文件
4.3.1 功能面板文件的树型结构
在虚拟仪器驱动程序外部接口模型中定义的交互式开发者接口,实质上即是功能面
板文件。功能面板文件是对仪器驱动程序的图形化描述,为每一个由C语言源代码
形式提供的功能操作函数提供了图形化表达。利用功能面板文件,用户可以交互式
地理解整个仪器驱动程序的结构、操作函数的组成与使用,并利用功能面板所带有
的帮助文件,进一步了解仪器的功能与仪器驱动程序各个函数及函数中各个参数的
意义与作用,使仪器驱动程序的设计与使用都变得直观、方便。
根据VPP规范,功能面板文件的结构采用了树型结构,表4.1定义了功能面板文件的
最小树结构,包含了所有功能面板必须的部分。
仪器结点 所需函数(PREFIX为函数前缀)
Initialize PREFIX_init(初始化函数)
Application Functions
<application functions> PREFIX_<device dependent>(器件独立函数)
<Capability Class>
Utility
Error Message PREFIX_error_message(错误信息函数)
Error Query PREFIX_error_query(错误查询函数)
Reset PREFIX_reset(复位函数)
Self Test PREFIX_self_test(自检函数)
Revision Query PREFIX_revision_query(版本查询函数)
Close PREFIX_close(关闭函数)
表4.1 功能面板文件最小树结构
在表中,树结构是由几层结点构成的,最上层根结点定义了仪器结点,表示整个功
能面板文件;下一层为斜体字的类结点,包括了一系列相近的仪器功能函数,如实
用(Utility)功能类,它包括了错误信息函数、错误查询函数、复位函数、自检
函数及版本查询函数等子结点;再下一层为函数结点,所有正体文标出的结点为函
数结点,它对应着每一个仪器驱动程序的功能函数,由相应的源代码形式。功能面
板树结构可以根据仪器功能的需要进行枝扩展,类结点和函数结点的个数都可以进
行扩展。一般由根结点直接生成的类结点还可以包括配置类结点、测量类结点、开
关类结点、激励源类结点等,而测量类结点向下又可能分为配置类结点与读类结点
,读类结点又可以分为初始化结点与取数结点,直到分解到具体的函数结点为止。
整个功能面板树结构与在上一节描述的仪器驱动程序内部设计模型是完全一致的。
如图4.7所示,整个树结构由仪器结点扩展为多个类结点或直接的函数结点,而类
结点又扩展为多个下级类结点或函数结点,由此构成了完整的仪器驱动程序功能面
板文件结构。
图4.7 功能面板树型图
在功能面板文件中,对于每一个函数结点,都对应着一个仪器驱动程序的操作功能
函数,也都对应着一个函数面板窗口,在每一个窗口中,包括了表示函数中所含各
个输入参数、输出参数与函数返回值的图形化控件,分别与每一个参数对应。每一
个参数控件又分别包括了控件标号、控件位置号、数据类型、缺省值与控件宽度等
参数信息,并根据控件类型不同,必要时要添加一些其它信息。VPP规定了功能面
板函数窗口的几种控件类型,包括:输入类型、游标类型、布尔类型、组合类型、
数值类型、输出类型、返回值类型、全局变量类型及信息类型。其中输入类型(往
往是仪器句柄值)一般放在窗口的左下方,而返回值类型控件一般放在窗口的右下
方。功能面板树型结构的最底层单位为函数结点(叶结点),而图形窗口的最基本
单位即是控件。
在功能面板中,每一个层次的部件都必须包括各自的帮助文档,帮助文档可以分为
以下五个层次:
1、 功能面板帮助文件对应于仪器结点,描述了整个仪器功能及功能面板所含的类
结点与函数结点概述。
2、 功能类帮助文档对应于类结点,描述了类的功能与类中所含函数结点概述。
3、 功能函数帮助文档对应于函数结点,描述了功能函数的功能。
4、 控件帮助文档对应于函数的输入、输出参数,分别描述参数各自的意义、缺省
值、取值范围等。
5、 返回帮助文档对应于函数的返回状态值,包括了正确返回值与各种错误返回值
代码与含义。
从上可知,仪器驱动程序功能面板的设计也分两部分进行,首先编辑功能面板树,
然后在面板窗口编辑器中编辑函数控件。功能面板的设计实际上是仪器驱动程序设
计的一部分,它的开发与源代码开发是紧密结合的,也往往与仪器驱动程序源代码
一起由仪器模块设计人员来完成。功能面板文件既有图形化表示的外观,又有结构
化内层的数据结构,上层应用程序往往可以通过应用与分析功能面板文件,实现对
下层仪器驱动程序功能函数的交互式操作。下面介绍的图形化编程平台中的仪器接
口模块的设计方法,就是功能面板文件在虚拟仪器系统软件结构中的典型应用。
4.3.2 功能面板文件的应用
在自动测试系统中,为了操作与控制各种仪器,最终都要使用机器语言,在传统方
式下,一般用C、BASIC、PASCAL等语言逐行编写程序,再由计算机转换成机器语言
代码。但这种编程对于仪器设计人员的要求高,编程与调试过程已和高度自动化的
测试及对缩短开发周期的要求极不适应。因此,世界上各大仪器公司都在改进编程
和人机交互方面做了大量工作,其中基于图形的软件开发环境是测试应用软件最新
技术的发展趋势。在这方面有代表性是HP公司的VEE与NI公司的LabVIEW。浙江大学
数字技术及仪器研究所在九五攻关专题97-772-01-07“面向自动测试系统的图形化
编程软件平台”的资助下,研究开发了一个全中文界面、自主版权的面向仪器图形
化软件开发环境,称为VPP(Visual Programming Platform),让测试人员在这个
平台上通过定义和连接代表各种功能模块的图标来方便、迅速地建立起高水平的测
试软件,实现测试软件的在线编程,以适应千变万化的测试系统要求。整个图形化
编程平台主要由四个部分组成,如图4.8所示,分别为核心模块、图形化编程元件
库、仪器接口模块与函数扩展库。
图4.8 图形化编程平台模块结构图
在整个图形化平台中,仪器接口模块的设计目的是研究如何在图形化平台和各种虚
拟仪器之间提供一个图形化的接口,即向整个平台提供一个所有符合VPP规范的虚
拟仪器统一接口。基本设计方法是通过在图形化编程平台中提供一个仪器接口控件
,这个仪器接口控件代表和统一了所有VPP仪器驱动程序,这个控件在平台中就象
其它的控件(如文本显示框等)一样,根据用户需要动态生成,可以由用户改变属
性参数,并在运行状态时被激活,完成对相应仪器驱动程序的调用。这个仪器接口
控件要完成的功能和要求有:
1、 仪器接口控件必须是图形化:能将文本的、抽象的函数原型用形象的图形控件
表示,将仪器驱动程序中的函数参数表示为控件的输入、输出引脚,从而大大提高
开发界面的用户友好性。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -