📄 frmmain.pas
字号:
unit FrmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, Driver, Thread, CheckForm;
type
TFrmADInt = class(TForm)
Label1: TLabel;
DeviceSelect: TButton;
Label2: TLabel;
Datalist: TListBox;
cmbScanChl: TComboBox;
GroupBox1: TGroupBox;
Inprange: TComboBox;
GroupBox2: TGroupBox;
Internal: TRadioButton;
External: TRadioButton;
GroupBox3: TGroupBox;
Pacer: TEdit;
Conversion: TEdit;
GroupBox4: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Cyclic: TCheckBox;
Evtenable: TCheckBox;
Datafloat: TCheckBox;
GroupBox5: TGroupBox;
FifoEnable: TCheckBox;
txtFifoSize: TEdit;
GroupBox6: TGroupBox;
cmdRun: TButton;
cmdExit: TButton;
Label6: TLabel;
cmdStop: TButton;
procedure DeviceSelectClick(Sender: TObject);
procedure cmbScanChlChange(Sender: TObject);
procedure InprangeChange(Sender: TObject);
procedure InternalClick(Sender: TObject);
procedure ExternalClick(Sender: TObject);
procedure CyclicClick(Sender: TObject);
procedure EvtenableClick(Sender: TObject);
procedure DatafloatClick(Sender: TObject);
procedure FifoEnableClick(Sender: TObject);
procedure cmdRunClick(Sender: TObject);
procedure cmdStopClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure cmdExitClick(Sender: TObject);
procedure CheckEvent();
procedure Terminate();
private
{ Private declarations }
public
{ Public declarations }
end;
const MaxEntries = 255;
var
FrmADInt: TFrmADInt;
DeviceHandle : Longint;
ptDevGetFeatures : PT_DeviceGetFeatures;
lpDevFeatures : DEVFEATURES;
devicelist : array [0..MaxEntries] of PT_DEVLIST;
SubDevicelist : array [0..MaxEntries] of PT_DEVLIST;
ErrCde : Longint;
lpAIConfig : PT_AIConfig;
ptAIGetConfig : PT_AIGetConfig;
lpDEVCONFIG_AI : DEVCONFIG_AI;
AiCtrMode : Integer;
wGainCode : array [0..15] of Integer;
iGainIndex : array [0..15] of Integer;
hbuf : HGLOBAL;
hUserbuf : HGLOBAL; { for voltage data }
ptFAIIntStart : PT_FAIIntStart; { FAIIntStart table }
ptFAITransfer : PT_FAITransfer; { FAITransfer table }
ptEnableEvent : PT_EnableEvent; { Enable event }
ptCheckEvent : PT_CheckEvent; // Check event
szbuffer : string[80];
{ used for fixed memory for the installed devices }
bRun : Boolean; { flag for running }
gwGain : array [0..15] of Integer;
dwDeviceNum : Longint;
gdwPacerRate : Longint; { pacer rate }
gulConvNum : Integer; { conversion number }
gwStartChl : Integer; { scan channels }
gbCyclicCount : Boolean; { number of cyclic count }
gbEvtFlag : Boolean; { event enable(0) }
gbDataType : Boolean; { display type : FLOAT(1) }
gbFifoEnable : Boolean; { Fifo }
gwFifoSize : Integer; { Fifo Size }
gwGainList : Integer; { gain list flag }
gwGainCode : Integer; { gaincode }
gwExtTrig : Integer; { external or internal trigger }
gwCyclicMode : Integer; { cyclic or non-cyclic mode }
gwBufferMode : Integer; { buffer: single or double }
gwIntrCount : Integer;
gwActiveBuf : Integer; { return by FAICheck }
gwOverrun : Integer; { return by FAICheck, FAITransfer }
gwStopped : Integer; { return by FAICheck }
gulRetrieved : Longint; { return by FAICheck }
gwHalfReady : Integer; { return by FAICheck }
ulIntCounter : Longint = 0;
ulBfChgCounter : Longint = 0;
ulOverrunCounter : Longint = 0;
chkThread : CheckThread;
bThreadloop : boolean = true;
implementation
{$R *.dfm}
Function ChkErr(lErrCde: Longint): Boolean;
var
szErrMsg : string[100];
pszErrMsg : PChar;
begin
If (lErrCde <> 0) Then
begin
pszErrMsg := @szErrMsg;
DRV_GetErrorMessage(lErrCde, pszErrMsg);
Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
ChkErr := True;
end
Else
ChkErr := False;
end;
procedure TFrmADInt.DeviceSelectClick(Sender: TObject);
var
i : Integer;
tempNum : Integer;
lpDEVCONFIG_AI : DEVCONFIG_AI;
begin
{ Step 1: Select Device }
ErrCde := DRV_SelectDevice(Handle, False, dwDeviceNum, @szbuffer[0]);
If (ChkErr(ErrCde)) Then
Exit;
DeviceSelect.Caption := szbuffer;
{ Step 2: Open Devicev }
ErrCde := DRV_DeviceOpen(dwDeviceNum, DeviceHandle);
If (ChkErr(ErrCde)) Then
Exit;
{ Step 3:Get device features }
ptDevGetFeatures.buffer := @lpDevFeatures;
ErrCde := DRV_DeviceGetFeatures(DeviceHandle, ptDevGetFeatures);
If (ChkErr(ErrCde)) Then
begin
DRV_DeviceClose(DeviceHandle);
Exit;
end;
{ Step 4 : Initialize Input Range List Combobox with device features }
If (lpDevFeatures.usNumGain <> 0) Then
begin
Inprange.Enabled := True;
Inprange.Clear;
For i := 0 To lpDevFeatures.usNumGain - 1 do
begin
Inprange.Items.Add(lpDevFeatures.glGainList[i].szGainStr);
end;
Inprange.ItemIndex := 0;
end
Else
Inprange.Enabled := False;
{ Step 5 : Init scan channel }
ptAIGetConfig.buffer := @lpDEVCONFIG_AI;
ErrCde := DRV_AIGetConfig(DeviceHandle, ptAIGetConfig);
If (ChkErr(ErrCde)) Then
begin
DRV_DeviceClose(DeviceHandle);
Exit;
end;
tempNum := lpDevFeatures.usMaxAISiglChl ;
For i := 0 To tempNum - 1 do
cmbScanChl.Items.Add(IntToStr(i));
cmbScanChl.ItemIndex := 0;
{ Step 6 : Close device }
DRV_DeviceClose(DeviceHandle);
cmdRun.Enabled := True;
end;
procedure TFrmADInt.cmbScanChlChange(Sender: TObject);
begin
gwStartChl := cmbScanChl.ItemIndex;
end;
procedure TFrmADInt.InprangeChange(Sender: TObject);
begin
gwGainCode := Inprange.ItemIndex;
end;
procedure TFrmADInt.InternalClick(Sender: TObject);
begin
Pacer.Enabled := True;
gwExtTrig := 0;
end;
procedure TFrmADInt.ExternalClick(Sender: TObject);
begin
gwExtTrig := 1;
Pacer.Enabled := False;
end;
procedure TFrmADInt.CyclicClick(Sender: TObject);
begin
gbCyclicCount := Cyclic.Checked;
end;
procedure TFrmADInt.EvtenableClick(Sender: TObject);
begin
gbEvtFlag := Evtenable.Checked;
end;
procedure TFrmADInt.DatafloatClick(Sender: TObject);
begin
gbDataType := Datafloat.Checked;
end;
procedure TFrmADInt.FifoEnableClick(Sender: TObject);
var
iFifoSize : Integer;
begin
gbFifoEnable := FifoEnable.Checked;
If (gbFifoEnable) Then
begin
txtFifoSize.Enabled := True;
{ Step 1: Device open }
ErrCde := DRV_DeviceOpen(dwDeviceNum, DeviceHandle);
If (ChkErr(ErrCde)) Then
Exit;
{ Step 2: Get FIFO size }
ErrCde := DRV_GetFIFOSize(DeviceHandle, iFifoSize);
If (ChkErr(ErrCde)) Then
Exit;
{ Step 3: Close device }
DRV_DeviceClose(DeviceHandle);
gwFifoSize := iFifoSize div 2; { divide by 2 for conversion from byte to word }
txtFifoSize.Text := IntToStr(gwFifoSize);
Conversion.Text := IntToStr(iFifoSize);
end
Else
begin
txtFifoSize.Enabled := False;
txtFifoSize.Text := '';
end;
end;
procedure TFrmADInt.cmdRunClick(Sender: TObject);
begin
{ check parameter }
try
StrToInt(Conversion.Text);
except
Application.MessageBox('Please input Numeric Conv.#!', 'Error',
MB_OK Or MB_ICONINFORMATION);
Exit;
end;
If (gwExtTrig <> 0) Then { if is internal trigger }
begin
try
StrToInt(Pacer.Text);
except
Application.MessageBox('Please input Numeric PacerRate!', 'Error',
MB_OK Or MB_ICONINFORMATION);
Exit;
end;
end;
{ get pace rate and conv number }
gdwPacerRate := StrToInt(Pacer.Text);
gulConvNum := StrToInt(Conversion.Text);
Datalist.Clear;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -