⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb2814.h

📁 基于VC的AD数据采集和转换
💻 H
字号:
#ifndef _USB2814_DEVICE_
#define _USB2814_DEVICE_

#include<windows.h>
//***********************************************************
// 用于AD采集的参数结构
typedef struct _USB2814_PARA_AD
{
	LONG CheckStsMode;		// 检查状态模式
	LONG ADMode;            // AD模式选择(连续采集/分组采集)
	LONG FirstChannel;      // 首通道,取值范围为[0, 31]
	LONG LastChannel;		// 末通道,取值范围为[0, 31]
	LONG Frequency;         // 采集频率,单位为Hz,取值范围为[31, 250000]
	LONG GroupInterval;     // 分组采样时的组间间隔(单位:微秒),取值范围为[1, 32767]
	LONG LoopsOfGroup;		// 分组采样时,每组循环次数,取值范围为[1, 255]
	LONG Gains;				// 增益控制字
	LONG TriggerMode;       // 触发模式选择(软件触发、后触发)
	LONG TriggerType;		// 触发类型选择(边沿触发/脉冲触发)
	LONG TriggerDir;		// 触发方向选择(正向/负向触发)
	LONG ClockSource;		// 时钟源选择(内/外时钟源)
	LONG bClockOutput;      // 是否允许本地AD转换时钟输出,=TRUE:允许输出到CN1上的CLKOUT,=FALSE:禁止输出到CN1上的CLKOUT
} USB2814_PARA_AD, *PUSB2814_PARA_AD;

// AD硬件参数USB2814_PARA_AD中的CheckStsMode检查状态的模式所使用的选项
const long USB2814_CHKSTSMODE_HALF		= 0x00; // 查询FIFO半满标志(建议高频率采集时使用)
const long USB2814_CHKSTSMODE_NPT		= 0x01; // 查询FIFO非空标志(建议高实时采集时使用)

// AD硬件参数USB2814_PARA_AD中的ADMode工作模式所使用的选项
const long USB2814_ADMODE_SEQUENCE		= 0x00; // 连续采样
const long USB2814_ADMODE_GROUP			= 0x01; // 分组采样

//***********************************************************
// AD参数USB2814_PARA_AD中的Gains使用的硬件增益选项
const long USB2814_GAINS_1MULT			= 0x00; // 1倍增益(使用PGA202或PGA203放大器)
const long USB2814_GAINS_10MULT			= 0x01; // 10倍增益(使用PGA202放大器)
const long USB2814_GAINS_100MULT		= 0x02; // 100倍增益(使用PGA202放大器)
const long USB2814_GAINS_1000MULT		= 0x03; // 1000倍增益(使用PGA202放大器)
const long USB2814_GAINS_2MULT			= 0x01; // 2倍增益(使用PGA203放大器)
const long USB2814_GAINS_4MULT			= 0x02; // 4倍增益(使用PGA203放大器)
const long USB2814_GAINS_8MULT			= 0x03; // 8倍增益(使用PGA203放大器)

//***********************************************************
// AD硬件参数USB2814_PARA_AD中的TriggerMode成员变量所使用AD触发模式选项
const long USB2814_TRIGMODE_SOFT		= 0x00; // 软件触发(属于内触发)
const long USB2814_TRIGMODE_POST		= 0x01; // 硬件后触发(属于外触发)

// AD硬件参数USB2814_PARA_AD中的TriggerType触发类型所使用的选项
const long USB2814_TRIGTYPE_EDGE		= 0x00; // 边沿触发
const long USB2814_TRIGTYPE_PULSE		= 0x01; // 脉冲触发(电平类型)

//***********************************************************
// AD硬件参数USB2814_PARA_AD中的TriggerDir触发方向所使用的选项
const long USB2814_TRIGDIR_NEGATIVE		= 0x00; // 负向触发(低脉冲/下降沿触发)
const long USB2814_TRIGDIR_POSITIVE		= 0x01; // 正向触发(高脉冲/上升沿触发)
const long USB2814_TRIGDIR_POSIT_NEGAT	= 0x02; // 正负向触发(高/低脉冲或上升/下降沿触发)

//***********************************************************
// AD硬件参数USB2814_PARA_AD中的ClockSource时钟源所使用的选项
const long USB2814_CLOCKSRC_IN			= 0x00; // 内部时钟定时触发
const long USB2814_CLOCKSRC_OUT			= 0x01; // 外部时钟定时触发(使用CN1上的CLKIN信号输入)

//***********************************************************
// 8253/8254计数器控制字
typedef struct _USB2814_PARA_CNT      // 计数器控制字
{
	BYTE OperateType;  // 操作类型
	BYTE CountMode;    // 计数方式
	BYTE CountType;    // 计数类型
} USB2814_PARA_CNT, *PUSB2814_PARA_CNT;

// USB2814_PARA_CNT参数结构体各成员使用的选项
// 操作类型(OperateType)
const long USB2814_OPT_TYPE_0			= 0x00; // 计数器锁存操作
const long USB2814_OPT_TYPE_1			= 0x01;	// 只读/写低字节
const long USB2814_OPT_TYPE_2			= 0x02; // 只读/写高字节
const long USB2814_OPT_TYPE_3			= 0x03; // 先读/写低字节,后读/写高字节
// 计数方式(CountMode)
const long USB2814_CNT_MODE_0			= 0x00; // 计数方式0,计数器结束中断方式
const long USB2814_CNT_MODE_1			= 0x01; // 计数方式1,可编程单次脉冲方式
const long USB2814_CNT_MODE_2			= 0x02; // 计数方式2,频率发生器方式
const long USB2814_CNT_MODE_3			= 0x03; // 计数方式3,方波频率发生器方式
const long USB2814_CNT_MODE_4			= 0x04; // 计数方式4,软件触发选通方式
const long USB2814_CNT_MODE_5			= 0x05; // 计数方式5,硬件触发选通方式
// 计数类型(CountType)
const long USB2814_CNT_TYPE_BIN			= 0x00;  // 计数类型0,二进制计数
const long USB2814_CNT_TYPE_BCD			= 0x01;  // 计数类型1,BCD码计数

//***********************************************************
// CreateFileObject中的Mode参数使用的文件操作方式控制字(可通过或指令实现多种方式并操作)
const long	USB2814_modeRead			= 0x0000;   // 只读文件方式
const long  USB2814_modeWrite			= 0x0001;   // 只写文件方式
const long 	USB2814_modeReadWrite		= 0x0002;   // 既读又写文件方式
const long  USB2814_modeCreate			= 0x1000;   // 如果文件不存可以创建该文件,如果存在,则重建此文件,并清0

//***********************************************************
// 驱动函数接口
#ifndef _USB2814_DRIVER_
#define DEVAPI __declspec(dllimport)
#else
#define DEVAPI __declspec(dllexport)
#endif

