⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freqinform.pas

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 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 + -