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

📄 main.pas

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

interface

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

type
  TfrmMain = class(TForm)
    GroupBox1: TGroupBox;
    cmdExit: TButton;
    cmdSelectDevice: TButton;
    Label1: TLabel;
    Label2: TLabel;
    txtDeviceNum: TEdit;
    txtDeviceName: TEdit;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label9: TLabel;
    cmbChannel: TComboBox;
    cmbDataType: TComboBox;
    cmbTransferMode: TComboBox;
    txtOutputRate: TEdit;
    txtNumberOfOutputs: TEdit;
    chkCyclicMode: TCheckBox;
    cmbOutputRange: TComboBox;
    lstWritting: TListBox;
    cmdOutputStart: TButton;
    cmdOutputStop: TButton;
    chkEventEnabled: TCheckBox;
    cmdStatus: TButton;
    txtStatus: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    GroupBox4: TGroupBox;
    Label14: TLabel;
    Label15: TLabel;
    txtErrorCode: TEdit;
    txtErrorMessage: TEdit;
    ErrorTimer: TTimer;
    DAQAO1: TDAQAO;
    procedure cmdSelectDeviceClick(Sender: TObject);
    procedure cmdExitClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure cmbChannelChange(Sender: TObject);
    procedure cmbDataTypeChange(Sender: TObject);
    procedure cmbTransferModeChange(Sender: TObject);
    procedure txtOutputRateChange(Sender: TObject);
    procedure txtNumberOfOutputsChange(Sender: TObject);
    procedure chkCyclicModeClick(Sender: TObject);
    procedure cmbOutputRangeChange(Sender: TObject);
    procedure cmdOutputStartClick(Sender: TObject);
    procedure cmdOutputStopClick(Sender: TObject);
    procedure chkEventEnabledClick(Sender: TObject);
    procedure cmdStatusClick(Sender: TObject);
    procedure DAQAO1Completed(Sender: TObject);
    procedure DAQAO1Terminated(Sender: TObject);
    procedure ErrorTimerTimer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure txtDeviceNumChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
   frmMain: TfrmMain;
   gOutputRange : Integer;
   bRet : Boolean;
   gDataArray : Variant;
implementation

{$R *.DFM} 

procedure TfrmMain.cmdSelectDeviceClick(Sender: TObject);
var
   j : Integer;
begin
   { Select Device from list }
   DAQAO1.SelectDevice;

   txtDeviceNum.Text := IntToStr(DAQAO1.DeviceNumber);
   txtDeviceName.Text := DAQAO1.DeviceName;

   { Open device }
   If DAQAO1.OpenDevice Then
   Begin
      ShowMessage(DAQAO1.ErrorMessage);
      Exit;
   End;

   if DAQAO1.MaxChannel = 0 then
   begin
      ShowMessage('Funtion Not Supported');
      DAQAO1.CloseDevice;
      Exit;
   end;

   { Get Max. channel number }
   cmbChannel.Clear;
   For j := 0 To DAQAO1.MaxChannel - 1 do
   Begin
      cmbChannel.Items.Add(IntToStr(j));
   End;
   cmbChannel.ItemIndex := DAQAO1.Channel;

   DAQAO1.CloseDevice;
end;

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

procedure TfrmMain.FormCreate(Sender: TObject);
begin
   cmdSelectDeviceClick(sender);

   { Setting initial value }
   txtDeviceNum.Text := IntToStr(DAQAO1.DeviceNumber);
   txtDeviceName.Text := DAQAO1.DeviceName;

   cmbChannel.ItemIndex := DAQAO1.Channel;
   cmbDataType.ItemIndex := DAQAO1.DataType;
   cmbTransferMode.ItemIndex := DAQAO1.TransferMode;
   cmbOutputRange.ItemIndex := DAQAO1.OutputType;

   txtOutputRate.Text := CurrToStr(DAQAO1.OutputRate);
   txtNumberOfOutputs.Text := IntToStr(DAQAO1.NumberOfOutputs);
   
   gOutputRange := 5;
end;

procedure TfrmMain.cmbChannelChange(Sender: TObject);
begin
   DAQAO1.Channel := cmbChannel.ItemIndex;
end;

procedure TfrmMain.cmbDataTypeChange(Sender: TObject);
begin
   DAQAO1.DataType := cmbDataType.ItemIndex;
end;

procedure TfrmMain.cmbTransferModeChange(Sender: TObject);
begin
   DAQAO1.TransferMode := cmbTransferMode.ItemIndex;
end;

procedure TfrmMain.txtOutputRateChange(Sender: TObject);
begin
   DAQAO1.OutputRate := StrToInt(txtOutputRate.Text);
end;

procedure TfrmMain.txtNumberOfOutputsChange(Sender: TObject);
begin
   DAQAO1.NumberOfOutputs := StrToInt(txtNumberOfOutputs.Text);
end;

procedure TfrmMain.chkCyclicModeClick(Sender: TObject);
begin
   if chkCyclicMode.Checked then
      DAQAO1.CyclicMode := True
   else
      DAQAO1.CyclicMode := False;
end;

procedure TfrmMain.cmbOutputRangeChange(Sender: TObject);
begin
   gOutputRange := (cmbOutputRange.ItemIndex  + 1) * 5;
end;

