📄 formmain.pas
字号:
2 : optAsyncEnable2.Enabled := True;
3 : optAsyncEnable3.Enabled := True;
4 : optAsyncEnable4.Enabled := True;
5 : optAsyncEnable5.Enabled := True;
6 : optAsyncEnable6.Enabled := True;
7 : optAsyncEnable7.Enabled := True;
End
Else
Case i of
0 : optAsyncEnable0.Enabled := False;
1 : optAsyncEnable1.Enabled := False;
2 : optAsyncEnable2.Enabled := False;
3 : optAsyncEnable3.Enabled := False;
4 : optAsyncEnable4.Enabled := False;
5 : optAsyncEnable5.Enabled := False;
6 : optAsyncEnable6.Enabled := False;
7 : optAsyncEnable7.Enabled := False;
End;
End;
End;
end;
procedure TfrmMain.cmdStartClick(Sender: TObject);
Var
ptDevGetPar : PT_DeviceGetParam;
aosetting : array of AOSET;
size : Integer;
errmsg1720 : string[100];
errtitle1720 : string[20];
errmsg1720_PChar : PChar;
errtitle1720_PChar : PChar;
i : Integer;
s : Boolean;
begin
errmsg1720_PChar := @(errmsg1720[1]);
errmsg1720 := 'For PCI-1720, the precondition of current out is that voltage range is set to 0~5V'+char(0);
errtitle1720_PChar := @(errtitle1720[1]);
If optVoltageOut.Checked Then
begin
OutputValue[0] := 0.0;
OutputValue[1] := 1.25;
OutputValue[2] := 2.5;
OutputValue[3] := 5.0;
End;
If optCurrentOut0.Checked Then
begin
OutputValue[0] := 1.0;
OutputValue[1] := 5.0;
OutputValue[2] := 10.0;
OutputValue[3] := 20.0;
End;
If optCurrentOut4.Checked Then
begin
OutputValue[0] := 4.0;
OutputValue[1] := 10.0;
OutputValue[2] := 15.0;
OutputValue[3] := 20.0;
End;
lErrCde := DRV_DeviceOpen( lDeviceNum, lDeviceHandle);
If ( DoesErr(lErrCde) = 1 ) Then
Exit;
{ for PCI-1720, the precondition of current out is voltage range is set to 0 ~ 5V }
If (optVoltageOut.Checked <> True) And (Pos('PCI-1720', labDeviceName.Caption) <> 0) Then
Begin
{ get device AO settings }
ptDevGetPar.nID := AO_RANGE_SETTING;
SetLength(aosetting, MaxAOChannel);
ptDevGetPar.pData := @aosetting[0];
ptDevGetPar.Length := Longint(@size);
lErrCde := DRV_DeviceGetParam(lDeviceHandle, ptDevGetPar);
If (lErrCde <> 0) Then
Begin
DRV_DeviceClose (lDeviceHandle);
Exit;
End;
{ check device AO settings }
If (chkSyncAOEnable.Checked) Then
Begin
For i := 0 To MaxAOChannel - 1 Do
Begin
If ((aosetting[i].fAOMaxVol <> 5) Or (aosetting[i].fAOMinVol <> 0)) Then
Begin
s := False;
Case i of
0 : If chkSyncEnable0.Checked Then s := True;
1 : If chkSyncEnable1.Checked Then s := True;
2 : If chkSyncEnable2.Checked Then s := True;
3 : If chkSyncEnable3.Checked Then s := True;
4 : If chkSyncEnable4.Checked Then s := True;
5 : If chkSyncEnable5.Checked Then s := True;
6 : If chkSyncEnable6.Checked Then s := True;
7 : If chkSyncEnable7.Checked Then s := True;
End;
if (s) Then
Begin
DRV_DeviceClose (lDeviceHandle);
errtitle1720 := 'Error: Channel ' + IntToStr(i);
Application.MessageBox(errmsg1720_PChar, errtitle1720_PChar, MB_OK);
Exit;
End;
End;
End;
End
Else
Begin
For i := 0 To MaxAOChannel - 1 Do
Begin
If ((aosetting[i].fAOMaxVol <> 5) Or (aosetting[i].fAOMinVol <> 0)) Then
Begin
s := False;
Case i of
0 : If optAsyncEnable0.Checked Then s := True;
1 : If optAsyncEnable1.Checked Then s := True;
2 : If optAsyncEnable2.Checked Then s := True;
3 : If optAsyncEnable3.Checked Then s := True;
4 : If optAsyncEnable4.Checked Then s := True;
5 : If optAsyncEnable5.Checked Then s := True;
6 : If optAsyncEnable6.Checked Then s := True;
7 : If optAsyncEnable7.Checked Then s := True;
End;
if (s) Then
Begin
DRV_DeviceClose (lDeviceHandle);
errtitle1720 := 'Error: Channel ' + IntToStr(i) + char(0);
Application.MessageBox(errmsg1720_PChar, errtitle1720_PChar, MB_OK);
Exit;
End;
End;
End;
End;
End;
// Enable Sync. output feature
If chkSyncAOEnable.Checked Then
lErrCde := DRV_EnableSyncAO(lDeviceHandle, 1)
Else
lErrCde := DRV_EnableSyncAO(lDeviceHandle, 0);
If ( DoesErr(lErrCde) = 1 ) Then
Begin
DRV_DeviceClose(lDeviceHandle);
Exit;
End;
OutputIndex := 0;
cmdStart.Enabled := False;
cmdStop.Enabled := True;
btnClose.Enabled := False;
ScanTimer.Enabled := True;
end;
procedure TfrmMain.cmdStopClick(Sender: TObject);
begin
ScanTimer.Enabled := False;
lErrCde := DRV_DeviceClose(lDeviceHandle);
If ( DoesErr(lErrCde) = 1 ) Then
Exit;
cmdStart.Enabled := True;
cmdStop.Enabled := False;
btnClose.Enabled := True;
end;
procedure TfrmMain.ScanTimerTimer(Sender: TObject);
Var
i : Integer;
s : Boolean;
begin
If chkSyncAOEnable.Checked Then
Begin
For i := 0 To MaxAOChannel DO
Begin
s := False;
Case i of
0 : If chkSyncEnable0.Checked Then s := True;
1 : If chkSyncEnable1.Checked Then s := True;
2 : If chkSyncEnable2.Checked Then s := True;
3 : If chkSyncEnable3.Checked Then s := True;
4 : If chkSyncEnable4.Checked Then s := True;
5 : If chkSyncEnable5.Checked Then s := True;
6 : If chkSyncEnable6.Checked Then s := True;
7 : If chkSyncEnable7.Checked Then s := True;
End;
If s Then
Begin
If optVoltageOut.Checked Then
Begin
ptAOVoltageOut.Chan := i;
ptAOVoltageOut.OutputValue := OutputValue[OutputIndex];
lErrCde := DRV_AOVoltageOut(lDeviceHandle, ptAOVoltageOut);
End
Else
Begin
ptAOCurrentOut.Chan := i;
ptAOCurrentOut.OutputValue := OutputValue[OutputIndex];
lErrCde := DRV_AOCurrentOut(lDeviceHandle, ptAOCurrentOut);
End;
If (lErrCde <> 0) Then
Begin
ScanTimer.Enabled := false;
pszErrMsg := @szErrMsg;
DRV_GetErrorMessage(lErrCde, pszErrMsg);
Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
cmdStopClick(nil);
exit;
End;
End;
end;
lErrCde := DRV_WriteSyncAO(lDeviceHandle);
If (lErrCde <> 0) Then
Begin
ScanTimer.Enabled := false;
pszErrMsg := @szErrMsg;
DRV_GetErrorMessage(lErrCde, pszErrMsg);
Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
cmdStopClick(nil);
exit;
End;
End
Else
Begin
For i := 0 To MaxAOChannel Do
Begin
s := False;
Case i of
0 : If optAsyncEnable0.Checked Then s := True;
1 : If optAsyncEnable1.Checked Then s := True;
2 : If optAsyncEnable2.Checked Then s := True;
3 : If optAsyncEnable3.Checked Then s := True;
4 : If optAsyncEnable4.Checked Then s := True;
5 : If optAsyncEnable5.Checked Then s := True;
6 : If optAsyncEnable6.Checked Then s := True;
7 : If optAsyncEnable7.Checked Then s := True;
End;
If s Then
Begin
If optVoltageOut.Checked Then
Begin
ptAOVoltageOut.Chan := i;
ptAOVoltageOut.OutputValue := OutputValue[OutputIndex];
lErrCde := DRV_AOVoltageOut(lDeviceHandle, ptAOVoltageOut);
End
Else
Begin
ptAOCurrentOut.Chan := i;
ptAOCurrentOut.OutputValue := OutputValue[OutputIndex];
lErrCde := DRV_AOCurrentOut(lDeviceHandle, ptAOCurrentOut);
End;
If (lErrCde <> 0) Then
Begin
ScanTimer.Enabled := false;
pszErrMsg := @szErrMsg;
DRV_GetErrorMessage(lErrCde, pszErrMsg);
Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
cmdStopClick(nil);
exit;
End;
End;
End;
End;
editOutput.Text := Format('%.3f', [OutputValue[OutputIndex]]);
OutputIndex := OutputIndex + 1;
If OutputIndex > 3 Then
OutputIndex := 0;
end;
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -