0 引言
随着工业技术的急剧发展,虚拟仪器在机械控制及测量分析领域得到了广泛应用。虚拟仪器除了可以完成传统测量仪器的功能外,还拥有庞大的数据处理能力[1]。LabVIEW便是由美国国家仪器(National Instruments,NI)公司发布的一款虚拟仪器软件。LabVIEW可以与NI公司的数据采集卡实现无缝连接,针对这种数据卡,只需要在程序框图中选择对应的图标并编程便可实现USB连接及数据采集,这种情况无需设置专门的驱动程序。但对于非NI公司的USB接口数据采集卡,必须使用LabVIEW自行编写驱动程序才能够驱动USB并完成数据采集。
可编程的片上系统(Programmable System-on-Chip,PSoC)是赛普拉斯公司推出的系列芯片。其中PSoC3的单个芯片集微控制器、存储器、模拟和数字外设功能为一体,具有USB等通信接口。借助PSoC Creator这一原理图设计及输入工具,便可以轻松完成片上的模拟数字系统设计。
为了使LabVIEW能够更普遍地使用通用USB设备,本文系统地阐述了LabVIEW与PSoC3通过USB通信的四种方式,最后列举了其中两种方式的LabVIEW设计程序和测试效果。
1 LabVIEW连接USB的方式
对于非NI公司的通用USB接口设备,必须使用LabVIEW编写对应的驱动程序。一般有四种方法:使用调用库函数节点(Call Library Function Node,CLF)方式调用动态数据库;使用代码接口节点(Code Interface Node,CIN)调用外部代码;使用虚拟仪器软件架构(NI-Virtual Instrument Software Architecture,NI-VISA)配置USB;将USB接口转换为LabVIEW已定义的外设接口类型,例如声卡、串口等类型。
1.1 CLF方式
CLF方式为在程序框图中使用库函数节点调用动态链接库(Dynamic Link Library,DLL)。DLL是一种允许多个程序共享并执行某些代码或者资源的可执行文件[3]。LabVIEW没有非NI公司USB接口设备的驱动程序,用户需要使用其他开发软件(VC++、C等)自行开发驱动程序并封装为DLL,以供LabVIEW调用[4]。
LabVIEW调用动态链接库的步骤如下:在程序框图中放置库函数节点,其位置在“互连接口——库与可执行程序——调用库函数节点”,双击库函数节点或者右击选择配置菜单选项,进入配置对话框。在“函数”标签中选择自己编写并封装的DLL库函数名称及某个功能函数。在“参数”标签中设置库函数节点的输入输出参数及数据类型。由于只有指针类型的输出参数能够正确传出,所以要注意将输出参数的传递属性设置为指针类型。
1.2 CIN方式
LabVIEW的CIN图标可以通过USB接口实现与其他编程语言的通信。使用CIN图标同样需要设置输入输出参数。当LabVIEW程序运行到CIN节点时,通过输入端口进入其他语言源代码中,运行完源代码之后再通过输出端口返回到LabVIEW程序。在其他语言源代码中要获取USB设备句柄并设置USB接口值等参数。从LabVIEW 2010升级版取消了代码接口节点后,此方式已较少使用。
1.3 NI-VISA方式
VISA是一个用来与各种仪器总线进行通信的高级应用编程接口。NI-VISA从3.0版本开始支持USB通信,它的两种VISA类函数可以控制两类USB设备:USB仪器(Instruction,INSTR)设备与USB 读写(Read And Write,RAW)设备,NI-VISA与这两种USB设备实现通信的编程是不同的[5]。
1.3.1 NI-VISA与USB INSTR设备的通信
这种方式不需要配置NI-VISA,直接使用图1所示程序便可实现两者的通信。
1.3.2 NI-VISA与USB RAW设备的通信
这种方式需要配置NI-VISA,配置步骤如下:
(1)对下位机PSoC3供电并将USB总线接入个人电脑。
(2)打开NI-VISA Driver Wizard,将USB作为缺省驱动程序。
(3)进入基本信息设置窗口,设置USB的基本信息。在Device List中可以选择Other选项,点击Next进入USB的基本信息填写对话框。但因为已经连接了USB设备,所以此处可以直接单击连接的USB设备,在下方自动填写USB设备对应的供应商ID、产品ID、制造商名称和型号名称。
(4)指定INF文档的存放文件夹。
(5)安装INF文档。
设置完毕,运行上位机时,便可以在“VISA资源名”显示框中搜索到连接的USB设备。如图2,此时表示PSoC3可与LabVIEW实现通信。
1.4 使用LabVIEW已有的驱动类型
因为LabVIEW本身具有一些设备驱动程序,例如声卡、串口等,LabVIEW可直接利用这些已有的图标完成编程。此时需要将下位机PSoC3构建为这些设备。
2 将PSoC3构建为USB设备的方式
PSoC3集成开发环境(PSoC Creator)中的全速USB组件USBFS(Full Speed USB)为控制端点提供了低层驱动程序。此组件提供了USBFS自定义程序,从而可以方便实现描述符的构建[6]。根据传输数据的不同,开发者可以构建普通的USB设备,也可以构建基于USB类的设备。构建为基于USB类的设备的最大优势是操作系统中集成了这些类设备的驱动程序,免去了开发者编写驱动的过程。例如需要中断传输,可以构建基于人机接口类的设备(USB_DEVICE_CLASS_HUMAN INTERFACE,HID);需要批量传输,可以构建为基于通信类的设备(USB_DECICE_CLASS_COMMUNICATIONS,CDC);需要等时传输可以构建为基于音频类的设备(USB_DEVICE_ CLASS_AUDIO,Audio)。
2.1 将PSoC3构建为普通的USB设备
此方式为PSoC3端最简单的方式。虽然各种描述符的构建相对简单,可以根据需要使用中断传输、等时传输、批量传输等传输方式,但代价是USB主机端(如PC)设计的复杂度大大提高。开发者必须针对此设备编写相应的驱动程序,否则该设备将无法运行。NI-VISA虽然可以简化驱动程序的编写过程,但是简单的接口描述符和端点描述符决定了此种方式很难完成大量复杂的数据传输。因此,这种方式只适合普通、少量的数据传输。
2.2 将PSoC3构建为基于HID类、CDC类的设备
HID类是应用最为广泛的标准USB类,操作系统的支持使HID类的开发变得较为容易。USB主机通过HID报表描述符获取主机所接收到的数据的意义,以及应该发送什么数据给USB设备。对于PSoC3来说,HID类只适合传输一些低传输速率的数据,这是因为HID类在实际应用方面有一些限制:(1)所有的数据传输类型必须为控制传输和中断传输;(2)一次最多传输64字节,1 ms传输一次,所以速率限制为64 kb/s;(3)仅支持一个输入端点和一个输出端点;(4)只能由USB主机周期性轮询请求数据传输[7]。
基于CDC类的器件可以弥补HID类在以上方面的限制。开发者可以根据PSoC Creator中的USBUART组件将PSoC3构建为基于CDC类的器件,而操作系统通常都自带CDC类的设备驱动程序。PSoC3通过USB口连接到PC后,PC端识别为普通串口设备。这样USB接口在LabVIEW与PSoC3之间相当于透明的,LabVIEW端完全可以忽略USB的存在,只当PC端连接到了一个普通的串口设备,使用串口的一系列图标便可实现数据的传输。相对于HID类设备,既提高了传输速度,又简化了程序设计的复杂程度。
2.3 将PSoC3构建为基于Audio类的设备
以上两种方式在实际应用上并不能应对所有的PSoC3和LabVIEW之间的通信问题。例如USB连接的多路信号采集显示及分析设备,需要将多路信号数据通过USB实时地上传到LabVIEW端。将PSoC3配置为基于Audio类的设备有助于处理好系统所需的实时性和上位机下位机之间采样率同步等问题。和HID类与CDC类相同的是,一般的计算机操作系统中都集成了Audio类的驱动程序,将配置好的PSoC3连接到PC后,PC端识别为USB音频设备,USB接口在LabVIEW与PSoC3之间也相当于透明的。LabVIEW与PSoC3之间借用音频的左右声道传输数据,并且可以利用Audio类对数据格式、同步和采样率的协议进行数据的传输和同步处理,从而大大简化了LabVIEW和PSoC3之间此类数据的传输复杂程度。
3 LabVIEW与PSoC3基于USB通信的测试
3.1 通过配置NI-VISA实现通信的测试
通过NI-VISA配置USB设备的前面板与程序框图如图3、图4所示,此方法中上位机LabVIEW使用配置NI-VISA方式,下位机将PSoC3构建为普通的USB设备。点击图3中实时采集按钮,实时显示采集的数据。图4的程序框图中使用的是USB RAW设备配置方法。
3.2 将PSoC3构建为基于Audio类设备的测试
此方法的前面板与程序框图如图5、图6所示。此方法中上位机LabVIEW直接使用声卡驱动完成数据采集与实时显示,下位机将PSoC3构建为基于Audio类的设备。图5中上位机将接收到的数据解包后实时显示,采集到的是四个具有相位差的正弦信号,图6是通过声卡驱动编写的程序。
4 总结
本文系统地介绍了LabVIEW与PSoC3基于USB的几种通信方式,各种方式都有各自的适用场合。LabVIEW的四种方式中,CLF可以调用设备的驱动程序,但驱动程序的编写对开发者来说相对困难。CIN方式虽可以与其他编程语言实现链接,但目前LabVIEW已取消了这个节点函数。NI-VISA使用更方便,应用更广泛。将PSoC3构建为基于USB类设备的方式可以避免对驱动程序的编写及VISA的配置,可直接使用LabVIEW已有驱动程序,更简化了程序的实现。根据传输数据类型的不同,可以将PSoC3配置为基于HID类、CDC类和Audio类的设备。