图1 采集卡的软件结构

图2 VI的层级结构

LABVIEW应用程序分为用户界面和图标代码,通过搭建和调用子VI编写主体程序,各VI利用LABVIEW的CLF技术调用动态链接库中的驱动函数,实现与硬件设备的数据交换。子VI将基本的驱动函数进行功能封装。一个完整的LABVIEW应用程序通常由若干个子VI及其外部编程连线构成,VI的层级结构设计是设计虚拟仪器驱动程序的核心,各VI分别为组成驱动程序的模块化子程序。设计中,动态链接库由VC编写,调用底层的驱动函数与设备通信。软件包括两类子VI函数集合,一类是低层组件VI集合,分为若干个独立的软件功能模块,每个模块负责控制仪器的某项特殊功能,这类VI是仪器驱动程序的基础;另一类为高层应用VI集合,应用VI通过调用合适的组件VI以实现最通常的仪器设置和测量任务。显然,就驱动程序开发而言,能否根据硬件特性成功构建组件VI集合是关键所在。VI层次结构如图2所示。

如图所示,按功能有两个高层应用子VI集合:Config.vi,Config DDC.vi,这两个子VI又分别调用低层组件子VI来完成特定的设置、配置任务。Config.vi完成采集卡的常规配置,例如对采集卡单次采集数量、FIFO满深度、寄存器(硬件通道、时钟、触发、采集方式、采集模式等的控制)设置、采集卡的状态查询等;Config DDC.vi完成DDC的所有配置工作,包括对DDC的模式、抽取率、输出格式、本振频率、本振相位、增益、CFIR滤波参数、PFIR滤波参数等的设置,从而实现DDC的数字IQ分离、抽取、数字滤波、重采样、多级增益调节、多种调制方式的解调等功能。其余低层组件VI实现设备的打开关闭、数据从数据采集卡到主机内存的传送、数据保存等。无论应用子VI或组件子VI均为独立可执行程序,实现特定功能,各VI函数作为提供给用户进行系统应用开发所需的各类操作。采用该结构,能够使用户在运行时修改虚拟仪器系统的运行逻辑与人机界面,可立即执行,因此在用户需要改变需求的情况下能迅速适配,数据采集卡具有可重构的特点,用户也不必去关心硬件的实现细节。