USB通信方式研究

2024-09-12

USB通信方式研究 篇1

随着工业技术的急剧发展, 虚拟仪器在机械控制及测量分析领域得到了广泛应用。虚拟仪器除了可以完成传统测量仪器的功能外, 还拥有庞大的数据处理能力[1]。Lab VIEW便是由美国国家仪器 (National Instruments, NI) 公司发布的一款虚拟仪器软件。Lab VIEW可以与NI公司的数据采集卡实现无缝连接, 针对这种数据卡, 只需要在程序框图中选择对应的图标并编程便可实现USB连接及数据采集, 这种情况无需设置专门的驱动程序。但对于非NI公司的USB接口数据采集卡, 必须使用Lab VIEW自行编写驱动程序才能够驱动USB并完成数据采集。

可编程的片上系统 (Programmable System-on-Chip, PSo C) 是赛普拉斯公司推出的系列芯片。其中PSo C3的单个芯片集微控制器、存储器、模拟和数字外设功能为一体, 具有USB等通信接口。借助PSo C Creator这一原理图设计及输入工具, 便可以轻松完成片上的模拟数字系统设计。

为了使Lab VIEW能够更普遍地使用通用USB设备, 本文系统地阐述了Lab VIEW与PSo C3通过USB通信的四种方式, 最后列举了其中两种方式的Lab VIEW设计程序和测试效果。

1 Lab VIEW连接USB的方式

对于非NI公司的通用USB接口设备, 必须使用Lab VIEW编写对应的驱动程序。一般有四种方法:使用调用库函数节点 (Call Library Function Node, CLF) 方式调用动态数据库;使用代码接口节点 (Code Interface Node, CIN) 调用外部代码;使用虚拟仪器软件架构 (NI-Virtual Instrument Software Architecture, NI-VISA) 配置USB;将USB接口转换为Lab VIEW已定义的外设接口类型, 例如声卡、串口等类型。

1.1 CLF方式

CLF方式为在程序框图中使用库函数节点调用动态链接库 (Dynamic Link Library, DLL) 。DLL是一种允许多个程序共享并执行某些代码或者资源的可执行文件[3]。Lab VIEW没有非NI公司USB接口设备的驱动程序, 用户需要使用其他开发软件 (VC++、C等) 自行开发驱动程序并封装为DLL, 以供Lab VIEW调用[4]。

Lab VIEW调用动态链接库的步骤如下:在程序框图中放置库函数节点, 其位置在“互连接口———库与可执行程序———调用库函数节点”, 双击库函数节点或者右击选择配置菜单选项, 进入配置对话框。在“函数”标签中选择自己编写并封装的DLL库函数名称及某个功能函数。在“参数”标签中设置库函数节点的输入输出参数及数据类型。由于只有指针类型的输出参数能够正确传出, 所以要注意将输出参数的传递属性设置为指针类型。

1.2 CIN方式

Lab VIEW的CIN图标可以通过USB接口实现与其他编程语言的通信。使用CIN图标同样需要设置输入输出参数。当Lab VIEW程序运行到CIN节点时, 通过输入端口进入其他语言源代码中, 运行完源代码之后再通过输出端口返回到Lab VIEW程序。在其他语言源代码中要获取USB设备句柄并设置USB接口值等参数。从Lab VIEW 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) 对下位机PSo C3供电并将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, 此时表示PSo C3可与Lab VIEW实现通信。

1.4 使用Lab VIEW已有的驱动类型

因为Lab VIEW本身具有一些设备驱动程序, 例如声卡、串口等, Lab VIEW可直接利用这些已有的图标完成编程。此时需要将下位机PSo C3构建为这些设备。

2 将PSo C3构建为USB设备的方式

