📄 waveset.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 + -