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

📄 diintdlg.cpp

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			sprintf(szTemp,"%u",pDlg->m_DI5Count);
			pDlg->SetDlgItemText(IDC_txtDI5Int,szTemp);
			break;
		case ADS_EVT_INTERRUPT_DI6:
			pDlg->m_DI6Count++;
			sprintf(szTemp,"%u",pDlg->m_DI6Count);
			pDlg->SetDlgItemText(IDC_txtDI6Int,szTemp);
			break;
		case ADS_EVT_INTERRUPT_DI7:
			pDlg->m_DI7Count++;
			sprintf(szTemp,"%u",pDlg->m_DI7Count);
			pDlg->SetDlgItemText(IDC_txtDI7Int,szTemp);
			break;
		default :
			break;
		}
	}


	return 0;

}

void CDIINTDlg::OnSelectDevice() 
{
	// TODO: Add your control notification handler code here
	UCHAR	DeviceName[100];
	char szTemp[80];
	bThreadloop = FALSE;
	DWORD dwCount;
	DWORD ExitCode;
	// TODO: Add your control notification handler code here
	if ( m_DeviceHandle	!= NULL )
	{
		if(pThread)
		{
		   GetExitCodeThread(pThread->m_hThread,&ExitCode);
		   if(ExitCode==STILL_ACTIVE)
			   TerminateThread(pThread->m_hThread,ExitCode);

		}
		DRV_DeviceClose( &m_DeviceHandle );
	}

	DRV_SelectDevice( m_hWnd, FALSE, &m_DeviceNum, DeviceName );
	m_DeviceName=DeviceName;

	m_ErrCde = DRV_DeviceOpen( m_DeviceNum, &m_DeviceHandle);	
	if ( m_ErrCde != SUCCESS )
	{
		DRV_GetErrorMessage(m_ErrCde,(LPSTR)szErrMsg);
		MessageBox((LPCSTR)szErrMsg,"Driver Message",MB_OK);
		DRV_DeviceClose((LONG far *)&m_DeviceHandle);
		return;
	}
	dwCount = sizeof(DWORD);
	//Get the Di status change channel
	m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_IrqDiChangeStatusChannel, &m_StatusChannel, &dwCount);
	//Get the Pattern match value
 	m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_DiPatternMatchValue, &m_MatchValue, &dwCount);
	m_strMatchValue.Format("%X", m_MatchValue);
	//Get the Di channel trigger mode
	m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, &dwCount);
	//Get the counter2 value
	dwCount = sizeof(m_CounterValue);
	m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_CounterCountValue, &m_CounterValue, &dwCount);
	m_Counter2 = m_CounterValue[2];
	if ( m_ErrCde != SUCCESS )
	{
		DRV_GetErrorMessage(m_ErrCde,(LPSTR)szErrMsg);
		MessageBox((LPCSTR)szErrMsg,"Driver Message",MB_OK);
		DRV_DeviceClose((LONG far *)&m_DeviceHandle);
		return;
	}

	for(int i=0; i<8; i++)
		  SendDlgItemMessage(IDC_lstIntAuxDi0+i, LB_SETCURSEL, (m_DITriggerMode>>i & 1), 0);


	UpdateData(FALSE);
	sprintf(szTemp,"%X",m_MatchValue);

}

void CDIINTDlg::OnStop() 
{
	// TODO: Add your control notification handler code here
	DWORD ExitCode;
	bThreadloop=FALSE;
	m_btnStop.EnableWindow(FALSE);
	m_btnStart.EnableWindow(TRUE);
	m_BtnExit.EnableWindow(TRUE);

	if ( m_DeviceHandle	!= NULL )
	{
		if(pThread)
		{
		   GetExitCodeThread(pThread->m_hThread,&ExitCode);
		   if( ExitCode == STILL_ACTIVE )
			   TerminateThread(pThread->m_hThread,ExitCode);

		}
	}
	
}

void CDIINTDlg::OnChkDI0() 
{
	// TODO: Add your control notification handler code here
	ptEnableEvent.Enabled=((CButton *)GetDlgItem(IDC_ChkDI0))->GetCheck();;
	ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI0;
	ptEnableEvent.Count=1;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);

	
	
}

void CDIINTDlg::OnChkDI1() 
{
	// TODO: Add your control notification handler code here
	ptEnableEvent.Enabled=((CButton *)GetDlgItem(IDC_ChkDI1))->GetCheck();
	ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI1;
	ptEnableEvent.Count=1;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
	
}

void CDIINTDlg::OnChkDI2() 
{
	// TODO: Add your control notification handler code here
	ptEnableEvent.Enabled=((CButton *)GetDlgItem(IDC_ChkDI2))->GetCheck();
	ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI2;
	ptEnableEvent.Count=1;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
	
}

void CDIINTDlg::OnChkDI3() 
{
	// TODO: Add your control notification handler code here
	ptEnableEvent.Enabled=((CButton *)GetDlgItem(IDC_ChkDI3))->GetCheck();
	ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI3;
	ptEnableEvent.Count=1;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
	
}

void CDIINTDlg::OnChkDI4() 
{
	// TODO: Add your control notification handler code here
	ptEnableEvent.Enabled=((CButton *)GetDlgItem(IDC_ChkDI4))->GetCheck();
	ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI4;
	ptEnableEvent.Count=1;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
	
}

void CDIINTDlg::OnChkDI5() 
{
	// TODO: Add your control notification handler code here
	ptEnableEvent.Enabled=((CButton *)GetDlgItem(IDC_ChkDI5))->GetCheck();
	ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI5;
	ptEnableEvent.Count=1;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
	
}

void CDIINTDlg::OnChkDI6() 
{
	// TODO: Add your control notification handler code here
	ptEnableEvent.Enabled=((CButton *)GetDlgItem(IDC_ChkDI6))->GetCheck();
	ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI6;
	ptEnableEvent.Count=1;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
	
}

void CDIINTDlg::OnChkDI7() 
{
	// TODO: Add your control notification handler code here
	ptEnableEvent.Enabled=((CButton *)GetDlgItem(IDC_ChkDI7))->GetCheck();
	ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI7;
	ptEnableEvent.Count=1;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
	
}

void CDIINTDlg::OnChkPatternMatch() 
{
   //
   // Before setting CFG_DiPatternMatchValue, 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 data wides.
   // NOTE: 32-bit DO is not support.
   // If the user doesn't choose a pacer clock, 10MHz internal pacer clock is the default.
   //
   DWORD dwDioFdioDirection, dwDiPacerSource;
   char *szTemp;

   if( !UpdateData() )
      return;

   dwDioFdioDirection = 0;                         // 32-bit DI
   m_ErrCde = DRV_DeviceSetProperty(m_DeviceHandle, CFG_DioFdioDirection, &dwDioFdioDirection, 4);
   if( SUCCESS != m_ErrCde )
   {
      DRV_GetErrorMessage(m_ErrCde, (LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
      return;
   }
   
   dwDiPacerSource = 3;                            // 10MHz
   m_ErrCde = DRV_DeviceSetProperty(m_DeviceHandle, CFG_DiPacerSource, &dwDiPacerSource, 4);
   if( SUCCESS != m_ErrCde )
   {
      DRV_GetErrorMessage(m_ErrCde, (LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
      return;
   }

   m_MatchValue =strtoul(m_strMatchValue, &szTemp, 16);
   m_strMatchValue.Format("%X", m_MatchValue);
   UpdateData(FALSE);
	m_ErrCde = DRV_DeviceSetProperty(m_DeviceHandle, CFG_DiPatternMatchValue, &m_MatchValue, 4);

	ptEnableEvent.Enabled=m_MatchEnable;
	ptEnableEvent.EventType=ADS_EVT_DI_PATTERNMATCH;
	ptEnableEvent.Count=1;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
	GetDlgItem(IDC_txtPatternMatchValue)->EnableWindow(!m_MatchEnable);
	
}

void CDIINTDlg::OnChkStatusChange() 
{
   //
   // 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.
   //
   DWORD dwDioFdioDirection, dwDiPacerSource;

   if( !UpdateData() )
      return;

   dwDioFdioDirection = 0;                         // 32-bit DI
   m_ErrCde = DRV_DeviceSetProperty(m_DeviceHandle, CFG_DioFdioDirection, &dwDioFdioDirection, 4);
   if( SUCCESS != m_ErrCde )
   {
      DRV_GetErrorMessage(m_ErrCde, (LPSTR)szErrMsg);
		MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
      return;
   }

   dwDiPacerSource = 3;                            // 10MHz
   m_ErrCde = DRV_DeviceSetProperty(m_DeviceHandle, CFG_DiPacerSource, &dwDiPacerSource, 4);
   if( SUCCESS != m_ErrCde )
   {
      DRV_GetErrorMessage(m_ErrCde, (LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
      return;
   }

   m_ErrCde = DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiChangeStatusChannel, &m_StatusChannel, 4);
   if( SUCCESS != m_ErrCde )
   {
      DRV_GetErrorMessage(m_ErrCde, (LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
      return;
   }

	ptEnableEvent.Enabled   = m_StatusEnable;
	ptEnableEvent.EventType = ADS_EVT_DI_STATUSCHANGE;
	ptEnableEvent.Count     = 1;
	m_ErrCde = DRV_EnableEvent(m_DeviceHandle, &ptEnableEvent);
   if( SUCCESS != m_ErrCde )
   {
      DRV_GetErrorMessage(m_ErrCde, (LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
      return;
   }

	GetDlgItem(IDC_txtStatusChannel)->EnableWindow(!m_StatusEnable);
}

void CDIINTDlg::OnChkTimer() 
{
	// TODO: Add your control notification handler code here
	if( !UpdateData() )
      return;

   m_CounterValue[2] =	m_Counter2;
	m_ErrCde = DRV_DeviceSetProperty(m_DeviceHandle, CFG_CounterCountValue, &(m_CounterValue[0]), 12);
   if( SUCCESS != m_ErrCde )
   {
      DRV_GetErrorMessage(m_ErrCde, (LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
      return;
   }

	ptEnableEvent.Enabled=m_TimerEnable;
	ptEnableEvent.EventType=ADS_EVT_TC_TIMER;
	ptEnableEvent.Count=1;
   m_ErrCde = DRV_EnableEvent(m_DeviceHandle, &ptEnableEvent);
   if( SUCCESS != m_ErrCde )
   {
      DRV_GetErrorMessage(m_ErrCde, (LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
      return;
   }
   
	GetDlgItem(IDC_txtCounterValue)->EnableWindow(!m_TimerEnable);
}

void CDIINTDlg::OnSelchangelstIntAuxDi() 
{
	// TODO: Add your control notification handler code here
	//Set the Di channel trigger mode
	m_DITriggerMode=0;
	for(int i=0;i<8;i++)
		m_DITriggerMode = m_DITriggerMode | (SendDlgItemMessage(IDC_lstIntAuxDi0+i, LB_GETCURSEL, 0, 0) << i);
	m_ErrCde = DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, 4);	
}

void CDIINTDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	ptEnableEvent.Enabled=0;
	ptEnableEvent.Count=1;
	ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI0;
	DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
	DRV_DeviceClose( &m_DeviceHandle );

	
	CDialog::OnCancel();
}

⌨️ 快捷键说明

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