📄 main.pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DAQAOLib_TLB, OleCtrls, ExtCtrls, Variants;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
cmdExit: TButton;
cmdSelectDevice: TButton;
Label1: TLabel;
Label2: TLabel;
txtDeviceNum: TEdit;
txtDeviceName: TEdit;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label9: TLabel;
cmbChannel: TComboBox;
cmbDataType: TComboBox;
cmbTransferMode: TComboBox;
txtOutputRate: TEdit;
txtNumberOfOutputs: TEdit;
chkCyclicMode: TCheckBox;
cmbOutputRange: TComboBox;
lstWritting: TListBox;
cmdOutputStart: TButton;
cmdOutputStop: TButton;
chkEventEnabled: TCheckBox;
cmdStatus: TButton;
txtStatus: TEdit;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
GroupBox4: TGroupBox;
Label14: TLabel;
Label15: TLabel;
txtErrorCode: TEdit;
txtErrorMessage: TEdit;
ErrorTimer: TTimer;
DAQAO1: TDAQAO;
procedure cmdSelectDeviceClick(Sender: TObject);
procedure cmdExitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure cmbChannelChange(Sender: TObject);
procedure cmbDataTypeChange(Sender: TObject);
procedure cmbTransferModeChange(Sender: TObject);
procedure txtOutputRateChange(Sender: TObject);
procedure txtNumberOfOutputsChange(Sender: TObject);
procedure chkCyclicModeClick(Sender: TObject);
procedure cmbOutputRangeChange(Sender: TObject);
procedure cmdOutputStartClick(Sender: TObject);
procedure cmdOutputStopClick(Sender: TObject);
procedure chkEventEnabledClick(Sender: TObject);
procedure cmdStatusClick(Sender: TObject);
procedure DAQAO1Completed(Sender: TObject);
procedure DAQAO1Terminated(Sender: TObject);
procedure ErrorTimerTimer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure txtDeviceNumChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
gOutputRange : Integer;
bRet : Boolean;
gDataArray : Variant;
implementation
{$R *.DFM}
procedure TfrmMain.cmdSelectDeviceClick(Sender: TObject);
var
j : Integer;
begin
{ Select Device from list }
DAQAO1.SelectDevice;
txtDeviceNum.Text := IntToStr(DAQAO1.DeviceNumber);
txtDeviceName.Text := DAQAO1.DeviceName;
{ Open device }
If DAQAO1.OpenDevice Then
Begin
ShowMessage(DAQAO1.ErrorMessage);
Exit;
End;
if DAQAO1.MaxChannel = 0 then
begin
ShowMessage('Funtion Not Supported');
DAQAO1.CloseDevice;
Exit;
end;
{ Get Max. channel number }
cmbChannel.Clear;
For j := 0 To DAQAO1.MaxChannel - 1 do
Begin
cmbChannel.Items.Add(IntToStr(j));
End;
cmbChannel.ItemIndex := DAQAO1.Channel;
DAQAO1.CloseDevice;
end;
procedure TfrmMain.cmdExitClick(Sender: TObject);
begin
Application.Terminate;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
cmdSelectDeviceClick(sender);
{ Setting initial value }
txtDeviceNum.Text := IntToStr(DAQAO1.DeviceNumber);
txtDeviceName.Text := DAQAO1.DeviceName;
cmbChannel.ItemIndex := DAQAO1.Channel;
cmbDataType.ItemIndex := DAQAO1.DataType;
cmbTransferMode.ItemIndex := DAQAO1.TransferMode;
cmbOutputRange.ItemIndex := DAQAO1.OutputType;
txtOutputRate.Text := CurrToStr(DAQAO1.OutputRate);
txtNumberOfOutputs.Text := IntToStr(DAQAO1.NumberOfOutputs);
gOutputRange := 5;
end;
procedure TfrmMain.cmbChannelChange(Sender: TObject);
begin
DAQAO1.Channel := cmbChannel.ItemIndex;
end;
procedure TfrmMain.cmbDataTypeChange(Sender: TObject);
begin
DAQAO1.DataType := cmbDataType.ItemIndex;
end;
procedure TfrmMain.cmbTransferModeChange(Sender: TObject);
begin
DAQAO1.TransferMode := cmbTransferMode.ItemIndex;
end;
procedure TfrmMain.txtOutputRateChange(Sender: TObject);
begin
DAQAO1.OutputRate := StrToInt(txtOutputRate.Text);
end;
procedure TfrmMain.txtNumberOfOutputsChange(Sender: TObject);
begin
DAQAO1.NumberOfOutputs := StrToInt(txtNumberOfOutputs.Text);
end;
procedure TfrmMain.chkCyclicModeClick(Sender: TObject);
begin
if chkCyclicMode.Checked then
DAQAO1.CyclicMode := True
else
DAQAO1.CyclicMode := False;
end;
procedure TfrmMain.cmbOutputRangeChange(Sender: TObject);
begin
gOutputRange := (cmbOutputRange.ItemIndex + 1) * 5;
end;
procedure TfrmMain.cmdOutputStartClick(Sender: TObject);
var
i : LongInt;
j : LongInt;
begin
{ Open device }
If DAQAO1.OpenDevice Then
Begin
ShowMessage(DAQAO1.ErrorMessage);
Exit;
End;
DAQAO1.Channel := cmbChannel.ItemIndex;
DAQAO1.DataType := cmbDataType.ItemIndex;
DAQAO1.TransferMode := cmbTransferMode.ItemIndex;
DAQAO1.OutputRate := StrToInt(txtOutputRate.Text);
DAQAO1.NumberOfOutputs := StrToInt(txtNumberOfOutputs.Text);
DAQAO1.CyclicMode := chkCyclicMode.Checked;
DAQAO1.EventEnabled := chkEventEnabled.Checked;
{ Set Data Array }
If DAQAO1.DataType = adReal Then
begin
gDataArray := VarArrayCreate([0, DAQAO1.NumberOfOutputs - 1], varSingle);
For i := 0 To DAQAO1.NumberOfOutputs - 1 do
begin
gDataArray[i] := (gOutputRange / 2) * (Sin((Pi / 180) * i) + 1);
end;
DAQAO1.SetRealBuffer(gDataArray);
end else
begin
gDataArray := VarArrayCreate([0, DAQAO1.NumberOfOutputs - 1], varSmallint);
j := DAQAO1.NumberOfOutputs div 2;
for i := 0 To j do
gDataArray[i] := 4095;
for i := j + 1 to DAQAO1.NumberOfOutputs - 1 do
gDataArray[i] := 0;
DAQAO1.SetRawBuffer(gDataArray);
end;
cmdOutputStart.Enabled := False;
cmdOutputStop.Enabled := True;
cmdExit.Enabled := False;
cmdSelectDevice.Enabled := False;
{ Start getting data }
bRet := DAQAO1.OutputStart;
if bRet then
begin
ShowMessage(DAQAO1.ErrorMessage);
close;
end;
ErrorTimer.Enabled := TRUE;
end;
procedure TfrmMain.cmdOutputStopClick(Sender: TObject);
begin
ErrorTimer.Enabled := False;
{ Stop get data }
bRet := DAQAO1.OutputStop;
if bRet then
begin
ShowMessage(DAQAO1.ErrorMessage);
close;
end;
{ Close device }
DAQAO1.CloseDevice;
cmdOutputStart.Enabled := True;
cmdOutputStop.Enabled := False;
cmdExit.Enabled := True;
cmdSelectDevice.Enabled := True;
end;
procedure TfrmMain.chkEventEnabledClick(Sender: TObject);
begin
if chkEventEnabled.Checked then
DAQAO1.EventEnabled := True
else
DAQAO1.EventEnabled := False;
end;
procedure TfrmMain.cmdStatusClick(Sender: TObject);
begin
txtStatus.Text := IntToStr(DAQAO1.OutputStatus);
end;
procedure TfrmMain.DAQAO1Completed(Sender: TObject);
var
i : LongInt;
j : LongInt;
begin
ErrorTimer.Enabled := False;
lstWritting.Clear;
if DAQAO1.NumberOfOutputs < 10 then
j := 0
else
j := DAQAO1.NumberOfOutputs - 10;
For i := j To DAQAO1.NumberOfOutputs - 1 do
begin
if DAQAO1.DataType = adReal then
lstWritting.Items.Add(IntToStr(i) + ': ' + FormatFloat('0.000000', gDataArray[i]))
else
lstWritting.Items.Add(IntToStr(i) + ': ' + IntToStr(gDataArray[i]));
end;
end;
procedure TfrmMain.DAQAO1Terminated(Sender: TObject);
var
i : LongInt;
j : LongInt;
begin
ErrorTimer.Enabled := False;
{ Stop wtite data }
DAQAO1.OutputStop;
lstWritting.Clear;
if DAQAO1.NumberOfOutputs < 10 then
j := 0
else
j := DAQAO1.NumberOfOutputs - 10;
For i := j To DAQAO1.NumberOfOutputs - 1 do
begin
if DAQAO1.DataType = adReal then
lstWritting.Items.Add(IntToStr(i) + ': ' + FormatFloat('0.000000', gDataArray[i]))
else
lstWritting.Items.Add(IntToStr(i) + ': ' + IntToStr(gDataArray[i]));
end;
{ Close device}
DAQAO1.CloseDevice;
cmdOutputStart.Enabled := True;
cmdOutputStop.Enabled := False;
cmdExit.Enabled := True;
cmdSelectDevice.Enabled := True;
end;
procedure TfrmMain.ErrorTimerTimer(Sender: TObject);
begin
txtErrorCode.Text := IntToStr(DAQAO1.ErrorCode);
txtErrorMessage.Text := DAQAO1.ErrorMessage;
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ErrorTimer.Enabled := False;
DAQAO1.OutputStop;
DAQAO1.CloseDevice;
end;
procedure TfrmMain.txtDeviceNumChange(Sender: TObject);
begin
DAQAO1.DeviceNumber := StrToInt(txtDeviceNum.Text);
txtDeviceName.Text := DAQAO1.DeviceName;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -