※ 16位AD精度,250KS/s采样频率 ※
单端32路/差分16路模拟量输入 ※ AD缓存:16K字FIFO存储器 ※
AD量程:±10V,±5V(默认),±2.5V, 0~10V,0~5V ※
程控增益:1、2、4、8倍或1、2、5、10倍 或1、10、100、1000倍 ※
AD触发方式:多种模拟量、数字量触发方式 ※ 16路DI/DO ※ 1路32位定时/计数器
本店所有出售的宝贝均是我公司生产的产品,保质保量,并且都经过CE认证、军工 认证、ISO9000认证、FCC认证等。 软件支持: VC 、VB、C++Builder、Delphi、Labview 、LabWindows/CVI、组态软件等语言的 平台驱动 并免费提供开放式开发例程(DEMO)北京阿尔泰科技发展有限公司 联系人:郭工 联系方式:15833906900 在线QQ:2392405873
//#################### AD硬件参数PCI9622_PARA_AD定义 ##################### // 用于AD采样的实际硬件参数 #ifndef _PCI9622_PARA_AD typedef struct _PCI9622_PARA_AD { LONG ADMode; // AD模式选择(连续/分组方式) LONG FirstChannel; // 首通道[0,31] LONG LastChannel; // 末通道[0,31],要求末通道必须大于或等于首通道 LONG Frequency; // 采集频率,单位为Hz LONG InputRange; // 模拟量输入量程范围 LONG GroupInterval; // 分组时的组间间隔(单位:微秒)[1, 419430] LONG LoopsOfGroup; // 组内循环次数[1, 65535] LONG Gains; // 增益设置 LONG TriggerMode; // 触发模式选择 LONG TriggerSource; // 触发源选择 LONG TriggerType; // 触发类型选择(边沿触发/电平触发) LONG TrigLevelVolt; // 触发电平(0mV -- +10000mV) LONG TriggerDir; // 触发方向选择(正向/负向触发) LONG ClockSource; // 时钟源选择(内/外时钟源) LONG bClockOutput; // 允许时钟输出到CLKOUT,=TRUE:允许时钟输出, =FALSE:禁止时钟输出 LONG GroundingMode; // 接地方式(单端或双端选择) } PCI9622_PARA_AD, *PPCI9622_PARA_AD; #endif
// AD硬件参数PCI9622_PARA_AD中的ADMode所使用工作模式选项 const long PCI9622_ADMODE_SEQUENCE = 0x00; // 连续采样 const long PCI9622_ADMODE_GROUP = 0x01; // 分组采样
//*********************************************************** // AD硬件参数PCI9622_PARA_AD中的InputRange模拟量输入范围所使用的选项 const long PCI9622_INPUT_N10000_P10000mV= 0x00; // ±10000mV const long PCI9622_INPUT_N5000_P5000mV = 0x01; // ±5000mV const long PCI9622_INPUT_N2500_P2500mV = 0x02; // ±2500mV const long PCI9622_INPUT_0_P10000mV = 0x03; // 0~10000mV const long PCI9622_INPUT_0_P5000mV = 0x04; // 0~5000mV
//*********************************************************** // AD参数PCI9622_PARA_AD中的Gains使用的硬件增益选项 const long PCI9622_GAINS_1MULT = 0x00; // 1倍增益 const long PCI9622_GAINS_2MULT = 0x01; // 2倍增益 const long PCI9622_GAINS_5MULT = 0x02; // 4倍增益 const long PCI9622_GAINS_10MULT = 0x03; // 8倍增益
//*********************************************************** // AD硬件参数PCI9622_PARA_AD中的TriggerMode成员变量所使用触发模式选项 const long PCI9622_TRIGMODE_SOFT = 0x00; // 软件触发(属于内触发) const long PCI9622_TRIGMODE_POST = 0x01; // 硬件后触发(属于外触发)
//*********************************************************** // AD硬件参数PCI9622_PARA_AD中的TriggerSource成员变量所使用触发模式选项 const long PCI9622_TRIGSRC_ATR = 0x00; // ATR const long PCI9622_TRIGSRC_DTR = 0x01; // DTR
// AD硬件参数PCI9622_PARA_AD中的TriggerType触发类型所使用的选项 const long PCI9622_TRIGTYPE_EDGE = 0x00; // 边沿触发 const long PCI9622_TRIGTYPE_PULSE = 0x01; // 电平触发
//*********************************************************** // AD硬件参数PCI9622_PARA_AD中的TriggerDir触发方向所使用的选项 const long PCI9622_TRIGDIR_NEGATIVE = 0x00; // 负向触发(低电平/下降沿触发) const long PCI9622_TRIGDIR_POSITIVE = 0x01; // 正向触发(高电平/上升沿触发) const long PCI9622_TRIGDIR_POSIT_NEGAT = 0x02; // 正负向触发(高/低电平或上升/下降沿触发)
//*********************************************************** // AD硬件参数PCI9622_PARA_AD中的ClockSource时钟源所使用的选项 const long PCI9622_CLOCKSRC_IN = 0x00; // 内部时钟 const long PCI9622_CLOCKSRC_OUT = 0x01; // 外部时钟
// AD硬件参数PCI9622_PARA_AD中的bClockOutput成员变量所使用内部和外部时钟源选项 const long PCI9622_CLOCKOUT_DISABLE = 0x00; // 禁止本卡上的自带时钟向外输出 const long PCI9622_CLOCKOUT_ENABLE = 0x01; // 允许本卡上的自带时钟向外输出
//*********************************************************** // AD硬件参数PCI9622_PARA_AD中的GroundingMode使用的模拟信号接地方式选项 const long PCI9622_GNDMODE_SE = 0x00; // 单端方式(SE:Single end) const long PCI9622_GNDMODE_DI = 0x01; // 双端方式(DI:Differential)
//************************************************************************************* // 用于AD采样的实际硬件参数 #ifndef _PCI9622_STATUS_AD typedef struct _PCI9622_STATUS_AD { LONG bNotEmpty; // 板载FIFO存储器的非空标志,=TRUE非空, = FALSE 空 LONG bHalf; // 板载FIFO存储器的半满标志,=TRUE半满以上, = FALSE 半满以下 LONG bOverflow; // 板载FIFO存储器的溢出标志,= TRUE已发生溢出, = FALSE 未发生溢出 } PCI9622_STATUS_AD, *PPCI9622_STATUS_AD; #endif
//*********************************************************** // 用于计数器CNT的参数结构 // 硬件参数ControlMode控制字模式选项 const long PCI9622_GATEMODE_POSITIVE_0 = 0x00; // COUNTER:GATE高电平时计数,低电平时停止计数,计数时重新写入初值,按初值计数 // 计数结束产生中断:写入初值开始计数时OUT开始为0,当计数到0时OUT为1
const long PCI9622_GATEMODE_RISING_1 = 0x01; // COUNTER:GATE上边沿触发计数,计数中出现GATE上升沿重新装入初值计数 // 可编程单拍脉冲:当写入初值时OUT为1,当开始计数时OUT为0,当计数到0时OUT再次为1
const long PCI9622_GATEMODE_POSITIVE_2 = 0x02; // COUNTER:GATE高电平时计数,低电平时停止计数,计数时重新写入初值,按初值计数 // 频率发生器:计数期间OUT为1,计数到0后输出一个周期的0,并重新装入计数值计数
const long PCI9622_GATEMODE_POSITIVE_3 = 0x03; // COUNTER:GATE高电平时计数,低电平时停止计数,计数时重新写入初值,按初值计数 // 方波发生器:计数期间OUT为1,计数到0后输出一个周期的0,并重新装入计数值计数
const long PCI9622_GATEMODE_POSITIVE_4 = 0x04; // COUNTER:GATE高电平时计数,低电平时停止计数,计数时重新写入初值,按初值计数 // 软件触发选通:写入初值OUT为1, 计数结束OUT输出一个周期低电平信号
const long PCI9622_GATEMODE_RISING_5 = 0x05; // COUNTER:GATE上边沿触发计数,计数中出现GATE上升沿重新装入初值计数 // 硬件触发选通:写入初值OUT为1, 计数结束OUT输出一个周期低电平信号
// CreateFileObject所用的文件操作方式控制字(可通过或指令实现多种方式并操作) const long PCI9622_modeRead = 0x0000; // 只读文件方式 const long PCI9622_modeWrite = 0x0001; // 只写文件方式 const long PCI9622_modeReadWrite = 0x0002; // 既读又写文件方式 const long PCI9622_modeCreate = 0x1000; // 如果文件不存可以创建该文件,如果存在,则重建此文件,并清0 const long PCI9622_typeText = 0x4000; // 以文本方式操作文件
//*********************************************************** // 用户函数接口 #ifndef DEFINING #define DEVAPI __declspec(dllimport) #else #define DEVAPI __declspec(dllexport) #endif
#ifdef __cplusplus extern "C" { #endif //######################## 常规通用函数 ################################# // 适用于本设备的最基本操作 HANDLE DEVAPI FAR PASCAL PCI9622_CreateDevice(int DeviceID = 0); // 创建设备对象 int DEVAPI FAR PASCAL PCI9622_GetDeviceCount(HANDLE hDevice); // 取得设备总台数 BOOL DEVAPI FAR PASCAL PCI9622_GetDeviceCurrentID(HANDLE hDevice, PLONG DevicePhysID, PLONG DeviceLgcID); BOOL DEVAPI FAR PASCAL PCI9622_ListDeviceDlg(HANDLE hDevice); // 列表系统当中的所有的该PCI设备 BOOL DEVAPI FAR PASCAL PCI9622_ReleaseDevice(HANDLE hDevice); // 关闭设备,禁止传输,且释放资源
//####################### AD数据读取函数 ################################# // 适于大多数普通用户,这些接口最简单、最快捷、最可靠,让用户不必知道设备 // 低层复杂的硬件控制协议和繁多的软件控制编程,仅用下面的初始化设备和读取 // AD数据两个函数便能轻松高效地实现高速、连续的数据采集 // AD通用函数 BOOL DEVAPI FAR PASCAL PCI9622_ADCalibration( // 设备校准. HANDLE hDevice, // 设备对象 PPCI9622_PARA_AD pADPara); // 硬件参数, 它仅在此函数中决定硬件状态 BOOL DEVAPI FAR PASCAL PCI9622_InitDeviceProAD( // 初始化设备,当返回TRUE后,设备即准备就绪. HANDLE hDevice, // 设备对象 PPCI9622_PARA_AD pADPara); // 硬件参数, 它仅在此函数中决定硬件状态
BOOL DEVAPI FAR PASCAL PCI9622_StartDeviceProAD( // 在初始化之后,启动设备 HANDLE hDevice); // 设备对象句柄
BOOL DEVAPI FAR PASCAL PCI9622_GetDevStatusProAD( // 在AD采样过程中取得设备的各种状态,返回值表示函数是否成功 HANDLE hDevice, // 设备句柄 PPCI9622_STATUS_AD pADStatus); // AD的各种信息结构体 BOOL DEVAPI FAR PASCAL PCI9622_ReadDeviceProAD_Npt( // 当AD标志有效时,用此函数读取设备上的AD数据(程序方式) HANDLE hDevice, // 设备句柄 WORD ADBuffer[], // 接受原始AD数据的用户缓冲区 LONG nReadSizeWords, // 相对于偏位点后读入的数据长度(字) PLONG nRetSizeWords); // 返回实际读取的长度(字) BOOL DEVAPI FAR PASCAL PCI9622_ReadDeviceProAD_Half( // 当AD标志有效时,用此函数读取设备上的AD数据(程序方式) HANDLE hDevice, // 设备句柄 WORD ADBuffer[], // 接受原始AD数据的用户缓冲区 LONG nReadSizeWords, // 相对于偏位点后读入的数据长度(字) PLONG nRetSizeWords); // 返回实际读取的长度(字) BOOL DEVAPI FAR PASCAL PCI9622_StopDeviceProAD( // 在启动设备之后,暂停设备 HANDLE hDevice); // 设备对象句柄
BOOL DEVAPI FAR PASCAL PCI9622_ReleaseDeviceProAD( // 关闭AD设备,禁止传输,且释放资源 HANDLE hDevice); // 设备句柄 //##################### AD数据读取函数(中断方式)(上层用户函数) ########################### BOOL DEVAPI FAR PASCAL PCI9622_InitDeviceIntAD( // 初始化设备,当返回TRUE后,设备即准备就绪. HANDLE hDevice, // 设备对象,它由CreateDevice函数创建 HANDLE hEvent, // 中断事件句柄,它由CreateSystemEvent创建 ULONG nFifoHalfLength, // 相对于偏位点后读入的数据长度(必须小于FIFO半满长度) PPCI9622_PARA_AD pADPara); // 硬件参数, 它仅在此函数中决定硬件状态 BOOL DEVAPI FAR PASCAL PCI9622_StartDeviceIntAD( // 在初始化之后,启动设备 HANDLE hDevice); // 设备对象句柄,它由CreateDevice函数创建
BOOL DEVAPI FAR PASCAL PCI9622_ReadDeviceIntAD( // 当触发中断消息后开始读取中断数据 HANDLE hDevice, // 设备句柄 PWORD pADBuffer, // 将用于接受原始AD数据的用户缓冲区 LONG nReadSizeWords, // 读入的数据长度(字) PLONG nRetSizeWords); // 返回传输的实际长度(字)
BOOL DEVAPI FAR PASCAL PCI9622_StopDeviceIntAD( // 在启动设备之后,暂停设备 HANDLE hDevice); // 设备对象句柄,它由CreateDevice函数创建
BOOL DEVAPI FAR PASCAL PCI9622_ReleaseDeviceIntAD( // 关闭AD设备,禁止传输,且释放资源 HANDLE hDevice); // 设备对象句柄,它由CreateDevice函数创建
//################# AD的硬件参数操作函数 ######################## BOOL DEVAPI FAR PASCAL PCI9622_SaveParaAD(HANDLE hDevice, PPCI9622_PARA_AD pADPara); BOOL DEVAPI FAR PASCAL PCI9622_LoadParaAD(HANDLE hDevice, PPCI9622_PARA_AD pADPara);
//##################### 计数器控制函数 ########################## BOOL DEVAPI FAR PASCAL PCI9622_SetDeviceCNT( // 初始化计数器 HANDLE hDevice, // 设备句柄 ULONG ContrlMode, // 计数器控制模式 ULONG CNTVal); // 计数初值[0, 0xFFFFFFFF]
BOOL DEVAPI FAR PASCAL PCI9622_GetDeviceCNT( // 取得各路计数器的当前计数值 HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 PULONG pCNTVal); // 返回计数值[0, 0xFFFFFFFF]
//####################### 数字I/O输入输出函数 ################################# // 用户可以使用WriteRegisterULong和ReadRegisterULong等函数直接控制寄存器进行I/O // 输入输出,但使用下面两个函数更省事,它不需要您关心寄存器分配和位操作等,而只 // 需象VB等语言的属性操作那么简单地实现各开关量通道的控制。 BOOL DEVAPI FAR PASCAL PCI9622_SetDeviceDO( // 输出开关量状态 HANDLE hDevice, // 设备句柄 BYTE bDOSts[16]); // 开关状态
BOOL DEVAPI FAR PASCAL PCI9622_GetDeviceDI( // 取得开关量状态 HANDLE hDevice, // 设备句柄 BYTE bDISts[16]); // 开关状态
BOOL DEVAPI FAR PASCAL PCI9622_RetDeviceDO( // 回读开关量输出状态 HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 BYTE bDOSts[16]); // 获得开关输出状态(注意: 必须定义为8个字节元素的数组)
//################# 内存映射寄存器直接操作及读写函数 ######################## // 适用于用户对本设备更直接、更特殊、更低层、更复杂的控制。比如根据特殊的 // 控制对象需要特殊的控制流程和控制效率时,则用户可以使用这些接口予以实现。
BOOL DEVAPI FAR PASCAL PCI9622_GetDeviceAddr( // 取得指定的指定设备ID号的映射寄存器的线性基地址,返回设备总数 HANDLE hDevice, // 设备对象句柄 PULONG LinearAddr, // 返回指定映射寄存器的线性地址 PULONG PhysAddr, // 返回指定映射寄存器的物理地址 int RegisterID=0); // 设备映射寄存器的ID号(0-5) BOOL DEVAPI FAR PASCAL PCI9622_GetDeviceBar( // 取得指定的指定设备寄存器组BAR地址 HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 ULONG pulPCIBar[6]); // 返回PCI BAR所有地址,具体PCI BAR中有多少可用地址请看硬件说明书 BOOL DEVAPI FAR PASCAL PCI9622_GetDevVersion( // 获取设备固件及程序版本 HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 PULONG pulFmwVersion, // 固件版本 PULONG pulDriverVersion); // 驱动版本 BOOL DEVAPI FAR PASCAL PCI9622_WriteRegisterByte( // 往设备的映射寄存器空间指定端口写入单节字数据 HANDLE hDevice, // 设备对象 ULONG LinearAddr, // 指定映射寄存器的线性基地址 ULONG OffsetBytes, // 相对于基地址的偏移位置 BYTE Value); // 往指定地址写入单字节数据(其地址由线性基地址和偏移位置决定) BOOL DEVAPI FAR PASCAL PCI9622_WriteRegisterWord( // 写双字节数据(其余同上) HANDLE hDevice, ULONG LinearAddr, ULONG OffsetBytes, WORD Value); BOOL DEVAPI FAR PASCAL PCI9622_WriteRegisterULong( // 写四节字数据(其余同上) HANDLE hDevice, ULONG LinearAddr, ULONG OffsetBytes, ULONG Value); BYTE DEVAPI FAR PASCAL PCI9622_ReadRegisterByte( // 读入单字节数据(其余同上) HANDLE hDevice, ULONG LinearAddr, ULONG OffsetBytes); WORD DEVAPI FAR PASCAL PCI9622_ReadRegisterWord( // 读入双字节数据(其余同上) HANDLE hDevice, ULONG LinearAddr, ULONG OffsetBytes); ULONG DEVAPI FAR PASCAL PCI9622_ReadRegisterULong( // 读入四字节数据(其余同上) HANDLE hDevice, ULONG LinearAddr, ULONG OffsetBytes);
//################# I/O端口直接操作及读写函数 ######################## // 适用于用户对本设备更直接、更特殊、更低层、更复杂的控制。比如根据特殊的 // 控制对象需要特殊的控制流程和控制效率时,则用户可以使用这些接口予以实现。 // 但这些函数主要适用于传统设备,如ISA总线、并口、串口等设备,不能用于本PCI设备 BOOL DEVAPI FAR PASCAL PCI9622_WritePortByte( // 8位写端口 HANDLE hDevice, // 设备句柄(由CreateDevice创建) UINT nPort, // 端口地址 BYTE Value); // 写出的8位整型数据 BOOL DEVAPI FAR PASCAL PCI9622_WritePortWord(HANDLE hDevice, UINT nPort, WORD Value); BOOL DEVAPI FAR PASCAL PCI9622_WritePortULong(HANDLE hDevice, UINT nPort, ULONG Value);
BYTE DEVAPI FAR PASCAL PCI9622_ReadPortByte(HANDLE hDevice, UINT nPort); WORD DEVAPI FAR PASCAL PCI9622_ReadPortWord(HANDLE hDevice, UINT nPort); ULONG DEVAPI FAR PASCAL PCI9622_ReadPortULong(HANDLE hDevice, UINT nPort);
//######################### 文件操作函数 ############################## HANDLE DEVAPI FAR PASCAL PCI9622_CreateFileObject( // 初始文件系统 HANDLE hDevice, // 设备对象 LPCTSTR strFileName, // 新文件名 int Mode); // 文件操作方式 BOOL DEVAPI FAR PASCAL PCI9622_WriteFile( // 保存用户空间中数据 HANDLE hFileObject, // 设备对象 PVOID pDataBuffer, // 用户数据空间地址 LONG nWriteSizeBytes); // 缓冲区大小(字节)
BOOL DEVAPI FAR PASCAL PCI9622_ReadFile( // 读数据 HANDLE hFileObject, // 设备对象 PVOID pDataBuffer, // 接受文件数据的用户内存缓冲区 LONG nOffsetBytes, // 从文件前端开始的偏移位置 LONG nReadSizeBytes); // 从偏移位置开始读的字节数
BOOL DEVAPI FAR PASCAL PCI9622_SetFileOffset( // 设置文件偏移指针 HANDLE hFileObject, // 文件对象 LONG nOffsetBytes); // 文件偏移位置(以字为单位)
ULONG DEVAPI FAR PASCAL PCI9622_GetFileLength(HANDLE hFileObject); // 取得指定文件长度(字节)
BOOL DEVAPI FAR PASCAL PCI9622_ReleaseFile(HANDLE hFileObject); ULONGLONG DEVAPI FAR PASCAL PCI9622_GetDiskFreeBytes( // 获得指定盘符的磁盘空间(注意使用64位变量) LPCTSTR strDiskName); // 盘符名,如C盘为"C:\\", D盘为"D:\\"
//########################### 线程操作函数 ###################################### HANDLE DEVAPI FAR PASCAL PCI9622_CreateSystemEvent(void); // 创建内核事件对象,供InitDeviceInt和VB子线程等函数使用 BOOL DEVAPI FAR PASCAL PCI9622_ReleaseSystemEvent(HANDLE hEvent); // 释放内核事件对象 BOOL DEVAPI FAR PASCAL PCI9622_CreateVBThread(HANDLE* hThread, LPTHREAD_START_ROUTINE RoutineAddr); // 创建VB子线程 BOOL DEVAPI FAR PASCAL PCI9622_TerminateVBThread(HANDLE hThread); // 释放VB子线程
#ifdef __cplusplus } #endif
#ifndef _FIFO_LENGTH_ #define _FIFO_LENGTH_ //*********************************************************** // 各种FIFO存储器的长度(点) const long FIFO_IDT7202_LENGTH = 1024; const long FIFO_IDT7203_LENGTH = 2048; const long FIFO_IDT7204_LENGTH = 4096; const long FIFO_IDT7205_LENGTH = 8192; const long FIFO_IDT7206_LENGTH = 16384; const long FIFO_IDT7207_LENGTH = 32768;
#endif // _FIFO_LENGTH_
// 自动包含驱动函数导入库 #ifndef DEFINING #pragma comment(lib, "PCI9622.lib") #pragma message("======== Welcome to use our art company products!") #pragma message("======== Automatically linking with PCI9622.lib...") #pragma message("======== Successfully linked with PCI9622.dll") #endif
|