📄 cntrcomparedlg.cpp
字号:
void CCntrCompareDlg::OnBtnstart()
{
ULONG ulSize;
PT_EnableEvent ptEnableEvent;
PT_CounterEventStart ptCounterEventStart;
LONG* pBuffer;
m_CurCounter = m_cmbCounter.GetCurSel();
if (m_chkOverComp.GetCheck())
m_CompOver = 1;
else
m_CompOver = 0;
if (m_chkUnderComp.GetCheck())
m_CompUnder = 1;
else
m_CompUnder = 0;
if (m_CompType)
OnBtncomptable();
// set indicator
m_ErrCode = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, NULL, &ulSize);
pBuffer = new LONG[ulSize / sizeof(LONG)];
m_ErrCode = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, pBuffer, &ulSize);
pBuffer[m_CurCounter] = 0;
if (m_chkDO.GetCheck())
{
if (m_chkDOOver.GetCheck())
{
if (IsDlgButtonChecked(IDC_RADIOCOUNTER))
pBuffer[m_CurCounter] |= OVERCOMPPULSE;
if (IsDlgButtonChecked(IDC_RADIOINT))
pBuffer[m_CurCounter] |= OVERCOMPLEVEL;
}
if (m_chkDOUnder.GetCheck())
{
if (IsDlgButtonChecked(IDC_RADIOCOUNTER))
pBuffer[m_CurCounter] |= UNDERCOMPPULSE;
if (IsDlgButtonChecked(IDC_RADIOINT))
pBuffer[m_CurCounter] |= UNDERCOMPLEVEL;
}
}
m_ErrCode = DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrIndicatorControl, pBuffer, ulSize);
delete[] pBuffer;
// EnableEvent
ptEnableEvent.Count = 1;
ptEnableEvent.Enabled = TRUE;
if (m_CompOver == 1)
{
ptEnableEvent.EventType = ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter;
m_ErrCode = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
if (m_ErrCode != SUCCESS)
{
DRV_GetErrorMessage(m_ErrCode, m_szErrMsg);
MessageBox(m_szErrMsg, "Driver Message", MB_OK);
return;
}
}
if (m_CompUnder == 1)
{
ptEnableEvent.EventType = ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter;
m_ErrCode = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
if (m_ErrCode != SUCCESS)
{
DRV_GetErrorMessage(m_ErrCode, m_szErrMsg);
MessageBox(m_szErrMsg, "Driver Message", MB_OK);
return;
}
}
// start counter
ptCounterEventStart.counter = m_CurCounter;
m_ErrCode = DRV_CounterEventStart(m_DriverHandle, &ptCounterEventStart);
m_btnStop.EnableWindow(TRUE);
m_btnStart.EnableWindow(FALSE);
m_btnOk.EnableWindow(FALSE);
m_btnSelDev.EnableWindow(FALSE);
// clear event count
m_EventCount.SetWindowText("0");
m_EvtCountUnder.SetWindowText("0");
// begin thread
m_bContinue = TRUE;
pThread = AfxBeginThread(CCntrCompareDlg::EventThread, this, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
}
void CCntrCompareDlg::OnBtnstop()
{
PT_EnableEvent ptEnableEvent;
ULONG dwExitCode;
// TODO: Add your control notification handler code here
m_btnStart.EnableWindow(TRUE);
m_btnStop.EnableWindow(FALSE);
m_btnOk.EnableWindow(TRUE);
m_btnSelDev.EnableWindow(TRUE);
// disable event
ptEnableEvent.Count = 1;
ptEnableEvent.Enabled = FALSE;
if (m_CompOver== 1)
{
ptEnableEvent.EventType = ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter;
m_ErrCode = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
}
if (m_CompUnder == 1)
{
ptEnableEvent.EventType = ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter;
m_ErrCode = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
}
m_bContinue = FALSE;
// conter reset : this will reset counter to reset value
m_ErrCode = DRV_CounterReset(m_DriverHandle, m_CurCounter);
if ( m_ErrCode != 0) {
DRV_GetErrorMessage( m_ErrCode, (LPSTR)m_szErrMsg );
MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
return;
}
// Terminate thread
if (pThread)
GetExitCodeThread(pThread->m_hThread, &dwExitCode);
if (dwExitCode == STILL_ACTIVE)
TerminateThread(pThread->m_hThread, dwExitCode);
}
void CCntrCompareDlg::OnBtnreset()
{
USHORT usCounter;
usCounter = m_cmbCounter.GetCurSel();
// conter reset : this will reset counter to reset value
m_ErrCode = DRV_CounterReset(m_DriverHandle, usCounter);
if ( m_ErrCode != 0) {
DRV_GetErrorMessage( m_ErrCode, (LPSTR)m_szErrMsg );
MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
return;
}
}
void CCntrCompareDlg::OnOK()
{
// TODO: Add extra validation here
ULONG dwExitCode;
m_bContinue = FALSE;
// Terminate thread
if (pThread)
GetExitCodeThread(pThread->m_hThread, &dwExitCode);
if (dwExitCode == STILL_ACTIVE)
TerminateThread(pThread->m_hThread, dwExitCode);
if (m_DriverHandle != NULL)
DRV_DeviceClose(&m_DriverHandle);
CDialog::OnOK();
}
UINT CCntrCompareDlg::EventThread(LPVOID pThreadArg)
{
CCntrCompareDlg* ptArg;
PT_CheckEvent ptCheckEvent;
PT_CounterEventRead ptCounterEventRead;
USHORT usEventType;
DWORD dwEvtCountOver, dwEvtCountUnder;
char szBuf[20];
ULONG ulSize, ulCount;
ULONG* pCompData;
USHORT usOverflow;
ptArg = (CCntrCompareDlg*)pThreadArg;
dwEvtCountOver = 0;
dwEvtCountUnder = 0;
DRV_DeviceGetProperty(ptArg->m_DriverHandle, CFG_CntrCompareData, NULL, &ulSize);
pCompData = new ULONG[ulSize / sizeof(ULONG)];
ptCounterEventRead.counter = ptArg->m_CurCounter;
ptCounterEventRead.count = &ulCount;
ptCounterEventRead.overflow = &usOverflow;
ptCheckEvent.Milliseconds = 1000;
ptCheckEvent.EventType = &usEventType;
while (m_bContinue)
{
if (DRV_CheckEvent(ptArg->m_DriverHandle, &ptCheckEvent) == SUCCESS)
{
if ((usEventType == (ADS_EVT_OVERCOMPARE_CNT0 + ptArg->m_CurCounter)) ||
(usEventType == (ADS_EVT_UNDERCOMPARE_CNT0 + ptArg->m_CurCounter)))
{
if (usEventType == (ADS_EVT_OVERCOMPARE_CNT0 + ptArg->m_CurCounter))
{
dwEvtCountOver++;
sprintf(szBuf, "%d", dwEvtCountOver);
ptArg->m_EventCount.SetWindowText(szBuf);
}
if (usEventType == (ADS_EVT_UNDERCOMPARE_CNT0 + ptArg->m_CurCounter))
{
dwEvtCountUnder++;
sprintf(szBuf, "%d", dwEvtCountUnder);
ptArg->m_EvtCountUnder.SetWindowText(szBuf);
}
// change compare data
if ((m_CompType) && (m_usCompIndex < 7))
{
m_usCompIndex++;
DRV_DeviceGetProperty(ptArg->m_DriverHandle, CFG_CntrCompareData, (LPVOID)pCompData, &ulSize);
pCompData[ptArg->m_CurCounter] = m_ulCompData[m_usCompIndex];
DRV_DeviceSetProperty(ptArg->m_DriverHandle, CFG_CntrCompareData, pCompData, ulSize);
sprintf(szBuf, "%lu", m_ulCompData[m_usCompIndex]);
ptArg->m_CurrentCompData.SetWindowText(szBuf);
}
}
}
DRV_CounterEventRead(ptArg->m_DriverHandle, &ptCounterEventRead);
sprintf(szBuf, "%lu", ulCount);
ptArg->m_cntrCount.SetWindowText(szBuf);
}
delete[] pCompData;
return 0;
}
void CCntrCompareDlg::OnBtnsetcompare()
{
ULONG ulSize;
ULONG* CompareData;
char szBuf[10];
USHORT usCounter;
// TODO: Add your control notification handler code here
UpdateData(TRUE);
usCounter = m_cmbCounter.GetCurSel();
m_ErrCode = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NULL, &ulSize);
CompareData = new ULONG[ulSize / sizeof(ULONG)];
m_ErrCode = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, (LPVOID)CompareData, &ulSize);
CompareData[usCounter] = m_CompData;
m_ErrCode = DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, (LPVOID)CompareData, ulSize);
delete[] CompareData;
sprintf(szBuf, "%lu", m_CompData);
m_CurrentCompData.SetWindowText(szBuf);
m_CompType = 0;
}
void CCntrCompareDlg::OnBtncomptable()
{
// TODO: Add your control notification handler code here
ULONG* CompareData;
ULONG ulSize;
char szBuffer[10];
int i;
USHORT usCounter;
// compare data
UpdateData(TRUE);
usCounter = m_cmbCounter.GetCurSel();
m_ErrCode = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NULL, &ulSize);
CompareData = new ULONG[ulSize / sizeof(ULONG)];
m_ErrCode = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, (LPVOID)CompareData, &ulSize);
CompareData[usCounter] = m_data0;
m_CompType = 1;
m_ErrCode = DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, (LPVOID)CompareData, ulSize);
sprintf(szBuffer, "%lu", CompareData[usCounter]);
m_CurrentCompData.SetWindowText(szBuffer);
delete[] CompareData;
// record compare table
for (i = 0; i < 8; i++)
{
switch(i)
{
case 0:
m_ulCompData[i] = m_data0;
break;
case 1:
m_ulCompData[i] = m_data1;
break;
case 2:
m_ulCompData[i] = m_data2;
break;
case 3:
m_ulCompData[i] = m_data3;
break;
case 4:
m_ulCompData[i] = m_data4;
break;
case 5:
m_ulCompData[i] = m_data5;
break;
case 6:
m_ulCompData[i] = m_data6;
break;
case 7:
m_ulCompData[i] = m_data7;
break;
}
}
m_usCompIndex = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -