搜档网
当前位置:搜档网 › USB-4711A使用手册(简稿)

USB-4711A使用手册(简稿)

目录

1. 介绍 (2)

1.1 概述 (2)

1.2 I/O 接口 (2)

1.3 针脚定义 (2)

2. 研华设备驱动应用 (4)

3. 函数参考 (4)

3.1 USB系列函数支持列表 (4)

3.1.1Device 函数组 (4)

3.1.2 模拟量输入函数组 (4)

3.1.3 模拟量输出函数组 (4)

3.1.4 数字量输入/输出函数组 (5)

3.1.5Counter 函数组 (5)

4. 使用函数 (5)

4.1 设备函数组 (5)

4.1.1DRV_DeviceOpen (7)

4.1.2DRV_DeviceClose (7)

4.2 模拟量输入函数组 (7)

4.2.1DRV_AIConfig (8)

4.2.2DRV_AIV oltageIn (9)

4.3 模拟量输出函数组 (10)

4.3.1DRV_AOConfig (10)

4.3.2DRV_AOV oltageOut (12)

4.4 Counter 函数组 (12)

4.4.1DRV_CounterEventStart (13)

4.4.2DRV_CounterEventRead (14)

4.4.3DRV_CounterReset (15)

5. VC中使用研华设备驱动编程指南 (16)

5.1 添加必要文件 (18)

5.2 编写代码 (19)

5.3 测试程序 (20)

1. 介绍

1.1 概述

USB-4711A系列板卡是即插即用数据采集模块,它通过USB端口与计算机相连,为数据测量与系统控制提供了便利。USB-4711A通过USB端口获得所需电源,在该板卡上包含了所有的数据采集功能,如:16路AI,2路AO,8路DI,8路DO,1路32位计数器,其中A/D数据采集为12位。USB-4711A板卡如图1.1所示。

图1.1 USB-4711A板卡

1.2 I/O 接口

USB-4711A 配有插入式螺丝端子接口,因此连接模块时无需另外准备端子板或电缆。

1.3 针脚定义

图 1.2为USB-4711A 上五个10针I/O 接口的针脚定义。两个接地参考AGND 和DGND 的用途不同,其中AGND为模拟量的接地端,DGND为数字量的接地端,不要将两者进行连接。表1.1为I/O 接口信号的描述。

DO0

DO1

DO2

DO3

DGND

DO4

DO5

DO6

DO7

DGND

DI0

DI1

DI2

DI3

DGND

AI0

GATE DGND EXT

TRG DGND EVT

IN

P

Out AGND AO1AGND

DI4

DI5

DI6

DI7 DGND

AI1

AI2

AI3

AGND

AI4

AI5

AI6

AI7

AGND

AI8

AI9

AI10

AI11

AGND

AI12

AI13

AI14

AI15

AGND

AO0

USB

LED

8-TTL DO Port

8-TTL DI Port

16-SE/8-Diff AI External Control2-AO Port

图 1.2I/O 接口针脚定义

表 1.1I/O 接口信号描述

2. 研华设备驱动应用

研华Windows设备驱动是动态链接的。以下列出了开发应用时必需的文件:

3. 函数参考

3.1 USB系列函数支持列表

3.1.1Device 函数组

3.1.2 模拟量输入函数组

3.1.3 模拟量输出函数组

3.1.4 数字量输入/输出函数组

3.1.5Counter 函数组

4. 使用函数

函数描述

函数部分包括模拟量输入函数,模拟量输出函数,数字量输入函数,数字量输出函数等等。研华的每个函数都将以如下形式出现:

status = FUNCTION_Name (parameter 1, parameter 2,... , parameter n)(n>0),每个函数都会返回一个状态,表明函数执行成功还是失败(保存在status变量中)。

Status是一个4字节的整型变量,在DRIVER.H里被定义。

4.1 设备函数组