procedure TfrmMain.cmdOutputStartClick(Sender: TObject);
var
   i : LongInt;
   j : LongInt;
begin
   { Open device }
   If DAQAO1.OpenDevice Then
   Begin
      ShowMessage(DAQAO1.ErrorMessage);
      Exit;
   End;

   DAQAO1.Channel := cmbChannel.ItemIndex;
   DAQAO1.DataType := cmbDataType.ItemIndex;
   DAQAO1.TransferMode := cmbTransferMode.ItemIndex;
   DAQAO1.OutputRate := StrToInt(txtOutputRate.Text);
   DAQAO1.NumberOfOutputs := StrToInt(txtNumberOfOutputs.Text);
   DAQAO1.CyclicMode := chkCyclicMode.Checked;
   DAQAO1.EventEnabled := chkEventEnabled.Checked;

   { Set Data Array }
   If DAQAO1.DataType = adReal Then
   begin
      gDataArray := VarArrayCreate([0, DAQAO1.NumberOfOutputs - 1], varSingle);
      For i := 0 To DAQAO1.NumberOfOutputs - 1 do
      begin
         gDataArray[i] := (gOutputRange / 2) * (Sin((Pi / 180) * i) + 1);
      end;
      DAQAO1.SetRealBuffer(gDataArray);
   end else
   begin
      gDataArray := VarArrayCreate([0, DAQAO1.NumberOfOutputs - 1], varSmallint);
      j := DAQAO1.NumberOfOutputs div 2;
      for i := 0 To j do
      	 gDataArray[i] := 4095;
      for i := j + 1 to DAQAO1.NumberOfOutputs - 1 do
      	 gDataArray[i] := 0;
      DAQAO1.SetRawBuffer(gDataArray);
   end;

   cmdOutputStart.Enabled := False;
   cmdOutputStop.Enabled := True;
   cmdExit.Enabled := False;
   cmdSelectDevice.Enabled := False;
   
   { Start getting data }
   bRet := DAQAO1.OutputStart;
   if bRet then
   begin
      ShowMessage(DAQAO1.ErrorMessage);
      close;
   end;
   
   ErrorTimer.Enabled := TRUE;
end;

procedure TfrmMain.cmdOutputStopClick(Sender: TObject);
begin
   ErrorTimer.Enabled := False;

   { Stop get data }
   bRet := DAQAO1.OutputStop;
   if bRet then
   begin
      ShowMessage(DAQAO1.ErrorMessage);
      close;
   end;

   { Close device }
   DAQAO1.CloseDevice;

   cmdOutputStart.Enabled := True;
   cmdOutputStop.Enabled := False;
   cmdExit.Enabled := True;
   cmdSelectDevice.Enabled := True;
end;

procedure TfrmMain.chkEventEnabledClick(Sender: TObject);
begin
   if chkEventEnabled.Checked then
      DAQAO1.EventEnabled := True
   else
      DAQAO1.EventEnabled := False;
end;

procedure TfrmMain.cmdStatusClick(Sender: TObject);
begin
   txtStatus.Text := IntToStr(DAQAO1.OutputStatus);
end;

procedure TfrmMain.DAQAO1Completed(Sender: TObject);
var
   i : LongInt;
   j : LongInt;
begin
   ErrorTimer.Enabled := False;
   
   lstWritting.Clear;
   if DAQAO1.NumberOfOutputs < 10 then
      j := 0
   else
      j := DAQAO1.NumberOfOutputs - 10;

   For i := j To DAQAO1.NumberOfOutputs - 1 do
   begin
      if DAQAO1.DataType = adReal then
   	 lstWritting.Items.Add(IntToStr(i) + ': ' + FormatFloat('0.000000', gDataArray[i]))
      else
      	 lstWritting.Items.Add(IntToStr(i) + ': ' + IntToStr(gDataArray[i]));
   end;
end;

procedure TfrmMain.DAQAO1Terminated(Sender: TObject);
var
   i : LongInt;
   j : LongInt;
begin
   ErrorTimer.Enabled := False;

   { Stop wtite data }
   DAQAO1.OutputStop;

   lstWritting.Clear;
   if DAQAO1.NumberOfOutputs < 10 then
      j := 0
   else
      j := DAQAO1.NumberOfOutputs - 10;

   For i := j To DAQAO1.NumberOfOutputs - 1 do
   begin
      if DAQAO1.DataType = adReal then
	 lstWritting.Items.Add(IntToStr(i) + ': ' + FormatFloat('0.000000', gDataArray[i]))
      else
      	 lstWritting.Items.Add(IntToStr(i) + ': ' + IntToStr(gDataArray[i]));
   end;

   { Close device}
   DAQAO1.CloseDevice;

   cmdOutputStart.Enabled := True;
   cmdOutputStop.Enabled := False;
   cmdExit.Enabled := True;
   cmdSelectDevice.Enabled := True;
end;

procedure TfrmMain.ErrorTimerTimer(Sender: TObject);
begin
   txtErrorCode.Text := IntToStr(DAQAO1.ErrorCode);
   txtErrorMessage.Text := DAQAO1.ErrorMessage;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   ErrorTimer.Enabled := False;
   DAQAO1.OutputStop;
   DAQAO1.CloseDevice;
end;

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

end.

⌨️ 快捷键说明

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