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

📄 eqpool.cpp

📁 电信机房MDF、电源柜监控源码,主要用在通信机房配线设备监控、电源柜监控
💻 CPP
📖 第 1 页 / 共 3 页
字号:
					strName = "未知" ;
				}
				else
					m_pAdoDB->GetStrVar(var,strName,strTip) ; //读取设备端口序号
				
				strTip = strStep + "读表 CMTAlarmInfo 的 告警值 AlarmValue 出错" ;

				for( i = 0 ; i < pEQ->nPortNum ; i++ )
				{
					if( pEQ->sPort[i].strPortSort ==  strName )
					{
						if( pEQ->sPort[i].nType = TYPE_SIMULATE )
						{	
							strTip.Format("系统:获得告警信息端口 %s ", strName) ;
							theApp.TestWriteLog(strTip) ;

							if( m_pAdoDB->GetRdData("AlarmValue",pRsPtr1,var,strTip) != 0 )
							{
								nResult++ ;
								nState = 1 ;
								pEQ->sPort[i].dValue = 0.0000  ;
							}
							else
								m_pAdoDB->GetDoubleVar(var,pEQ->sPort[i].dValue,strTip) ; 
						}
						else
							pEQ->sPort[i].dValue = 0.0000  ;

						pEQ->sPort[i].nACount = ALARM_LIMIT ;
						pEQ->sPort[i].nState = PORT_WARNING ;
						pEQ->unEQState = 1 ;
						break ;
					}

				}
			}
			else
			{
				strTip = strStep + " 读取告警信息表时出现未知设备告警\r\n 地址编码:" + strName ;
				theApp.OutPut(strTip) ;
			}
			pRsPtr1->MoveNext() ;
		}

		pRsPtr1->Close() ;

		if( nCount != nNo )
			strTip.Format("系统:数据库中共有 监测设备 %d 台 加载 %d 台,仍有 %d 台未能加载",nCount,nNo,nCount-nNo) ;
		else
			strTip.Format("系统:成功加载 监测设备 %d 台",nCount) ;

		theApp.OutPut(strTip) ;

		return nResult ;
	}
	catch (_com_error e)
	{
		strTip.Format("%s 出现未知异常 %s",strStep,(LPCSTR)e.Description()) ;
		theApp.OutPut(strTip) ; 
		return -1 ;
	}
}
//增加设备通讯命令
//##ModelId=44B6F8860294
int CEQPool::AddCommand(UCHAR ucCmd , sCommEQ* pEQ , CString strTime , CString strPack , int nType)
{
	CString strTip ;
	sCmd f_Cmd ;
	CList<sCmd,sCmd> *pCmdList ;
	try
	{
		if( ucCmd > 0x10 && ucCmd < 0xE0 ) //只增加命令包
		{
			pCmdList = (CList<sCmd,sCmd> *)pEQ->pCmdList ;
			//最大不大于128条命令堆栈
			if( pCmdList->GetCount() < 128 )
			{
				strTime = CTime::GetCurrentTime().Format( "%Y-%m-%d %H:%M:%S" ) ;
				f_Cmd.ucCmd = ucCmd ;
				f_Cmd.strPack = strPack ;
				f_Cmd.strTime = strTime ;
				f_Cmd.nType = nType ;

				pCmdList->AddTail(f_Cmd) ;

				return 0 ;
			}
			else
			{
				strTip.Format("程序:命令队列栈溢出 ") ;
				theApp.OutPut(strTip) ;
				return 2 ; //命队列栈溢出
			}
		}
		else
			return 1 ;//非法命令
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:增加设备通讯命令发生异常:%s ",(LPCSTR)e.Description() ) ;
		theApp.OutPut(strTip) ;
		return -1 ;
	}
}
//删除设备通讯命令,超时、收到响应包时自动执行
//##ModelId=44B6F8860292
int CEQPool::SubCommand(sCommEQ *pEQ)
{
	CString strTip ;
	CList<sCmd,sCmd> *pCmdList ;
	pCmdList = (CList<sCmd,sCmd> *)pEQ->pCmdList ;

	try
	{
		if( !pCmdList->IsEmpty() )
		{
			pCmdList->RemoveHead() ;
		}
		else
			return -1 ; //无可删除命令

		return 0 ;
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:删除设备通讯命令发生异常:%s ",(LPCSTR)e.Description() ) ;
		theApp.OutPut(strTip) ;
		return -1 ;
	}
}

//##ModelId=44B6F8860290
sCommEQ* CEQPool::FindEQ(CString strName)
{
	int i,len ;
	CString strTip ;
	try
	{
		len = m_EQArray.GetSize() ;
		if( len == 0 )
			return NULL ;
		//查询设备池中的设备。
		for( i = 0 ; i < len ; i++ )
		{
			//转化字符串为十六进制
			if( m_EQArray[i].strIDAddr == strName)
			{
				return &(m_EQArray[i]) ;
			}

		}

		return NULL ;
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:搜寻设备发生异常:%s ",(LPCSTR)e.Description() ) ;
		theApp.OutPut(strTip) ;
		return NULL ;
	}
}

//##ModelId=44B6F8860284
sCommEQ* CEQPool::FindIP(CString strIp)
{
	CString strTip ;
	int i,len ;
	try
	{
		len = m_EQArray.GetSize() ;
		if( len == 0 )
			return NULL ;
		//查询设备池中的设备。
		for( i = 0 ; i < len ; i++ )
		{
			//转化字符串为十六进制
			if( m_EQArray[i].strCommAddr == strIp && m_EQArray[i].nModel == 2 )
			{
				return &(m_EQArray[i]) ;
			}
		}

		return NULL ;
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:查找设备发生异常:%s ",(LPCSTR)e.Description() ) ;
		theApp.OutPut(strTip) ;
		return NULL ;
	}
}

//##ModelId=44B6F8860283
int CEQPool::GetAllEQState()
{
	int i , len ;
	CString strTip ;
	try
	{
		len = m_EQArray.GetSize() ;

		for( i = 0 ; i < len ; i++ )
		{
			if( m_EQArray[i].unEQState == 1 )
				return 1 ;
		}
		return 0 ;
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:获取设备状态发生异常:%s ",(LPCSTR)e.Description() ) ;
		theApp.OutPut(strTip) ;
		return -1 ;
	}
}

//##ModelId=44B6F8860280
sSVMPort* CEQPool::FindEQPort(sCommEQ *pEQ, int nPort)
{
	//int i,nNo ;
	CString strTip ;
	try
	{
		if( pEQ->sPort[nPort-1].strPortSort.IsEmpty() )
			return NULL ;
		return  &(pEQ->sPort[nPort-1]) ;
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:查找设备端口发生异常:%s ",(LPCSTR)e.Description() ) ;
		theApp.OutPut(strTip) ;
		return NULL ;
	}
	
}

//##ModelId=44B6F8860275
int CEQPool::GetCount()
{
	return m_nCount ;
}

//##ModelId=44B6F8860264
sCommEQ* CEQPool::FindEQ(UCHAR ucName, UCHAR ucType, CString strCommAddr)
{
	int i,len ;
	UCHAR ucAddr,ucTemp ;
	CString strTip ;

	try
	{
		len = GetCount() ;		

		for( i = 0 ; i < len ; i++ )
		{
			//转化字符串为十六进制
			if(!m_EQArray[i].strIDAddr.IsEmpty())
				StringToBytes(m_EQArray[i].strIDAddr.GetBuffer(0),&ucAddr,2) ;
			if(!m_EQArray[i].strType.IsEmpty())
				StringToBytes(m_EQArray[i].strType.GetBuffer(0),&ucTemp,2) ;

			if( ucAddr == ucName && ucTemp == ucType && m_EQArray[i].strCommAddr == strCommAddr)
			{
				return &(m_EQArray[i]) ;
			}
		}

		return NULL ;
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:查找设备发生异常:%s ",(LPCSTR)e.Description() ) ;
		theApp.OutPut(strTip) ;
		return NULL ;
	}
	
}

//##ModelId=44B6F8860262
sCommEQ* CEQPool::GetEQPtr(int nId)
{
	int i,len ;
	CString strTip ;
	try
	{
		len = GetCount() ;
		//查询设备池中的设备。
		for( i = 0 ; i < len ; i++ )
		{
			//转化字符串为十六进制
			if( m_EQArray[i].nID == nId)
			{
				return &(m_EQArray[i]) ;
			}
		}
		return NULL ;
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:搜寻设备发生异常:%s ",(LPCSTR)e.Description() ) ;
		theApp.OutPut(strTip) ;
		return NULL ;
	}
}

//##ModelId=44B6F8860261
void CEQPool::ResetEQ()
{
	//创建设备空间
	int i,j ;
	sCommEQ f_EQ ;
	for( i = 0 ; i < EQ_MAX ; i++ )
	{
		f_EQ.nNo = i ;				//设备建立时的序号
		f_EQ.nID = 0 ;				//设备ID号
		f_EQ.nTID = 0 ;				//设备类型ID
		f_EQ.unEQState = 0;			//0 正常 , 1 告警状态 2 异常设备(未能正确初始化)
		f_EQ.unCommState = 0;		//0 未连接 , 1 连接后待机 , 2 设备通讯中 ,3 设备故障
		f_EQ.nModel = 0;			//设备通讯模式1 串口 2 TCP
		f_EQ.nFault = 0;			//出错数 错误数超过5次认为通讯故障(暂定)
		f_EQ.nTimeOut = 0;			//超时数 超时数超过5次认为通讯断开(暂定)
		f_EQ.strName.Empty() ;		//设备的名称
		f_EQ.strType.Empty() ;		//设备的类型
		f_EQ.strIDAddr.Empty() ;	//协议包中的ADR项
		f_EQ.strNote.Empty() ;		//设备类型描述
		f_EQ.strCommAddr.Empty() ;	//用于电话号码、IP地址等表示。
		f_EQ.strScanPack.Empty() ;	//轮询包暂存

		for( j = 0 ; j < PORT_MAX ; j++ )
		{
			f_EQ.sPort[j].nPID = j ;				//端口ID
			f_EQ.sPort[j].SVMID = 0 ;				//监测模块ID
			f_EQ.sPort[j].nSVDSpotNum = 0 ;			//被监测设备的被监测点数
			f_EQ.sPort[j].nSVDContainID = 0 ;		//所在地ID
			f_EQ.sPort[j].nSVDType = 0 ; 			//被监测设备类型
			f_EQ.sPort[j].nSpotType = 0 ;			//被监测点类型 0 开关量 ; 1 模拟量
			f_EQ.sPort[j].nSVDID = 0 ;  	 		//被监测设备ID
			f_EQ.sPort[j].nType = 0 ; 				//0 开关量 ; 1 模拟量
			f_EQ.sPort[j].dValue = 0 ;  			//双精度报警值
			f_EQ.sPort[j].nState = 0 ;     			//0 端口正常 1 端口报警
			f_EQ.sPort[j].nLevel = 0 ;				//告警级别 0 为无 ,一级以上为1~n
			f_EQ.sPort[j].nAlimitNum = 0 ;			//告警门限
			f_EQ.sPort[j].nACount = 0 ;				//告警次数
			f_EQ.sPort[j].nAShieldNum = 0 ;			//告警屏蔽数
			f_EQ.sPort[j].nANum = 0 ;				//告警累积
			f_EQ.sPort[j].strPortSort.Empty() ;		//端口序号
			f_EQ.sPort[j].strSpotSort.Empty() ;		//被监测点序号
			f_EQ.sPort[j].strSpotNote.Empty() ;		//被监测点描述
			f_EQ.sPort[j].strSVDType.Empty() ;		//被监测设备类型
			f_EQ.sPort[j].strSVDName.Empty() ;		//被监测设备名称
			f_EQ.sPort[j].strSVDCity.Empty() ;		//被监测设备所在城市
			f_EQ.sPort[j].strSVDArea.Empty() ;		//被监测设备所在地区
			f_EQ.sPort[j].strSVDAddr.Empty() ;		//被监测设备所在地址
			f_EQ.sPort[j].strSVDPlace.Empty();		//被监测设备的具体位置(机房名称/装备地点)
			f_EQ.sPort[j].strAlarmL1.Empty() ;		//一级告警
			f_EQ.sPort[j].strAlarmL2.Empty() ;		//二级告警
			f_EQ.sPort[j].strAlarmL3.Empty() ;		//三级告警
			f_EQ.sPort[j].pShield = NULL ;			//告警屏蔽指针
			BOOL bIsUse = FALSE ;					//是否使用标志
		}

		f_EQ.nPortNum = 0 ;							//端口总数
		f_EQ.pCmdList = NULL;						//命令队列链表指针
		f_EQ.bResponse = TRUE ;					//是否有响应包
		f_EQ.bIsUse = FALSE;						//使用标志位

		m_EQArray.Add(f_EQ) ;	//添加设备
	}	//创建设备空间

}

// 初始设备列表
int CEQPool::InitUnitList(void)
{

	CString strTip ;		//系统提示信息
	CString strSQL ;		//SQL语句
	CString strTable1 ;
	_variant_t var;
	_RecordsetPtr pRsPtr1 ;
	sUnit *m_unit;
	
	m_UnitArray.RemoveAll();

	strTip.Empty() ;
	pRsPtr1.CreateInstance(__uuidof(Recordset));
	strTable1 = "VW_SVModule" ; //监测模块表
	strSQL.Format("SELECT * FROM %s",strTable1) ;
	if( m_pAdoDB->ReadDB(strSQL, pRsPtr1,strTip) != 0 )	//读监测模块表
		return -1 ;										//完全未能初始化

	//**************读取所有监测模块设备***************

		while( !pRsPtr1->adoEOF )
		{
			m_unit = new sUnit;
			m_unit->iPort = MDF_DEFAULT_PORT;
			m_unit->iReceive = 0;
			m_unit->nID = 0;
			m_unit->iCmd = 0x44;			//默认获取告警
			m_unit->nModel = 0;
			m_unit->sIP = _T("127.0.0.1");
			m_unit->strIDAddr = _T("01");
			m_unit->strSend.Empty();
			m_unit->strType.Empty();
			m_unit->iSendCount = 0;
			m_unit->tmReceive = CTime::GetCurrentTime();
			m_unit->tmSend = CTime::GetCurrentTime(); 
			m_unit->iState = 0;

			if( m_pAdoDB->GetRdData( "SVMID", pRsPtr1,var,strTip) == 0 )
			{
				m_pAdoDB->GetIntVar(var,m_unit->nID ,strTip) ;
			}else
				m_unit->nID = -1;
			//获取监测模块通讯ADR地址
			

			if( m_pAdoDB->GetRdData("SVMAddrCode",pRsPtr1,var,strTip) == 0 )
			{
				m_pAdoDB->GetStrVar(var,m_unit->strIDAddr,strTip) ;
			}
			else
				m_unit->strIDAddr.Empty();
			

			//获取监测模块通讯来源地址
			if( m_pAdoDB->GetRdData("SVMADDRSource",pRsPtr1,var,strTip) == 0 )
			{
				m_pAdoDB->GetStrVar(var,m_unit->sIP,strTip) ;
			}
			else
				m_unit->sIP.Empty();

			//获取监测模块通讯模式
			if( m_pAdoDB->GetRdData("SVMComModel",pRsPtr1,var,strTip) == 0 )
			{
				m_pAdoDB->GetIntVar(var,m_unit->nModel,strTip) ;
			}
			else
				m_unit->nModel = 0 ; // 0 -- UDP ; 1 -- 串口 ; 2 -- TCP

			if( m_pAdoDB->GetRdData("SVMTNUM",pRsPtr1,var,strTip) == 0 )
			{
				m_pAdoDB->GetStrVar(var,m_unit->strType,strTip) ;
			}
			else
				m_unit->strType = "" ; 

			m_UnitArray.Add(*m_unit);
			delete m_unit;

			pRsPtr1->MoveNext() ;
		}
		
		pRsPtr1->Close() ;//关闭打开的记录
	return 0;
}

⌨️ 快捷键说明

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