虚拟仪器驱动程序设计
- 格式:pdf
- 大小:198.52 KB
- 文档页数:5
第八步,编写仪器驱动程序相关文档,包括 WIN 格式的帮助文件、知识库文件以及 VB 函数原型文件等,并应提供自动安装程序,使用户根据要求,方便地使用仪器驱动程序。
以上介绍的是基于 VXI 模块的虚拟仪器为典型的驱动程序设计步骤,但实际上不少虚 拟仪器不一定基于 VXI 总线,设计过程同样可以参考以上步骤,且一般都应遵循以下设计原 则: (1) 所有仪器函数必须包含一个返回状态值。 (2) 所有仪器函数名不能超过 31 个字符。 (3) 尽量避免引出全局变量,避免声明大型数组结构,避免声明复杂的数据类型(如类、
(4) Output —输出函数集,包括 : ⚫ Output Btye:8 位数据线输出。 ⚫ Output Word:2 个独立的 8 位数据端口输出 。 ⚫ Out LWord:4 个独立的 8 位数据端口输出。 ⚫ Output LW48:6 个独立的 8 位数据端口输入 。 (5) Block—块操作函数:进行数据块的输入/输出,包括 : ⚫ Define Block:定义数据块在内存中对应的存储单元。 ⚫ Define Block Query :查询数据块在内存中对应的存储单元。 ⚫ Block Data:特定数据块的输入/输出 。 ⚫ Catalog Block:列出所定义的所有数据块单元。 ⚫ Delete Block:删除特定的数据块单元 。 ⚫ Delete All Blocks:删除所有数据块单元。 ⚫ Block Infile:从特定数据文件中输入数据块。 ⚫ Block Outfile:数据块输出到特定数据文件中 。 (6) Utility —实用函数:既包括在内部设计模型中定义的所有通用函数,也包括其他一
器驱动程序。 (2) 仪器驱动程序的结构一定要模块化,能够提供多级功能访问,以便用户能使用各个驱
动程序的子功能集。 (3) 仪器驱动程序的设计和实现形式必须一致,以使用户在了解某一驱动程序的设计方法
后,就能使用其他的驱动程序。 在 VPP 系统中,仪器驱动程序具有不少特点,其设计也应符合一定步骤。下面以浙江大 学仪器系自主研制的一款可编程数字输入/输出 VXI 模块的仪器驱动程序设计为例, 讨论 一下 VPP 仪器驱动程序设计的一般方法。 第一步,应确定需要研制的仪器模块的类型,确定其属于 VXI 仪器、GPIB 仪器还是串 行接口仪器,是属于消息基器件、寄存器基器件还是存储器基器件。本可编程数字输入/输 出模块属于 VXI 寄存器模块。 第二步,应确定仪器模块的应用目标及功能指标。与仪器硬件模块研制的侧重点不同的 是,仪器硬件模块研制所关心的技术指标往往是硬件性指标,包括精度、灵敏度、线性度、 动态响应、使用环境温度范围以及可靠性指标等一系列动、静态指标,而仪器驱动程序的研 制关心的指标更注重于功能的实现。可编程数字输入/输出模块可用于数字量的多路输入/输 出,广泛适用于外界是数字信号与 VXI 仪器之间的数据交换。主要应实现的功能如下所述: 输入/输出端口可编程设置;可实现位、字节、字及长字多种数据格式操作;输入/输出数据、 控制线及标志位极性可编辑;可编程设置模块间通讯的握手协议与延迟时间;可进行数据块 操作;可与外部文件进行数据存取操作;具有错误报告与存取功能等。 第三步,在基本清楚了设计目标之后,应选择虚拟仪器系统的系统框架,确定模块设计 的软、硬件环境。可编程数字输入/输出模块是 C 尺寸的 VXI 模块,VXI 计算机系统选择了 MXI 外挂式计算机控制,虚拟仪器驱动程序设计主机选 13 槽机箱。系统框架选择为 WIN95 框架,操作系统为 WIN95,应用程序开发环境选择了图形化软件开发平台,选择为 HP VEE 仪器驱动程序的开发环境为 BC5.0。仪器驱动程序所调用 VISA 函数以 32 位 DLL 形式提供。
errStatus=viOpenfaultRM(&defRM); if(Vl-SUCCESS>errStatus) { Errors:Vl-ERROR-SYSTEM-ERROR Vl-ERROR-ALLOC zde1458-LOG-STATUS(vi, NULL, errStatus); }
errStatus =viOpen(defRM , instrDesc, Vl-NULL, VI-NULL , vi); if(VI-SUCCESS>errStatus) { viClose(defRM); Errors:Vl-ERROR-NSUP-OPFR VI-ERROR-INV-RSRC-NAME VI-ERROR-INV-ACC-NAME VI-ERROR-RSRC-NFOUND VI-ERROR-ALLOC vi=VI-UNLL; zde1458-LOG-STATUS(vi, NULL , e序中应包括 C 源代码、功能面板文件、32 位 DLL 库 文件、32 位 DLL 引入库文件、VB 函数原型文件、VPP 知识库文件、Windows 帮助文件。 并根据 VPP 规范,为仪器驱动程序包括的所有文件命名。VPP 规范规定,仪器驱动程序包 括的所有文件都有一个共同的前缀,即仪器模块名。以 HP 数字输入/输出 HPE1458A 为例, 源程序名即为 hpe1458 .c,其他文件名的扩展名如上定义所示,而所有前缀都一致。
第七步,在图形化平台上运行与调试仪器驱动程序。由于仪器驱动程序不是图形化平台
的源码形式,需要利用图形化平台的一种自动变换机制和 DLL 接口能力(HP VEE 有相应的 DWT 软件,实现仪器驱动程序中图形化平台上的调用;而在 NILabVIEW 中也提供了相应的 菜单操作函数)。在这个过程中,操作功能函数都对应图形表示方式,用户只须简单地设置 每个参量的值就可建立该功能的交互调用功能,然后就可执行这些功能。由图形化表示方式 构成的功能面板集合构成了仪器驱动程序的功能面板文件。仪器驱动程序与仪器硬件的调试 需要结合在一起,最终需要仪器模块的软、硬件联调。根据调试结果,设计人员可进行仪器 驱动程序的修改。
些特定操作。 ⚫ Reset :将仪器复位到缺省状态。在本模块中,缺省状态为所有数据端口置为输入模
式,没有设置握手模式,握手延迟时间为 2 微秒,所有极性置为正状态,控制线置为无 效态。 ⚫ Self-test:进行仪器自检。 ⚫ Error Query:进行仪器错误查询。 ⚫ Error Message:将错误代码转换为错误消息。 ⚫ Revision Query:仪器驱动程序与固件版本查询 。 ⚫ Set TimeOut:设置超时值。 ⚫ Query TimeOut:查询超时值。 ⚫ Device Clear:器件清除。 (7) Close:关闭函数,终止软件与仪器的通讯联系,并释放系统资源。 第六步,将所定义的所有功能函数用 C 语言实现,所有仪器驱动程序的头部应包括 visatype .h、visa .h 文件以及 vpptype .h 。功能函数的实现基于 VISA I/O 接口软件 库, VISA 以 DLL 形式被调用。仪器驱 44 工程设计程序的编写应采用模块化、层次化结构,
8.4 虚拟仪器驱动程序设计 在虚拟仪器系统中,仪器驱动程序是连接仪器与用户界面的桥梁,是系统设计的一个关
键。按照行业规范,仪器供应厂家在提供虚拟仪器硬件模块的同时,必须提供相应的仪器驱 动程序、软面板及相关文档。VXI 总线即插即用规范(简称 VPP 规范)详细定义了仪器驱动 程序的外接口模型与内部设计模型,符合 VPP 规范的仪器驱动程序具有以下特点: (1) 仪器驱动程序都提供程序源代码,以使用户可以根据自己的需要理解、修改与优化仪
在实际源程序的编写中,往往还需要加入各种异常处理。在完成了源代码编写之后,仪
器驱动程序还应以 32 位 DLL 形式提供(包括库文件与引入文件)。由于在 VPP 系统中,所
有仪器驱动程序函数的设计是基于 VISA I/O 接口软件这一统一基础之上,且都必须符合
VPP 规范,因此由不同供应厂家提供的仪器驱动程序,可以运行在一个共同的平台上。
结构、联合等),不采用键盘/屏幕标准输入/输出方式。 (4) 仪器函数应避免包括高级的、复杂的数学分析与运算函数,而将此类复杂的运算与分
析工作交与上层应用程序来完成。 (5) 仪器函数应具有较强的内聚力,尽量做到一个仪器函数完成一个独立的仪器功能,实
现有效的功能分配。 (6) 仪器驱动程序中各函数之间尽量提高各自的独立性,减少彼此的耦合度。函数之间必
第四步,应选择一个可作参考的现有的 VPP 仪器驱动程序,尽量在现有的仪器驱动程序 基础上进行设计,不必要从头开始进行重复性劳动。根据 VXI 即插即用规范的开放性与扩 展性的要求,仪器驱动程序的设计应该是公开的。在设计仪器驱动程序的时候,既可以参考 自己的其他模块设计方法,也可以参考其他供应厂家提供的仪器驱动程序,开放性的要求促 使仪器驱动程序的开发不可能再像过去那样做一个神秘的“黑匣子”,它不仅对于仪器驱动 程序的开发者是公开的,对于仪器驱动程序的用户也是完全公开的。在这意义上,在现有的 仪器驱动程序的基础上进行开发,不仅可以提高开发效率,也可以提高开发质量,避免一些 重复性的错误,而参考的仪器模块最好与将开发的仪器模块有较多的相似处,这样可参考处 就越多。在本仪器驱动程序的开发中,选择了 HP 公司的 96 通道数字输入/输出模块 HPE1458A 的仪器驱动程序作为开发模板。