📄 formmain.pas
字号:
Unit FormMain;
Interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, Driver, ComCtrls;
Type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
labDeviceName: TStaticText;
btnSelectDevice: TButton;
cmdStart : TButton;
cmdStop : TButton;
btnClose: TBitBtn;
ScanTimer : TTimer;
GroupBox2 : TGroupBox;
optVoltageOut : TRadioButton;
optCurrentOut0 : TRadioButton;
optCurrentOut4 : TRadioButton;
GroupBox3 : TGroupBox;
chkSyncAOEnable : TCheckBox;
Label1 : TLabel;
txtScanTime : TEdit;
GroupBox4 : TGroupBox;
chkSyncEnable0 : TCheckBox;
chkSyncEnable1 : TCheckBox;
chkSyncEnable2 : TCheckBox;
chkSyncEnable3 : TCheckBox;
chkSyncEnable4 : TCheckBox;
chkSyncEnable5 : TCheckBox;
chkSyncEnable6 : TCheckBox;
chkSyncEnable7 : TCheckBox;
GroupBox5 : TGroupBox;
optAsyncEnable0 : TRadioButton;
optAsyncEnable1 : TRadioButton;
optAsyncEnable2 : TRadioButton;
optAsyncEnable3 : TRadioButton;
optAsyncEnable4 : TRadioButton;
optAsyncEnable5 : TRadioButton;
optAsyncEnable6 : TRadioButton;
optAsyncEnable7 : TRadioButton;
editOutput: TEdit;
procedure btnSelectDeviceClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure txtScanTimeChange(Sender: TObject);
procedure chkSyncAOEnableClick(Sender: TObject);
procedure cmdStartClick(Sender: TObject);
procedure cmdStopClick(Sender: TObject);
procedure ScanTimerTimer(Sender: TObject);
Private
{ Private declarations }
lErrCde : Longint;
Public
{ Public declarations }
lDeviceNum : Longint;
lDeviceHandle : Longint;
szDescription : array[0..81] of Char;
ptDevGetFeatures : PT_DeviceGetFeatures;
ptDevFeatures : DEVFEATURES;
ptAOVoltageOut : PT_AOVoltageOut;
ptAOCurrentOut : PT_AOCurrentOut;
MaxAOChannel : Integer;
OutputIndex : Integer;
OutputValue : array[0..3] of Single;
szErrMsg : string[100];
pszErrMsg : PChar;
End;
Var
frmMain: TfrmMain;
const AO_RANGE_SETTING : Smallint = $2000;
Implementation
{$R *.DFM}
{*************************************************************
* Function: Handle the error code. If the input error code > 0,
* it means some error apperent. This function can
* show the error message to a message box and stop
* this application.
* Input: The error code.
* return: none
************************************************************* }
Function DoesErr(var lErrCode: LongInt): integer;
var
szErrMsg : string[100];
pszErrMsg : PChar;
begin
{Check the pressed error code}
If (lErrCode <> 0) Then
Begin
pszErrMsg := @szErrMsg;
DRV_GetErrorMessage(lErrCode, pszErrMsg);
Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
DoesErr := 1;
End
Else
DoesErr := 0;
end;
Procedure TfrmMain.btnSelectDeviceClick(Sender: TObject);
Var
i : Integer;
Begin
DRV_SelectDevice(Handle, True, lDeviceNum, szDescription);
labDeviceName.Caption := szDescription;
// Open device to get feature
lErrCde := DRV_DeviceOpen(lDeviceNum, lDeviceHandle);
If ( DoesErr(lErrCde) = 1 ) Then
Exit;
ptDevGetFeatures.buffer := @ptDevFeatures;
ptDevGetFeatures.size := sizeof(ptDevFeatures);
lErrCde := DRV_DeviceGetFeatures(lDeviceHandle, ptDevGetFeatures);
If ( DoesErr(lErrCde) = 1 ) Then
Begin
DRV_DeviceClose(lDeviceHandle);
Exit;
End;
MaxAOChannel := ptDevFeatures.usMaxAOChl;
DRV_DeviceClose(lDeviceHandle);
If chkSyncAOEnable.Checked Then
Begin
optAsyncEnable0.Enabled := False;
optAsyncEnable1.Enabled := False;
optAsyncEnable2.Enabled := False;
optAsyncEnable3.Enabled := False;
optAsyncEnable4.Enabled := False;
optAsyncEnable5.Enabled := False;
optAsyncEnable6.Enabled := False;
optAsyncEnable7.Enabled := False;
For i := 0 To 7 do
Begin
If i < MaxAOChannel Then
Case i of
0 : chkSyncEnable0.Enabled := True;
1 : chkSyncEnable1.Enabled := True;
2 : chkSyncEnable2.Enabled := True;
3 : chkSyncEnable3.Enabled := True;
4 : chkSyncEnable4.Enabled := True;
5 : chkSyncEnable5.Enabled := True;
6 : chkSyncEnable6.Enabled := True;
7 : chkSyncEnable7.Enabled := True;
End
Else
Case i of
0 : chkSyncEnable0.Enabled := False;
1 : chkSyncEnable1.Enabled := False;
2 : chkSyncEnable2.Enabled := False;
3 : chkSyncEnable3.Enabled := False;
4 : chkSyncEnable4.Enabled := False;
5 : chkSyncEnable5.Enabled := False;
6 : chkSyncEnable6.Enabled := False;
7 : chkSyncEnable7.Enabled := False;
End;
End;
End
Else
Begin
chkSyncEnable0.Enabled := False;
chkSyncEnable1.Enabled := False;
chkSyncEnable2.Enabled := False;
chkSyncEnable3.Enabled := False;
chkSyncEnable4.Enabled := False;
chkSyncEnable5.Enabled := False;
chkSyncEnable6.Enabled := False;
chkSyncEnable7.Enabled := False;
For i := 0 To 7 do
Begin
If i < MaxAOChannel Then
Case i of
0 : optAsyncEnable0.Enabled := True;
1 : optAsyncEnable1.Enabled := True;
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.FormCreate(Sender: TObject);
Begin
btnSelectDeviceClick(Sender);
End;
Procedure TfrmMain.txtScanTimeChange(Sender: TObject);
Begin
ScanTimer.Interval := StrToInt(txtScanTime.Text);
End;
procedure TfrmMain.chkSyncAOEnableClick(Sender: TObject);
var
i : Integer;
begin
If chkSyncAOEnable.Checked Then
Begin
optAsyncEnable0.Enabled := False;
optAsyncEnable1.Enabled := False;
optAsyncEnable2.Enabled := False;
optAsyncEnable3.Enabled := False;
optAsyncEnable4.Enabled := False;
optAsyncEnable5.Enabled := False;
optAsyncEnable6.Enabled := False;
optAsyncEnable7.Enabled := False;
For i := 0 To 7 do
Begin
If i < MaxAOChannel Then
Case i of
0 : chkSyncEnable0.Enabled := True;
1 : chkSyncEnable1.Enabled := True;
2 : chkSyncEnable2.Enabled := True;
3 : chkSyncEnable3.Enabled := True;
4 : chkSyncEnable4.Enabled := True;
5 : chkSyncEnable5.Enabled := True;
6 : chkSyncEnable6.Enabled := True;
7 : chkSyncEnable7.Enabled := True;
End
Else
Case i of
0 : chkSyncEnable0.Enabled := False;
1 : chkSyncEnable1.Enabled := False;
2 : chkSyncEnable2.Enabled := False;
3 : chkSyncEnable3.Enabled := False;
4 : chkSyncEnable4.Enabled := False;
5 : chkSyncEnable5.Enabled := False;
6 : chkSyncEnable6.Enabled := False;
7 : chkSyncEnable7.Enabled := False;
End;
End;
End
Else
Begin
chkSyncEnable0.Enabled := False;
chkSyncEnable1.Enabled := False;
chkSyncEnable2.Enabled := False;
chkSyncEnable3.Enabled := False;
chkSyncEnable4.Enabled := False;
chkSyncEnable5.Enabled := False;
chkSyncEnable6.Enabled := False;
chkSyncEnable7.Enabled := False;
For i := 0 To 7 do
Begin
If i < MaxAOChannel Then
Case i of
0 : optAsyncEnable0.Enabled := True;
1 : optAsyncEnable1.Enabled := True;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -