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

📄 thermounit.pas

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

interface

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

type
  TfrmThermo = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    txtDeviceNum: TEdit;
    txtDeviceName: TEdit;
    cmdSelectDevice: TButton;
    cmdExit: TBitBtn;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    cmbDasChannel: TComboBox;
    cmbInputRange: TComboBox;
    GroupBox3: TGroupBox;
    Label5: TLabel;
    Label6: TLabel;
    cmbThermoType: TComboBox;
    cmbThermoScale: TComboBox;
    GroupBox4: TGroupBox;
    Label7: TLabel;
    txtDaughterName: TEdit;
    Label8: TLabel;
    cmbDaughterChannel: TComboBox;
    GroupBox5: TGroupBox;
    hscrlFreq: TScrollBar;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    ScanTimer: TTimer;
    cmdThermoStart: TButton;
    cmdThermoStop: TButton;
    Label12: TLabel;
    txtThermoReading: TEdit;
    Label13: TLabel;
    txtSampleNumber: TEdit;
    DAQAI1: TDAQAI;
    cmdSelectDaughter: TButton;
    procedure cmbInputRangeClick(Sender: TObject);
    procedure cmbDasChannelClick(Sender: TObject);
    procedure cmbDaughterChannelClick(Sender: TObject);
    procedure cmdSelectDaughterClick(Sender: TObject);
    procedure cmbThermoScaleClick(Sender: TObject);
    procedure cmbThermoTypeClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure cmdSelectDeviceClick(Sender: TObject);
    procedure cmdThermoStartClick(Sender: TObject);
    procedure cmdThermoStopClick(Sender: TObject);
    procedure hscrlFreqChange(Sender: TObject);
    procedure ScanTimerTimer(Sender: TObject);
    procedure txtDeviceNameChange(Sender: TObject);
    procedure cmbInputRangeChange(Sender: TObject);
    procedure cmbDasChannelChange(Sender: TObject);
    procedure cmbDaughterChannelChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure txtDeviceNumChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmThermo: TfrmThermo;
  gGainCode : Integer;
  gGainCodeList : array[0..15] of Integer;
  gNumOfInputRange : Integer;
  gInputRangeList : array[0..29] of String;
  gReading : Boolean;
  gSampleNumber : Integer;

implementation

{$R *.DFM}

procedure TfrmThermo.cmbInputRangeClick(Sender: TObject);
begin
   DAQAI1.ThermoDasGain := cmbInputRange.ItemIndex;
end;

procedure TfrmThermo.cmbDasChannelClick(Sender: TObject);
begin
   DAQAI1.ThermoDasChannel := cmbDasChannel.ItemIndex;
end;

procedure TfrmThermo.cmbDaughterChannelClick(Sender: TObject);
begin
   DAQAI1.DaughterChannel := cmbDaughterChannel.ItemIndex;
end;

procedure TfrmThermo.cmdSelectDaughterClick(Sender: TObject);
var
   j : Integer;
begin
   DAQAI1.ThermoDasChannel := cmbDasChannel.ItemIndex;
   DAQAI1.SelectDaughter;

   txtDaughterName.Enabled := True;
   cmbDaughterChannel.Enabled := True;
    
   cmbDaughterChannel.Clear;
   for j := 0 to 31 do
      cmbDaughterChannel.Items.Add (IntToStr(j));

   txtDaughterName.Text := DAQAI1.DaughterName;
   cmbDaughterChannel.ItemIndex := 0;
end;

procedure TfrmThermo.cmbThermoScaleClick(Sender: TObject);
begin
   DAQAI1.ThermoScale := cmbThermoScale.ItemIndex;
end;

procedure TfrmThermo.cmbThermoTypeClick(Sender: TObject);
begin
   DAQAI1.ThermoType := cmbThermoType.ItemIndex;
end;

procedure TfrmThermo.FormCreate(Sender: TObject);
begin
   {Select default device}
   cmdSelectDevice.Click;

   {Setting initial value}
   txtDeviceNum.Text := IntToStr(DAQAI1.DeviceNumber);
   txtDeviceName.Text := DAQAI1.DeviceName;
   
   {Add selectable items of Thermocouple type}
   cmbThermoType.Items.Add ('J type');          { 0 }
   cmbThermoType.Items.Add ('K type');          { 1 }
   cmbThermoType.Items.Add ('S type');          { 2 }
   cmbThermoType.Items.Add ('T type');          { 3 }
   cmbThermoType.Items.Add ('B type');          { 4 }
   cmbThermoType.Items.Add ('R type');          { 5 }
   cmbThermoType.Items.Add ('E type');          { 6 }

   {Set the default selection of thermocouple type}
   cmbThermoType.ItemIndex := 0;
   DAQAI1.ThermoType := 0;

   {Add selectable items of Thermocouple scale}
   cmbThermoScale.Items.Add ('C');          { 0 }
   cmbThermoScale.Items.Add ('F');          { 1 }
   cmbThermoScale.Items.Add ('R');          { 2 }
   cmbThermoScale.Items.Add ('K');          { 3 }
   
   {Set the default selection of thermocouple type}
   cmbThermoScale.ItemIndex := 0;
   DAQAI1.ThermoScale := 0;

   {Disable Daughter Board}
   txtDaughterName.Text := DAQAI1.DaughterName;

   txtDaughterName.Enabled := False;
   cmbDaughterChannel.Enabled := False;
end;

procedure TfrmThermo.cmdSelectDeviceClick(Sender: TObject);
var
   i : Integer;
   j : Integer;
   bRet : Boolean;
   strGain : WideString;
begin
   DAQAI1.SelectDevice;

   txtDeviceNum.Text := IntToStr(DAQAI1.DeviceNumber);
   txtDeviceName.Text := DAQAI1.DeviceName;
   cmbInputRange.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
      gInputRangeList[i] := strGain;
      cmbInputRange.Items.Add(gInputRangeList[i]);
      i := i + 1;
      bRet := DAQAI1.GetNextInputRange(strGain);
   end;

   If i <> 0 then
   begin
      cmbInputRange.ItemIndex := 0;
      DAQAI1.ThermoDasGain := 0;
      gNumOfInputRange := i - 1;
   end;

   {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;

   cmbDasChannel.Clear;
   for j := 0 to i - 1 do
      cmbDasChannel.Items.Add (IntToStr(j));
   if i <> 0 then
      cmbDasChannel.ItemIndex := 0;

   DAQAI1.CloseDevice;
end;

procedure TfrmThermo.cmdThermoStartClick(Sender: TObject);
begin
   if DAQAI1.OpenDevice then
   begin
      ShowMessage(DAQAI1.ErrorMessage);
      Exit;
   end;

   cmdThermoStart.Enabled := False;
   cmdThermoStop.Enabled := True;
   cmdExit.Enabled := False;
   cmdSelectDevice.Enabled := False;
   GroupBox2.Enabled := False;
   GroupBox3.Enabled := False;
   GroupBox4.Enabled := False;

   {Start getting data}
   gReading := True;
   
   hscrlFreq.Refresh;
end;

procedure TfrmThermo.cmdThermoStopClick(Sender: TObject);
begin
   {Stop get data}
   gReading := False;

   {Close device}
   DAQAI1.CloseDevice;

   cmdThermoStart.Enabled := True;
   cmdThermoStop.Enabled := False;
   cmdExit.Enabled := True;
   cmdSelectDevice.Enabled := True;
   GroupBox2.Enabled := True;
   GroupBox3.Enabled := True;
   GroupBox4.Enabled := True;
end;

procedure TfrmThermo.hscrlFreqChange(Sender: TObject);
var
   value : double;
begin
   if hscrlFreq.position = 0 then
      ScanTimer.Interval := 0
   else
   begin
      value := 1000 / hscrlFreq.position;
      ScanTimer.Interval := OleVariant(value);
   end;
end;

procedure TfrmThermo.ScanTimerTimer(Sender: TObject);
begin
   if gReading then
   begin
      txtThermoReading.Text := FormatFloat('0.000000', DAQAI1.ThermoRead);
      gSampleNumber := gSampleNumber + 1;
      txtSampleNumber.Text := IntToStr(gSampleNumber);
   end;
end;

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

procedure TfrmThermo.cmbInputRangeChange(Sender: TObject);
begin
   DAQAI1.ThermoDasGain := cmbInputRange.ItemIndex;
end;

procedure TfrmThermo.cmbDasChannelChange(Sender: TObject);
begin
   DAQAI1.ThermoDasChannel := cmbDasChannel.ItemIndex;
end;

procedure TfrmThermo.cmbDaughterChannelChange(Sender: TObject);
begin
   DAQAI1.DaughterChannel := cmbDaughterChannel.ItemIndex;
end;

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

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

end.

⌨️ 快捷键说明

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