📄 mainform.pas
字号:
unit MainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, Driver;
type
TfrmMain = class(TForm)
labDeviceName: TLabel;
Label2: TLabel;
Label6: TLabel;
Label7: TLabel;
btnSelect: TButton;
trbTime: TTrackBar;
btnStop: TButton;
btnStart: TButton;
btnExit: TButton;
GroupBox2: TGroupBox;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
edtHigh: TStaticText;
edtLow: TStaticText;
cmbChannel: TComboBox;
ScanTimer: TTimer;
procedure btnSelectClick(Sender: TObject);
procedure btnStartClick(Sender: TObject);
procedure btnStopClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure trbTimeChange(Sender: TObject);
procedure ScanTimerTimer(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
ptPWMStartRead : PT_PWMStartRead;
lDeviceNum : Longint; //Advantech Device Number in your system
szDescription : array[0..80] of Char; //description for Select Device
ptDevGetFeatures : PT_DeviceGetFeatures;
DevFeatures : DEVFEATURES; // structure for device features
gwChannel : SmallInt;
bOpen : boolean ;
gfHiperiod : single; // read hiperiod data
gfLowperiod : single ; // read lowperiod data
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnSelectClick(Sender: TObject);
var
i : integer;
begin
bOpen := false;
//This function is for getting the device number
if(1 = DRV_SelectDevice(Handle, True, lDeviceNum, szDescription))then
Application.MessageBox('Can not Open Select Device Dialog', 'Error');
labDeviceName.Caption := AnsiString(szDescription);
//open the Device
ErrCde := DRV_DeviceOpen(lDeviceNum, lDriverHandle);
if (ErrCde <> SUCCESS) then
begin
DRV_GetErrorMessage(ErrCde,@szErrMsg);
Application.MessageBox(szErrMsg,'Driver Message', MB_OK);
DRV_DeviceClose(lDriverHandle);
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');
DRV_DeviceClose(lDriverHandle);
Exit;
end;
for i := 0 to ((DevFeatures.usMaxTimerChl-1) div 2) do
begin
cmbChannel.Items.Add(IntToStr(i*2));
end;
cmbChannel.ItemIndex := 0;
DRV_DeviceClose(lDriverHandle);
end;
procedure TfrmMain.btnStartClick(Sender: TObject);
begin
ErrCde := DRV_DeviceOpen(lDeviceNum, lDriverHandle);
if (ErrCde <> SUCCESS) then
begin
DRV_GetErrorMessage(ErrCde,@szErrMsg);
Application.MessageBox(szErrMsg,'Driver Message', MB_OK);
DRV_DeviceClose(lDriverHandle);
Exit;
end;
gwChannel := cmbChannel.ItemIndex;
if(trbTime.Position > 0 ) then
ScanTimer.Interval := 1000 div trbTime.Position;
bOpen := true;
ScanTimer.Enabled := True;
btnStart.Enabled := False;
btnSelect.Enabled := False;
btnStop.Enabled := True;
cmbChannel.Enabled := False;
btnExit.Enabled := False;
end;
procedure TfrmMain.btnStopClick(Sender: TObject);
begin
ScanTimer.Enabled := False;
ErrCde := DRV_CounterReset(lDriverHandle,gwChannel);
if (ErrCde <> SUCCESS)then
begin
DRV_GetErrorMessage(ErrCde,@szErrMsg);
Application.MessageBox(szErrMsg,'Driver Message', MB_OK);
DRV_DeviceClose(lDriverHandle);
Exit;
end;
DRV_DeviceClose(lDriverHandle);
bOpen := false;
btnSelect.Enabled := True;
cmbChannel.Enabled := True;
btnExit.Enabled := True;
btnStart.Enabled := True;
btnStop.Enabled := False;
btnSelect.Enabled := true;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close();
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if( bOpen ) then
btnStopClick(nil);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
btnSelectClick (nil);
end;
procedure TfrmMain.trbTimeChange(Sender: TObject);
begin
if( bOpen = false ) then
Exit;
if(trbTime.Position > 0 ) then
ScanTimer.Interval := 1000 div trbTime.Position
else
ScanTimer.Interval := 0;
end;
procedure TfrmMain.ScanTimerTimer(Sender: TObject);
begin
ptPWMStartRead.usChan := gwChannel;
ptPWMStartRead.flHiperiod := @gfHiperiod;
ptPWMStartRead.flLowperiod := @gfLowperiod;
ErrCde := DRV_PWMStartRead(lDriverHandle,ptPWMStartRead);
if (ErrCde <> SUCCESS) then
begin
DRV_GetErrorMessage(ErrCde,@szErrMsg);
Application.MessageBox(szErrMsg,'Driver Message', MB_OK);
btnStopClick(nil);
Exit;
end;
edtHigh.Caption := FloatToStrF( gfHiperiod, ffFixed , 10, 3);
edtLow.Caption := FloatToStrF( gfLowperiod, ffFixed , 10, 3);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -