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

📄 pci8613.h

📁 板卡的DA转换C语言程序。适合于阿尔泰的PCI卡。用板卡的参考
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _PCI8613_DEVICE_
#define _PCI8613_DEVICE_
//***********************************************************
// 用于AD采样的实际硬件参数
typedef struct _PCI8613_PARA_AD     
{
	LONG ADMode;            // AD模式选择(连续/分组方式)
	LONG FirstChannel;      // 首通道[0,15]
	LONG LastChannel;       // 末通道[0,15],要求末通道必须大于或等于首通道
	LONG Frequency;         // 采集频率,单位为Hz, [1, 100000]
	LONG GroupInterval;     // 分组时的组间间隔(单位:微秒)[1, 419430]
	LONG LoopsOfGroup;	    // 组内循环次数[1, 255]
	LONG Gains;				// 增益设置
	LONG InputRange;		// 模拟量输入量程范围
	LONG TriggerMode;       // 触发模式选择
	LONG TriggerSource;		// 触发源选择
	LONG TriggerType;		// 触发类型选择(边沿触发/脉冲触发)
	LONG TriggerDir;		// 触发方向选择(正向/负向触发)
	LONG TrigWindow;		// 触发灵敏窗[1, 65535], 单位25纳秒
	LONG ClockSource;		// 时钟源选择(内/外时钟源)
	LONG bClockOutput;      // 允许时钟输出到CLKOUT,=TRUE:允许时钟输出, =FALSE:禁止时钟输出
	LONG GroundingMode;		// 接地方式(单端或双端选择)
} PCI8613_PARA_AD, *PPCI8613_PARA_AD;

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

//***********************************************************
// AD硬件参数PCI8613_PARA_AD中的InputRange模拟量输入范围所使用的选项
const long PCI8613_INPUT_N10000_P10000mV= 0x00; // ±10000mV
const long PCI8613_INPUT_N5000_P5000mV	= 0x01; // ±5000mV
const long PCI8613_INPUT_0_P10000mV		= 0x02; // 0~10000mV

//***********************************************************
// AD参数PCI8613_PARA_AD中的Gains使用的硬件增益选项
const long PCI8613_GAINS_1MULT			= 0x00; // 1倍增益(使用AD8251放大器)
const long PCI8613_GAINS_2MULT			= 0x01; // 2倍增益(使用AD8251放大器)
const long PCI8613_GAINS_4MULT			= 0x02; // 4倍增益(使用AD8251放大器)
const long PCI8613_GAINS_8MULT			= 0x03; // 8倍增益(使用AD8251放大器)

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

//***********************************************************
// AD硬件参数PCI8613_PARA_AD中的TriggerSource触发源信号所使用的选项
const long PCI8613_TRIGSRC_DTR			= 0x00; // 选择外部DTR作为触发源
const long PCI8613_TRIGSRC_ATR			= 0x01; // 选择外部ATR作为触发源

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

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

//***********************************************************
// AD硬件参数PCI8613_PARA_AD中的ClockSource时钟源所使用的选项
const long PCI8613_CLOCKSRC_IN			= 0x00; // 内部时钟
const long PCI8613_CLOCKSRC_OUT			= 0x01; // 外部时钟(CLKIN)

// AD硬件参数PCI8613_PARA_AD中的bClockOutput成员变量所使用内部和外部时钟源选项
const long PCI8613_CLOCKOUT_DISABLE		= 0x00; // 禁止本卡上的自带时钟向外输出
const long PCI8613_CLOCKOUT_ENABLE		= 0x01; // 允许本卡上的自带时钟向外输出

//***********************************************************
// AD参数(PCI8613_PARA_AD)中的GroundingMode使用的模拟信号接地方式选项
const long PCI8613_GNDMODE_SE			= 0x00;	// 单端方式(SE:Single end)
const long PCI8613_GNDMODE_DI			= 0x01;	// 双端方式(DI:Differential)

//*************************************************************************************
// 用于AD采样的实际硬件参数
typedef struct _PCI8613_STATUS_AD     
{
	LONG bNotEmpty;			// 板载FIFO存储器的非空标志,=TRUE非空, = FALSE 空
	LONG bHalf;				// 板载FIFO存储器的半满标志,=TRUE半满以上, = FALSE 半满以下
	LONG bDynamic_Overflow; // 板载FIFO存储器的动态溢出标志,= TRUE已发生溢出, = FALSE 未发生溢出
	LONG bStatic_Overflow;  // 板载FIFO存储器的静态溢出标志,= TRUE已发生溢出, = FALSE 未发生溢出
	LONG bTriggerFlag;		// 触发标志, =TRUE表示触发事件发生, =FALSE表示触发事件未发生
} PCI8613_STATUS_AD, *PPCI8613_STATUS_AD;

const int PCI8613_MAX_SEGMENT_COUNT = 64;
typedef struct _PCI8613_STATUS_DMA     
{
	LONG iCurSegmentID;								// 当前段缓冲ID,表示DMA正在传输的缓冲区段
	LONG bSegmentSts[PCI8613_MAX_SEGMENT_COUNT];	// 各个缓冲区的新旧状态,=1表示该相应缓冲区数据为新,否则为旧
	LONG bBufferOverflow;							// 返回溢出状态
} PCI8613_STATUS_DMA, *PPCI8613_STATUS_DMA;

//***********************************************************
// DA输出函数InitDeviceDA的模拟量输出范围参数OutputRange所使用的选项
const long PCI8613_OUTPUT_0_P5000mV			= 0x00;		// 0~5000mV
const long PCI8613_OUTPUT_0_P10000mV		= 0x01;		// 0~10000mV
const long PCI8613_OUTPUT_N5000_P5000mV		= 0x02;		// ±5000mV
const long PCI8613_OUTPUT_N10000_P10000mV	= 0x03;		// ±10000mV

// DA输出函数PCI8613_DAReset的复位ResetMode所使用的选项
const long PCI8613_RESET_LEAST				= 0x00;		// 复位至最小值
const long PCI8613_RESET_MIDDLE				= 0x01;		// 复位至中间值

//***********************************************************
// 用于计数器的参数结构
typedef struct _PCI8613_PARA_CNT
{
	ULONG ControlMode;		// 计数器工作模式[0—5]
	ULONG AddDecMode;		// 计数器加减模式:加计数或减计数[0:减计数,1:加计数]
	ULONG CNTVal;			// 计数器值
} PCI8613_PARA_CNT, *PPCI8613_PARA_CNT;

// CNT控制函数PCI8613_InitDeviceCNT硬件参数ControlMode控制字模式选项
const long PCI8613_GATEMODE_POSITIVE_0	= 0x00;		// COUNTER:GATE高电平时计数,低电平时停止计数,计数时重新写入新的初值,按新值计数
													// 减法计数时,计数到0时OUT为1;加法计数时,计数到4294967295时OUT变为1
													// 计数结束产生中断

const long PCI8613_GATEMODE_RISING_1	= 0x01;		// COUNTER:GATE上边沿触发计数,计数中出现GATE上升沿重新装入初值计数
													// 可编程单拍脉冲:当写入初值时OUT为1,当开始计数时OUT为0
													// 减法计数时,计数到0时OUT为1;加法计数时,计数到4294967295时OUT变为1

const long PCI8613_GATEMODE_POSITIVE_2	= 0x02;		// COUNTER:GATE高电平时计数,低电平时停止计数,若计数中改变初值,下次有效
													// 频率发生器:计数期间OUT为1
													// 减法计数时,计数到0后输出一个周期的0,并重新装入计数值计数;
													// 加法计数时,计数到4294967295时输出一个周期的0,并重新装入计数值计数

const long PCI8613_GATEMODE_POSITIVE_3	= 0x03;		// COUNTER:GATE高电平时计数,低电平时停止计数,若计数中改变初值,下次有效
													// 方波发生器:计数期间OUT为1
													// 减法计数时,计数到0后输出一个周期的0,并重新装入计数值计数;
													// 加法计数时,计数到4294967295时输出一个周期的0,并重新装入计数值计数

const long PCI8613_GATEMODE_POSITIVE_4	= 0x04;		// COUNTER:GATE高电平时计数,低电平时停止计数,若计数中改变初值,本次有效
													// 软件触发选通:写入初值OUT为1
													// 减法计数时,计数到0后输出一个周期的低电平信号;
													// 加法计数时,计数到4294967295时输出一个周期的低电平信号

const long PCI8613_GATEMODE_RISING_5	= 0x05;		// COUNTER:GATE上边沿触发计数,计数中出现GATE上升沿重新装入初值计数
													// 硬件触发选通:写入初值OUT为1
													// 减法计数时,计数到0后输出一个周期的低电平信号;
													// 加法计数时,计数到4294967295时输出一个周期的低电平信号

