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

📄 formmain.pas

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 PAS
字号:
unit FormMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Driver;

type
  TfrmMain = class(TForm)
    GroupBox1: TGroupBox;
    btnSelectDevice: TButton;
    labDeviceName: TLabel;
    grpPWMConfiguration: TGroupBox;
    chkPWMEnable0: TCheckBox;
    chkPWMEnable1: TCheckBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    txtPeriod0: TEdit;
    txtPeriod1: TEdit;
    txtHiPeriod0: TEdit;
    txtHiPeriod1: TEdit;
    grpPluesOutCount: TGroupBox;
    chkPluseEnable0: TCheckBox;
    chkPluseEnable1: TCheckBox;
    txtPluseCount0: TEdit;
    txtPluseCount1: TEdit;
    btnRun: TButton;
    btnStop: TButton;
    btnExit: TButton;

    procedure btnSelectDeviceClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure chkPWMEnable0Click(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure btnRunClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure chkPluseEnable0Click(Sender: TObject);
    procedure chkPluseEnable1Click(Sender: TObject);
    procedure chkPWMEnable1Click(Sender: TObject);

  private
    { Private declarations }

  public
    { Public declarations }
    lDeviceNum    :	Longint;
    lDeviceHandle :	Longint;
    szDescription :	array[0..81] of Char;
    ErrorNum:	Longint;

    ptDevFeatures:			DevFeatures;	{ structure for device features }
    ptDevGetFeatures:		PT_DeviceGetFeatures;
    ptCounterPWMSetting:	PT_CounterPWMSetting;

  end;

var
  frmMain: TfrmMain;

implementation

{$R *.DFM}


{*************************************************************
 * Function: Handle the error code. If the input error code > 0,
 *           it means some error apperent.  This function can
 *           show the error message to a message box and stop
 *           this application.
 * Input:    The error code.
 * return:   none
 ************************************************************* }
Function DoesErr(var lErrCode: LongInt): integer;
var
	szErrMsg   : string[100];
	pszErrMsg  : PChar;
begin
     {Check the pressed error code}
	If (lErrCode <> 0) Then
     Begin
		pszErrMsg := @szErrMsg;
		DRV_GetErrorMessage(lErrCode, pszErrMsg);
		Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
		DoesErr := 1;
	  End
	Else
		DoesErr := 0;
end;


procedure TfrmMain.btnSelectDeviceClick(Sender: TObject);
begin
	DRV_SelectDevice(Handle, True, lDeviceNum, szDescription);
   labDeviceName.Caption := szDescription;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
	DRV_SelectDevice(Handle, True, lDeviceNum, szDescription);
   labDeviceName.Caption := szDescription;
end;

procedure TfrmMain.chkPWMEnable0Click(Sender: TObject);
begin
   If chkPWMEnable0.Checked Then
     Begin
      txtPeriod0.Enabled := True;
      txtHiPeriod0.Enabled := True;
     End
   Else
     Begin
      txtPeriod0.Enabled := False;
      txtHiPeriod0.Enabled := False;
     End
end;

procedure TfrmMain.chkPWMEnable1Click(Sender: TObject);
begin
   If chkPWMEnable1.Checked Then
     Begin
      txtPeriod1.Enabled := True;
      txtHiPeriod1.Enabled := True;
     End
   Else
     Begin
      txtPeriod1.Enabled := False;
      txtHiPeriod1.Enabled := False;
     End
end;

procedure TfrmMain.btnExitClick(Sender: TObject);
begin
	Close;
end;

procedure TfrmMain.btnRunClick(Sender: TObject);
var
	code:	Integer;
begin
   ErrorNum := DRV_DeviceOpen(lDeviceNum, lDeviceHandle);
	If ( DoesErr(ErrorNum) = 1 ) Then
		Exit;

   ptDevGetFeatures.buffer := @ptDevFeatures;
   ptDevGetFeatures.size := sizeof(ptDevFeatures);

   ErrorNum := DRV_DeviceGetFeatures(lDeviceHandle, ptDevGetFeatures);
	If ( DoesErr(ErrorNum) = 1 ) Then
     Begin
      DRV_DeviceClose(lDeviceHandle);
		Exit;
     End;

   { check number of counter channels }
   If ptDevFeatures.usMaxTimerChl = 0 Then
     Begin
      MessageBox(Handle, 'No Counter Channel', 'Driver Message', IDOK);
      DRV_DeviceClose(lDeviceHandle);
      Exit;
     End;
   { Enable channel 0 PWM }
   If chkPWMEnable0.Checked Then
     Begin
      ptCounterPWMSetting.Port := 0;
      Val(txtPeriod0.Text,   ptCounterPWMSetting.Period,   code);
      Val(txtHiPeriod0.Text, ptCounterPWMSetting.HiPeriod, code);
      ptCounterPWMSetting.GateMode := 0;
      If chkPluseEnable0.Checked Then
         Val(txtPluseCount0.Text, ptCounterPWMSetting.OutCount, code)
      Else
         ptCounterPWMSetting.OutCount := 0;

      ErrorNum := DRV_CounterPWMSetting(lDeviceHandle, ptCounterPWMSetting);
		If ( DoesErr(ErrorNum) = 1 ) Then
        Begin
         DRV_DeviceClose(lDeviceHandle);
         Exit
        End;
	  End;
   { Enable channel 1 PWM }
   If chkPWMEnable1.Checked Then
     Begin
      ptCounterPWMSetting.Port := 1;
		Val(txtPeriod1.Text,   ptCounterPWMSetting.Period,   code);
      Val(txtHiPeriod1.Text, ptCounterPWMSetting.HiPeriod, code);
      ptCounterPWMSetting.GateMode := 0;
      If chkPluseEnable1.Checked Then
         Val(txtPluseCount1.Text, ptCounterPWMSetting.OutCount, code)
      Else
         ptCounterPWMSetting.OutCount := 0;

      ErrorNum := DRV_CounterPWMSetting(lDeviceHandle, ptCounterPWMSetting);
		If ( DoesErr(ErrorNum) = 1 ) Then
        Begin
         DRV_DeviceClose(lDeviceHandle);
         Exit
		  End;
	  End;
   { Start Channel 0 PWM }
   If chkPWMEnable0.Checked Then
     Begin
      ErrorNum := DRV_CounterPWMEnable(lDeviceHandle, 1);
		If ( DoesErr(ErrorNum) = 1 ) Then
        Begin
         DRV_DeviceClose(lDeviceHandle);
         Exit;
		  End;
     End;
	{ Start Channel 1 PWM }
   If chkPWMEnable1.Checked Then
     Begin
      ErrorNum := DRV_CounterPWMEnable(lDeviceHandle, 2);
		If ( DoesErr(ErrorNum) = 1 ) Then
        Begin
         DRV_DeviceClose(lDeviceHandle);
         Exit;
		  End;
	  End;

   grpPWMConfiguration.Enabled := False;
   grpPluesOutCount.Enabled    := False;

	btnRun.Enabled  := False;
	btnStop.Enabled := True;
   btnExit.Enabled := False;
end;

procedure TfrmMain.btnStopClick(Sender: TObject);
begin
   { Stop Channel 0 PWM }
   If chkPWMEnable0.Checked Then
      ErrorNum := DRV_CounterReset(lDeviceHandle, 1);
   { Stop Channel 1 PWM }
   If chkPWMEnable1.Checked Then
      ErrorNum := DRV_CounterReset(lDeviceHandle, 2);

   DRV_DeviceClose(lDeviceHandle);

   grpPWMConfiguration.Enabled := True;
   grpPluesOutCount.Enabled    := True;

	btnRun.Enabled  := True;
	btnStop.Enabled := False;
   btnExit.Enabled := True;
end;

procedure TfrmMain.chkPluseEnable0Click(Sender: TObject);
begin
   If chkPluseEnable0.Checked Then
   	txtPluseCount0.Enabled := True
   Else
   	txtPluseCount0.Enabled := False;
end;

procedure TfrmMain.chkPluseEnable1Click(Sender: TObject);
begin
   If chkPluseEnable1.Checked Then
   	txtPluseCount1.Enabled := True
   Else
   	txtPluseCount1.Enabled := False;
end;

end.

⌨️ 快捷键说明

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