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

📄 main.pas

📁 使用研华DAQ和Delphi实现研华数据采集卡的多种功能.包括数据输入输出。内含多个源码
💻 PAS
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DAQCounterLib_TLB, ExtCtrls, StdCtrls, OleCtrls;

type
  TfMain = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    txtDeviceNum: TEdit;
    txtDeviceName: TEdit;
    cmdSelectDevice: TButton;
    frmCfg: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    cmbChannel: TComboBox;
    cmbGateMode: TComboBox;
    Label5: TLabel;
    txtGatePeriod: TEdit;
    Label6: TLabel;
    txtScanTime: TEdit;
    frmActing: TGroupBox;
    Label8: TLabel;
    txtFreq: TEdit;
    cmdScanStart: TButton;
    cmdScanStop: TButton;
    cmdExit: TButton;
    tmrScan: TTimer;
    Label9: TLabel;
    Label10: TLabel;
    DAQCounter1: TDAQCounter;
    Label11: TLabel;
    procedure cmdSelectDeviceClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure cmdExitClick(Sender: TObject);
    procedure cmdScanStartClick(Sender: TObject);
    procedure cmdScanStopClick(Sender: TObject);
    procedure txtScanTimeChange(Sender: TObject);
    procedure tmrScanTimer(Sender: TObject);
    procedure cmbChannelChange(Sender: TObject);
    procedure cmbGateModeChange(Sender: TObject);
    procedure txtDeviceNumChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fMain: TfMain;

implementation

{$R *.DFM}
{********************************************************************}
{ Function : Display error message to a dialog box.                  }
{            The format of Long string and short string in Delphi is }
{            different from Null-terminated that used in C.          }
{                                                                    }
{            The long/short string use 1'st char to denote the string}
{            length without termonated char in the tail of string.   }
{                                                                    }
{            The Null-terminated string use Null Char as a string    }
{            termonated and without string length information.       }
{                                                                    }
{            The Message box use Null-Terminated string.             }
{                                                                    }
{ Paramater: sErrMsg: In, Error message string.                      }
{ Return:    None                                                    }
{********************************************************************}
procedure ErrorMsgBox( sErrMsg : WideString);
var
   sErrString : String[51];
   sCaption   : String[51];
begin
   sErrString := sErrMsg + Char(0);
   sCaption := fMain.Caption + ' Error' + Char(0);
   Application.MessageBox(@sErrString[1], @sCaption, MB_OK or MB_ICONEXCLAMATION);
end;

{-----------------------------------------------------------------------}
{   Object methods                                                      }

procedure TfMain.cmdSelectDeviceClick(Sender: TObject);
var
   sTmp : string[50];
   i :    integer;
begin
   {Select Device from list}
   DAQCounter1.SelectDevice;

   {Dispaly selection result}
   str(DAQCounter1.DeviceNumber, sTmp);
   txtDeviceNum.Text := sTmp;
   txtDeviceName.Text := DAQCounter1.DeviceName;

   {Clear selectable items}
   cmbChannel.Clear;
   frmCfg.Enabled := false;
   frmActing.Enabled := False;
   cmdScanStart.Enabled := False;
   cmdScanStop.Enabled := False;

   {Open device}
   If DAQCounter1.OpenDevice Then
   begin
      ErrorMsgBox(DAQCounter1.ErrorMessage);
      Exit;
   End;

   if DAQCounter1.MaxCounterNumber = 0 then
   begin
      ShowMessage('Function Not Supported');
      DAQCounter1.CloseDevice;
      Exit;
   end;

   {Display selectable items }
   For i := 0 To DAQCounter1.MaxCounterNumber - 1 do
      cmbChannel.Items.Add(IntToStr(i));

   If DAQCounter1.MaxCounterNumber > 0 Then
      cmbChannel.ItemIndex := DAQCounter1.channel;

   DAQCounter1.CloseDevice;

   {Active UI}
   frmCfg.Enabled := True;
   frmActing.Enabled := True;
   cmdScanStart.Enabled := True;
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
   cmdSelectDeviceClick(Sender);

   {Give first selection}
   txtDeviceNum.Text := IntToStr(DAQCounter1.DeviceNumber);
   cmbChannel.ItemIndex := DAQCounter1.Channel;
   cmbGateMode.ItemIndex := DAQCounter1.GateMode;
   txtGatePeriod.Text := IntToStr(DAQCounter1.GatePeriod);
end;

procedure TfMain.cmdExitClick(Sender: TObject);
begin
   Application.Terminate;
end;

procedure TfMain.cmdScanStartClick(Sender: TObject);
begin
   {Open device}
   If DAQCounter1.OpenDevice Then
   begin
      ErrorMsgBox(DAQCounter1.ErrorMessage);
      Exit;
   End;

   DAQCounter1.Channel := cmbChannel.ItemIndex;
   DAQCounter1.GateMode := cmbGateMode.ItemIndex;
   DAQCounter1.GatePeriod := Round(StrToFloat(txtGatePeriod.Text));

   {Start Action}
   DAQCounter1.EnableFrequency(True);
   tmrScan.Enabled := True;

   {Manage UI}
   cmdExit.Enabled := False;
   cmdScanStart.Enabled := False;
   cmdSelectDevice.Enabled := False;
   cmdScanStop.Enabled := True;
   cmdSelectDevice.Enabled := False;
end;

procedure TfMain.cmdScanStopClick(Sender: TObject);
begin
   {Stop action}
   tmrScan.Enabled := False;
   DAQCounter1.EnableFrequency(False);
   If DAQCounter1.CloseDevice Then
   begin
      ErrorMsgBox(DAQCounter1.ErrorMessage);
      Exit;
   End;

   {Manage UI}
   cmdExit.Enabled := True;
   cmdScanStart.Enabled := true;
   cmdSelectDevice.Enabled := True;
   cmdScanStop.Enabled := False;
   cmdSelectDevice.Enabled := True;
end;

procedure TfMain.txtScanTimeChange(Sender: TObject);
begin
   tmrScan.Interval := StrToInt(txtScanTime.Text);
end;

procedure TfMain.tmrScanTimer(Sender: TObject);
begin
   txtFreq.Text := FormatFloat('0.000', DAQCounter1.FrequencyValue);
end;

procedure TfMain.cmbChannelChange(Sender: TObject);
begin
   DAQCounter1.Channel := cmbChannel.ItemIndex;
end;

procedure TfMain.cmbGateModeChange(Sender: TObject);
begin
   DAQCounter1.GateMode := cmbGateMode.ItemIndex;
end;

procedure TfMain.txtDeviceNumChange(Sender: TObject);
begin
   DAQCounter1.DeviceNumber := StrToInt(txtDeviceNum.Text);
   txtDeviceName.Text := DAQCounter1.DeviceName;
end;

procedure TfMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   tmrScan.Enabled := False;
   DAQCounter1.EnableFrequency(False);
   DAQCounter1.CloseDevice;
end;

end.

⌨️ 快捷键说明

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