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

📄 monitor.cpp

📁 MDF监控源码2
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				//取得该设备
				iIndex = m_pEQPool->GetPowerACItem(m_PowerACList, frame.InPack.ADR,frame.addrType ,frame.iPort );
				//分析数据
				if (iIndex >= 0)
				{
				m_powerac = &(tyPowerAC)m_PowerACList.GetAt( iIndex);
				m_daPowerAC->AnalyseAlarm(frame,(LPVOID)m_powerac,strResult);
				m_PowerACList.SetAt(iIndex, *m_powerac);
				}
				delete m_daPowerAC;
				break;
			case EQU_CODE_DCPOWERCABINET:	//直流电源分配柜
				//m_powerdc = new tyPowerDC;
				m_daPowerDC = new CDAPowerDC() ;
				m_daPowerDC->SetParent(this);
				m_daPowerDC->SetDBAccess((LPVOID)p_adodb);
				//取得该设备
				iIndex = m_pEQPool->GetPowerDCItem(m_PowerDCList, frame.InPack.ADR,frame.addrType ,frame.iPort );
				//分析数据
				if (iIndex >= 0)
				{
				m_powerdc = &(tyPowerDC)m_PowerDCList.GetAt( iIndex);
				m_daPowerDC->AnalyseAlarm(frame,(LPVOID)m_powerdc,strResult);
				m_PowerDCList.SetAt(iIndex, *m_powerdc);
				}
				delete m_daPowerDC;
				break;
			case EQU_CODE_ACPOWERBOX:		//交流电源分配箱
				break;	
			case EQU_CODE_DCPOWERBOX:		//直流电源分配箱
				break;
			case EQU_CODE_AMBIENT:			//环境检测模块
				break;
		
			}
			return 0;
			
		}else		//数据包错误,写日志
		{
			
			switch(iRet)
			{
			case 6:
				strError.Format("数据包长度不足,详细内容:%s",frame.ucBuf);
				theApp.WriteTxtLog(strError);
				break;
			case 4:
				strError.Format("无效的协议命令,详细内容:%s",frame.ucBuf);
				theApp.WriteTxtLog(strError);

				break;
			case 3:
				strError.Format("无信息内容数据校验错误,详细内容:%s",frame.ucBuf);
				theApp.WriteTxtLog(strError);
				break;
			case 5:
				strError.Format("返回信息内容长度为零,详细内容:%s",frame.ucBuf);
				theApp.WriteTxtLog(strError);
				break;
			case 7:
				strError.Format("数据解析时发生位置异常,详细内容:%s",frame.ucBuf);
				theApp.WriteTxtLog(strError);
				break;
			}
			return -1;
		}
		
	//}catch(_com_error e)
	//{
	//	//数据分析错误,丢弃数据包
	//	strTip.Format("%s",frame.ucBuf);
	//	theApp.WriteTxtLog("数据包分析错误,丢弃数据包:" + strTip);
	//	return -1;
	//}
	
	
}

//##ModelId=4652869F032D
int CMonitor::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	//if (CWnd::OnCreate(lpCreateStruct) == -1)
	
	return 0;
}

// 命令发送器
//##ModelId=4652869F01D4
UINT CMonitor::SendThd(LPVOID lpWnd)
{
	CMonitor* pMonitor = (CMonitor*)lpWnd;
	sUnit m_unit;
	CString strTemp;
	DWORD event  = 0;	
	int iPort;
	CMutex mutex;
	//取得命令列表
	
	pMonitor->m_UnitArray.Copy(pMonitor->m_pEQPool->m_UnitArray);
	pMonitor->m_protocol->Build(pMonitor->m_UnitArray,0x44);

	for(;;)			//开始循环发送
	{
		pMonitor->m_AskingStatus = TRUE;
		if (pMonitor->m_AskingClose)
		{
			pMonitor->m_AskingStatus = FALSE;
			pMonitor->m_AskingClose = FALSE;
			return(0);
		}

		event = WaitForMultipleObjects(3, pMonitor->m_hEventArray, FALSE, INFINITE);
		switch (event)
		{
		case 0:
			pMonitor->m_AskingStatus = FALSE;
			AfxEndThread(0);
			break;
		case 1:			//重置
			
			break;
		case 2:			//发送数据取得命令队列中的数据
			//取得设备列表

			//开始循环发送资料
			for(int i =0;i< pMonitor->m_UnitArray.GetCount() ; i++)
			{
				
				m_unit = pMonitor->m_UnitArray.GetAt(i);
				switch(m_unit.nModel)
				{
				case COMM_TCP:
				case COMM_UDP:
					pMonitor->m_udpServer[1]->SendTo(m_unit.strSend,m_unit.sIP ,theApp.m_Baseinfo.DevicePort);
					break;
				case COMM_COM:
				case COMM_485:
					iPort = m_unit.iPort; 
					if (pMonitor->m_comPort.GetCount() >0 )
					{
						pMonitor->SendInfoToCom(iPort,m_unit.strSend);
						mutex.Lock();
						m_unit.tmSend = CTime::GetCurrentTime();
						m_unit.iSendCount++;
						m_unit.iReceive++;
						//检查是否在线
						mutex.Unlock();
					}
					break;
				}
				//相同串口间的间隔询问
				
				//Sleep(500);
			}
			break;
		}

		//设置扫描间隔时间
		Sleep(theApp.m_Baseinfo.Interval);
		//Sleep(1000);
		
	}

	return 0;
}

// 送出信息到串口
//##ModelId=4652869F036B
int CMonitor::SendInfoToCom(int iPort, CString strBuf)
{
	BYTE *chArray; 
	int iLen;
	CSerialPort *sport;
	iLen = strBuf.GetLength();
	chArray = new BYTE[iLen];
	memset(chArray,0,iLen);
	chArray = (BYTE *)strBuf.GetBuffer();
	for(int i = 0; i< m_comPort.GetCount(); i++)
	{
		sport = (CSerialPort *)m_comPort.GetAt(i);
		if (iPort == sport->m_port)
		{
			sport->WriteToPort(chArray,iLen);
			break;
		}
	}
	return 0;
}

// 起动告警查询线程

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

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

	//初始化设备状态
	IniEquipmentStatus(0);
	m_AskingClose = FALSE;
	m_pThread = AfxBeginThread(SendThd,(LPVOID)this);
	if (m_pThread  != NULL)
		return m_AskingStatus = TRUE;
	else
		return m_AskingStatus = FALSE;
}
//##ModelId=4652869F01E5
void CMonitor::OnSetFocus(CWnd* /*pOldWnd*/)
{
	// 将焦点前移到视图窗口
	//m_wndView.SetFocus();
}



//##ModelId=4652869F03A9
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: 在此处添加消息处理程序代码
}



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

}

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

}

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

//设备状态改变
//##ModelId=4652869F0213
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();
}



//设备发生告警
//##ModelId=4652869F0224
LRESULT CMonitor::onAlarming(WPARAM wParam, LPARAM lParam)
{
	CString strTemp;
	//接收告警信息
	long lDevid = (long)wParam;
	UCHAR ucTypeNum = (UCHAR)lParam;
//	if (m_pMedia != INVALID_HANDLE_VALUE)
		PlayAlarmSound(lDevid,ucTypeNum);
	if(m_Gsm != NULL)
	{
		//取得设备的告警信息
		strTemp = GetAlarmString(lDevid,ucTypeNum);
		SendAlarmInfoToPhone(lDevid,strTemp);
	}

	//送出告警信息给WEB服务器端
	CHttpAccess *httpAccess = new CHttpAccess();
	switch(ucTypeNum) 
	{
		case EQU_CODE_MDF:				//MDF智能告警器
			httpAccess->mdfRequest();  
			break;	
		case EQU_CODE_CABLE:			//电缆检测单元
			httpAccess->cableRequest();  
			break;
		case EQU_CODE_INDUCTCIRCLE:		//强电入侵监测模块(工频环)
			httpAccess->circleRequest(); 
			break;
		case EQU_CODE_ACPOWERCABINET:	//交流电源分配柜
			httpAccess->poweracRequest(); 
			break;	
		case EQU_CODE_DCPOWERCABINET:	//直流电源分配柜
			httpAccess->powerdcRequest() ; 
			break;
		case EQU_CODE_ACPOWERBOX:		//交流电源分配箱
			break;	
		case EQU_CODE_DCPOWERBOX:		//直流电源分配箱
			break;
		case EQU_CODE_AMBIENT:			//环境检测模块
			break;		
	}

	//发送消息给本地窗体,绘制告警界面
	


	delete httpAccess;
	return LRESULT();
}


//读取设备实时采集数据
//##ModelId=4652869F0233
LRESULT CMonitor::onReadData(WPARAM wParam, LPARAM lParam)
{
	//接收经过分析后的数据
	
	return LRESULT();
}
// WEB接收数据包分析
//##ModelId=465286A0007E
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);

⌨️ 快捷键说明

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