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

📄 monitor.cpp

📁 电信机房MDF、电源柜监控源码,主要用在通信机房配线设备监控、电源柜监控
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	return 0;
}

// 起动告警查询线程

//必须在起动监测线程后再起动询问线程
BOOL CMonitor::StartAsking(int iSecond)
{

	ResetEvent(m_hEventArray[0]);
	ResetEvent(m_hEventArray[1]);
	ResetEvent(m_hEventArray[2]);

	SetEvent(m_hEventArray[2]);
	
	m_pThread = AfxBeginThread(SendThd,(LPVOID)this);
	if (m_pThread  != NULL)
		return m_AskingStatus = TRUE;
	else
		return m_AskingStatus = FALSE;
}
void CMonitor::OnSetFocus(CWnd* /*pOldWnd*/)
{
	// 将焦点前移到视图窗口
	//m_wndView.SetFocus();
}



void CMonitor::OnSize(UINT nType, int cx, int cy)
{
	CWnd::OnSize(nType, cx, cy);
	
	//CRect rctMain,rctBar,rctStatus;
	//m_wndToolBar.GetWindowRect(rctBar);
	//m_wndStatusBar.GetWindowRect(rctStatus);
	//ScreenToClient(rctBar);
	//GetWindowRect(rctMain);
	//ScreenToClient(rctMain);
	//ScreenToClient(rctStatus);
	//rctMain.top = rctBar.bottom;
	//rctMain.bottom = rctStatus.top;
	//
	//m_wndView.MoveWindow(rctMain);


	// TODO: 在此处添加消息处理程序代码
}



void CMonitor::OnCmStart()
{
	// TODO: 在此添加命令处理程序代码
	BOOL blResult = this->StartMonitoring();
	if (blResult)
		this->StartAsking(0);

}

void CMonitor::OnCmStop()
{
	// TODO: 在此添加命令处理程序代码
	this->StopMonitoring();

}

void CMonitor::OnAppExit()
{
	PostQuitMessage(0);
	// TODO: 在此添加命令处理程序代码
}

