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

📄 mainform.pas

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