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

📄 frmmain.pas

📁 usb4711A数据采集卡的AD转换通道程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit FrmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, Driver, Thread, CheckForm;

type
  TFrmADInt = class(TForm)
    Label1: TLabel;
    DeviceSelect: TButton;
    Label2: TLabel;
    Datalist: TListBox;
    cmbScanChl: TComboBox;
    GroupBox1: TGroupBox;
    Inprange: TComboBox;
    GroupBox2: TGroupBox;
    Internal: TRadioButton;
    External: TRadioButton;
    GroupBox3: TGroupBox;
    Pacer: TEdit;
    Conversion: TEdit;
    GroupBox4: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Cyclic: TCheckBox;
    Evtenable: TCheckBox;
    Datafloat: TCheckBox;
    GroupBox5: TGroupBox;
    FifoEnable: TCheckBox;
    txtFifoSize: TEdit;
    GroupBox6: TGroupBox;
    cmdRun: TButton;
    cmdExit: TButton;
    Label6: TLabel;
    cmdStop: TButton;
    procedure DeviceSelectClick(Sender: TObject);
    procedure cmbScanChlChange(Sender: TObject);
    procedure InprangeChange(Sender: TObject);
    procedure InternalClick(Sender: TObject);
    procedure ExternalClick(Sender: TObject);
    procedure CyclicClick(Sender: TObject);
    procedure EvtenableClick(Sender: TObject);
    procedure DatafloatClick(Sender: TObject);
    procedure FifoEnableClick(Sender: TObject);
    procedure cmdRunClick(Sender: TObject);
    procedure cmdStopClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure cmdExitClick(Sender: TObject);
    procedure CheckEvent();
    procedure Terminate();
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const MaxEntries = 255;

var
  FrmADInt: TFrmADInt;
  DeviceHandle            : Longint;
  ptDevGetFeatures        : PT_DeviceGetFeatures;
  lpDevFeatures           : DEVFEATURES;
  devicelist              : array [0..MaxEntries] of PT_DEVLIST;
  SubDevicelist           : array [0..MaxEntries] of PT_DEVLIST;
  ErrCde                  : Longint;
  lpAIConfig              : PT_AIConfig;
  ptAIGetConfig           : PT_AIGetConfig;
  lpDEVCONFIG_AI          : DEVCONFIG_AI;
  AiCtrMode               : Integer;
  wGainCode               : array [0..15] of Integer;
  iGainIndex              : array [0..15] of Integer;
  hbuf                    : HGLOBAL;
  hUserbuf                : HGLOBAL;     { for voltage data }
  ptFAIIntStart           : PT_FAIIntStart;      { FAIIntStart table }
  ptFAITransfer           : PT_FAITransfer;      { FAITransfer table }
  ptEnableEvent           : PT_EnableEvent;      { Enable event }
  ptCheckEvent            : PT_CheckEvent;      // Check event
  szbuffer                : string[80];
  { used for fixed memory for the installed devices }
  bRun                    : Boolean;             { flag for running }
  gwGain                  : array [0..15] of Integer;
  dwDeviceNum             : Longint;
  gdwPacerRate            : Longint;             { pacer rate }
  gulConvNum              : Integer;             { conversion number }
  gwStartChl              : Integer;             { scan channels }
  gbCyclicCount           : Boolean;             { number of cyclic count }
  gbEvtFlag               : Boolean;             { event enable(0) }
  gbDataType              : Boolean;             { display type : FLOAT(1) }
  gbFifoEnable            : Boolean;             { Fifo }
  gwFifoSize              : Integer;             { Fifo Size }
  gwGainList              : Integer;             { gain list flag }
  gwGainCode              : Integer;             { gaincode }
  gwExtTrig               : Integer;             { external or internal trigger }
  gwCyclicMode            : Integer;             { cyclic or non-cyclic mode }
  gwBufferMode            : Integer;             { buffer: single or double }
  gwIntrCount             : Integer;
  gwActiveBuf             : Integer;             { return by FAICheck }
  gwOverrun               : Integer;             { return by FAICheck, FAITransfer }
  gwStopped               : Integer;             { return by FAICheck }
  gulRetrieved            : Longint;             { return by FAICheck }
  gwHalfReady             : Integer;             { return by FAICheck }
  ulIntCounter           : Longint = 0;
  ulBfChgCounter         : Longint = 0;
  ulOverrunCounter       : Longint = 0;
  chkThread               : CheckThread;
  bThreadloop             : boolean = true;

implementation

{$R *.dfm}

Function ChkErr(lErrCde: Longint): Boolean;
var
  szErrMsg   : string[100];
  pszErrMsg  : PChar;
begin
  If (lErrCde <> 0) Then
  begin
    pszErrMsg := @szErrMsg;
    DRV_GetErrorMessage(lErrCde, pszErrMsg);
    Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
    ChkErr := True;
  end
  Else
    ChkErr := False;
end;

procedure TFrmADInt.DeviceSelectClick(Sender: TObject);
var
  i       : Integer;
  tempNum : Integer;
  lpDEVCONFIG_AI : DEVCONFIG_AI;
begin
  { Step 1: Select Device }
  ErrCde := DRV_SelectDevice(Handle, False, dwDeviceNum, @szbuffer[0]);
  If (ChkErr(ErrCde)) Then
    Exit;
  DeviceSelect.Caption := szbuffer;

  { Step 2: Open Devicev }
  ErrCde := DRV_DeviceOpen(dwDeviceNum, DeviceHandle);
  If (ChkErr(ErrCde)) Then
    Exit;

  { Step 3:Get device features }
  ptDevGetFeatures.buffer := @lpDevFeatures;
  ErrCde := DRV_DeviceGetFeatures(DeviceHandle, ptDevGetFeatures);
  If (ChkErr(ErrCde)) Then
  begin
    DRV_DeviceClose(DeviceHandle);
    Exit;
  end;  
     
  { Step 4 : Initialize Input Range List Combobox with device features }
  If (lpDevFeatures.usNumGain <> 0) Then
  begin
    Inprange.Enabled := True;
    Inprange.Clear;
    For i := 0 To lpDevFeatures.usNumGain - 1 do
    begin
      Inprange.Items.Add(lpDevFeatures.glGainList[i].szGainStr);
    end;
    Inprange.ItemIndex := 0;
  end
  Else
    Inprange.Enabled := False;
    
  { Step 5 : Init scan channel }
  ptAIGetConfig.buffer := @lpDEVCONFIG_AI;
  ErrCde := DRV_AIGetConfig(DeviceHandle, ptAIGetConfig);
  If (ChkErr(ErrCde)) Then
  begin
    DRV_DeviceClose(DeviceHandle);
    Exit;
  end;
  tempNum := lpDevFeatures.usMaxAISiglChl ;
  For i := 0 To tempNum - 1 do
    cmbScanChl.Items.Add(IntToStr(i));
  cmbScanChl.ItemIndex := 0;

  { Step 6 : Close device }
  DRV_DeviceClose(DeviceHandle);
  cmdRun.Enabled := True;
end;

procedure TFrmADInt.cmbScanChlChange(Sender: TObject);
begin
  gwStartChl := cmbScanChl.ItemIndex;
end;

procedure TFrmADInt.InprangeChange(Sender: TObject);
begin
  gwGainCode := Inprange.ItemIndex;
end;

procedure TFrmADInt.InternalClick(Sender: TObject);
begin
  Pacer.Enabled := True;
  gwExtTrig := 0;
end;

procedure TFrmADInt.ExternalClick(Sender: TObject);
begin
  gwExtTrig := 1;
  Pacer.Enabled := False;
end;

procedure TFrmADInt.CyclicClick(Sender: TObject);
begin
  gbCyclicCount := Cyclic.Checked;
end;

procedure TFrmADInt.EvtenableClick(Sender: TObject);
begin
  gbEvtFlag := Evtenable.Checked;
end;

procedure TFrmADInt.DatafloatClick(Sender: TObject);
begin
  gbDataType := Datafloat.Checked;
end;

procedure TFrmADInt.FifoEnableClick(Sender: TObject);
var
  iFifoSize : Integer;
begin
  gbFifoEnable := FifoEnable.Checked;
  If (gbFifoEnable) Then
  begin
    txtFifoSize.Enabled := True;

    { Step 1: Device open }
    ErrCde := DRV_DeviceOpen(dwDeviceNum, DeviceHandle);
    If (ChkErr(ErrCde)) Then
      Exit;

    { Step 2: Get FIFO size }
    ErrCde := DRV_GetFIFOSize(DeviceHandle, iFifoSize);
    If (ChkErr(ErrCde)) Then
      Exit;

    { Step 3: Close device }
    DRV_DeviceClose(DeviceHandle);

    gwFifoSize := iFifoSize div 2; { divide by 2 for conversion from byte to word }
    txtFifoSize.Text := IntToStr(gwFifoSize);
    Conversion.Text := IntToStr(iFifoSize);
  end
  Else
  begin
    txtFifoSize.Enabled := False;
    txtFifoSize.Text := '';
  end;
end;

procedure TFrmADInt.cmdRunClick(Sender: TObject);
begin
  { check parameter }
  try
    StrToInt(Conversion.Text);
  except
    Application.MessageBox('Please input Numeric Conv.#!', 'Error',
                            MB_OK Or MB_ICONINFORMATION);
    Exit;
  end;
  
  If (gwExtTrig <> 0) Then       { if is internal trigger }
  begin
    try
      StrToInt(Pacer.Text);
    except
      Application.MessageBox('Please input Numeric PacerRate!', 'Error',
                              MB_OK Or MB_ICONINFORMATION);
      Exit;
    end;
  end;

  { get pace rate and conv number }
  gdwPacerRate := StrToInt(Pacer.Text);
  gulConvNum := StrToInt(Conversion.Text);
    Datalist.Clear;

⌨️ 快捷键说明

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