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

📄 diintdlg.cpp

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   m_DisableBtn2.EnableWindow( TRUE );
   m_EnableBtn2.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,
	  // you can get about 20 KHz response ratio by using PENTIUM 200 MMX PC.
	  pThreadObject = AfxBeginThread( CDiIntDlg::EventThread, &ptThreadArg, THREAD_PRIORITY_TIME_CRITICAL, 0, 0, NULL );
     m_pThreadHandle = pThreadObject->m_hThread;
   }
}

void CDiIntDlg::OnEnableBtn3()
{
   PT_EnableEvent  EventSetting;
   CWinThread*     pThreadObject;
   
   m_bDI0Flag  = TRUE;
   usStartFlag  = 1;    
   EventSetting.Enabled   = TRUE;
   EventSetting.EventType = ADS_EVT_INTERRUPT_DI0;   
   EventSetting.Count     = m_uCount_DI0;
   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_bDI1Flag  = TRUE;
   usStartFlag  = 1;    
   EventSetting.Enabled   = TRUE;
   EventSetting.Count     = m_uCount_DI1;
   EventSetting.EventType = ADS_EVT_INTERRUPT_DI1;   
   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_bIDI0Flag = FALSE;

	if ( !(m_bDI0Flag || m_bDI1Flag || m_bIDI0Flag || m_bIDI1Flag ))
	{
		KillThread();
      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_bIDI1Flag  = FALSE;

	if ( !( m_bDI0Flag || m_bDI1Flag || m_bIDI1Flag || m_bIDI0Flag ))
	{
		KillThread();
		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_bDI0Flag  = FALSE;

	if ( !( m_bDI0Flag || m_bDI1Flag || m_bIDI1Flag || m_bIDI0Flag ))
	{
		KillThread();
		if ( !m_StartFlag )
      {
         m_DeviceSelect.EnableWindow( TRUE );
      }
	}
    usStartFlag = 0;
	while ( !flag )
	{
	   m_DisableBtn3.EnableWindow( FALSE );
	   m_EnableBtn3.EnableWindow( TRUE );	
	   
       EventSetting.EventType = ADS_EVT_INTERRUPT_DI0;
	   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_bDI1Flag  = FALSE;

	if ( !( m_bDI0Flag || m_bDI1Flag || m_bIDI0Flag || m_bIDI1Flag ))
	{
		KillThread();
		if ( !m_StartFlag )
      {
         m_DeviceSelect.EnableWindow( TRUE );
      }
	}
   
   usStartFlag = 0;
	while ( !flag )
	{
	   m_DisableBtn4.EnableWindow( FALSE );
	   m_EnableBtn4.EnableWindow( TRUE );	
	   
       EventSetting.EventType = ADS_EVT_INTERRUPT_DI1;
	   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;
	// TODO: Add your message handler code here and/or call default
	m_bContinue = FALSE;
	if( usStartFlag == 1 )
	{
	   usStartFlag = 0;
      if ( m_bIDI0Flag == TRUE )
      {
         OnDisableBtn1();
      }
      if ( m_bIDI1Flag == TRUE )
      {
         OnDisableBtn2();
      }
      if ( m_bDI0Flag == TRUE ) 
      {
         OnDisableBtn3();
      }
      if ( m_bDI1Flag == TRUE )
      {
         OnDisableBtn4();       
      }
	               
	   //EventSetting.Enabled = FALSE;
	   //EventSetting.Count = 1;
	   //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;   }	    

	}
	Sleep(50L);
	if ( m_DriverHandle	!= NULL )
		DRV_DeviceClose( &m_DriverHandle );

	CDialog::OnClose();
}

void CDiIntDlg::OnOK() 
{
	// TODO: Add extra validation here
	//PT_EnableEvent	EventSetting;	
	m_bContinue = FALSE;
	if( usStartFlag == 1 )
	{
	   usStartFlag = 0;
      if ( m_bIDI0Flag == TRUE )
      {
         OnDisableBtn1();
      }
      if ( m_bIDI1Flag == TRUE )
      {
         OnDisableBtn2();
      }
      if ( m_bDI0Flag == TRUE) 
      {
         OnDisableBtn3();
      }
      if ( m_bDI1Flag == TRUE )
      {
         OnDisableBtn4();       
      }
	   //EventSetting.Enabled = FALSE;
	   //EventSetting.Count   = 1;
	   //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;   
	   //}	    
	}
	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);
}

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

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

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

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




UINT CDiIntDlg::EventThread(LPVOID ThreadArg)
{
   INT   i;
   DWORD	dwStartTime;
   DWORD	dwCurrentTime;
   DWORD	dwTime;
   float	fEventCount_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++ )
   {
      fEventCount_IDI[ i ] = 0.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 )
         {
            fEventCount_IDI[ 0 ]++;
         }
         if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_IDI1 )
         {
            fEventCount_IDI[ 1 ]++;
         }
         if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_DI0 )
         {
            fEventCount_IDI[ 2 ]++;
         }
         if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_DI1 )
         {
            fEventCount_IDI[ 3 ]++;
         }
      }

	  //m_bFlag = FALSE;
	  dwCurrentTime = GetTickCount();
	  if ( ( dwTime = dwCurrentTime - dwStartTime ) >= 1000 ) 
      {
	     for ( i = 0; i < 4; i++ )
         { 
            ratio_IDI[i] = ((fEventCount_IDI[i] / (float)dwTime) * 1000.0);
		      sprintf( szBuf_IDI[i], "%.3f", ratio_IDI[i] );			               
		      fEventCount_IDI[i] = 0.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_DI0,  szBuf_IDI[2] );
         ::SetDlgItemText( ptTArg->m_hWnd, IDC_INTERRUPTCOUNT_DI1,  szBuf_IDI[3] );
	     dwStartTime = GetTickCount();      
	  }
	}
    //m_bFlag = FALSE;
	return 0;
}


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;
}

void CDiIntDlg::KillThread()
{
	DWORD dwExitCode;
	m_bContinue = FALSE;
	m_bFlag = FALSE;
	GetExitCodeThread( m_pThreadHandle, &dwExitCode );
	if( dwExitCode == STILL_ACTIVE )
	{
		TerminateThread( m_pThreadHandle, dwExitCode );
	}

}

⌨️ 快捷键说明

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