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

📄 mainform.pas

📁 usb4711A数据采集卡的DI转换通道程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  //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 + -