//######################## 常量定义 #################################
// CreateFileObject所用的文件操作方式控制字(可通过或指令实现多种方式并操作)
#define PCI8613_modeRead          0x0000			// 只读文件方式
#define PCI8613_modeWrite         0x0001			// 只写文件方式
#define	PCI8613_modeReadWrite     0x0002			// 既读又写文件方式
#define PCI8613_modeCreate        0x1000			// 如果文件不存可以创建该文件,如果存在,则重建此文件,并清0
#define PCI8613_typeText          0x4000			// 以文本方式操作文件

//***********************************************************
// 用于DA的复位方式(适用于PCI8613_InitDevProDA函数的ResetMode参数)
#define PCI8613_RESET_MODE_NEGATIVE        0x0000	// 负满度(-5V或-10V...)
#define PCI8613_RESET_MODE_ZERO			   0x0001	// 零点(0V)

//***********************************************************
// 用户函数接口
#ifndef _PCI8613_DRIVER_
#define DEVAPI __declspec(dllimport)
#else
#define DEVAPI __declspec(dllexport)
#endif

#ifdef __cplusplus
extern "C" {
#endif
	//######################## 常规通用函数 #################################
	// 适用于本设备的最基本操作
	DEVAPI HANDLE FAR PASCAL PCI8613_CreateDevice(int DeviceID = 0);		// 创建设备对象
	DEVAPI HANDLE FAR PASCAL PCI8613_CreateDeviceEx(int DevicePhysID = 0);  // 用物理号创建设备对象
	DEVAPI int FAR PASCAL PCI8613_GetDeviceCount(HANDLE hDevice);			// 取得设备总台数
	DEVAPI BOOL FAR PASCAL PCI8613_GetDeviceCurrentID(HANDLE hDevice,		// 取得当前设备相应的ID号
													PLONG DeviceLgcID, 
													PLONG DevicePhysID);
	DEVAPI BOOL FAR PASCAL PCI8613_ListDeviceDlg(HANDLE hDevice);			// 列表系统当中的所有的该PCI设备
    DEVAPI BOOL FAR PASCAL PCI8613_ReleaseDevice(HANDLE hDevice);			// 关闭设备,禁止传输,且释放资源

	//####################### AD数据读取函数 #################################
	// 适于大多数普通用户,这些接口最简单、最快捷、最可靠,让用户不必知道设备
	// 低层复杂的硬件控制协议和繁多的软件控制编程,仅用下面的初始化设备和读取
	// AD数据两个函数便能轻松高效地实现高速、连续的数据采集
    DEVAPI BOOL FAR PASCAL PCI8613_InitDeviceProAD(						// 初始化设备,当返回TRUE后,设备即刻开始传输.
										HANDLE hDevice,					// 设备对象
										PPCI8613_PARA_AD pADPara);		// 硬件参数, 它仅在此函数中决定硬件状态

    DEVAPI BOOL FAR PASCAL PCI8613_StartDeviceProAD(					// 在初始化之后,启动设备
										HANDLE hDevice);				// 设备对象句柄
	
    DEVAPI BOOL FAR PASCAL PCI8613_SetDevFreqencyAD(					// 在AD转换过程中,动态改变采样频率
										HANDLE hDevice,					// 设备对象句柄
										DWORD nADFrequency);			// AD采样频率(Hz)

    DEVAPI BOOL FAR PASCAL PCI8613_ReadDeviceProAD_Npt(					// 用非空标志读取设备上的AD数据
										HANDLE hDevice,					// 设备句柄
										PULONG pADBuffer,				// 将用于接受数据的用户缓冲区								
										ULONG nReadSizeWords,			// 读入的数据长度
										PLONG nRetSizeWords);			// 是否检测FIFO溢出状态(默认为不检测)

	DEVAPI BOOL FAR PASCAL PCI8613_GetDevStatusProAD(
										HANDLE hDevice,					// 设备句柄
										PPCI8613_STATUS_AD pADStatus);	// AD状态
	///////////////////////////////////////////////////////////////////////
	DEVAPI BOOL FAR PASCAL PCI8613_ReadDeviceProAD_Half(				// FIFO半满读AD数据
										HANDLE hDevice,					// 设备句柄
										PULONG pADBuffer,				// 将用于接受数据的用户缓冲区(该区必须开辟65536个字的空间)
										ULONG nReadSizeWords,
										PLONG nRetSizeWords);

⌨️ 快捷键说明

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