进行所有I/O 操作时,必须首先调用DRV_DeviceOpen,通过设备号(Device Number)打开设备得到设备句柄,以使用户访问该设备,然后调用一系列函数执行相应的功能。结束操作时,调用DRV_DeviceClose关闭设备,释放由DRV_DeviceOpen分配的资源,基本流程如图4.1所示。

图4.1 设备函数组应用流程

指定要进行I/O操作的设备,即要打开的设备的设备号。设备号在Advantech Device Manager(运行界面如图4.2)中初始化设备的时候分配。比如“000:Advantech DEMO I/O=1H”,这个设备的设备号就为000,用户可以直接在DRV_DeviceOpen函数中指定要打开的设备号,也可以通过调用DRV_SelectDevice 函数打开一个对话框选择需要的设备,从而取得相应的设备号。

图4.2 Advantech Device Manager运行界面

4.1.1DRV_DeviceOpen

DRV_DeviceOpen (ULONG DeviceNum,LONG * DriverHandle );

用途:

通过指定的设备号(DeviceNum)来打开一个已经安装的设备,返回设备句柄DriverHandle以备后续操作。与指定设备相关的所有操作都必须使用指向该设备的句柄,所以用户在使用与设备所分配资源相关的任何一项操作,如DIO、AO、AI等之前,必须先调用此函数。

参数:

4.1.2DRV_DeviceClose

DRV_DeviceClose ( LONG * DriverHandle );

用途:

关闭由设备句柄DriverHandle 指向的设备,释放为该设备分配的资源。所有与设备分配资源相关的操作,如:DIO、AO、AI等完成后需要关闭该设备,以释放由函数DRV_DeviceOpen 为该设备分配的资源。

参数:

4.2 模拟量输入函数组

软件方式:

该组函数通过软件命令触发数据转换。可以使用软件定时器来周期性地调用这些函数,对单通道或多通道周期性地进行采样。对于大块数据的连续高速采样,可以采用中断或DMA传输方式。

单通道采样:

DRV_AIConfig 函数为指定通道设置输入值范围。如果在运行期需要改变输入值范围,则需要再次调用DRV_AIConfig函数。DRV_AIV oltageIn函数读取输入通道当前电压值。设备驱动通过函数DRV_AIBinaryIn读取输入通道的当前二进制值,DRV_AIScale函数可以把它转化成电压值。

4.2.1DRV_AIConfig

DRV_AIConfig (LONG DriverHandle, LPT_AIConfig lpAIConfig );

用途:

在设备句柄DriverHandle 指向的设备上,通过设置GainCode来配置指定AI(Analog Input)通道(Channel)的电压输入范围。

参数:

在lpAIConfig指向的结构PT_AIConfig 中保存的参数包括:所要设置的通道(DasChan) 和GainCode (DasGain)。

函数DRV_AIConfig使用到的PT_AIConfig结构体:

Typedef struct tagPT_AIConfig

{

USHORT DasChan;

USHORT DasGain;

} PT_AIConfig,* LPT_AIConfig;

成员描述:

gain code列表

4.2.2DRV_AIVoltageIn

DRV_AIVoltageIn (LONG DriverHandle,LPT_AIVoltageIn lpAIVoltageIn ); 用途:

在设备句柄DriverHandle 指向的设备上,读取指定AI(Analog Input)通道的电压值。

参数:

此函数等同于依序调用DRV_AIBinaryIn 与DRV_AIScale。

在lpAIV oltageIn 指向的结构PT_AIV oltageIn 中保存的参数包括:采样通道(chan)、GainCode (gain)、触发模式(TrigMode) 和返回电压值(voltage)。

函数DRV_AIVoltageIn使用到的PT_AIVoltageIn 结构体:

typedef struct tagPT_AIV oltageIn

{

USHORT chan;

USHORT gain;

USHORT TrigMode;

FLOAT *voltage;

} PT_AIVoltageIn,* LPT_AIV oltageIn;

成员描述:

4.3 模拟量输出函数组

该组函数实现模拟量输出的功能。采样方式分为单通道,多通道同步输出,及DMA方式的波形输出等。

软件方式:单通道单次转换

DRV_AOV oltageOut函数用于电压输出:

DRV_AOV oltageOut 函数接收到一个浮点电压值,并把它转化成二进制数写入模拟量输出通道来改变电压输出值。电压输出范围取决于Advantech Device Manager 中DA参考电压的设置。在运行态可以调用DRV_AOConfig 函数改变电压范围的设置。

设备驱动也提供了二进制数据输出函数DRV_AOBinaryOut,函数接收到二进制数值并把它写入模拟量输出通道。先通过DRV_AOScale 函数可以把想得到的模拟量输出值转换成二进制数,再通过函数DRV_AOBinaryOut 输出。

4.3.1DRV_AOConfig

DRV_AOConfig( LONG DriverHandle,LPT_AOConfig lpAOConfig );

用途:

在设备句柄DriverHandle 指向的设备上,改变所指定AO(Analog Output)

通道的输出范围默认配置(未调用本函数前,AO通道的输出范围默认的是用户在研华设备管理器Advantech Device Manager 中的设置数据,这个数据保存在注册表Registry中)。本函数改变的配置数据只是执行时的暂存信息,保存在注册表的配置数据并没有被改变。

参数:

在lpAOConfig 指向的结构(PT_AOConfig) 中保存的参数包括指定通道(chan),指定参考源(RefSrc),参考电压上限(MaxValue)和参考电压下限(MinValue)。

函数DRV_AOConfig使用到的PT_AOConfig 结构体:

typedef struct tagPT_AOConfig

{

USHORT chan;

USHORT RefSrc;

FLOAT MaxValue;

FLOAT MinValue;

} PT_AOConfig,* LPT_AOConfig;

成员描述:

4.3.2DRV_AOVoltageOut

DRV_AOV oltageOut(LONG DriverHandle, LPT_AOV oltageOut lpAOVoltageOut ); 用途:

在设备句柄DriverHandle 指向的设备上,以设置浮点型的电压值,来改变指定AO (Analog Output) 通道的输出状态。

参数:

此函数等同于依序调用DRV_AOScale 与DRV_AOBinaryOut。

在lpAOV oltageOut 指向的结构PT_AOV oltageOut 中保存的参数包括:指定的AO通道(chan)和所要设置的浮点型电压值(outputValue)。

函数DRV_AOVoltageOut使用到的PT_AOVoltageOut结构体:typedef struct tagPT_AOV oltageOut

{

USHORT chan;

FLOAT OutputValue;

} PT_AOVoltageOut,* LPT_AOV oltageOut;

成员描述:

4.4 Counter 函数组

Counter 函数组包含三种操作方式:事件计数,脉冲输出和频率测量。

中断方式的Counter和Q Counter(PCL-833)都属于事件计数组。

事件计数函数

普通Counter (Intel 8254 或AMD 9513A):

DRV_CounterEventStart启动counter操作。当counter开始计数时,可以反复调用DRV_CounterEventRead函数读取计数值。操作完成后可以调用函数DRV_CounterReset停止计数。

4.4.1DRV_CounterEventStart

DRV_CounterEventStart ( LONG DriverHandle,LPT_CounterEvenStart lpCounterEventStart ); 用途:

在设备句柄DriverHandle 指向的设备上,将指定的计数器配置为事件计数并启动该操作。启动后,可调用函数DRV_CounterEventRead 读取计数值与状态。参数:

在lpCounterEventStart 指向的PT_CounterEventStart 结构中,保存的参数包括:目标计数器通道号(counter)和门控模式(GateMode)。

函数DRV_CounterEventStart使用到的PT_CounterEventStart结构体:typedef struct tagPT_CounterEventStart

{

USHORT counter;

USHORT GateMode;

} PT_CounterEventStart,* LPT_CounterEventStart;

成员描述:

4.4.2DRV_CounterEventRead

DRV_CounterEventRead ( LONG DriverHandle,LPT_CounterEventRead lpCounterEventRead ); 用途:

在设备句柄DriverHandle 指向的设备上,读取指定计数器的当前计数值和

溢出状态标志。此操作将不影响计数器的持续工作。

参数:

在lpCounterEventRead 指向的PT_CounterEventRead 结构中,保存的参数

包括:目标计数器通道号(counter),读回的溢出标志(overflow),以及读回的

当前计数值(count)。

函数DRV_CounterEventRead使用到的PT_CounterEventRead结构体:typedef struct tagPT_CounterEventRead

{

USHORT counter;

USHORT *overflow;

ULONG *count;

} PT_CounterEventRead,* LPT_CounterEventRead;

成员描述:

4.4.3DRV_CounterReset

DRV_CounterReset ( LONG DriverHandle,LPARAM counter );

用途:

在设备句柄DriverHandle 指向的设备上,重置计数器以停止当前的操作。本函数适用于所有与计数器相关的函数(包括:DRV_CountEventStart,DRV_CounterFreqStart,DRV_QCounterStart,DRV_CounterPulseStart,DRV_CounterPWMEnable,DRV_TimerCounterSetting 等等),但不包括DRV_FreqOutStart 函数。

参数:

5. VC中使用研华设备驱动编程指南

研华Windows设备驱动是动态链接的。VC开发应用时必需的文件:

因此开发应用程序时,要进行必要的配置包含上述路径,以Microsoft Visual C++ 6.0为例,说明配置工作。

⑴打开Microsoft Visual C++ 6.0,从主菜单栏中选择“工具→选项”。

⑵选择“目录”选项卡,选择目录“Include files”,点击图标,新建路径“安装路径\ADSAPI\Include”。

⑶选择目录“Library files”,选择目录“Include files”,点击图标,新建路径“安装路径\ADSAPI\Lib”。

配置完成。

以设备打开和关闭操作为例,说明开发应用程序的基本步骤。

(一)创建一个新的控制台工程

依照以下步骤创建VC++工程:

⑴从主菜单栏中选择“文件→新建”。

⑵定义新工程类型为“Win32 Console Application”,并指定一个工程文件路径,输入工程名称,本例工程名称为“test”。

⑶定义控制台程序类型为“一个空工程”

5.1 添加必要文件

为使用研华设备驱动开发应用程序,首先要添加必要的文件。

⑴添加研华设备驱动中的Include头文件(Driver.h)。从主菜单栏中选择“工程→添加到工程→文件”,文件在“安装路径\ADSAPI\Include\DRIVER.H”。

⑵同样方法添加adsapi32.lib,使应用程序目标文件和设备驱动库链接起来,文件在“安装路径\ADSAPI\Lib\Adsapi32.lib”。

5.2 编写代码

⑴从主菜单栏中选择“文件→新建”。

⑵选择文件“C++ Source File”,勾选添加到工程,输入文件名,本例文件名称为“test”。

在空的test.cpp源文件中编写代码:

#include

#include

#include "driver.h"

void main()

{

DWORD dwErrCde;

ULONG lDevNum;

long lDriverHandle;

lDevNum=0;

dwErrCde = DRV_DeviceOpen( lDevNum,&lDriverHandle);

if ( dwErrCde != SUCCESS )

{

printf("设备打开错误!\n");

return ;

}

else

{

printf("设备打开成功!\n");

printf("设备句柄:%ld\n",lDriverHandle);

}

dwErrCde = DRV_DeviceClose( &lDriverHandle );

if ( dwErrCde != SUCCESS )

{

printf("设备关闭错误!\n");

return ;

}

else

{

printf("设备关闭成功!\n");

}

}

5.3 测试程序

点击编译,无错误后,点击运行程序,结果如下

相关主题