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

📄 waveset.pas

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 PAS
字号:
unit WaveSet;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Driver;

type
  SWAVE = Record
    wWaveform  : Integer;   { 0: SINE 1: TRIANGLE 2: SQUARE 3: SINE_TRIANGLE }
    fMagnitude : Real;
    fOffset    : Real;
    wPeriod    : Integer;
  end;
  LPSWAVE = ^SWAVE;
  TFrmWave = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    WaveCH0: TComboBox;
    MagnitudeCH0: TEdit;
    OffsetCH0: TEdit;
    PeriodCH0: TEdit;
    GroupBox2: TGroupBox;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    WaveCH3: TComboBox;
    MagnitudeCH3: TEdit;
    OffsetCH3: TEdit;
    PeriodCH3: TEdit;
    GroupBox3: TGroupBox;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    WaveCH1: TComboBox;
    MagnitudeCH1: TEdit;
    OffsetCH1: TEdit;
    PeriodCH1: TEdit;
    GroupBox4: TGroupBox;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    WaveCH2: TComboBox;
    MagnitudeCH2: TEdit;
    OffsetCH2: TEdit;
    PeriodCH2: TEdit;
    OK: TButton;
    procedure FormCreate(Sender: TObject);
    procedure OKClick(Sender: TObject);
    procedure WaveCH0Change(Sender: TObject);
    procedure WaveCH1Change(Sender: TObject);
    procedure WaveCH2Change(Sender: TObject);
    procedure WaveCH3Change(Sender: TObject);
    procedure MagnitudeCH0Change(Sender: TObject);
    procedure MagnitudeCH1Change(Sender: TObject);
    procedure MagnitudeCH2Change(Sender: TObject);
    procedure MagnitudeCH3Change(Sender: TObject);
    procedure OffsetCH0Change(Sender: TObject);
    procedure OffsetCH1Change(Sender: TObject);
    procedure OffsetCH2Change(Sender: TObject);
    procedure OffsetCH3Change(Sender: TObject);
    procedure PeriodCH0Change(Sender: TObject);
    procedure PeriodCH1Change(Sender: TObject);
    procedure PeriodCH2Change(Sender: TObject);
    procedure PeriodCH3Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmWave: TFrmWave;
  szWaveform: array[0..4] of PChar = ('SINE', 'TRIANGLE', 'SQUARE', 'SINETRIANGLE', 'None');
  sWaveCh0: SWAVE = (wWaveform: 0;      { output waveform A index }
                     fMagnitude: 2.00; { the magnitude of output waveform A }
                     fOffset: 2.00;    { the offset of output waveform A }
                     wPeriod: 2048);    { the points of one period }
  sWaveCh1: SWAVE = (wWaveform: 1;      { output waveform B index }
                     fMagnitude: 1.00; { the magnitude of output waveform B }
                     fOffset: 3.00;    { the offset of output waveform B }
                     wPeriod: 2048);    { the points of one period }
  sWaveCh2: SWAVE = (wWaveform: 2;      { output waveform C index }
                     fMagnitude: 2.00; { the magnitude of output waveform C }
                     fOffset: 2.00;    { the offset of output waveform C }
                     wPeriod: 2048);    { the points of one period }
  sWaveCh3: SWAVE = (wWaveform: 3;      { output waveform D index }
                     fMagnitude: 2.00; { the magnitude of output waveform D }
                     fOffset: 2.00;    { the offset of output waveform D }
                     wPeriod: 2048);    { the points of one period }
  usEnabledChannel: SHORT = 0;
  usChannelCount: SHORT  = 0;
  tempPtr: Pointer;

implementation
uses Main;

{$R *.dfm}

procedure TFrmWave.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  { Initialize Output Waveform's Selection }
  for i := 0 to 4 do
  begin
    WaveCH0.Items.Add(szWaveform[i]);
    WaveCH1.Items.Add(szWaveform[i]);
    WaveCH2.Items.Add(szWaveform[i]);
    WaveCH3.Items.Add(szWaveform[i]);
  end;

  WaveCH0.ItemIndex := sWaveCh0.wWaveform;
  WaveCH1.ItemIndex := sWaveCh1.wWaveform;
  WaveCH2.ItemIndex := sWaveCh2.wWaveform;
  WaveCH3.ItemIndex := sWaveCh3.wWaveform;

  { Initialize Magnitude }
  MagnitudeCH0.Text := Format('%6.2f', [sWaveCh0.fMagnitude]);
  MagnitudeCH1.Text := Format('%6.2f', [sWaveCh1.fMagnitude]);
  MagnitudeCH2.Text := Format('%6.2f', [sWaveCh2.fMagnitude]);
  MagnitudeCH3.Text := Format('%6.2f', [sWaveCh3.fMagnitude]);

  { Initialize Offset }
  OffsetCH0.Text := Format('%6.2f', [sWaveCh0.fOffset]);
  OffsetCH1.Text := Format('%6.2f', [sWaveCh1.fOffset]);
  OffsetCH2.Text := Format('%6.2f', [sWaveCh2.fOffset]);
  OffsetCH3.Text := Format('%6.2f', [sWaveCh3.fOffset]);

  { Initialize Period }
  PeriodCH0.Text := Format('%d', [sWaveCh0.wPeriod]);
  PeriodCH1.Text := Format('%d', [sWaveCh1.wPeriod]);
  PeriodCH2.Text := Format('%d', [sWaveCh2.wPeriod]);
  PeriodCH3.Text := Format('%d', [sWaveCh3.wPeriod]);
end;

procedure TFrmWave.OKClick(Sender: TObject);
var
  i: Integer;
begin
  if (bRunTimer) then
  begin
    for i := 0 to 3 do
    begin
      case i of
        0:
        begin
          if (sWaveCh0.wWaveform <> 4) then { 4 --> No Waveform }
          begin
            usEnabledChannel := usEnabledChannel or $01;
            { set real voltage to hVoltageBuf }
            SetRealBuffer(lpVoltageBuf[0], gulConvNum, @sWaveCh0);
            usChannelCount := usChannelCount + 1;
          end
          else
            continue;
        end;
        1:
        begin
          if (sWaveCh1.wWaveform <> 4) then
          begin
            usEnabledChannel := usEnabledChannel or $02;
            SetRealBuffer(lpVoltageBuf[1], gulConvNum, @sWaveCh1);
            usChannelCount := usChannelCount + 1;
          end
          else
            continue;
        end;
        2:
        begin
          if (sWaveCh2.wWaveform <> 4) then
          begin
            usEnabledChannel := usEnabledChannel or $04;
            SetRealBuffer(lpVoltageBuf[2], gulConvNum, @sWaveCh2);
            usChannelCount := usChannelCount + 1;
          end
          else
            continue;
        end;
        3:
        begin
          if (sWaveCh3.wWaveform <> 4) then
          begin
            usEnabledChannel := usEnabledChannel or $08;
            SetRealBuffer(lpVoltageBuf[3], gulConvNum, @sWaveCh3);
            usChannelCount := usChannelCount + 1;
          end
          else
            continue;
        end;
      end;

      { call FAOScale for transfer voltage to binary data }
      tempPtr := lpVoltageBuf[i];
      ptFAOScale.VoltArray := tempPtr;
      tempPtr := lpBuf[i];
      ptFAOScale.BinArray  := tempPtr;
      ptFAOScale.chan      := i;
      ptFAOScale.count     := gulConvNum;
      ErrCde := DRV_FAOScale(DriverHandle, ptFAOScale);
      if (ErrCde <> 0) then
      begin
        DoesErr(ErrCde);
        MyFreeBuffer();
        DRV_DeviceClose(DriverHandle);
        exit;
      end;
    end;

    SetMultiToOneBuffer(usEnabledChannel,gulConvNum);
  end;

  Close();
end;

procedure TFrmWave.WaveCH0Change(Sender: TObject);
begin
  sWaveCh0.wWaveform := WaveCH0.ItemIndex;
end;

procedure TFrmWave.WaveCH1Change(Sender: TObject);
begin
  sWaveCh1.wWaveform := WaveCH1.ItemIndex;
end;

procedure TFrmWave.WaveCH2Change(Sender: TObject);
begin
  sWaveCh2.wWaveform := WaveCH2.ItemIndex;
end;

procedure TFrmWave.WaveCH3Change(Sender: TObject);
begin
  sWaveCh3.wWaveform := WaveCH3.ItemIndex;
end;

procedure TFrmWave.MagnitudeCH0Change(Sender: TObject);
begin
  sWaveCh0.fMagnitude := StrToFloat(MagnitudeCH0.Text);
end;

procedure TFrmWave.MagnitudeCH1Change(Sender: TObject);
begin
  sWaveCh1.fMagnitude := StrToFloat(MagnitudeCH1.Text);
end;

procedure TFrmWave.MagnitudeCH2Change(Sender: TObject);
begin
  sWaveCh2.fMagnitude := StrToFloat(MagnitudeCH2.Text);
end;

procedure TFrmWave.MagnitudeCH3Change(Sender: TObject);
begin
  sWaveCh3.fMagnitude := StrToFloat(MagnitudeCH3.Text);
end;

procedure TFrmWave.OffsetCH0Change(Sender: TObject);
begin
  sWaveCh0.fOffset := StrToFloat(OffsetCH0.Text);
end;

procedure TFrmWave.OffsetCH1Change(Sender: TObject);
begin
  sWaveCh1.fOffset := StrToFloat(OffsetCH1.Text);
end;

procedure TFrmWave.OffsetCH2Change(Sender: TObject);
begin
  sWaveCh2.fOffset := StrToFloat(OffsetCH2.Text);
end;

procedure TFrmWave.OffsetCH3Change(Sender: TObject);
begin
  sWaveCh3.fOffset := StrToFloat(OffsetCH3.Text);
end;

procedure TFrmWave.PeriodCH0Change(Sender: TObject);
begin
  sWaveCh0.wPeriod := StrToInt(PeriodCH0.Text);
end;

procedure TFrmWave.PeriodCH1Change(Sender: TObject);
begin
  sWaveCh1.wPeriod := StrToInt(PeriodCH1.Text);
end;

procedure TFrmWave.PeriodCH2Change(Sender: TObject);
begin
  sWaveCh2.wPeriod := StrToInt(PeriodCH2.Text);
end;

procedure TFrmWave.PeriodCH3Change(Sender: TObject);
begin
  sWaveCh3.wPeriod := StrToInt(PeriodCH3.Text);
end;

end.

⌨️ 快捷键说明

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