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

📄 pci8613.pas

📁 Delphi编的板卡内部程序。分享给大家
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit PCI8613;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
  StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
  ActnList, ToolWin, ImgList;


//#################### AD硬件参数PCI8211_PARA_AD定义 #####################
// 用于AD采样的实际硬件参数
type
PPCI8613_PARA_AD = ^PCI8613_PARA_AD;
PCI8613_PARA_AD = record
	ADMode          : LongInt;              // AD模式选择(连续/分组方式)
	FirstChannel    : LongInt;              // 首通道[0, 15]
	LastChannel     : LongInt;              // 末通道[0, 15],要求末通道必须大于或等于首通道
	Frequency       : LongInt;              // 采集频率,单位为Hz, [1, 100000]
	GroupInterval   : LongInt;              // 分组时的组间间隔(单位:微秒)[1, 419430]
	LoopsOfGroup    : LongInt;	            // 组内循环次数[1, 255]
  Gains           : LongInt;				      // 增益设置
	InputRange      : LongInt;		          // 模拟量输入量程范围
	TriggerMode     : LongInt;              // 触发模式选择
	TriggerSource   : LongInt;		          // 触发源选择
	TriggerType     : LongInt;		          // 触发类型选择(边沿触发/脉冲触发)
	TriggerDir      : LongInt;		          // 触发方向选择(正向/负向触发)
	TrigWindow      : LongInt;		          // 触发灵敏窗[1, 65535], 单位25纳秒
	ClockSource     : LongInt;		          // 时钟源选择(内/外时钟源)
	bClockOutput    : LongInt;              // 允许时钟输出到CLKOUT,=TRUE:允许时钟输出, =FALSE:禁止时钟输出
  GroundingMode   : LongInt;		          // 接地方式(单端或双端选择)
	TimeoutForNpt   : LongInt;		          // 非空查询方式下的超时时间,单位秒,取值范围为[0, 3600]
end;

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

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

//***********************************************************
// AD参数PCI8613_PARA_AD中的Gains使用的硬件增益选项
const PCI8613_GAINS_1MULT			= $00;      // 1倍增益(使用PGA202或PGA203放大器)
const PCI8613_GAINS_10MULT		= $01;      // 10倍增益(使用PGA202放大器)
const PCI8613_GAINS_100MULT		= $02;      // 100倍增益(使用PGA202放大器)
const PCI8613_GAINS_1000MULT	= $03;      // 1000倍增益(使用PGA202放大器)
const PCI8613_GAINS_2MULT			= $01;      // 2倍增益(使用PGA203放大器)
const PCI8613_GAINS_4MULT			= $02;      // 4倍增益(使用PGA203放大器)
const PCI8613_GAINS_8MULT			= $03;      // 8倍增益(使用PGA203放大器)

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

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

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

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

//***********************************************************
// AD硬件参数PCI8613_PARA_AD中的ClockSource时钟源所使用的选项
const PCI8613_CLOCKSRC_IN			    = $00;  // 内部时钟
const PCI8613_CLOCKSRC_OUT			  = $01;  // 外部时钟(CLKIN)
 
//***********************************************************
// AD参数(PCI8613_PARA_AD)中的GroundingMode使用的模拟信号接地方式选项
const PCI8613_GNDMODE_SE			    = $00;	// 单端方式(SE:Single end)
const PCI8613_GNDMODE_DI			    = $01;	// 双端方式(DI:Differential)

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

const  PCI8613_MAX_SEGMENT_COUNT = 64;
type
PPCI8613_STATUS_DMA = ^PCI8613_STATUS_DMA;
PCI8613_STATUS_DMA = record
	iCurSegmentID   : LongInt;							// 当前段缓冲ID,表示DMA正在传输的缓冲区段
	bSegmentSts     : Array [0..PCI8613_MAX_SEGMENT_COUNT-1] of LongInt;	// 各个缓冲区的新旧状态,=1表示该相应缓冲区数据为新,否则为旧
	bBufferOverflow : LongInt;							// 返回溢出状态
end;

//***********************************************************
// DA输出函数InitDeviceDA的模拟量输出范围参数OutputRange所使用的选项
const PCI8613_OUTPUT_0_P5000mV			  = $00;		// 0~5000mV
const PCI8613_OUTPUT_0_P10000mV		    = $01;		// 0~10000mV
const PCI8613_OUTPUT_N5000_P5000mV		= $02;		// ±5000mV
const PCI8613_OUTPUT_N10000_P10000mV	= $03;		// ±10000mV



// DA输出函数PCI8613_DAReset的复位ResetMode所使用的选项
const PCI8613_RESET_LEAST				= $00;		// 复位至最小值
const PCI8613_RESET_MIDDLE				= $01;		// 复位至中间值

//***********************************************************
// // 用于计数器的参数结构

type
PPCI8613_PARA_CNT = ^PCI8613_PARA_CNT;
PCI8613_PARA_CNT = record
	ControlMode   : Longword;		// 计数器工作模式[0—5]
	AddDecMode   : Longword;		// 计数器加减模式:加计数或减计数[0:减计数,1:加计数]
	CNTVal   : Longword;			// 计数器值
end;
// CNT控制函数PCI8613_InitDeviceCNT硬件参数ControlMode控制字模式选项
const PCI8613_GATEMODE_POSITIVE_0	= $00;		// COUNTER:GATE高电平时计数,低电平时停止计数,计数时重新写入新的初值,按新值计数
													// 减法计数时,计数到0时OUT为1;加法计数时,计数到4294967295时OUT变为1
													// 计数结束产生中断

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

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

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

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

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


//***********************************************************
// CreateFileObject所用的文件操作方式控制字(可通过或指令实现多种方式并操作)
const PCI8613_modeRead					= $0000;	// 只读文件方式
const PCI8613_modeWrite				  = $0001;	// 只写文件方式
const PCI8613_modeReadWrite			= $0002;	// 既读又写文件方式
const PCI8613_modeCreate				= $1000;	// 如果文件不存可以创建该文件,如果存在,则重建此文件,并清0
const PCI8613_typeText					= $4000;	// 以文本方式操作文件


//***********************************************************
// 用于DA的复位方式(适用于PCI8613_InitDevProDA函数的ResetMode参数)
const PCI8613_RESET_MODE_NEGATIVE       = $0000	;// 负满度(-5V或-10V...)
const PCI8613_RESET_MODE_ZERO			   =$0001	;// 零点(0V)


//***********************************************************
// 用户函数接口

	//######################## 设备对象管理函数 ##############################
Function  PCI8613_CreateDevice(DeviceLgcID : Integer = 0) : LongInt; StdCall; External'PCI8613.dll' Name 'PCI8613_CreateDevice';     // 用逻辑号创建设备对象
Function  PCI8613_CreateDeviceEx(DevicePhysID : Integer = 0) : LongInt; StdCall; External'PCI8613.dll' Name 'PCI8613_CreateDeviceEx';  // 用物理号创建设备对象
Function  PCI8613_GetDeviceCount(hDevice : LongInt) : Integer; StdCall; External'PCI8613.dll' Name 'PCI8613_GetDeviceCount'; // 取得设备总台数
Function  PCI8613_GetDeviceCurrentID(hDevice : LongInt; DeviceLgcID : Pointer; DevicePhysID : Pointer) : Boolean; StdCall; External'PCI8613.dll' Name 'PCI8613_GetDeviceCurrentID';
Function  PCI8613_ListDeviceDlg(hDevice : LongInt) : Boolean; StdCall; External'PCI8613.dll' Name 'PCI8613_ListDeviceDlg'; // 以对话框窗体方式列表系统当中的所有的该PCI设备
Function  PCI8613_ReleaseDevice(hDevice : LongInt) : Boolean; StdCall; External'PCI8613.dll' Name 'PCI8613_ReleaseDevice'; // 仅释放设备对象

//####################### AD数据读取函数 #################################
// 适于大多数普通用户,这些接口最简单、最快捷、最可靠,让用户不必知道设备
// 低层复杂的硬件控制协议和繁多的软件控制编程,仅用下面的初始化设备和读取
// AD数据两个函数便能轻松高效地实现高速、连续的数据采集

// AD通用函数

// AD程序查询方式函数
Function  PCI8613_InitDeviceProAD(			    // 初始化设备,当返回TRUE后,设备即准备就绪.
									hDevice : LongInt;			  // 设备对象,它由CreateDevice函数创建
									pADPara :PPCI8613_PARA_AD) : Boolean; StdCall; External'PCI8613.dll' Name 'PCI8613_InitDeviceProAD'; // 硬件参数, 它仅在此函数中决定硬件状态

Function  PCI8613_StartDeviceProAD(		      // 在初始化之后,启动设备
									hDevice : LongInt) : Boolean; StdCall; External'PCI8613.dll' Name 'PCI8613_StartDeviceProAD';		// 设备对象句柄,它由CreateDevice函数创建

Function PCI8613_SetDevFreqencyAD(					// 在AD转换过程中,动态改变采样频率
										hDevice : LongInt;					// 设备对象句柄
										nADFrequency :  LongWord) : Boolean; StdCall; External'PCI8613.dll' Name 'PCI8613_SetDevFreqencyAD';			// AD采样频率(Hz)



Function  PCI8613_ReadDeviceProAD_Npt(		  // 当AD标志有效时,用此函数读取设备上的AD数据(程序非空方式)
									hDevice : LongInt;			  // 设备句柄,它由CreateDevice函数创建
									ADBuffer : Pointer;		    // 接受原始AD数据的用户缓冲区
									nReadSizeWords : LongWord;	// 相对于偏位点后读入的数据长度(字)
									nRetSizeWords : Pointer) : Boolean; StdCall; External'PCI8613.dll' Name 'PCI8613_ReadDeviceProAD_Npt';   // 返回实际读取的长度(字)

Function  PCI8613_GetDevStatusProAD(		    // 在AD采样过程中取得设备的各种状态,返回值表示函数是否成功
									hDevice : LongInt;			  // 设备句柄,它由CreateDevice函数创建
									pADStatus : PPCI8613_STATUS_AD) : Boolean; StdCall; External'PCI8613.dll' Name 'PCI8613_GetDevStatusProAD'; // AD的各种信息结构体

⌨️ 快捷键说明

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