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

📄 cntrcomparedlg.cpp

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 CPP
📖 第 1 页 / 共 2 页
字号:


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 + -