//设备状态改变
LRESULT CMonitor::onStatusChange(WPARAM wParam, LPARAM lParam)
{
	//处理告警或消警状态变化
	CEquipmentPort *port = (CEquipmentPort *)wParam;
	CString strSQL,strTable,strTip ;		//SQL语句
	_variant_t var;
	_RecordsetPtr pRsPtr ;
	int iResult = 0 ;
	CString sSql;
	CString strSpotSort;
	int iSVDID;
	CString sFile;
	pRsPtr.CreateInstance(__uuidof(Recordset)); 

	/****************************************************************************
		保存告警信息

	****************************************************************************/

	if (port->AlarmState != PORT_NORMAL )				//告警
	{
		//取得被监测设备资料ID及序号
		if(pRsPtr->State == 1 )
			pRsPtr->Close();
		strSQL.Format("Select SVDID,SVSpotSort From CMTSVModulePort Where SVMID = %d and SVMPSort = %d",port->SVMID,port->SVMPSort);
		iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
		if (iResult == 0)
		{
			p_adodb->GetFieldValue("SVDID",pRsPtr,iSVDID);
			p_adodb->GetFieldValue("SVSpotSort",pRsPtr,strSpotSort);
			pRsPtr->Close();
		}
		

		/****************************************************
			存入告警信息资料
		*****************************************************/
		
		if (port->AlarmLevel > 1)
		{
			strSQL.Format("Select top 1 * From CMTAlarmInfo Where SVMAddrCode = '%s' and SVMPSort = %d Order By  AStartTime Desc",port->CodeAddr,port->SVMPSort);
			int iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
			if(iResult ==  0)
			{
				if (!pRsPtr->adoEOF)
				{
					pRsPtr->PutCollect(_variant_t("AEndTime"),_variant_t(_bstr_t(port->tmUpdateTime.Format(_T("%Y-%m-%d %H:%M:%S")))));
					pRsPtr->PutCollect(_variant_t("AlarmLevel"),_variant_t(_bstr_t(port->AlarmLevel)));
					pRsPtr->UpdateBatch(adAffectCurrent);
					pRsPtr->Close();
				}else
					pRsPtr->Close();
			}
			
		}else
		{
			strSQL.Format("Insert into CMTAlarmInfo(SVMPSort,SVMAddrCode,SVDID,SVSpotSort,AlarmLevel,AStartTime,AlarmNote,AlarmState,AlarmValue,SVMID) \
				values(%d,'%s',%d,'%s',%d,'%s','%s',%d,%f,%d)",port->SVMPSort,port->CodeAddr,iSVDID,strSpotSort,1,port->tmStartTime.Format(_T("%Y-%m-%d %H:%M:%S")), \
				port->SourceAddr,port->AlarmState,port->value,port->SVMID);
			iResult = p_adodb->ExecuteSQL(strSQL);
			
		}
		if (theApp.m_Baseinfo.PlaySound == 1)
		{
			m_pMedia.SetVoice(port->CodeAddr,port->SVMPSort,m_hWnd);
			m_pMedia.AlarmVoice();
		}		
		
	}else									//销警
	{
		strSQL.Format("Select top 1 * From CMTAlarmInfo Where SVMAddrCode = '%s' and SVMPSort = %d Order By  AStartTime Desc",port->CodeAddr,port->SVMPSort);
		int iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
		if(iResult ==  0)
		{
			if (!pRsPtr->adoEOF)
			{
				pRsPtr->PutCollect(_variant_t("AEndTime"),_variant_t(_bstr_t(port->tmUpdateTime.Format(_T("%Y-%m-%d %H:%M:%S")))));
				pRsPtr->PutCollect(_variant_t("AlarmState"),_variant_t(3));
				pRsPtr->PutCollect(_variant_t("AlarmLevel"),_variant_t(_bstr_t(port->AlarmLevel)));
				pRsPtr->UpdateBatch(adAffectCurrent);
				pRsPtr->Close();
			}else
				pRsPtr->Close();
		}
		//if (theApp.m_Baseinfo.PlaySound == 1)
		//{
		//	m_pMedia.SetVoice(port->CodeAddr,port->SVMPSort,m_hWnd);
		//	m_pMedia.AlarmVoice();
		//}

	}

	::SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STATUS_CHANGE,wParam,0);

	//播放告警声音

	
	//m_pMedia.Open("wav\\CMFWMDF.wav",this->m_hWnd);

	//生成告警文本信息
	/****************************************************************************
			发出告警短信息
	****************************************************************************/
	//取得告警信息的发送对象
		
	//发送告警信息
	
	if (theApp.m_Baseinfo.SMSOpen)
		SendAlarmInfo(port);
	
	
	//BOOL bDail= TRUE;
	//if (bDail)
	//{
	//	//拨打电话
	//	m_Gsm->Dail("13502885226");

	//}

	return LRESULT();
}



//设备发生告警
LRESULT CMonitor::onAlarming(WPARAM wParam, LPARAM lParam)
{
	//接收告警信息
	
	return LRESULT();
}


//读取设备实时采集数据
LRESULT CMonitor::onReadData(WPARAM wParam, LPARAM lParam)
{
	//接收经过分析后的数据
	
	return LRESULT();
}


