📄 init.pas
字号:
{2. Config event feature}
ptEnableEvent.EventType := ADS_EVT_INTERRUPT or
ADS_EVT_BUFCHANGE or
ADS_EVT_TERMINATED or
ADS_EVT_OVERRUN;
ptEnableEvent.Enabled := Word(chkEventEnable.Checked);
{ 4/23/1999 Eric lin}
if chkFifo.Checked And (StrToInt(editFifo.Text) > 0) then
ptEnableEvent.Count := StrToInt(editFifo.Text)
else
ptEnableEvent.Count := 1;
{Done}
lErrCde := DRV_EnableEvent(ghDev,ptEnableEvent);
if DoesErr(lErrCde) = 1 then
begin
GlobalUnlock(hBuf);
GlobalFree(hBuf);
GlobalUnlock(hUserbuf);
GlobalFree(hUserbuf);
DRV_DeviceClose(ghDev);
Exit;
end;
ptAIConfig.buffer := @lpDevConfig_AI;
ptAIConfig.size := SizeOf(DEVCONFIG_AI);
lErrCde := DRV_AIGetConfig(ghDev, ptAIConfig);
if ( DoesErr(lErrCde) = 1 ) then
begin
DRV_DeviceClose(ghDev);
Exit;
end;
{3. Set gain list}
usStartChan := cmbStartChl.ItemIndex;
usChanNum := StrToInt(cmbChlCount.Text);
logChan := PhyChanToLogChan(lpDevConfig_AI,usStartChan);
for i:=0 to usChanNum-1 do
begin
usGainCode[i] :=
lpDevFeatures.glGainList[usGainIndx[(i + logChan) mod gwMaxLogChanNum]].usGainCde;
end;
{4. Start AI interrupt funciton}
{4.1 Fill element of PT_FAIIntScanStart}
with ptAiStart do
begin
TrigSrc := Word(radExtTrig.Checked);
SampleRate := StrToInt(editSpeed.Text);
NumChans := cmbChlCount.itemIndex + 1;
StartChan := cmbStartChl.itemIndex;
GainList := @usGainCode[0];
count := giConvCount;
cyclic := Word(chkCyclic.Checked);
if chkFifo.Checked And (StrToInt(editFifo.Text) > 0) then
IntrCount := StrToInt(editFifo.Text)
else
IntrCount := 1;
buffer := Pointer(GlobalLock(hBuf));
end;
{4.2 Call advantech API function DRV_FAIIntScanStart}
lErrCde := DRV_FAIIntScanStart( ghDev, ptAiStart);
if DoesErr(lErrCde) = 1 Then
begin
GlobalUnlock(hBuf);
GlobalFree(hBuf);
GlobalUnlock(hUserbuf);
GlobalFree(hUserbuf);
lErrCde := DRV_DeviceClose(ghDev);
Exit;
end;
{5. Enable Thread for getting message.}
if chkEventEnable.Checked = True then
begin
with TGetEvent.Create( DeviceList[lstDevice.ItemIndex].dwDeviceNum,
ptAiStart.count * 1000 div ptAiStart.SampleRate + 100,
chkCyclic.Checked) do
frmConverting.ghThreadGetEvent := Handle;
end;
Sleep(0);
{6. Enter converting form}
frmConverting.gbCyclic := chkCyclic.Checked;
frmConverting.gbConverting := True;
frmConverting.txtInt.Text :=IntToStr(0);
frmConverting.txtBuffChange.text := IntToStr(0);
frmConverting.prgsDataCounts.Max := giConvCount;
frmConverting.prgsDataCounts.Position := 0;
frmConverting.prgsDataCounts.Min := 0;
frmInit.Enabled := False;
frmConverting.Show;
end;
procedure TfrmInit.lstDeviceClick(Sender: TObject);
var
lErrCde : Longint;
i : integer;
szTmp : string;
begin
butConvert.Enabled := FALSE;
{1. Reset all controls because of changing different device}
{Clear the previous selection list & combo boxes}
cmbStartChl.Clear; {clear start channel}
cmbChlCount.Clear; {Clear stop channel}
cmbOverallGain.Clear; {Clear the voltage range list}
{2. Open sellected device for reading its informations}
lErrCde := DRV_DeviceOpen( DeviceList[lstDevice.ItemIndex].dwDeviceNum,
ghDev);
if( DoesErr(lErrCde) = 1 ) then
Exit;
{3. Get device's features}
ptDevFeatures.buffer := @lpDevFeatures;
ptDevFeatures.size := SizeOf(DEVFEATURES);
lErrCde := DRV_DeviceGetFeatures(ghDev, ptDevFeatures);
if( DoesErr(lErrCde) = 1 ) then
begin
DRV_DeviceClose(ghDev);
Exit;
end;
{4. Get device's AI configuration}
ptAIConfig.buffer := @lpDevConfig_AI;
ptAIConfig.size := SizeOf(DEVCONFIG_AI);
lErrCde := DRV_AIGetConfig(ghDev, ptAIConfig);
if ( DoesErr(lErrCde) = 1 ) then
begin
DRV_DeviceClose(ghDev);
Exit;
end;
{5. Setting channel number combo box}
if(lpDevConfig_AI.ulChanConfig = 1) then
iMaxChl := lpDevFeatures.usMaxAIDiffChl
else If (lpDevFeatures.usMaxAISiglChl>lpDevFeatures.usMaxAIDiffChl) Then
iMaxChl := lpDevFeatures.usMaxAISiglChl
else
iMaxChl := lpDevFeatures.usMaxAIDiffChl;
gwMaxLogChanNum := GetMaxLogChanNum(lpDevConfig_AI,lpDevFeatures);
{done}
for i := 0 to (iMaxChl - 1) do
begin
szTmp := IntToStr(i);
cmbStartChl.items.Add(szTmp);
end;
cmbStartChl.ItemIndex := 0;
for i := 1 to (gwMaxLogChanNum ) do
begin
szTmp := IntToStr(i);
cmbChlCount.items.Add(szTmp);
end;
cmbChlCount.ItemIndex := 0;
{6. Setting gain code selection}
if (lpDevFeatures.usNumGain > 0) then
For i := 0 To (lpDevFeatures.usNumGain - 1) do
cmbOverallGain.Items.Add(lpDevFeatures.glGainList[i].szGainStr);
cmbOverallGain.ItemIndex := 0;
{7. Give the initialize Gain code list value}
for i := 0 to iMaxChl - 1 do
wGainCode[i] := lpDevFeatures.glGainList[0].usGainCde;
for i := 0 to 15 do
iGainIndex[i] := 0;
{8. Close the device}
lErrCde := DRV_DeviceClose(ghDev);
if DoesErr(lErrCde) = 1 then
Exit;
butConvert.Enabled := TRUE;
end;
procedure TfrmInit.butGainListClick(Sender: TObject);
begin
usStartChan := cmbStartChl.ItemIndex;
usChanNum := StrToInt(cmbChlCount.Text);
frmGainList.ShowModal();
end;
procedure TfrmInit.cmbOverallGainClick(Sender: TObject);
var
i : Smallint;
begin
for i := 0 to 15 do
iGainIndex[i] := cmbOverallGain.ItemIndex;
end;
procedure TfrmInit.radExtTrigClick(Sender: TObject);
begin
labSpeed.Enabled := False;
labHz.Enabled := False;
editSpeed.Enabled := False;
end;
procedure TfrmInit.radInterTrigClick(Sender: TObject);
begin
labSpeed.Enabled := True;
labHz.Enabled := True;
editSpeed.Enabled := True;
end;
procedure TfrmInit.ThreadDone(Sender: TObject);
begin
frmConverting.close;
end;
procedure TfrmInit.chkFifoClick(Sender: TObject);
var
lFifoSize : Longint;
lErrCde : Longint;
begin
if (chkFifo.Checked) then
begin
{ Step 1: Open device }
lErrCde := DRV_DeviceOpen(DeviceList[lstDevice.ItemIndex].dwDeviceNum, ghDev);
if DoesErr(lErrCde) = 1 then
Exit;
{ Step 2: Get FIFO size }
lErrCde := DRV_GetFIFOSize(ghDev, lFifoSize);
if DoesErr(lErrCde) = 1 then
Exit;
{ Step 3: Close device }
DRV_DeviceClose(ghDev);
{ divide by 2 for conversion from byte to word }
editFifo.Text := IntToStr(lFifoSize div 2);
editDataCounts.Text := IntToStr(lFifoSize );
editFifo.Enabled := true;
end
else
editFifo.Enabled := false;
end;
procedure TfrmInit.radOverallClick(Sender: TObject);
var
i : integer;
begin
for i := 0 to 63 do
usGainIndx[i] := cmbOverallGain.ItemIndex;
cmbOverallGain.Enabled := True;
cmbOverallGainClick(Sender);
butGainList.Enabled := False
end;
procedure TfrmInit.radGainListClick(Sender: TObject);
begin
cmbOverallGain.Enabled := False;
butGainList.Enabled := True
end;
procedure TfrmInit.cmbOverallGainChange(Sender: TObject);
var
i : integer;
begin
for i := 0 to 63 do
usGainIndx[i] := cmbOverallGain.ItemIndex;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -