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

📄 jhhbdoc.cpp

📁 环保局污染设备在线控制系统
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		{
			DisplayDaoException(e);
			e->Delete();
			return  -1;
		}
	}
	else	// ODBC
	{
		m_pStationInfoSet = new  CStationInfoSet();
		try
		{
			m_pStationInfoSet->Open();
		}
		catch (CDBException* e)
		{
			e->Delete();
			return  -1;
		}
	}

	// Gen Ctrl Info List
	if (m_bUseDao)	// DAO
	{
		m_pDaoStationInfoSet->MoveFirst();
		while (!m_pDaoStationInfoSet->IsEOF())
		{
			CCtrlInfoObject*	pCtrlInfo = new  CCtrlInfoObject();
			pCtrlInfo->m_NO = (int)m_pDaoStationInfoSet->m_NO;
			pCtrlInfo->m_nMapIndex = pCtrlInfo->m_NO;
			pCtrlInfo->m_bActive = m_pDaoStationInfoSet->m_SW;
			pCtrlInfo->m_strStationName = m_pDaoStationInfoSet->m_STATION;
			pCtrlInfo->m_strFullName = m_pDaoStationInfoSet->m_NAME;
			pCtrlInfo->m_lastTime = CTime::GetCurrentTime()- CTimeSpan(0,0,0,m_nRefreshTimeout);
			pCtrlInfo->m_bCommSuccess = FALSE;//2001年6月1日改,原FALSE处为TRUE
			m_ctrlInfoArray.Add(pCtrlInfo);

			m_pDaoStationInfoSet->MoveNext();
		}
	}
	else	// ODBC
	{
		m_pStationInfoSet->MoveFirst();
		while (!m_pStationInfoSet->IsEOF())
		{
			CCtrlInfoObject*	pCtrlInfo = new  CCtrlInfoObject();
			pCtrlInfo->m_NO = (int)m_pStationInfoSet->m_NO;
			pCtrlInfo->m_nMapIndex = pCtrlInfo->m_NO;
			pCtrlInfo->m_bActive = m_pStationInfoSet->m_SW;
			pCtrlInfo->m_strStationName = m_pStationInfoSet->m_STATION;
			pCtrlInfo->m_strFullName = m_pStationInfoSet->m_NAME;
			pCtrlInfo->m_lastTime = CTime::GetCurrentTime()- CTimeSpan(0,0,0,m_nRefreshTimeout);
			pCtrlInfo->m_bCommSuccess = FALSE;//2001年6月1日改,原FALSE处为TRUE
			m_ctrlInfoArray.Add(pCtrlInfo);

			m_pStationInfoSet->MoveNext();
		}
	}

	BOOL	bEmpty = TRUE;
	for (int  n = 0; n < m_ctrlInfoArray.GetSize(); ++ n)
	{
		if (m_ctrlInfoArray[n]->m_bActive)
		{
			bEmpty = FALSE;
			break;
		}
	}
	if (bEmpty)
	{
		::AfxMessageBox(IDS_EMPTYWARNING, MB_ICONSTOP);
		m_ctrlInfoArray[0]->m_bActive = TRUE;
	}

	if (m_pComm == NULL)
	{
		CCommSettingsDlg	dlg;

		m_pComm = new  CCommInfo;
		m_pComm->Create(
			NULL,
			CM_COMM,
			m_pReadCommBuf,
			cMaxReadCommBufLen - sizeof(WORD),
			dlg.GetCommPort(),
			dlg.GetBaudRate(),
			dlg.GetFlowCtrls(),
			dlg.GetDataBits(),
			dlg.GetStopBits(),
			dlg.GetParity(),
			TRUE	// special
			);

		if (m_pComm->OpenConnection() == FALSE)
		{
			::AfxMessageBox(IDS_ERRCOMMCONNECT, MB_OK | MB_ICONSTOP);
		}
		m_bAutoActivated = FALSE;
		m_bRelayActivated = FALSE;

	}

/*	if (m_pModem == NULL)
	{
		m_pModem = new  CTAPIConnection;
		m_pModem->Create(
			NULL,
			0x00010003, 0x00010004,
			CM_MODEM,
			m_pReadModemBuf,
			cMaxReadModemBufLen - sizeof(WORD));
	}
	m_bModemConnected = FALSE;
	m_ModemWorkStatus = MODEM_WORKSTATUS_NONE;

	m_lTotalNoSharedRecords = 0;
	m_lSendRecordPosition = 0;
	m_lSharedRecordPosition = 0;


	ASSERT(m_pModem != NULL);
	m_pModem->m_lineArray[m_nModemLine]->WaitCall();*/

	m_nWorkTimerID = ::SetTimer(NULL, 0, 1000, TimerProc);
	m_timeLast= CTime::GetCurrentTime();
	return TRUE;
}

#include <search.h>
int	CJHHBDoc::CompareTwoQueryUnit(CSpeedQueryUnit*  arg1, CSpeedQueryUnit*  arg2)
{
	return  arg1->m_nOrder - arg2->m_nOrder;
}

BOOL	CJHHBDoc::LookupSeepdArray(int  nOrder, int&  nPos)
{
	if (m_pSpeedQueryArray == NULL)
		return  FALSE;

	CSpeedQueryUnit	squKey;
	squKey.m_nOrder = nOrder;

	CSpeedQueryUnit*	squResult = (CSpeedQueryUnit*)::bsearch(
		&squKey, m_pSpeedQueryArray, m_nSpeedQueryArrayUnit,
		sizeof(CSpeedQueryUnit), (int(*)(const void*, const void*))CJHHBDoc::CompareTwoQueryUnit);

	if (squResult)
	{
		// Found it !
		nPos = squResult->m_nPos;
		return  TRUE;
	}
	else
		return  FALSE;
}

void	CJHHBDoc::GenSpeedArray(void)
{
	// must open or requery before
	if (m_bUseDao)
	{
		m_nSpeedQueryArrayUnit = m_pDaoAddDataSet->GetRecordCount();
		int	nSetCount = 0;
		if (m_nSpeedQueryArrayUnit > 0)
		{
			m_pDaoAddDataSet->MoveFirst();
			while (!m_pDaoAddDataSet->IsEOF())
			{
				m_pDaoAddDataSet->MoveNext();
				++ nSetCount;
			}
		}
		m_nSpeedQueryArrayUnit = nSetCount;
		TRACE1("The number in set is %d \n", m_nSpeedQueryArrayUnit);
	}
	else
		m_nSpeedQueryArrayUnit = m_pAddDataSet->GetRecordCount();

	if (m_nSpeedQueryArrayUnit <= 0)
		return;

	if (m_pSpeedQueryArray != NULL)
		delete  m_pSpeedQueryArray;

	m_pSpeedQueryArray = new  CSpeedQueryUnit[m_nSpeedQueryArrayUnit];

	if (m_bUseDao)
	{
		m_pDaoAddDataSet->MoveFirst();
		for (int  i = 0; i < m_nSpeedQueryArrayUnit; ++ i)
		{
			m_pSpeedQueryArray[i].m_nOrder = m_pDaoAddDataSet->m_NO;
			m_pSpeedQueryArray[i].m_nPos = i;
			m_pDaoAddDataSet->MoveNext();
		}		
		m_pDaoAddDataSet->MoveFirst();
		m_nCurQuerySetPos = 0;
	}
	else
	{
		m_pAddDataSet->MoveFirst();
		for (int  i = 0; i < m_nSpeedQueryArrayUnit; ++ i)
		{
			m_pSpeedQueryArray[i].m_nOrder = m_pAddDataSet->m_NO;
			m_pSpeedQueryArray[i].m_nPos = i;
			m_pAddDataSet->MoveNext();
		}
		m_pAddDataSet->MoveFirst();
		m_nCurQuerySetPos = 0;
	}
}

void	CJHHBDoc::DisplayDaoException(CDaoException*  e)
{
	CString	strMsg;
	if (e->m_pErrorInfo != NULL)
	{
		strMsg.Format(
			_T("%s   (%d)\n\n")
			_T("Would you like to see help?"),
			(LPCTSTR)e->m_pErrorInfo->m_strDescription,
			e->m_pErrorInfo->m_lErrorCode);

		if (::AfxMessageBox(strMsg, MB_YESNO) == IDYES)
		{
			::WinHelp(::GetDesktopWindow(),
				e->m_pErrorInfo->m_strHelpFile,
				HELP_CONTEXT,
				e->m_pErrorInfo->m_lHelpContext);
		}
	}
	else
	{
		strMsg.Format(
			_T("ERROR:CDaoException\n\n")
			_T("SCODE_CODE		=%d\n")
			_T("SCODE_FACILITY	=%d\n")	
			_T("SCODE_SEVERITY	=%d\n")	
			_T("ResultFromScode	=%d\n"),
			SCODE_CODE(e->m_scode),
			SCODE_FACILITY(e->m_scode),
			SCODE_SEVERITY(e->m_scode),
			ResultFromScode(e->m_scode));
		::AfxMessageBox(strMsg);
	}
}

#include "DateDlg.h"
void CJHHBDoc::OnDataHistory()
{
	CDateDlg	dlg;
	if (dlg.DoModal() == IDCANCEL)
		return;

	m_curSpyTime = dlg.GetDate();

	RefreshData(m_curSpyTime);
	UpdateAllViews(NULL);
}

//BOOL	CJHHBDoc::AddSampleData(int  nStation, CTime&  time, WORD  nPHNumber)  //BYTE  nPHNumber) ljh
BOOL	CJHHBDoc::AddSampleData(int  nStation, CTime&  time, WORD  nPHNumber, WORD  nCODNumber, WORD  nFLOWNumber,WORD  nNH4NNumber) // ljh add
{
	int	nYear = time.GetYear();
	int	nMonth = time.GetMonth();
	int	nDay = time.GetDay();
	int	nHour = time.GetHour();
	int	nMinute = time.GetMinute();

	CString	strTime;
	strTime.Format(IDS_SAVETIMEFMT, nHour, nMinute);

	// find the record, if exist, update it, else add it !
	const int	nMinuteInHour = 60;
	int	nOrder = (nHour * nMinuteInHour + nMinute) / nTimeSpan + 1;
	COleDateTime	date = COleDateTime(nYear, nMonth, nDay, 0, 0, 0);

	if (m_bUseDao)	// DAO
	{
		try
		{
//			m_pDaoAddDataSet->GenParam(date, nStation, nOrder);
//			m_pDaoAddDataSet->Requery();
//			if (m_pDaoAddDataSet->GetRecordCount() == 0)
			int	nPos;
			if (!LookupSeepdArray(nOrder, nPos))
			{
				// not found, add new !
				m_pDaoAddDataSet->AddNew();
			}
			else
			{
				// found it, edit !

				// because ASC
				for (int  i = m_nCurQuerySetPos; i < nPos; ++ i)
				{
					m_pDaoAddDataSet->MoveNext();
					m_nCurQuerySetPos = nPos;
				}
				m_pDaoAddDataSet->Edit();
			}
		}
		catch (CDaoException*  e)
		{
			DisplayDaoException(e);
			e->Delete();
		}

		if (!m_pDaoAddDataSet->CanUpdate())
		{
			TRACE0("Can't Write to the Database !\n");
			GetLogView()->AddNewLog(_T("Error: Datebase can not to be update now."));
			return  FALSE;
		}
		m_pDaoAddDataSet->m_NO = nOrder;
		m_pDaoAddDataSet->m_STATION = nStation;
		m_pDaoAddDataSet->m_PHDATE = date;
		m_pDaoAddDataSet->m_PHTIME = strTime;
		m_pDaoAddDataSet->m_PH = CalcPHValue(nStation, nPHNumber);
		//------------------- ljh benin 
        m_pDaoAddDataSet->m_COD = CalcCODValue(nStation, nCODNumber);
        m_pDaoAddDataSet->m_FLOW = CalcPHValue(nStation, nFLOWNumber);
	    m_pDaoAddDataSet->m_NH4N = CalcNH4NValue(nStation, nNH4NNumber);
		//------------------- ljh end
		try
		{
			m_pDaoAddDataSet->Update();
		}
		catch (CDaoException*  e)
		{
			DisplayDaoException(e);
			e->Delete();
		}
	}
	else	// ODBC
	{
		try
		{
//			m_pAddDataSet->GenParam(date, nStation, nOrder);
//			m_pAddDataSet->Requery();
//			if (m_pAddDataSet->GetRecordCount() == 0)
			int	nPos;
			if (!LookupSeepdArray(nOrder, nPos))
			{
				// not found, add new !
				m_pAddDataSet->AddNew();
			}
			else
			{
				// found it, edit !
				// because ASC
				for (int  i = m_nCurQuerySetPos; i < nPos; ++ i)
				{
					m_pAddDataSet->MoveNext();
					m_nCurQuerySetPos = nPos;
				}
				m_pAddDataSet->Edit();
			}
		}
		catch (CDBException*  e)
		{
			e->Delete();
		}

		if (!m_pAddDataSet->CanUpdate())
		{
			TRACE0("Can't Write to the Database !\n");
			return  FALSE;
		}
		m_pAddDataSet->m_NO = nOrder;
		m_pAddDataSet->m_STATION = nStation;
		m_pAddDataSet->m_PHDATE = CTime(date.GetYear(), date.GetMonth(), date.GetDay(), 0, 0, 0);
		m_pAddDataSet->m_PHTIME = strTime;
		m_pAddDataSet->m_PH = CalcPHValue(nStation, nPHNumber);
		//------------------- ljh benin 
        m_pAddDataSet->m_COD = CalcCODValue(nStation, nCODNumber);
        m_pAddDataSet->m_FLOW = CalcPHValue(nStation, nFLOWNumber);
        m_pAddDataSet->m_NH4N = CalcNH4NValue(nStation, nNH4NNumber);
		//------------------- ljh end
		try
		{
			m_pAddDataSet->Update();
		}
		catch (CDBException*  e)
		{
			e->Delete();
		}
	}

/*
	TRACE1("The station is %d ! \n", nStation);
	TRACE1("The send byte count is %d ! \n", *((WORD*)(m_pReadCommBuf + sizeof(WORD) + sizeof(BYTE))));
	TRACE1("The month is %d ! \n", (int)*(m_pReadCommBuf + 5));
	TRACE1("The day is %d ! \n", (int)*(m_pReadCommBuf + 6));
	TRACE1("The hour is %d ! \n", (int)*(m_pReadCommBuf + 7));
	TRACE1("The minute is %d ! \n", (int)*(m_pReadCommBuf + 8));
	TRACE1("The PH is %d ! \n\n\n\n", (int)*(m_pReadCommBuf + 9));
*/
	return  TRUE;
}

double	CJHHBDoc::CalcPHValue(int  nStation, WORD  nPHNubmer) //BYTE  nPHNubmer) ljh
{
	double	dPHNumber = (double)nPHNubmer;

	double	nADTop;
	double	nADBottom;
	if (m_bUseDao)	// DAO
	{
		m_pDaoStationInfoSet->MoveFirst();
		for (int  i = 1; i < nStation ; ++ i)
		{
			m_pDaoStationInfoSet->MoveNext();
		}
		nADTop = m_pDaoStationInfoSet->m_nADTop;
		nADBottom = m_pDaoStationInfoSet->m_nADBottom;
	}
	else	// ODBC
	{
		m_pStationInfoSet->MoveFirst();
		for (int  i = 1; i < nStation; ++ i)
		{
			m_pStationInfoSet->MoveNext();
		}
		nADTop = m_pStationInfoSet->m_nADTop;
		nADBottom = m_pStationInfoSet->m_nADBottom;
	}
	if (dPHNumber < nADBottom)
		dPHNumber = nADBottom;			//	Update at 1997.5.29 Let return value >=0

	return  (dPHNumber - nADBottom) * (nPHTop - nPHBottom) / (nADTop - nADBottom) + nPHBottom;
}

//---------------------- ljh begin
double	CJHHBDoc::CalcCODValue(int  nStation, WORD  nCODNubmer)
{
	double	dCODNumber = (double)nCODNubmer;

	double	nCODTOP;
	double	nCODBOT;
	if (m_bUseDao)	// DAO
	{
		m_pDaoStationInfoSet->MoveFirst();
		for (int  i = 1; i < nStation ; ++ i)
		{
			m_pDaoStationInfoSet->MoveNext();
		}
		nCODTOP = m_pDaoStationInfoSet->m_nCODTOP;
		nCODBOT = m_pDaoStationInfoSet->m_nCODBOT;
	}
	else	// ODBC
	{
		m_pStationInfoSet->MoveFirst();
		for (int  i = 1; i < nStation; ++ i)
		{
			m_pStationInfoSet->MoveNext();
		}
		nCODTOP = m_pStationInfoSet->m_nCODTOP;
		nCODBOT = m_pStationInfoSet->m_nCODBOT;
	}
	if (dCODNumber < nCODBOT)
		dCODNumber = nCODBOT;		

	return  (dCODNumber - nCODBOT) * (nCODTOP - nCODBOT) / (nCODTOP - nCODBOT) + nCODBOT;
}

double	CJHHBDoc::CalcFLOWValue(int  nStation, WORD  nFLOWNubmer)
{
	double	dFLOWNumber = (double)nFLOWNubmer;

	double	nFLOWTOP;
	double	nFLOWBOT;
	if (m_bUseDao)	// DAO
	{
		m_pDaoStationInfoSet->MoveFirst();
		for (int  i = 1; i < nStation ; ++ i)
		{
			m_pDaoStationInfoSet->MoveNext();
		}
		nFLOWTOP = m_pDaoStationInfoSet->m_nFLOWTOP;
		nFLOWBOT = m_pDaoStationInfoSet->m_nFLOWBOT;
	}
	else	// ODBC
	{
		m_pStationInfoSet->MoveFirst();
		for (int  i = 1; i < nStation; ++ i)
		{
			m_pStationInfoSet->MoveNext();
		}
		nFLOWTOP = m_pStationInfoSet->m_nFLOWTOP;
		nFLOWBOT = m_pStationInfoSet->m_nFLOWBOT;
	}
	if (dFLOWNumber < nFLOWBOT)
		dFLOWNumber = nFLOWBOT;		

⌨️ 快捷键说明

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