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

📄 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;
    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;
    fFreq: Single;

  end;

var
  frmFreq: TfrmFreq;
   bRun: Boolean = False;
   bOpen: Boolean = False;

implementation

{$R *.dfm}

procedure TfrmFreq.FormCreate(Sender: TObject);
var
    i: Integer;
begin
 If(DRV_SelectDevice(Handle, False, lDeviceNum, szDescription)=1) Then
 Begin
        Application.MessageBox('Can not Open Select Device Dialog', 'Error');
 End;
 labDeviceName.Caption := szDescription;
 bRun := False;

 if(bOpen = False)then
 begin
     ErrCde := DRV_DeviceOpen(lDeviceNum, lDriverHandle);
     if(ErrCde <> SUCCESS)then
     begin
         DRV_GetErrorMessage(ErrCde, @szErrMsg);
         Application.MessageBox(szErrMsg, 'Error!!', MB_OK);
         Exit;
     end;
     bOpen := True;
 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);
     bOpen := False;
     Exit;
 end;
 if (DevFeatures.usMaxTimerChl = 0)then
 begin
     Application.MessageBox('No Counter Channel','Driver Message', MB_OK);
     DRV_DeviceClose(lDriverHandle);
     bOpen := False;
     Exit;
 end;

 i := 0;
 while (i < DevFeatures.usMaxTimerChl) do
 begin
     cmbChannel.Items.Add(IntToStr(i));
     i := i+2;
 end;
 
end;

procedure TfrmFreq.btnSelectDeviceClick(Sender: TObject);
begin
    FormCreate(Sender);
end;

procedure TfrmFreq.btnStartClick(Sender: TObject);
begin
    ptCounterFreqStart.counter := StrToInt(cmbChannel.Text);
    ptCounterFreqStart.GatePeriod := 0;
    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;

   ScanTimer.Enabled := True;
    bRun := True;
    btnStart.Enabled := False;
    btnStop.Enabled := True;
    grpChannel.Enabled := False;
    grpDeviceSelection.Enabled := False;
    btnExit.Enabled := False;

end;

procedure TfrmFreq.ScanTimerTimer(Sender: TObject);
var

    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: Longint;
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;
    bRun := FALSE;
    grpDeviceSelection.Enabled := True;
    grpChannel.Enabled := True;
    btnExit.Enabled := True;
    btnStart.Enabled := True;
    btnStop.Enabled := False;



end;

procedure TfrmFreq.btnExitClick(Sender: TObject);
begin
 Application.Terminate;
end;

procedure TfrmFreq.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if(True = bRun)then
    begin
        btnStopClick(Sender);
    end;
    if(True = bOpen) then
    begin
        DRV_DeviceClose(lDriverHandle);
    end;

end;

procedure TfrmFreq.tbScanTimeChange(Sender: TObject);
begin
      if( True = bRun)then
      begin
        ScanTimer.Enabled := False;
        if(0 = tbScanTime.Position)then
           ScanTimer.Interval := 0
        else
            ScanTimer.Interval := 1000 div tbScanTime.Position;
      end;
        ScanTimer.Enabled := True;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -