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

📄 diintdlg.cpp

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      m_pThreadHandle = pThreadObject->m_hThread;
   }
}

void CDiIntDlg::OnEnableBtn3()
{
   PT_EnableEvent  EventSetting;
   CWinThread*     pThreadObject;
   
   m_bDI16Flag  = TRUE;
   usStartFlag  = 1;    
   EventSetting.Enabled   = TRUE;
   EventSetting.Count     = m_uCount_IDI16;
   EventSetting.EventType = ADS_EVT_INTERRUPT_IDI16;   
   m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
   if ( m_ErrCde != 0) 
   {
      DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
      MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
      return;
   }

   m_DisableBtn3.EnableWindow( TRUE );
   m_EnableBtn3.EnableWindow( FALSE );
   m_DeviceSelect.EnableWindow(FALSE);


   if ( m_bFlag == FALSE )
   {
	  m_bContinue = TRUE;
	  ptThreadArg.m_lDriverHandle = m_DriverHandle;
	  ptThreadArg.m_hWnd = GetSafeHwnd();

	  // Using THREAD_PRIORITY_TIME_CRITICAL for interrupt event handling routine	  
	  pThreadObject = AfxBeginThread( 
		                 CDiIntDlg::EventThread, 
						 &ptThreadArg, 
						 THREAD_PRIORITY_TIME_CRITICAL, 
						 0, 
						 0, 
						 NULL );

      m_pThreadHandle = pThreadObject->m_hThread;
   }
}

void CDiIntDlg::OnEnableBtn4()
{
   PT_EnableEvent  EventSetting;
   CWinThread*     pThreadObject;
   
   m_bDI17Flag  = TRUE;
   usStartFlag  = 1;    
   EventSetting.Enabled   = TRUE;
   EventSetting.Count     = m_uCount_IDI17;
   EventSetting.EventType = ADS_EVT_INTERRUPT_IDI17;   
   m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
   if ( m_ErrCde != 0) 
   {
      DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
      MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
      return;
   }

   m_DisableBtn4.EnableWindow( TRUE );
   m_EnableBtn4.EnableWindow( FALSE );
   m_DeviceSelect.EnableWindow(FALSE);

   if ( m_bFlag == FALSE )
   {
	  m_bContinue = TRUE;
	  ptThreadArg.m_lDriverHandle = m_DriverHandle;
	  ptThreadArg.m_hWnd = GetSafeHwnd();

	  // Using THREAD_PRIORITY_TIME_CRITICAL for interrupt event handling routine	  
	  pThreadObject = AfxBeginThread( 
		                 CDiIntDlg::EventThread, 
						 &ptThreadArg, 
						 THREAD_PRIORITY_TIME_CRITICAL, 
						 0, 
						 0, 
						 NULL );
	  
      m_pThreadHandle = pThreadObject->m_hThread;
   }
}

void CDiIntDlg::OnDisableBtn1() 
{
	PT_EnableEvent	EventSetting;
	BOOL           flag = FALSE;
    	
   m_bDI0Flag = FALSE;

	if ( !(m_bDI0Flag || m_bDI1Flag || m_bDI16Flag || m_bDI17Flag ))
	{
	   m_bContinue = FALSE;
	   m_bFlag = FALSE;          
      if ( !m_StartFlag )
      {
         m_DeviceSelect.EnableWindow( TRUE );
      }
   }
   
   usStartFlag = 0;
	while ( !flag )
	{
       m_DisableBtn1.EnableWindow( FALSE );
       m_EnableBtn1.EnableWindow( TRUE );	
	   
       EventSetting.EventType = ADS_EVT_INTERRUPT_IDI0;
       EventSetting.Enabled   = FALSE;
       m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
       //Sleep(50L);
  	  
       if ( m_ErrCde != 0 ) 
       {
          DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
 	      MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
	      return;   
       }
       flag = TRUE;
	}
}


void CDiIntDlg::OnDisableBtn2()
{
	PT_EnableEvent	EventSetting;   
	BOOL flag = FALSE;
    
	m_bDI1Flag  = FALSE;

	if ( !( m_bDI0Flag || m_bDI1Flag || m_bDI16Flag || m_bDI17Flag ))
	{
		m_bContinue = FALSE;
		m_bFlag = FALSE;
	   
      if ( !m_StartFlag )
      {
         m_DeviceSelect.EnableWindow( TRUE );
      }
   }
      
   usStartFlag = 0;
	while ( !flag )
	{
	   m_DisableBtn2.EnableWindow( FALSE );
	   m_EnableBtn2.EnableWindow( TRUE );	
	   
       EventSetting.EventType = ADS_EVT_INTERRUPT_IDI1;
	   EventSetting.Enabled = FALSE;	      
	   m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
	        	  
	   if ( m_ErrCde != 0 ) 
       {
	      DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
	      MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
	      return;   
       }
       flag = TRUE;     
	}
}

void CDiIntDlg::OnDisableBtn3()
{
	PT_EnableEvent	EventSetting;   
	BOOL flag = FALSE;
    
	m_bDI16Flag  = FALSE;

	if ( !( m_bDI0Flag || m_bDI1Flag || m_bDI16Flag || m_bDI17Flag ))
	{
		m_bContinue = FALSE;
		m_bFlag = FALSE;
      if ( !m_StartFlag )
      {
         m_DeviceSelect.EnableWindow( TRUE );
      }
	}
  
    usStartFlag = 0;
	while ( !flag )
	{
	   m_DisableBtn3.EnableWindow( FALSE );
	   m_EnableBtn3.EnableWindow( TRUE );	
	   
       EventSetting.EventType = ADS_EVT_INTERRUPT_IDI16;
	   EventSetting.Enabled   = FALSE;	      
	   m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
	        	  
	   if ( m_ErrCde != 0 ) 
       {
	      DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
	      MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
	      return;   
       }
       flag = TRUE;     
	}
}

void CDiIntDlg::OnDisableBtn4()
{
	PT_EnableEvent	EventSetting;   
	BOOL flag = FALSE;
    
	m_bDI17Flag  = FALSE;

	if ( !( m_bDI0Flag || m_bDI1Flag || m_bDI16Flag || m_bDI17Flag ))
	{
		m_bContinue = FALSE;
		m_bFlag = FALSE;
      
      if ( !m_StartFlag )
      {
         m_DeviceSelect.EnableWindow( TRUE );
      }
	}
   
   usStartFlag = 0;
	while ( !flag )
	{
	   m_DisableBtn4.EnableWindow( FALSE );
	   m_EnableBtn4.EnableWindow( TRUE );	
	   
      EventSetting.EventType = ADS_EVT_INTERRUPT_IDI17;
	   EventSetting.Enabled = FALSE;	      
	   m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
	        	  
	   if ( m_ErrCde != 0 ) 
       {
	      DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
	      MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
	      return;   
       }
       flag = TRUE;     
	}
}


void CDiIntDlg::OnClose() 
{
	//PT_EnableEvent	EventSetting;

	m_bContinue = FALSE;
	if( usStartFlag == 1 )
	{
	   usStartFlag = 0;
	   if ( m_bDI0Flag != NULL )
      {
         OnDisableBtn1();
      }
      if ( m_bDI1Flag != NULL )
      {
         OnDisableBtn2();
      }
      if ( m_bDI16Flag !=NULL) 
      {
         OnDisableBtn3();
      }
      if ( m_bDI17Flag !=NULL )
      {
         OnDisableBtn4();       
      }         
	}
	Sleep(50L);
	if ( m_DriverHandle	!= NULL )
		DRV_DeviceClose( &m_DriverHandle );

	CDialog::OnClose();
}