PSo C3集成开发环境 (PSo C 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 将PSo C3构建为普通的USB设备

此方式为PSo C3端最简单的方式。虽然各种描述符的构建相对简单, 可以根据需要使用中断传输、等时传输、批量传输等传输方式, 但代价是USB主机端 (如PC) 设计的复杂度大大提高。开发者必须针对此设备编写相应的驱动程序, 否则该设备将无法运行。NI-VISA虽然可以简化驱动程序的编写过程, 但是简单的接口描述符和端点描述符决定了此种方式很难完成大量复杂的数据传输。因此, 这种方式只适合普通、少量的数据传输。

2.2 将PSo C3构建为基于HID类、CDC类的设备

HID类是应用最为广泛的标准USB类, 操作系统的支持使HID类的开发变得较为容易。USB主机通过HID报表描述符获取主机所接收到的数据的意义, 以及应该发送什么数据给USB设备。对于PSo C3来说, HID类只适合传输一些低传输速率的数据, 这是因为HID类在实际应用方面有一些限制: (1) 所有的数据传输类型必须为控制传输和中断传输; (2) 一次最多传输64字节, 1 ms传输一次, 所以速率限制为64 kb/s; (3) 仅支持一个输入端点和一个输出端点; (4) 只能由USB主机周期性轮询请求数据传输[7]。

基于CDC类的器件可以弥补HID类在以上方面的限制。开发者可以根据PSo C Creator中的USBUART组件将PSo C3构建为基于CDC类的器件, 而操作系统通常都自带CDC类的设备驱动程序。PSo C3通过USB口连接到PC后, PC端识别为普通串口设备。这样USB接口在Lab VIEW与PSo C3之间相当于透明的, Lab VIEW端完全可以忽略USB的存在, 只当PC端连接到了一个普通的串口设备, 使用串口的一系列图标便可实现数据的传输。相对于HID类设备, 既提高了传输速度, 又简化了程序设计的复杂程度。

2.3 将PSo C3构建为基于Audio类的设备

以上两种方式在实际应用上并不能应对所有的PSo C3和Lab VIEW之间的通信问题。例如USB连接的多路信号采集显示及分析设备, 需要将多路信号数据通过USB实时地上传到Lab VIEW端。将PSo C3配置为基于Audio类的设备有助于处理好系统所需的实时性和上位机下位机之间采样率同步等问题。和HID类与CDC类相同的是, 一般的计算机操作系统中都集成了Audio类的驱动程序, 将配置好的PSo C3连接到PC后, PC端识别为USB音频设备, USB接口在Lab VIEW与PSo C3之间也相当于透明的。Lab VIEW与PSo C3之间借用音频的左右声道传输数据, 并且可以利用Audio类对数据格式、同步和采样率的协议进行数据的传输和同步处理, 从而大大简化了Lab VIEW和PSo C3之间此类数据的传输复杂程度。

3 Lab VIEW与PSo C3基于USB通信的测试

3.1 通过配置NI-VISA实现通信的测试

通过NI-VISA配置USB设备的前面板与程序框图如图3、图4所示, 此方法中上位机Lab VIEW使用配置NI-VISA方式, 下位机将PSo C3构建为普通的USB设备。点击图3中实时采集按钮, 实时显示采集的数据。图4的程序框图中使用的是USB RAW设备配置方法。

3.2 将PSo C3构建为基于Audio类设备的测试

此方法的前面板与程序框图如图5、图6所示。此方法中上位机Lab VIEW直接使用声卡驱动完成数据采集与实时显示, 下位机将PSo C3构建为基于Audio类的设备。图5中上位机将接收到的数据解包后实时显示, 采集到的是四个具有相位差的正弦信号, 图6是通过声卡驱动编写的程序。

4 总结

本文系统地介绍了Lab VIEW与PSo C3基于USB的几种通信方式, 各种方式都有各自的适用场合。Lab VIEW的四种方式中, CLF可以调用设备的驱动程序, 但驱动程序的编写对开发者来说相对困难。CIN方式虽可以与其他编程语言实现链接, 但目前Lab VIEW已取消了这个节点函数。NI-VISA使用更方便, 应用更广泛。将PSo C3构建为基于USB类设备的方式可以避免对驱动程序的编写及VISA的配置, 可直接使用Lab VIEW已有驱动程序, 更简化了程序的实现。根据传输数据类型的不同, 可以将PSo C3配置为基于HID类、CDC类和Audio类的设备。

参考文献

[1]伍星华, 王旭.国内虚拟仪器技术的应用研究现状及展望[J].现代科学仪器, 2011 (4) :112-116.

[2]刘宇芳, 李秀娟.Labview平台下基于DLL的USB通信技术应用[J].安徽工业大学学报 (自然科学版) , 2008 (2) :168-170, 189.

[3]王平, 苏涛, 方浩俊.基于USB2.0的高速实时数据采集系统设计[J].现代电子技术, 2007 (1) :81-84.

[4]周青云, 王建勋.基于USB接口与Lab VIEW的数据采集系统设计[J].实验室研究与探索, 2011 (8) :238-240.

[5]Cypress.Full Speed USB (USBFS) [EB/OL].[2014-02-25].http://www.cypress.com/?r ID=48924.

[6]Cypress.USB General Data Transfer with Standard HID Drivers[EB/OL].[2014-09-22].http://www.cypress.com/?r ID=70131.

USB通信方式研究 篇2

[关键词] 虚拟 通信子系统 设计 实现

用现代计算机技术研究虚拟实验室的应用,是近几年国内外实验教学研究的热点。虚拟实验室就是以计算机网络为核心,将虚拟仪器通过网络连接起来,以实现数据采集、分析和远程操作的一个系统,它具有透明性、资源共享性、互操作性、用户自主性、扩展性以及安全性等特点,是传统实验室无法比拟的。通信与调度管理是构建虚拟教学实验室系统的关键问题,各种数据的传输需要一个良好的通信机制来保证,调度管理则是系统能够有序化工作的关键。

一、虚拟教学实验室通信子系统的通信机制选择

在当下流行的多种通信方式中,共享的通信方式、NetBIOS和MailSlot的可靠性差。DDE,WM_COPYDATA和剪贴板是同一台计算机中不同应用程序之间的进行数据交换的方式。Pipe的速度较慢,而MailSlot最大的缺陷是不可靠。Sockets由于是工作在通信的底层,实现起来比较复杂,但是如果是工作在Windows平台之上,则不存在这个问题,因为微软公司提供了相应的控件。RPC对外界屏蔽了通信细节,具有较好的结构化和抽象能力,它是分布在不同处理机上的程序进行合作的一种高级机制,并被广泛地用于分布式操作系统、分布式数据库和客户/服务器计算机领域中。CORBA适用于异构的、大规模的分布式系统。它们各有各的优缺点,没有哪一种是万能的。因此,只有在合适的场合采用合适的方案,才是最好的解决办法。

由于基于局域网的虚拟教学实验室系统来说,主要是运行在Windows平台之上,并结合本文所设计的计算机组成原理虚拟实验室的特点,因此我们使用Socket来实现系统的通信。

二、虚拟教学实验室通信子系统信息类型与通信方式设计

由于虚拟实验室需要支持不同的信息流,如实验数据、白板信息等,还要支持不同的通信方式,如单播、组播和广播,从而实现学生可以单独实验、协同实验和文本交流等功能。所以,虚拟实验室必须解决多种消息类型和多种通信方式这一基本应用需求。

1.系统的信息类型设计。在虚拟实验室系统当中,客户端与服务器端之间存在着大量的信息交互,这些信息的类型多种多样,而且这些信息对网络的通信有不同的要求,有些对实时性要求较高,有些则对顺序和可靠性要求较高。

(1)数据文本信息。主要指用户所发送的实验数据和服务器处理后的实验数据。在本系统中,客户端将用户的操作及实验数据以文本文件的形式传送给应用服务器,服务器进行处理后,也是以文本文件的形式将处理结果传回客户端。由于该数据量不是很大,所以通常用TCP形式实现。

(2)白板信息。白板可以使每一个实验成员利用图形、文字等协同合作一个实验。传送的白板数据是对绘图对象的操作,其先后相关性体现在各个绘图对象的属性变化上,任何数据的传输速度如果过慢的话,将体现不出协同和合作的特性,因此必须保证传送的实时性,通常以UDP的形式实现。

(3)音频/视频信息。这两种信息对于传输的实时性要求较高,对可靠性要求较低,因此通常以UDP的形式实现。但是为了提高可靠性,要在UDP的基础上加上质量保证控制机制。

(4)文字信息。文字信息提供以文字形式交流的手段,多个用户进行实验时,可以互相进行简单的文字交流,在虚拟实验室当中,文字信息数据量小,以TCP形式实现。控制信息:控制信息是实现协同和管理的根本保证,必须以可靠的形式传输。由于其数据量很小,所以通常以TCP形式实现。

2.系统的通信方式设计。在虚拟实验室当中,服务器和客户端在通信中要求能够实现单播、组播和广播。单播是将数据从一个发送点传输到一个接收点,是点到点的通信方式。广播是将数据发送给网络中的所有节点,是点到所有节点的通信方式。组播是介于单播与广播之间的一种点到点的通信方式,它是将数据从一个节点发送给特定“组”内的所有节点。

图1单播通信结构示意图

(1)单播通信方式。单播通信,就是一个用户在同一时间只能与另一用户进行通信。其拓扑结构如图1所示。当用户1向用户3发送信息时,用户在信息包中声明需要服务器提供点对点通信方式,同时在信息包中必须提供用户3的IP地址。这样服务器就为双方建立了通信连接,信息就可以在两个用户之间传递,而网上其他用户是无法得知信息内容的。图中虚线表明信息的流动方向。

单独完成某个实验时,不需要和其他人合作完成,每个人各自完成自己所选的实验,而互不干扰。因此,在这种情况下,采用单播的通信方式。

(2)组播通信。组播通信,就是一个用户在同一时间可以与其它任意指定用户之间进行通信,被指定的用户数量必须大于2。其拓扑结构如图2所示。

在该图中,用户1通过服务器同用户2、用户4建立链路。因此用户1发送的信息可以被用户2和用户4同时接收。用户1在发送信息时必须在信息包中表明多点传送方式,以及接收该信息的用户地址。

在本系统中,如果一个人需要合作完成某个实验,也称协同实验,对于某个人在客户端所作的实验设计编辑操作,先由虚拟实验平台将它转换为消息数据,在本地子网进行组播。于是,合作的组内成员客户端可以直接收到组播的消息数据。

图2组播通信结构示意图

(3)广播方式。广播方式就是,一个用户发出的信息包,被发往网上所有用户。其通信方式如图3所示。在本系统中,服务器需要向所有的客户端发出一些简单的消息,在这样的情况下,使用广播方式可以减轻服务器的负载,提高系统的效率。

图3广播方式结构图

3.通信子系统的框架设计。根据虚拟教学实验室系统的不同要求,为了屏蔽底层通信方式的差异,提供具有特定服务质量的通信服务。通过以上对多种信息类型和多种通信方式的分析,设计了一个系统,称为通信子系统,它提供对单播、组播和广播的支持,并且能够完成系统客户端和服务器端之间的通信。

图4通信子系统框架

由于在本系统中,虚拟实验模块所产生的数据无论是用户的注册/登录信息还是实验据信息,都是文本数据,都采用TCP来实现。在协同实验当中,白板模块所产生的信息有可能是文字信息,也有可能是图像信息,在本文中我们采用UDP的形式来实现。控制信息和文字信息都是以TCP来实现的。

三、虚拟实验室通信子系统的功能实现

1.信息处理模块。(1)阻塞和非阻塞通信原语。阻塞原语(也叫同步原语),当一个进程执行“发送”调用,信息正在发送时,执行“发送”原语的进程将被阻塞(即挂起)。系统调用“发送”命令之后的代码不能执行直到信息已经发送出去。同样的道理,对于“接收”命令,在没有实际收到信息之前是不能返回调用进程的,而执行“接收”原语的进程一样要挂起等待,哪怕等无限长时间。在虚拟教学实验室系统中,“接收”和“发送”进程都是与特定的端口相连接的。也就是说,接收进程只能收到发送与之相关的特定端口的信息,对于其他信息则无法接收。同样,“发送”进程也只能将信息发送到特定的端口(一般是接收方的接收端口)。

与阻塞原语相对应的是非阻塞原语(也叫异步原语)。在这种原语中,发送进程调用“发送”命令后不挂起,而是立即将控制权交给调用进程。非阻塞原语的优点是发送进程可以与信息的发送并行操作。然而,使用非阻塞原语在获得良好性能的同时也带来了缺点,这就是发送进程必须等待信息已经正确发送出去,才能修改发送缓冲区中的数据,否则可能带来严重的正确性问题。

对于这个问题可以有两种解决方案。一是将发送信息拷贝到信息缓存区,从而允许发送进程继续运行。第二种方案是当信息发送成功后中断发送进程,以便告之它可以继续使用发送缓冲区,这种方法不需要信息的拷贝,从而节省时间。但用户级的中断会使程序变得较复杂,并会引入竞争条件,使得程序的执行不具有可重复性。在一般情况下,第一种选择是最好的,容易理解而且实现起来也最简单,不需要另外的缓冲区,可以很快地发送信息。另外,如果对于某些应用必须将处理和信息传输并行操作,那么,第二种是最好的。

(2)系统的两种通信模式。在本系统中,客户端和服务器端之间的通信我们采用了基于TCP/IP协议族上的TCP和UDP协议,该协议是利用传输层上的Socket构建的TCP协议和UDP协议根据虚拟教学实验室系统的特点以及上面对信息流的分析,其实现方式包括以太网下TCP和UDP的Socket两种通信模式,在本系统中,由于信息类型不同,我们使用基于TCP的Socket来完成对实验数据这些数据的传输,用基于UDP的Socket来完成对白板和控制信息的传输。

2.系统管理模块。在虚拟教学实验室系统中,由于存在多个客户同时访问服务器的可能性,如果有多个用户同时访问服务器端,那么就会出现多个线程,那么就必须对这些线程进行统一的管理,要为所有的用户维护接收和发送线程,还必须对这些用户的线程进行调度,使这些线程按照一定的策略运行,维护着系统的运行。服务端还必须有一个主控线程负责对用户列表进行初始化,建立各个通信中需要用到的套接字,创建控制线程、白板转发线程:负责监听来自客户端的建立控制连接或白板连接的请求,有请求到来时建立通信连接。

3.应用接口。应用接口实现通信子系统与应用层程序的交互。它包括两方面内容,一是应用程序的编写应遵循通信子系统所规定的标准;二是应用程序可以通过通信子系统提供的应用程序接口使用通信子系统。应用通信子系统构建虚拟教学实验室系统的目的是为了满足系统对开放性、实时性、灵活性、可扩充性和易操作性的要求。

应用层可以通过通信子系统提供的应用程序接口使用通信子系统。在给用户使用时,将接口的内部实现过程隐藏,提供类似Socket编程的外部接口,其应用接口如下:

addUsers():该函数以用户信息为参数。主要功能是给协议字段中的TON,METHOD标志和USERINFO赋值。然后调用setHead设置协议头。

send():该函数以消息为参数。主要功能是调用addHead给消息加上协议头,调用reallysend向服务器端发送消息包。

read():该函数以消息包为参数。主要功能是接收服务器发来的消息包,并调用protocol进行对该信息包解析。

Sendservermsg():以消息和用户信息为参数。内部处理过程:调用addhead给消息打包,调用reallySend发送服务器与客户端直接交流的消息包。

sendusrmsg():以消息包为参数。内部处理过程:接受消息包,调用protocol分析协议头,转发客户消息。

参考文献:

[1]曾明李建军:网络工程与网络管理[M].北京:电子工业出版社,2001

[2]杨宝德倪宏 蒋凡:多业务管理系统模型研究及实现[J].现代电信术,2005(8)

[3]罗军舟黎波涛杨明:TCP/IP协议及网络编程技术[M]. 北京:清华大学出版社,2004.10

上一篇:尺度空间主结构下一篇:LED散热系统