📄 mainform.pas
字号:
//Get the Pattern match value
m_MatchValue := StrToInt('0x'+txtPatternMatchValue.Text ) ;
m_ErrCde := DRV_DeviceSetProperty(m_DeviceHandle, CFG_DiPatternMatchValue, @m_MatchValue, 4);
// Enalbe event
ptEnableEvent.Enabled := Smallint(chkFDiPatternMatch.Checked);
ptEnableEvent.EventType := ADS_EVT_DI_PATTERNMATCH;
ptEnableEvent.Count := 1;
DRV_EnableEvent(m_DeviceHandle,ptEnableEvent);
txtPatternMatchValue.Enabled := not chkFDiPatternMatch.Checked;
end;
procedure TfrmMain.chkTimerClick(Sender: TObject);
begin
m_CounterValue[2] := StrToint(txtCounterValue.Text);
m_ErrCde := DRV_DeviceSetProperty(m_DeviceHandle, CFG_CounterCountValue, @(m_CounterValue[0]), 12);
ptEnableEvent.Enabled := Smallint(chkTimer.Checked);
ptEnableEvent.EventType := ADS_EVT_TC_TIMER;
ptEnableEvent.Count := 1;
DRV_EnableEvent(m_DeviceHandle,ptEnableEvent);
txtCounterValue.Enabled := not chkTimer.Checked;
end;
procedure TfrmMain.chkStatusChangeClick(Sender: TObject);
var
dwDioFdioDirection, dwDiPacerSource : DWORD;
begin
//
// Before setting CFG_IrqDiChangeStatusChannel, the user must set CFG_DioFdioDirection
// and CFG_DiPacerSource.
// CFG_DioFdioDirection can be set 32-bit DI, 16-bit DIO or 8-bit DIO, depending
// on the channel which the user want to monitor.
// NOTE: 32-bit DO is not support.
// If the user doesn't choose a pacer clock, 10MHz internal pacer clock is the default.
//
dwDioFdioDirection := 0; // 32-bit DI
m_ErrCde := DRV_DeviceSetProperty(m_DeviceHandle, CFG_DioFdioDirection, @dwDioFdioDirection, 4);
dwDiPacerSource := 3; // 10MHz
m_ErrCde := DRV_DeviceSetProperty(m_DeviceHandle, CFG_DiPacerSource, @dwDiPacerSource, 4);
//Get the Di status change channel
m_StatusChannel := StrToint(txtChangeStatusChannel.Text);
m_ErrCde := DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiChangeStatusChannel, @m_StatusChannel, 4);
// Enable event
ptEnableEvent.Enabled := Smallint(chkStatusChange.Checked);
ptEnableEvent.EventType := ADS_EVT_DI_STATUSCHANGE;
ptEnableEvent.Count := 1;
DRV_EnableEvent(m_DeviceHandle,ptEnableEvent);
txtChangeStatusChannel.Enabled := not chkStatusChange.Checked;
end;
procedure TfrmMain.txtPatternMatchValueChange(Sender: TObject);
var
lStart : Longint;
lLength : Longint;
strHex : String;
begin
//ound the Pattern Match value in 0 ~ FFFFFFFFh
If (Length(txtPatternMatchValue.Text) > 8) Then
begin
//Out of value bound
lStart := txtPatternMatchValue.SelStart;
lLength := txtPatternMatchValue.SelLength;
If lStart <> 0 Then lStart := lStart - 1;
txtPatternMatchValue.Text := IntToHex(txtPatternMatchValue.Tag,8);
txtPatternMatchValue.SelStart := lStart;
txtPatternMatchValue.SelLength := lLength ;
end;
If (Length(txtPatternMatchValue.Text) = 0) Then
begin
// 0 Value
txtPatternMatchValue.Text := '0';
txtPatternMatchValue.SelStart := 0;
end;
// Valid Patterm Match value,write this new property value to device.
strHex := '$' + txtPatternMatchValue.Text;
lStart := StrToInt(strHex);
txtPatternMatchValue.Tag := lStart;
end;
procedure TfrmMain.txtPatternMatchValueKeyPress(Sender: TObject;
var Key: Char);
var
Asckey : BYTE;
i : Integer;
begin
Asckey := BYTE(Key);
If ((Asckey >= BYTE('0')) and (Asckey <= BYTE('9')) ) Then
exit;
If ( (Asckey >= BYTE('A')) And (Asckey <= BYTE('F')) ) Then
exit;
If ( (Asckey >= BYTE('a')) And (Asckey <= BYTE('f')) ) Then
begin
for i :=0 to (BYTE('a') - BYTE('A')-1) do
begin
Dec(Key);
end;
exit;
end;
Key := Low(Key);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
lstDiSignalCondition[0] := lstDiSignalCondition0;
lstDiSignalCondition[1] := lstDiSignalCondition1;
lstDiSignalCondition[2] := lstDiSignalCondition2;
lstDiSignalCondition[3] := lstDiSignalCondition3;
lstDiSignalCondition[4] := lstDiSignalCondition4;
lstDiSignalCondition[5] := lstDiSignalCondition5;
lstDiSignalCondition[6] := lstDiSignalCondition6;
lstDiSignalCondition[7] := lstDiSignalCondition7;
chkDiInterrupt[0] := chkDiInterrupt0;
chkDiInterrupt[1] := chkDiInterrupt1;
chkDiInterrupt[2] := chkDiInterrupt2;
chkDiInterrupt[3] := chkDiInterrupt3;
chkDiInterrupt[4] := chkDiInterrupt4;
chkDiInterrupt[5] := chkDiInterrupt5;
chkDiInterrupt[6] := chkDiInterrupt6;
chkDiInterrupt[7] := chkDiInterrupt7;
txtDiInterrupt[0] := txtDiInterrupt0;
txtDiInterrupt[1] := txtDiInterrupt1;
txtDiInterrupt[2] := txtDiInterrupt2;
txtDiInterrupt[3] := txtDiInterrupt3;
txtDiInterrupt[4] := txtDiInterrupt4;
txtDiInterrupt[5] := txtDiInterrupt5;
txtDiInterrupt[6] := txtDiInterrupt6;
txtDiInterrupt[7] := txtDiInterrupt7;
bThreadloop := true;
cmdSelectDeviceClick(Sender);
end;
procedure TfrmMain.lstDiSignalCondition7Click(Sender: TObject);
var
i : Integer;
begin
m_DITriggerMode := 0;
for i := 0 to 7 do
m_DITriggerMode := m_DITriggerMode or (lstDiSignalCondition[i].ItemIndex shl i);
DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, @m_DITriggerMode, 4);
end;
procedure TfrmMain.lstDiSignalCondition6Click(Sender: TObject);
var
i : Integer;
begin
m_DITriggerMode := 0;
for i := 0 to 7 do
m_DITriggerMode := m_DITriggerMode or (lstDiSignalCondition[i].ItemIndex shl i);
DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, @m_DITriggerMode, 4);
end;
procedure TfrmMain.lstDiSignalCondition5Click(Sender: TObject);
var
i : Integer;
begin
m_DITriggerMode := 0;
for i := 0 to 7 do
m_DITriggerMode := m_DITriggerMode or (lstDiSignalCondition[i].ItemIndex shl i);
DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, @m_DITriggerMode, 4);
end;
procedure TfrmMain.lstDiSignalCondition4Click(Sender: TObject);
var
i : Integer;
begin
m_DITriggerMode := 0;
for i := 0 to 7 do
m_DITriggerMode := m_DITriggerMode or (lstDiSignalCondition[i].ItemIndex shl i);
DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, @m_DITriggerMode, 4);
end;
procedure TfrmMain.lstDiSignalCondition3Click(Sender: TObject);
var
i : Integer;
begin
m_DITriggerMode := 0;
for i := 0 to 7 do
m_DITriggerMode := m_DITriggerMode or (lstDiSignalCondition[i].ItemIndex shl i);
DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, @m_DITriggerMode, 4);
end;
procedure TfrmMain.lstDiSignalCondition2Click(Sender: TObject);
var
i : Integer;
begin
m_DITriggerMode := 0;
for i := 0 to 7 do
m_DITriggerMode := m_DITriggerMode or (lstDiSignalCondition[i].ItemIndex shl i);
DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, @m_DITriggerMode, 4);
end;
procedure TfrmMain.lstDiSignalCondition1Click(Sender: TObject);
var
i : Integer;
begin
m_DITriggerMode := 0;
for i := 0 to 7 do
m_DITriggerMode := m_DITriggerMode or (lstDiSignalCondition[i].ItemIndex shl i);
DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, @m_DITriggerMode, 4);
end;
procedure TfrmMain.lstDiSignalCondition0Click(Sender: TObject);
var
i : Integer;
begin
m_DITriggerMode := 0;
for i := 0 to 7 do
m_DITriggerMode := m_DITriggerMode or (lstDiSignalCondition[i].ItemIndex shl i);
DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, @m_DITriggerMode, 4);
end;
procedure TfrmMain.txtCounterValueChange(Sender: TObject);
var
lStart : Longint;
lLength : Longint;
begin
//
// Check value boundary and set counter 2 value to device.
// Counter 2 is the timer interrupt source, base frequency on 10 Mhz.
//
lStart := txtCounterValue.SelStart;
lLength := txtCounterValue.SelLength;
//
// Bound the input value between 2 ~ 65535.
//
if(Length(txtCounterValue.Text)=0 ) then
begin
txtCounterValue.Text := '2';
end;
if(StrToInt(txtCounterValue.Text) < 2) then
begin
txtCounterValue.Text := '2';
txtCounterValue.SelStart := 0;
txtCounterValue.SelLength := 5;
end
else if(StrToInt(txtCounterValue.Text) > 65535) then
begin
if(lStart <> 0) then
lStart := lStart-1;
txtCounterValue.Text := IntToStr(txtCounterValue.Tag);
txtCounterValue.SelStart := lStart;
txtCounterValue.SelLength := lLength;
end
else
begin
//
// Counter 2 value chaged, write new value to device.
//
txtCounterValue.Tag := StrToInt(txtCounterValue.Text);
txtCounterValue.Text := IntToStr(txtCounterValue.Tag);
txtCounterValue.SelStart := lStart;
txtCounterValue.SelLength := lLength;
end;
end;
procedure TfrmMain.txtChangeStatusChannelChange(Sender: TObject);
var
lStart : Longint;
lLength : Longint;
lValue : LongInt;
begin
// Change status channel setting.
if(Length(txtChangeStatusChannel.Text)=0 ) then
begin
txtChangeStatusChannel.Text := '0';
end;
lValue := StrToInt(txtChangeStatusChannel.Text);
If (lValue > 31) Then
begin
//Out of value bound, only support upto 31 DI channel
lStart := txtChangeStatusChannel.SelStart;
lLength := txtChangeStatusChannel.SelLength ;
If lStart <> 0 Then lStart := lStart - 1;
txtChangeStatusChannel.Text := IntToStr(txtChangeStatusChannel.Tag);
txtChangeStatusChannel.SelStart := lStart;
txtChangeStatusChannel.SelLength := lLength ;
Exit;
End;
If (lValue = 0) Then
begin
// 0 Value
txtChangeStatusChannel.Text := '0' ;
txtChangeStatusChannel.SelStart := 0 ;
End ;
// Write Change status channel property to device driver.
txtChangeStatusChannel.Tag := lValue ;
end;
procedure TfrmMain.CheckEvent();
var
ptCheckEvent : PT_CheckEvent ; // Check event
usEventTye : SmallInt;
begin
ptCheckEvent.EventType:= @usEventTye;
ptCheckEvent.Milliseconds := 500;
while(bThreadloop) do
begin
DRV_CheckEvent(m_DeviceHandle, ptCheckEvent);
case usEventTye of
ADS_EVT_DI_PATTERNMATCH:
begin
m_MatchCount := m_MatchCount+1;
txtPatternMatchEvent.Text := IntToStr(m_MatchCount);
end;
ADS_EVT_DI_STATUSCHANGE:
begin
m_StatusCount := m_StatusCount+1;
txtStatusChangeEvent.Text := IntToStr(m_StatusCount);
end;
ADS_EVT_TC_TIMER:
begin
m_TimerCount :=m_TimerCount+1;
txtCounterEvent.Text := IntToStr(m_TimerCount);
end;
ADS_EVT_INTERRUPT_DI0:
begin
m_DI0Count :=m_DI0Count+1;
txtDiInterrupt0.Text := IntToStr(m_DI0Count);
end;
ADS_EVT_INTERRUPT_DI1:
begin
m_DI1Count :=m_DI1Count+1;
txtDiInterrupt1.Text := IntToStr(m_DI1Count);
end;
ADS_EVT_INTERRUPT_DI2:
begin
m_DI2Count :=m_DI2Count+1;
txtDiInterrupt2.Text := IntToStr(m_DI2Count);
end;
ADS_EVT_INTERRUPT_DI3:
begin
m_DI3Count :=m_DI3Count+1;
txtDiInterrupt3.Text := IntToStr(m_DI3Count);
end;
ADS_EVT_INTERRUPT_DI4:
begin
m_DI4Count :=m_DI4Count+1;
txtDiInterrupt4.Text := IntToStr(m_DI4Count);
end;
ADS_EVT_INTERRUPT_DI5:
begin
m_DI5Count :=m_DI5Count+1;
txtDiInterrupt5.Text := IntToStr(m_DI5Count);
end;
ADS_EVT_INTERRUPT_DI6:
begin
m_DI6Count :=m_DI6Count+1;
txtDiInterrupt6.Text := IntToStr(m_DI6Count);
end;
ADS_EVT_INTERRUPT_DI7:
begin
m_DI7Count :=m_DI7Count+1;
txtDiInterrupt7.Text := IntToStr(m_DI7Count);
end;
else
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -