📄 freqinform.pas
字号:
unit FreqInForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, StdCtrls,Driver;
type
TfrmFreq = class(TForm)
Label1: TLabel;
Label2: TLabel;
grpDeviceSelection: TGroupBox;
labDeviceName: TLabel;
btnSelectDevice: TButton;
grpChannel: TGroupBox;
cmbChannel: TComboBox;
btnStart: TButton;
btnExit: TButton;
grpFreqReading: TGroupBox;
stFreq: TStaticText;
tbScanTime: TTrackBar;
btnStop: TButton;
ScanTimer: TTimer;
GroupBox1: TGroupBox;
UpDownGP: TUpDown;
EditGP: TEdit;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure btnSelectDeviceClick(Sender: TObject);
procedure btnStartClick(Sender: TObject);
procedure ScanTimerTimer(Sender: TObject);
procedure btnStopClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure tbScanTimeChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
lDriverHandle: Longint; //Driver handle
szErrMsg: array[0..80] of Char; // Use for MESSAGEBOX function
ErrCde: LRESULT; // Return error code
ptCounterFreqStart: PT_CounterFreqStart;
ptCounterFreqRead: PT_CounterFreqRead;
lDeviceNum: Longint; //Advantech Device Number in your system
szDescription: array[0..80] of Char; //description for Select Device
DevFeatures: DEVFEATURES; // structure for device features
ptDevGetFeatures: PT_DeviceGetFeatures;
constructor Create();
end;
var
frmFreq: TfrmFreq;
implementation
{$R *.dfm}
constructor TfrmFreq.Create();
begin
lDriverHandle := 0;
inherited Create(Owner);
end;
procedure TfrmFreq.FormCreate(Sender: TObject);
var
i: Integer;
begin
If(lDriverHandle <> 0) Then
begin
DRV_DeviceClose(lDriverHandle);
lDriverHandle := 0;
End;
If (DRV_SelectDevice(Handle, False, lDeviceNum, szDescription)=1) Then
Application.MessageBox('Can not Open Select Device Dialog', 'Error');
labDeviceName.Caption := szDescription;
ErrCde := DRV_DeviceOpen(lDeviceNum, lDriverHandle);
if(ErrCde <> SUCCESS)then
begin
DRV_GetErrorMessage(ErrCde, @szErrMsg);
Application.MessageBox(szErrMsg, 'Error!!', MB_OK);
Exit;
end;
ptDevGetFeatures.buffer := @DevFeatures;
ptDevGetFeatures.size := sizeof(DEVFEATURES);
ErrCde := DRV_DeviceGetFeatures(lDriverHandle,ptDevGetFeatures);
if (ErrCde <> SUCCESS)then
begin
DRV_GetErrorMessage(ErrCde,@szErrMsg);
Application.MessageBox(szErrMsg,'Driver Message', MB_OK);
DRV_DeviceClose(lDriverHandle);
Exit;
end;
if (DevFeatures.usMaxTimerChl = 0)then
begin
Application.MessageBox('No Counter Channel','Driver Message', MB_OK);
DRV_DeviceClose(lDriverHandle);
Exit;
end;
cmbChannel.Clear;
i := 0;
while (i < DevFeatures.usMaxTimerChl) do
begin
cmbChannel.Items.Add(IntToStr(i));
i := i+2;
end;
cmbChannel.ItemIndex := 0;
end;
procedure TfrmFreq.btnSelectDeviceClick(Sender: TObject);
begin
FormCreate(Sender);
end;
procedure TfrmFreq.btnStartClick(Sender: TObject);
begin
ptCounterFreqStart.counter := StrToInt(cmbChannel.Text);
ptCounterFreqStart.GatePeriod := StrToInt(EditGP.Text);
ptCounterFreqStart.GateMode := 0;
ErrCde := DRV_CounterFreqStart(lDriverHandle,ptCounterFreqStart);
if(ErrCde <> SUCCESS) then
begin
DRV_GetErrorMessage(ErrCde,@szErrMsg);
Application.MessageBox(szErrMsg,'Driver Message', MB_OK);
Exit;
end;
//Start the Timer
ScanTimer.Interval := tbScanTime.Position;
ScanTimer.Enabled := True;
btnStart.Enabled := False;
btnStop.Enabled := True;
grpChannel.Enabled := False;
grpDeviceSelection.Enabled := False;
btnExit.Enabled := False;
EditGP.Enabled := False;
UpDownGP.Enabled := False;
end;
procedure TfrmFreq.ScanTimerTimer(Sender: TObject);
var
fFreq: Single;
strFreq: String;
begin
ptCounterFreqRead.counter := StrToInt(cmbChannel.Text);
ptCounterFreqRead.freq := @fFreq;
ErrCde := DRV_CounterFreqRead(lDriverHandle,ptCounterFreqRead);
if(ErrCde <> SUCCESS) then
begin
DRV_GetErrorMessage(ErrCde,@szErrMsg);
Application.MessageBox(szErrMsg,'Driver Message', MB_OK);
ScanTimer.Enabled := False;
end;
//display the data
strFreq := Format('%.3f',[fFreq]);
stFreq.Caption := (strFreq+'HZ');
end;
procedure TfrmFreq.btnStopClick(Sender: TObject);
var
port: Smallint;
begin
ScanTimer.Enabled := False;
port := StrToInt(cmbChannel.Text);
ErrCde := DRV_CounterReset(lDriverHandle,port);
if (ErrCde <> SUCCESS)then
begin
DRV_GetErrorMessage(ErrCde,@szErrMsg);
Application.MessageBox(szErrMsg,'Driver Message', MB_OK);
end;
grpDeviceSelection.Enabled := True;
grpChannel.Enabled := True;
btnExit.Enabled := True;
btnStart.Enabled := True;
btnStop.Enabled := False;
EditGP.Enabled := True;
UpDownGP.Enabled := True;
end;
procedure TfrmFreq.btnExitClick(Sender: TObject);
begin
If(lDriverHandle <> 0) Then
begin
DRV_DeviceClose(lDriverHandle);
lDriverHandle := 0;
End;
Application.Terminate;
end;
procedure TfrmFreq.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If(True = btnStop.Enabled) Then
Begin
btnStopClick(Sender);
End;
If(lDriverHandle <> 0) Then
Begin
DRV_DeviceClose(lDriverHandle);
lDriverHandle := 0;
End;
end;
procedure TfrmFreq.tbScanTimeChange(Sender: TObject);
begin
if( False = btnStart.Enabled)then
begin
ScanTimer.Enabled := False;
if(0 = tbScanTime.Position)then
ScanTimer.Interval := 0
else
ScanTimer.Interval := tbScanTime.Position;
end;
ScanTimer.Enabled := True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -