?? pci8613.pas
字號:
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 + -