// 初始化监测设备端口状态
int CMonitor::IniEquipPort()
{
	CString strSQL,strTable,strTip ;		//SQL语句
	_variant_t var;
	_RecordsetPtr pRsPtr ;
	CEquipmentPort *m_eport;
	CString strValue ;						//存放返回字值
	int iValue = 0;								//存放返回字值
	double dValue = 0;							//存放返回字值
	strValue.Empty();
	m_EquipState.RemoveAll();

	pRsPtr.CreateInstance(__uuidof(Recordset));
	strTable = "VW_ModulePort" ; //监测模块表
	strSQL.Format("SELECT * FROM %s Order By SVMID,SVMPSort",strTable) ;
	int  iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
	if (iResult == 0 )
	{
		while (!pRsPtr->adoEOF )		
		{
			m_eport = new CEquipmentPort;
			m_eport->AlarmState = PORT_NORMAL;
			m_eport->tmStartTime = m_eport->tmUpdateTime = CTime::GetCurrentTime();
			m_eport->AlarmLevel = 0;
			
			p_adodb->GetFieldValue("SVMPID",pRsPtr,iValue);
			m_eport->SVMPID = iValue;
			p_adodb->GetFieldValue("SVMPSort",pRsPtr,iValue);
			m_eport->SVMPSort =iValue;
			p_adodb->GetFieldValue("SVMID",pRsPtr,iValue);
			m_eport->SVMID = iValue;
			p_adodb->GetFieldValue("SVMTNUM",pRsPtr,strValue);
			m_eport->SVMTNUM = strValue;
			p_adodb->GetFieldValue("SVMTNUM",pRsPtr,strValue);
			m_eport->value = 0;
			p_adodb->GetFieldValue("SVMAddrCode",pRsPtr,strValue);
			m_eport->CodeAddr = strValue ;
			p_adodb->GetFieldValue("SVMAddrSource",pRsPtr,strValue);
			m_eport->SourceAddr = strValue;
			p_adodb->GetFieldValue("SVMTrueName",pRsPtr,strValue);
			m_eport->SVMTrueName = strValue;

			m_EquipState.Add(*m_eport);
			pRsPtr->MoveNext();
		}
		pRsPtr->Close();
	}
	return 0;
}

// WEB接收数据包分析
int CMonitor::WebDataAnalyse(CInfoFrame frame)
{
	CPtcWEB *m_ptcWeb;
	CString strAnwser,strIP,strTip,strTemp;
	SockAddrIn sockAddr;
	
	int iResult = 0;

	try
	{
		if ((frame.addrType != 0))
		{

			m_ptcWeb = new CPtcWEB();
			iResult = m_ptcWeb->Analyse(frame,strAnwser);
			if (iResult == 0 && strAnwser.GetLength() >0)
			{

				strIP = frame.address;
				//strTemp.Format("%d",theApp.m_Baseinfo.WebPort);
				//sockAddr.CreateFrom(strIP.GetBuffer(),strTemp.GetBuffer());
				
				m_udpServer[0]->SendTo(strAnwser,strIP,theApp.m_Baseinfo.WebPort);
				//m_udpServer[0]->WriteTo(strAnwser.GetBuffer(),strAnwser.GetLength(),sockAddr);

				TRACE0(strAnwser);
			}
			else
				TRACE0("结果分析错误...");
		
			
			delete m_ptcWeb;
			return(0);
		}else
			return(-1);


	}
	catch(_com_error e)
	{
		strTip.Format("与WEB通信发生错误:%d:%s",e.Error,e.Description);
		theApp.WriteTxtLog(strTip);

	}

	

	return 0;
}

// 初始化短信组件
BOOL CMonitor::IniGsmInfo(void)
{
	BOOL bResult = FALSE; 
	m_Gsm = new CGsmComm();
	bResult = m_Gsm->InitGSM(theApp.m_Baseinfo.GSMPort);
	if (!bResult)
	{
		theApp.WriteTxtLog(_T("GSM MODEM起动失败..."));
		theApp.m_Baseinfo.SMSOpen = FALSE;
		theApp.m_Baseinfo.VoiceOpen = FALSE;
		return FALSE;
	}
	bResult = m_Gsm->SetServiceNum(theApp.m_Baseinfo.SMSCenter);

	if(bResult)
	{
		theApp.WriteTxtLog(_T("GSM MODEM起动..."));
		theApp.m_Baseinfo.SMSOpen = TRUE;
	}else
	{
		theApp.WriteTxtLog(_T("GSM MODEM起动失败..."));
		theApp.m_Baseinfo.SMSOpen = FALSE;
		theApp.m_Baseinfo.VoiceOpen = FALSE;

	}
	return bResult;
}

// 送出告警信息
int CMonitor::SendAlarmInfo(CEquipmentPort *m_ptAlarm)
{
	//取得要发送的人员
	BOOL bResult;
	_variant_t var;
	_RecordsetPtr pRsPtr ;
	int iContainID,iValue;
	CString strValue,strValue1;
	CString strName,strSQL,strTip,strPhone,strSend,strTable,strMsg;
	
	strName = "Manager";
	strSend = "Send";
	iContainID = 0;
	iValue = 0;
	
	try{
		if (m_ptAlarm)
		{
			pRsPtr.CreateInstance(__uuidof(Recordset));
			strTable = "VW_ModulePortNote" ;			//各监测端口说明
			strSQL.Format("SELECT * FROM %s Where SVMID = %d And SVMPID = %d",strTable,m_ptAlarm->SVMID,m_ptAlarm->SVMPID) ;
			int  iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
			if (iResult == 0 )
			{
				if  (!pRsPtr->adoEOF )		
				{
					strValue.Empty();
					strValue1.Empty();
					iContainID = 0;
					p_adodb->GetFieldValue("ContainID",pRsPtr,iContainID);
					p_adodb->GetFieldValue("SVDTrueName",pRsPtr,strValue);
					p_adodb->GetFieldValue("SVSpotNote",pRsPtr,strValue1);
					if (strValue.GetLength() >0 && strValue1.GetLength())
					{
						
						strMsg.Format("%s设备%s列发生了%d级告警,请检查...",strValue,strValue1,m_ptAlarm->AlarmLevel);

					}else
					{
						p_adodb->GetFieldValue("SVMTrueName",pRsPtr,strValue);
						p_adodb->GetFieldValue("SVMPMemo",pRsPtr,strValue1);
						if (strValue1.GetLength() <=0)
						{
							p_adodb->GetFieldValue("SVMPSort",pRsPtr,iValue);
							strValue1.Format("%d",iValue);
						}
						if (strValue.GetLength() >0 && strValue1.GetLength())
						{
							if (m_ptAlarm->AlarmState == PORT_WARNING)
								strMsg.Format("%s设备%s列发生了%d级告警,请检查...",strValue,strValue1,m_ptAlarm->AlarmLevel);
							else if (m_ptAlarm->AlarmState == PORT_NORMAL)
								strMsg.Format("%s设备%s列发生了%d级告警,请检查...",strValue,strValue1,m_ptAlarm->AlarmLevel);
						}
					}

				}
				pRsPtr->Close();
			
			}

			if (pRsPtr->State == 1)
				pRsPtr->Close();

			
			if (iContainID > 0 )
			{
				strTable = "VW_USER_ROOM" ;			//各监测端口说明
				strSQL.Format("SELECT * FROM %s Where AlarmFlag = 1 and ContainID = %d",strTable,iContainID) ;
				
				if (p_adodb->ReadDB(strSQL,pRsPtr,strTip) == 0)
				{
					while (!pRsPtr->adoEOF )
					{
						p_adodb->GetFieldValue("TrueName",pRsPtr,strValue);
						p_adodb->GetFieldValue("Mobile",pRsPtr,strValue1);
						if (strValue1.GetLength() > 0)
						{
							if (strMsg.GetLength() == 0)
							{
								strMsg = "设备发生了告警,请维护人员详细检查...";
							}
							bResult = m_Gsm->GsmAddMsg(strMsg,strValue1,strValue,NULL,0);
							
							if (theApp.m_Baseinfo.SaveLog == 1)
							{
								if(bResult)
									strTip.Format("发送短信给%s人:%s",strValue,strValue1);
								else
									strTip.Format("发送短信失败[%s:%s]",strValue,strValue1);	
								p_adodb->WriteLog(strTip);
							}
						}
						pRsPtr->MoveNext();
					}
					pRsPtr->Close();
				}		
			}
		}
		return 0;

	}
	catch (_com_error e)
	{
		strTip.Format("发送短信出现错误:%d:%s",e.Error,e.Description);
		theApp.WriteTxtLog(strTip);
		return -1;
	}

	
}


LRESULT CMonitor::onSendSMSInfo(WPARAM wParam, LPARAM lParam)
{
	//Send message to mobile phone
	CString strNo,strMsg,strTip;
	strNo  = (LPCTSTR)wParam;
	strMsg = (LPCTSTR)lParam;
	
	if (strNo.Compare("00") != 0 )
	{
		int iResult = m_Gsm->GsmAddMsg(strMsg,strNo,_T("远程短信"),NULL,1);
		if (iResult == 0 )
		{
			//CString strTip;
			strTip = "SM|00";
			m_udpServer[0]->SendTo(strTip,theApp.m_Baseinfo.WebIP,theApp.m_Baseinfo.WebPort);
		}else
		{
			strTip = "SM|FF|GSM BUSY";
			m_udpServer[0]->SendTo(strTip,theApp.m_Baseinfo.WebIP,theApp.m_Baseinfo.WebPort);
		}

	}else
	{
		m_udpServer[0]->SendTo(strMsg,theApp.m_Baseinfo.WebIP,theApp.m_Baseinfo.WebPort);
	}

	return  LRESULT();
}

// 关闭GSMMODEM
BOOL CMonitor::ClsoeGSM(void)
{
	try 
	{
		m_Gsm->bExitRead = TRUE;
		m_Gsm->CloseGsm();
		delete m_Gsm;
		return TRUE;
	}
	catch(_com_error e) 
	{
		return FALSE;	
	}
}


//打开音频播放器
//##ModelId=44B6F8850149
LRESULT CMonitor::onSoundOpen(UINT wParam, LONG lParam)
{
	TRACE0("程序:调用 CMDFDlg::OnMM_WOM_OPEN()") ;
	m_pMedia.OnOpen();
	return 0;
}

//结束音频播放器
//##ModelId=44B6F885014D
LRESULT CMonitor::onSoundDone(UINT wParam, LONG lParam)
{
	TRACE0("程序:调用 CMDFDlg::OnMM_WOM_DONE()") ;
	m_pMedia.OnClose();
	return 0; 
}

//关闭音频播放器
//##ModelId=44B6F885015A
LRESULT CMonitor::onSoundClose(UINT wParam, LONG lParam)
{
	TRACE0("程序:调用 CMDFDlg::OnMM_WOM_CLOSE()") ;
	m_pMedia.Free() ;

	return 0; //theApp.
}

//##ModelId=44B6F8850168
LRESULT CMonitor::GsmVoice(WPARAM wParam,LPARAM lParam)
{
	TRACE0("程序:调用 CMDFDlg::GsmVoice()") ;
	m_pMedia.AlarmVoice();	
	return 0;
}

//##ModelId=44B6F885016C
LRESULT CMonitor::GsmVoiceClose(WPARAM wParam,LPARAM lParam)
{
	TRACE0("程序:调用 CMDFDlg::GsmVoiceClose()") ;
	//if (m_pMedia.m_bPlay)
	//{
		m_pMedia.CloseVoice();
	//}
	return 0;	
}
void CMonitor::OnCmSound()
{
	// TODO: 在此添加命令处理程序代码
	CString strTip;
	strTip = "33962181";
	m_Gsm->Dail(strTip);

	//m_pMedia.SetVoice(_T("1"),1,m_hWnd);
	//m_pMedia.AlarmVoice();

}

⌨️ 快捷键说明

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