📄 diintdlg.cpp
字号:
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 + -