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

📄 aiunit.pas

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

interface

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

type
  TForm1 = class(TForm)
    DAQAI1: TDAQAI;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    txtDeviceNum: TEdit;
    txtDeviceName: TEdit;
    cmdSelectDevice: TButton;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    cmbInputRange: TComboBox;
    cmbDataType: TComboBox;
    cmbChannel: TComboBox;
    GroupBox3: TGroupBox;
    Label6: TLabel;
    txtReturnData: TEdit;
    cmdRead: TButton;
    GroupBox4: TGroupBox;
    Label7: TLabel;
    txtScanTime: TEdit;
    Label8: TLabel;
    cmdStart: TButton;
    cmdStop: TButton;
    ScanTimer: TTimer;
    cmdExit: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure ScanTimerTimer(Sender: TObject);
    procedure cmbDataTypeClick(Sender: TObject);
    procedure cmbInputRangeClick(Sender: TObject);
    procedure cmdReadClick(Sender: TObject);
    procedure cmdSelectDeviceClick(Sender: TObject);
    procedure cmdStartClick(Sender: TObject);
    procedure cmdStopClick(Sender: TObject);
    procedure txtDeviceNumChange(Sender: TObject);
    procedure txtScanTimeChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

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

   { Setting initial value }
   cmbDataType.ItemIndex := DAQAI1.DataType;
end;

procedure TForm1.ScanTimerTimer(Sender: TObject);
Var
   bReading : Integer;
   vReading : Single;
begin
   case cmbDataType.ItemIndex Of
   0 : begin
       bReading := DAQAI1.RawInput(cmbChannel.ItemIndex);
       txtReturnData.Text := IntToStr(bReading);
       end;
   1 : begin
       vReading := DAQAI1.RealInput(cmbChannel.ItemIndex);
       txtReturnData.Text := FormatFloat('0.000000', vReading);
       end;
   end;
end;

procedure TForm1.cmbDataTypeClick(Sender: TObject);
begin
   DAQAI1.DataType := cmbDataType.ItemIndex;
end;

procedure TForm1.cmbInputRangeClick(Sender: TObject);
var
   gGainCode : Integer;
begin
   gGainCode := cmbInputRange.ItemIndex;
   DAQAI1.OverallInputRange := gGainCode;
end;

procedure TForm1.cmdReadClick(Sender: TObject);
var
   bReading : Integer;
   vReading : Single;
   uChannel : Integer;
begin
   if DAQAI1.OpenDevice then
   begin
      ShowMessage(DAQAI1.ErrorMessage);
      exit;
   end;

   uChannel := cmbChannel.ItemIndex;
   if cmbInputRange.ItemIndex < 0 then
      DAQAI1.OverallInputRange := 0
   else
      DAQAI1.OverallInputRange := cmbInputRange.ItemIndex;
   
   case cmbDataType.ItemIndex of
   0: begin
      bReading := DAQAI1.RawInput(uChannel);
      txtReturnData.Text := IntToStr(bReading);
      end;
   1: begin
      vReading := DAQAI1.RealInput(uChannel);
      txtReturnData.Text := FormatFloat('0.000000', vReading);
      end;
   end;

   DAQAI1.CloseDevice;
end;

procedure TForm1.cmdSelectDeviceClick(Sender: TObject);
var
   i : Smallint;
   j : Integer;
   strGain : WideString;
   bRet : Boolean;
begin
   DAQAI1.SelectDevice;
   
   txtDeviceNum.Text := IntToStr(DAQAI1.DeviceNumber);
   txtDeviceName.Text := DAQAI1.DeviceName;
   cmbInputRange.Items.Clear;

   {Open Device}
   if DAQAI1.OpenDevice then
   begin
      ShowMessage(DAQAI1.ErrorMessage);
      exit;
   end;

   {Get input range list}
   SetLength(strGain, 30);
   bRet := DAQAI1.GetFirstInputRange(strGain);
   i := 0;
   while bRet = False do
   begin
      cmbInputRange.Items.Add(strGain);
      i := i + 1;
      bRet := DAQAI1.GetNextInputRange(strGain);
   end;
   if i <> 0 then
      cmbInputRange.ItemIndex := 0;

   {Get Max. channel number}
   if DAQAI1.MaxDifferentialChannel > DAQAI1.MaxSingleEndedChannel then
      i := DAQAI1.MaxDifferentialChannel
   else
      i := DAQAI1.MaxSingleEndedChannel;
   if i = 0 then
   begin
      ShowMessage('Function Not Supported');
      DAQAI1.CloseDevice;
      Exit;
   end;

   cmbChannel.Items.Clear;
   for j := 0 to i - 1 do
      cmbChannel.Items.Add(IntToStr(j));

   if i <> 0 then
      cmbChannel.ItemIndex := 0;

   DAQAI1.CloseDevice;
end;

procedure TForm1.cmdStartClick(Sender: TObject);
begin
   if DAQAI1.OpenDevice then
   begin
      ShowMessage(DAQAI1.ErrorMessage);
      exit;
   end;

   cmdExit.Enabled := False;
   cmdRead.Enabled := False;
   cmdStart.Enabled := False;
   cmdStop.Enabled := True;
   cmdSelectDevice.Enabled := False;
   ScanTimer.Enabled := True;
   if cmbInputRange.ItemIndex < 0 then
      DAQAI1.OverallInputRange := 0
   else
      DAQAI1.OverallInputRange := cmbInputRange.ItemIndex;
end;

procedure TForm1.cmdStopClick(Sender: TObject);
begin
   ScanTimer.Enabled := False;
   DAQAI1.CloseDevice;

   cmdExit.Enabled := True;
   cmdRead.Enabled := True;
   cmdStart.Enabled := True;
   cmdStop.Enabled := False;
   cmdSelectDevice.Enabled := True;
end;

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

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

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   ScanTimer.Enabled := False;
   DAQAI1.CloseDevice;
end;

end.

⌨️ 快捷键说明

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