编程采集卡
1. 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设备应用的场合也必须根据该特点灵活使用。
2. 关于数据采集卡编程的疑问,请熟悉的帮忙指导一下,谢谢各位!!
CVI是可以直接调用DLL中的API,而各个公司的采集卡100%会支持API的调用,所以CVI使用任何公司的数据采集卡应该是没有问题的。不过你最好打电话问下研祥的客服,好确认下。
不论是哪个公司的采集卡,使用API编程的时候,步骤一般是:
1、程序初始化时,注册卡片,函数返回值一般是个设备号。(如:设备号 = RegisterCard(卡的型号,该型号的第几张卡))。这里说明下,如果使用不同类型的卡,那么在“卡的型号”就已经区分了,如果使用同一类型的几张卡,那么“该型号的第几张卡”这个参数可以确定,可以从0开始往下数。
2、程序执行过程中,使用该设备号操作采集卡的各种各样的功能,如AI(模拟输入),AO模拟输出,DIO数字输入输出,TIMER计数器定时器。
3、程序结束时,释放设备,也就是释放设备号就可以了。(如:ReleaseCard(设备号))
学采集卡最好的资料就是采集卡的说明书,然后对照它的说明书运行它的例子。只要看懂一张采集卡就完全OK了,没多少内容的。
最好是学习的是多功能采集卡,(也就是卡上包括 AI AO DIO TIMER/COUNTER)
哦,如果你要程序的话,到数据采集卡的厂商上去下载一个程序安装包就可以了,安装完后会给你例子程序,建议还是看中文的吧,像北京阿尔泰,研祥的不知道是不是中文的。
3. CCD数据采集卡的编程
一般简单的应用比如只要看采集到的数据,可以直接用厂家提供的例程就可以,没有必要自己编程。
如果是工程项目上使用的话一般都是需要用厂家提供的动态库来做二次开发,这样才能达到实际的使用需求。
至于你说的那个测量车速程序的难易程度就要看实际需求了,如果单纯的采数据不处理是比较简单的。
4. 有没有好的采集卡推荐
你说的应该是模数转换卡,也就是AD卡。国内做的比较好的,北京阿尔泰科技的,现在做的产品都是出口的,公司做了20多年,产品精度采集频率多少的都有,你可以问下他们公司的客服人员,会给你选择,特别是他家的24位AD卡同步卡,可以直接采集IEPE压电振动加速度传感器(自带激励源),效果比进口的卡还好,价格也便宜。
5. 数据采集卡编程学习
一般会有提供案例程序,比如C语言的,直接调用端口的进行操作
如果是Vb,有可能是提供一些调用函数,要仔细卡看说明书,或者和厂家沟通
6. 求用matlab编程的NI的USB数据采集卡型号,采集通道数8~20吧。
MV-E8000 PCI-E 4路图像采集卡
MV-E8100 PCI-E 4路图像采集卡
MV-E8800 PCI-E 8路图像采集卡
MV-8002 2路工业高清图像采集卡
MV-8000 4路高清实时图像采集卡
MV-8800 8路高清实时图像采集卡
7. 数据采集卡 vc编程
我用的是USB的GPIB卡,PCI卡应该差不多,采集电压和电流要外接数字电表;根据电表提供的资料选择语言吧,不过一般都会提供vb和vc的库文件和头文件,vb比较容易学
8. 数据采集卡VB编程问题
struct{
成员表列
}变量名表列1,变量名表列2;
(变量名表列1,变量名表列2)这2个变量名怎么理解?
一个是声明一个结构体的原始用法,
一个是把结构体取了个别名。
例如
struct list{
int a;
char c;
stuct list *next;
};(注意这个分号不能少)
这个结构体的类型名是struct list ;struct只是声明结构体需要的关键字。 如果你要定义一个结构体变量 你就可以 :结构体类型 变量名
如:struct list student;
你是不是觉得写struct list 觉得很麻烦?
那你就可以把struct list起个别名;就是绰号
可以这样
struct list{
int a;
char c;
stuct list *next;
};
typedef struct list A;
那么你的A student; 就等同与 struct list student;
。
当然你也可以在声明一个结构体的时候给它起别名
typedef struct list{
int a;
char c;
struct list *next;
}A;
9. delphi 数据采集卡编程
你要修改程序,将所有与硬件交互有关的程序段用模拟程序来替换,并在采集数据部分人为模拟硬件部分返回一些数据,这些数据都是你准备好的,放在程序中或者文件中均可,看你自己的编程习惯了,最好是定义一个硬件是否存在的变量,有硬件就采用原程序段,如果是在笔记本上就改变这个变量,运行自己编制的模拟部分,采用自己的数据进行模拟。