VB编写与USB采集卡通信程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB编写与USB采集卡通信程序相关的知识,希望对你有一定的参考价值。
用vb实现USB接口设备数据传送本文介绍了USB设备中的人机接口,HID设备与主机通信的要点与方式。详细讲解了在VB中调用相关APl函数的方法,并介绍了一种基于USB总线的数据采集系统的设计方案及开发方法,采用的是USB2.0协议。该系统主要是从设备的角度描述了人机接口设备通信,以及用来与主机进行数据交换的报告格式。应用程序可以使用任何能访问API函数的编程语言,调用窗口函数并与USB设备实现通信。掌握USB设备与计算机通讯规程,实现USB设备的自动识别。为数据采集系统与计算机之间的通讯开辟了新的道路。
这几年,随着大量支持USB的个人电脑的普及,USB逐步成为PC机的标准接口已经是大势所趋了。在主机(host)端,最新推出的PC机几乎100%支持USB;而在外设(device)端,使用USB接口的设备也与日俱增,例如数码相机、扫描仪、游戏杆、磁带和软驱、图像设备、打印机、键盘、鼠标等。
二、Windows系统选择USB驱动的过程
当Windows检测到一个新的USB外设时,必须做的一件事情是找出应该使用哪个设备驱动应用软件来与设备通信,然后载入选定的驱动。这是Windows设备管理器的工作,设备管理器使用类、设备安装器和INF文件来找到这个匹配。
INF文件是一个文本文件,其中包括有利于Windows识别设备的信息。文件告诉Win-dows要使用什么驱动、注册表里存储什么信息等。
三、Visual Basic与USB设备通信的设计与实现
使用VB语言访问串行通信接口的方法。Windows在底层实现了和串行通信有关的很多复杂的工作,给程序员提供了一个相对比较容易掌握的编程接口。例如 Windows自动将所有接收到的字符放到接收缓冲区中,而所有发送的字符也都进入发送缓冲区。只要程序空闲,程序就可以读取接收缓冲区获得数据,或者向发送缓冲区发送数据。
1.主机寻找USB设备的过程
第一个被Windows支持的USB外围设备类是人机接口设备。HID是 HUMANINTER-FACE DEVICE人机接口设备的英文缩写。是指直接和人进行互动的设备。如鼠标、键盘等。运行在WINDOWS98或其他更高的版本的操作系统的PC机,系统除了提供通用的USB设备的底层驱动以外,还单独提供了一些HID设备的完整驱动,应用程序可以很容易地与操作系统内部的HID通讯。这样使得符合HID 类的USB设备很容易开发与运行。也就是说,我们如果想实现一个USB的HID类设备,是不需要在Windows下开发自己的驱动程序的。HID不一定要是标准的外设类型,唯一的要求是交换的数据存储在报文的结构内,设备固件必须支持报文的格式。任何工作在该限制之内的设备都可以成为一个HID,例如温度计、电压计、读卡机等。
2.VB中调用API函数的过程
(1)声明:下面是一个Visual Basic使用API函数WriteFile的声明:可以利用这个涵数来写数据到HID(也可以是文件和其他设备)中。Public Declare Function WriteFile Lib_“kernel32”_
(By Val hFile As Long,_ByReflpBuffer As Byte,_By Val nNumberOfBytes To Write As Long,_ByRef lpNumberOfBytesWritten As Long,_ByVal lpOvefiapped As Long)_As Long
(2)识别HID过程Public Declare Function HidD_GetHidGuid Lib_“hid.dll”_(ByRefHidGuid As GUID)As Long
3.Visual Basic数据过程
(1)读数据到设备
Public Declare Function WriteFile Lib“kernel32”_(ByVal hFile As Long,_ByReflpBuffer As Byte_ByValnNumberOfBytesToWrite As Long,_ByRefnNumberOfBytcsWritten As Long,_ByVal lpOvefiapped As Long)_As Long
(2)从设备读取数据Declare Function ReadFile Lib_“kernel32”_(ByValhFile As Long,_ByReflpBuffer As Byte,_ByValnNumberOfBytesToRead As Long,_ByReflpNumberOfBytesRead As Long,_lpOvefiapped As Long)_As Long
读写报文缓冲区时,第一个字节是ReportID,其后是报文数据。报文缓冲区默认是八个报文,并且环状排列。因为数据读写是发生在主机轮训设备的时候,并不是由设备触发产生硬件中断,所以如不能及时读写,新的数据会覆盖旧的数据,导致报文丢失。当数据读写频繁时应使用特征报文,它可以保证当报文数据没有变化时,HID不会传送新的数据。
当不再使用SetupDiGetClassDevs时,应用上述函数释放其返回的数组hDevInfo。还有需要使用函数CloseHandle,它是一个非常通用的API函数,可以用于关闭通信。
四、结论
实际编程表明使用VB开发HID类USB设备是一条非常方便快捷的途径,不需要编写底层驱动,涉及到的API函数多是大家熟知的通用函数。但同时还必须注意到一点,HID类只支持控制传输与中断传输。控制传输通常不用于数据的传输,而中断传输的特点是保证最大延迟,也就是事务之间的时间。它没有保证传输速率,而是保证每笔事务之间的时间不会超过最大延时。所以中断传输适用于数据量不太大,但需要及时快速地传送,实时性要求较高的场合。对于数据量比较大的传输,是不宜使用中断传输的。因此HID设备应用的场合也必须根据该特点灵活使用。
参考资料:http://zhidao.baidu.com/question/107250921.html
参考技术A 采集卡有接口的,有了接口参数,一切好办。 参考技术B 采集卡的型号都没有,如何知道读取c# app与vb6 app通信
【中文标题】c# app与vb6 app通信【英文标题】:c# app communicate with vb6 app 【发布时间】:2011-10-10 18:23:34 【问题描述】:我编写了一个 c#.net 4.0 应用程序,我需要将数据发送到一个 VB6 应用程序。 VB6 可以通过 DDE 发送和接收数据,但我找不到任何适用于我的 C# 应用程序的工作和/或可理解的 DDE 协议。我可以尝试更改 VB 应用程序的通信协议。 您对合适的协议有什么建议吗?
我找到了这个topic,我想我会选择 TCP winsock 协议,它在两个工作区都可用,但是我找不到这种多语言使用 Winsock 的任何工作代码示例。 我会很高兴得到这样的例子。 谢谢!
【问题讨论】:
你有没有想过这个问题? 对不起,我不记得了……那是很久以前的事了……我想我只是把它扔掉了,并与共享文件夹上的文件 IO 通信。效率不是很高,但它完成了工作。 【参考方案1】:如果你想坚持使用 DDE,你可以查看这个项目:http://ndde.codeplex.com/ 或http://www.angelfire.com/biz/rhaminisys/ddeinfo.html。我没有使用它们的经验,但它们旨在解决问题。
但是,如果您有 VB6 应用程序的源代码,那么公开 COM 接口可能会简单得多。
您可以通过将项目从标准 EXE 更改为 ActiveX EXE 并创建至少一个公开您的方法的公共类来实现。我为我以前使用 DDE 的所有 VB6 应用程序都这样做了,并强烈推荐它。它为客户端应用程序提供了更好的界面。
【讨论】:
VB6 应用程序的问题在于我有权更改它。这是第三方应用程序。我只能建议对兼容性进行更改。你的建议太多了。 但是,我会再次检查 DDE 问题。 +1 DDE 的另一个选择是编写一个 VB6 工具来为您发送/接收 DDE。将其设为 ActiveX exe,然后您就可以从 .Net 调用它以上是关于VB编写与USB采集卡通信程序的主要内容,如果未能解决你的问题,请参考以下文章
Labjack系列-数据采集卡,USB数据采集卡与 Labview对接的编程操作
USB数据采集卡:labjack T7T7 Pro系列的技术特点