#ifdef __cplusplus
extern "C" {
#endif
	//######################## 常规通用函数 #################################
    HANDLE DEVAPI FAR PASCAL USB2814_CreateDevice(int DeviceLgcID = 0); // 创建设备对象(该函数使用系统内逻辑设备ID)
    HANDLE DEVAPI FAR PASCAL USB2814_CreateDeviceEx(int DevicePhysID = 0); // 创建设备对象(该函数使用板上物理ID,由拔码开关DID1实现)
	int DEVAPI FAR PASCAL USB2814_GetDeviceCount(HANDLE hDevice);      // 取得USB2814在系统中的设备数量
	BOOL DEVAPI FAR PASCAL USB2814_GetDeviceCurrentID(HANDLE hDevice, PLONG DeviceLgcID, PLONG DevicePhysID); // 取得当前设备的逻辑ID号和物理ID号
	BOOL DEVAPI FAR PASCAL USB2814_ListDeviceDlg(void); // 用对话框列表系统当中的所有USB2814设备
	BOOL DEVAPI FAR PASCAL USB2814_ResetDevice(HANDLE hDevice);		 // 复位整个USB设备
    BOOL DEVAPI FAR PASCAL USB2814_ReleaseDevice(HANDLE hDevice);    // 设备句柄

	//####################### AD数据读取函数 #################################
    BOOL DEVAPI FAR PASCAL USB2814_InitDeviceAD(				// 初始化设备,当返回TRUE后,设备即刻开始传输.
									HANDLE hDevice,				// 设备句柄,它应由CreateDevice函数创建
									PUSB2814_PARA_AD pADPara);  // 硬件参数, 它仅在此函数中决定硬件状态							

    BOOL DEVAPI FAR PASCAL USB2814_ReadDeviceAD(				// 初始化设备后,即可用此函数读取设备上的AD数据
									HANDLE hDevice,				// 设备句柄,它应由CreateDevice函数创建
									USHORT ADBuffer[],			// 将用于接受数据的用户缓冲区
									LONG nReadSizeWords,		// 读取AD数据的长度(字)  
									PLONG nRetSizeWords = NULL);// 实际返回数据的长度(字)

    BOOL DEVAPI FAR PASCAL USB2814_ReleaseDeviceAD( HANDLE hDevice); // 停止AD采集,释放AD对象所占资源

   	//################# AD的硬件参数操作函数 ########################	
	BOOL DEVAPI FAR PASCAL USB2814_SaveParaAD(HANDLE hDevice, PUSB2814_PARA_AD pADPara);  
    BOOL DEVAPI FAR PASCAL USB2814_LoadParaAD(HANDLE hDevice, PUSB2814_PARA_AD pADPara);
    BOOL DEVAPI FAR PASCAL USB2814_ResetParaAD(HANDLE hDevice, PUSB2814_PARA_AD pADPara); // 将AD采样参数恢复至出厂默认值

   	//##################### DA输出操作函数 ##########################
    BOOL DEVAPI FAR PASCAL USB2814_WriteDeviceDA(				// 输出DA原始数据到CN1上的VOUT0上
									HANDLE hDevice,				// 设备句柄,它应由CreateDevice函数创建
									WORD nDAData);				// DA的原始码数据,取值范围为[0, 65535]

   	//##################### 计数器控制函数 ##########################
    DEVAPI BOOL FAR PASCAL USB2814_InitDeviceCNT(				// 初始化各路计数器
									HANDLE hDevice,				// 设备句柄
									PUSB2814_PARA_CNT pCNTPara, // 计数器控制字
									int InitVal,				// 16位计数初值
									int nChannel);				// 计数器通道号(0-2)

    DEVAPI BOOL FAR PASCAL USB2814_GetDeviceCNT(				// 取得所有计数器的状态信息
									HANDLE hDevice,				// 设备句柄
									LONG CNTValue[3]);			// 所有计数器的状态信息

	//####################### 数字I/O输入输出函数 #################################
	BOOL DEVAPI FAR PASCAL USB2814_GetDeviceDI(					// 取得开关量状态     
									HANDLE hDevice,				// 设备句柄,它应由CreateDevice函数创建								        
									BYTE bDISts[8]);			// 开关输入状态(注意: 必须定义为8个字节元素的数组)

    BOOL DEVAPI FAR PASCAL USB2814_SetDeviceDO(					// 输出开关量状态
									HANDLE hDevice,				// 设备句柄,它应由CreateDevice函数创建								        
									BYTE bDOSts[8]);			// 开关输出状态(注意: 必须定义为8个字节元素的数组)

   	//########################## 文件操作函数 ####################################
    HANDLE DEVAPI FAR PASCAL USB2814_CreateFileObject(			// 创建文件对象
									HANDLE hDevice,				// 设备句柄,它应由CreateDevice函数创建
									LPCTSTR strFileName,		// 路径及文件名
									int Mode);					// 文件操作方式

    BOOL DEVAPI FAR PASCAL USB2814_WriteFile(					// 保存用户空间中数据到磁盘文件
									HANDLE hFileObject,			// 文件句柄,它应由CreateFileObject函数创建
									PVOID pDataBuffer,			// 用户数据空间地址
									LONG nWriteSizeBytes);		// 缓冲区大小(字节)

    BOOL DEVAPI FAR PASCAL USB2814_ReadFile(					// 从磁盘文件中读取数据到用户空间
									HANDLE hFileObject,			// 文件句柄,它应由CreateFileObject函数创建
									PVOID pDataBuffer,			// 接受文件数据的用户内存缓冲区
									LONG OffsetBytes,			// 从文件前端开始的偏移位置
									LONG nReadSizeBytes);		// 从偏移位置开始读的字节数

	BOOL DEVAPI FAR PASCAL USB2814_SetFileOffset(				// 设置文件偏移指针
									HANDLE hFileObject,			// 文件句柄,它应由CreateFileObject函数创建
									LONG nOffsetBytes);			// 文件偏移位置(以字为单位)  

	DEVAPI ULONG FAR PASCAL USB2814_GetFileLength(HANDLE hFileObject); // 取得指定文件长度(字节)

    BOOL DEVAPI FAR PASCAL USB2814_ReleaseFile(HANDLE hFileObject);
    LONGLONG DEVAPI FAR PASCAL USB2814_GetDiskFreeBytes(		// 获得指定盘符的磁盘空间(注意使用64位变量)
								   LPCTSTR strDiskName);		// 盘符名,如C盘为"C:\\", D盘为"D:\\"

	//############################ 线程操作函数 ################################
	DEVAPI HANDLE FAR PASCAL USB2814_CreateSystemEvent(void); 	// 创建内核系统事件对象
	BOOL DEVAPI FAR PASCAL USB2814_ReleaseSystemEvent(HANDLE hEvent); // 释放内核事件对象
	BOOL DEVAPI FAR PASCAL USB2814_CreateVBThread(HANDLE* hThread, LPTHREAD_START_ROUTINE StartThread);
	BOOL DEVAPI FAR PASCAL USB2814_TerminateVBThread(HANDLE hThreadHandle);

	//################# 其他附加函数 ########################
	BOOL DEVAPI FAR PASCAL USB2814_GetAppPath(LPCTSTR strAppPath, LONG PathSizeBytes); // 取得产品应用程序的安装路径
	BOOL DEVAPI FAR PASCAL USB2814_kbhit(void); // 探测用户是否有击键动作(在控制台应用程序Console中且在非VC语言中)
	char DEVAPI FAR PASCAL USB2814_getch(void); // 等待并获取用户击键值(在控制台应用程序Console中有效)

	BOOL DEVAPI FAR PASCAL USB2814_SaveParaInt(HANDLE hDevice, LPCTSTR strParaName, int nValue); // 将整型数据保存到注册表中(Device-x\Others)
	UINT DEVAPI FAR PASCAL USB2814_LoadParaInt(HANDLE hDevice, LPCTSTR strParaName, int nDefaultVal); // 将整型数据从注册表中回读出来(Device-x\Others)
	BOOL DEVAPI FAR PASCAL USB2814_SaveParaString(HANDLE hDevice, LPCTSTR strParaName, LPCTSTR strParaVal); // 将字符串数据保存到注册表中(Device-x\Others)
	BOOL DEVAPI FAR PASCAL USB2814_LoadParaString(HANDLE hDevice, LPCTSTR strParaName, LPCTSTR strParaVal, LPCTSTR strDefaultVal); // 将字符串数据从注册表中回读出来(Device-x\Others)

 	DWORD DEVAPI FAR PASCAL USB2814_GetLastErrorEx(LPCTSTR strFuncName, LPCTSTR strErrorMsg);

#ifdef __cplusplus
}
#endif

//#################### 辅助常量 #####################

const long USB2814_MAX_AD_CHANNELS = 32;
//***********************************************************
// 本卡AD模拟量输入所具有的量程
const long USB2814_INPUT_N10000_P10000mV	= 0x00; // ±10000mV
const long USB2814_INPUT_N5000_P5000mV		= 0x01; // ±5000mV
const long USB2814_INPUT_N2500_P2500mV		= 0x02; // ±2500mV
const long USB2814_INPUT_0_P10000mV			= 0x03; // 0~10000mV
const long USB2814_INPUT_0_P5000mV			= 0x04; // 0~5000mV

//***********************************************************
// 本卡DA模拟量输出所具有的量程
const long USB2814_OUTPUT_0_P5000mV			= 0x00; // 0~5000mV
const long USB2814_OUTPUT_0_P10000mV		= 0x01; // 0~10000mV
const long USB2814_OUTPUT_N5000_P5000mV		= 0x02; // ±5000mV
const long USB2814_OUTPUT_N10000_P10000mV	= 0x03; // ±10000mV

#ifndef _USB2814_FIFO_LENGTH_
#define _USB2814_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; // _USB2814_FIFO_LENGTH_

// 自动包含驱动函数导入库
#ifndef _USB2814_DRIVER_
	#pragma comment(lib, "USB2814.lib")
	#pragma message("======== Welcome to use our art company product!")
	#pragma message("======== Automatically linking with USB2814.dll...")
	#pragma message("======== Successfully linked with USB2814.dll")
#endif

#endif; // _USB2814_DEVICE_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -