📄 pci8613.h
字号:
#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 + -