void CDiIntDlg::OnOK() 
{
	// TODO: Add extra validation here
	m_bContinue = FALSE;
	if( usStartFlag == 1 )
	{
	   usStartFlag = 0;
	   if ( m_bDI0Flag != NULL )
      {
         OnDisableBtn1();
      }
      if ( m_bDI1Flag != NULL )
      {
         OnDisableBtn2();
      }
      if ( m_bDI16Flag !=NULL) 
      {
         OnDisableBtn3();
      }
      if ( m_bDI17Flag !=NULL )
      {
         OnDisableBtn4();       
      } 
	}
	if ( m_DriverHandle	!= NULL )
		DRV_DeviceClose( &m_DriverHandle );
	
	CDialog::OnOK();
}

void CDiIntDlg::OnChangeScanTime() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function to send the EM_SETEVENTMASK message to the control
	// with the ENM_CHANGE flag ORed into the lParam mask.
	
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
}

UINT CDiIntDlg::EventThread(LPVOID ThreadArg)
{
   INT   i;
   DWORD	dwStartTime;
   DWORD	dwCurrentTime;
   DWORD	dwTime;
   DWORD	dwEventCount_IDI[4];   
   float	ratio_IDI[ 4 ];
   char	    szBuf_IDI[4][20];   
   USHORT	usEventType;
   PT_ThreadArg	*ptTArg;

   ptTArg = (PT_ThreadArg *)ThreadArg;

   for ( i = 0; i < 4; i++ )
   {
      dwEventCount_IDI[ i ] = 0;
   }

   ptCheckEvent.EventType = &usEventType;
   ptCheckEvent.Milliseconds = 1000;
   dwStartTime = GetTickCount();
   while ( m_bContinue ) 
   {
      m_bFlag = TRUE;
	  if ( DRV_CheckEvent( ptTArg->m_lDriverHandle, &ptCheckEvent ) == SUCCESS) 
      {
         if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_IDI0 )
         {
            dwEventCount_IDI[ 0 ]++;
         }
         if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_IDI1 )
         {
            dwEventCount_IDI[ 1 ]++;
         }
         if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_IDI16 )
         {
            dwEventCount_IDI[ 2 ]++;
         }
         if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_IDI17 )
         {
            dwEventCount_IDI[ 3 ]++;
         }
      }

	  //m_bFlag = FALSE;
	  dwCurrentTime = GetTickCount();
	  if ( ( dwTime = dwCurrentTime - dwStartTime ) >= 1000 ) 
      {
	     for ( i = 0; i < 4; i++ )
         { 
            ratio_IDI[i] = (float)(((float)dwEventCount_IDI[i] / (float)dwTime) * 1000.0);
		    sprintf( szBuf_IDI[i], "%.3f", ratio_IDI[i] );			               
		    dwEventCount_IDI[i] = 0;
         }
         ::SetDlgItemText( ptTArg->m_hWnd, IDC_INTERRUPTCOUNT_IDI0,  szBuf_IDI[0] );
         ::SetDlgItemText( ptTArg->m_hWnd, IDC_INTERRUPTCOUNT_IDI1,  szBuf_IDI[1] );
         ::SetDlgItemText( ptTArg->m_hWnd, IDC_INTERRUPTCOUNT_IDI16, szBuf_IDI[2] );
         ::SetDlgItemText( ptTArg->m_hWnd, IDC_INTERRUPTCOUNT_IDI17, szBuf_IDI[3] );
	     dwStartTime = GetTickCount();      
	  }
	}
    //m_bFlag = FALSE;
	return 0;
}

void CDiIntDlg::OnChangeCountIDI0()
{
   UpdateData(TRUE);
}

void CDiIntDlg::OnChangeCountIDI1()
{
   UpdateData(TRUE);
}

void CDiIntDlg::OnChangeCountIDI16()
{
   UpdateData(TRUE);
}

void CDiIntDlg::OnChangeCountIDI17()
{
   UpdateData(TRUE);
}

void CDiIntDlg::OnEventPriority1() 
{
	// TODO: Add your control notification handler code here
	m_bHiPriority = FALSE;
}

void CDiIntDlg::OnEventPriority2() 
{
	// TODO: Add your control notification handler code here
	m_bHiPriority = TRUE;
}

⌨️ 快捷键说明

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