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

📄 eqpool.cpp

📁 电信机房MDF、电源柜监控源码,主要用在通信机房配线设备监控、电源柜监控
💻 CPP
📖 第 1 页 / 共 3 页
字号:
					strTable3 = "CMTAlarmShield" ;
					strSQL.Format("SELECT * FROM %s WHERE SVMID = %d AND SVMPSort = %s",strTable3,m_EQArray[i].sPort[j].nSVDID,m_EQArray[i].sPort[j].strPortSort) ;
					strTip = strStep + " 读表 CMTAlarmShield 出错" ;

					if( m_pAdoDB->ReadDB(strSQL, pRsPtr3,strTip) != 0 )//读数据库监测模块端口表
					{
						nResult++ ;
						nState = 1 ;
					}

					sAShield f_Shield ;

					pShield = new CList< sAShield , sAShield > ;

					for(k = 0 ; !pRsPtr3->adoEOF ; k++ )
					{
						//读取告警屏蔽数
						strTip = strStep + " 读表 CMTAlarmShield 的 屏蔽时间 SHLdTime 出错" ;
						if( m_pAdoDB->GetRdData("SHLdTime",pRsPtr3,var,strTip) != 0 )
						{
							nResult++ ;
							nState = 1 ;
							f_Shield.nTime = 0 ;												
						}
						else
						{
							m_pAdoDB->GetIntVar(var, f_Shield.nTime,strTip) ;
							f_Shield.nTime *= 1000 ;
						}

						//读取上限屏蔽数
						strTip = strStep + " 读表 CMTAlarmShield 的 上限屏蔽 SHLStartValue 出错" ;
						if( m_pAdoDB->GetRdData("SHLStartValue",pRsPtr3,var,strTip) != 0 )
						{
							nResult++ ;
							nState = 1 ;
							f_Shield.dUpper = 0.0 ;												
						}
						else
							m_pAdoDB->GetDoubleVar(var, f_Shield.dUpper,strTip) ;

						//读取下限屏蔽数
						strTip = strStep + " 读表 CMTAlarmShield 的 下限屏蔽 SHLStartValue 出错" ;
						if( m_pAdoDB->GetRdData("SHLStartValue",pRsPtr3,var,strTip) != 0 )
						{
							nResult++ ;
							nState = 1 ;
							f_Shield.dLower = 0.0 ;												
						}
						else
							m_pAdoDB->GetDoubleVar(var, f_Shield.dLower,strTip) ;

						pShield->AddTail(f_Shield) ;

						pRsPtr3->MoveNext() ;
					}
					m_EQArray[i].sPort[j].pShield = (LPVOID)pShield ;

					pRsPtr3->Close() ;

//*****************读被监测设备表*********************
					strTable3 = "CMTSVDevice" ;
					strSQL.Format("SELECT * FROM %s WHERE SVDID = %d ",strTable3,m_EQArray[i].sPort[j].nSVDID) ;
					strTip = strStep + " 读表 CMTSVDevice 出错" ;

					if( m_pAdoDB->ReadDB(strSQL, pRsPtr3,strTip) != 0 )//读数据库监测模块端口表
					{
						nResult++ ;
						nState = 1 ;
					}					

					if( !pRsPtr3->adoEOF )
					{
						//获取被监测设备类型表
						strTip = strStep + " 读表 CMTSVDevice 的 被监测设备端口类型ID SVMTID 出错" ;
						if( m_pAdoDB->GetRdData("SVMTID",pRsPtr3,var,strTip) != 0 )
						{
							nResult++ ;
							nState = 1 ;
							m_EQArray[i].sPort[j].nSVDType = -1 ;
						}
						else
							m_pAdoDB->GetIntVar(var,m_EQArray[i].sPort[j].nSVDType,strTip) ;

						//获取被监测设备名
						strTip = strStep + " 读表 CMTSVDevice 的 被监测设备名 SVDName 出错" ;
						if( m_pAdoDB->GetRdData("SVDName",pRsPtr3,var,strTip) != 0 )
						{
							nResult++ ;
							nState = 1 ;
							m_EQArray[i].sPort[j].strSVDName = "未知" ;
						}
						else
							m_pAdoDB->GetStrVar(var,m_EQArray[i].sPort[j].strSVDName,strTip) ;

						//获取被监测设备所在地址ID
						strTip = strStep + " 读表 CMTSVDevice 的 被监测设备所在地址ID ContainID 出错" ;
						if( m_pAdoDB->GetRdData("ContainID",pRsPtr3,var,strTip) != 0 )
						{
							nResult++ ;
							nState = 1 ;
							m_EQArray[i].sPort[j].nSVDContainID = -1 ;	
						}
						else
							m_pAdoDB->GetIntVar(var,m_EQArray[i].sPort[j].nSVDContainID,strTip) ;

						//获取被监测设备的被监测点数 @@ 可用于判断
						strTip = strStep + " 读表 CMTSVDevice 的 被监测设备端口数 SVDNumber 出错" ;
						if( m_pAdoDB->GetRdData("SVDNumber",pRsPtr3,var,strTip) != 0 )
						{
							nResult++ ;
							nState = 1 ;
							m_EQArray[i].sPort[j].nSVDSpotNum = -1 ;
						}
						else
							m_pAdoDB->GetIntVar(var,m_EQArray[i].sPort[j].nSVDSpotNum,strTip) ;

						pRsPtr3->Close() ;

//*****************读取被监测设备类型表**********************
						strTable3 = "CMTSVModuleType" ; //与监测设备类型相同。
						strSQL.Format("SELECT * FROM %s WHERE SVMTID = %d ",strTable3,m_EQArray[i].sPort[j].nSVDType) ;
						strTip.Format("%s 读表 CMTSVModuleType 时  出错",strStep) ;
						if( m_pAdoDB->ReadDB(strSQL, pRsPtr3, strTip) != 0 )//读数据库监测模块端口表
						{
							nResult++ ;
							nState = 1 ;
						}

						if( !pRsPtr3->adoEOF )
						{
							strTip = strStep + " 读表 CMTSVModuleType 的 监测模块描述 SVMNote 出错" ;

							if( m_pAdoDB->GetRdData("SVMNote",pRsPtr3,var,strTip) != 0 )
							{
								nResult++ ;
								nState = 1 ;
								m_EQArray[i].sPort[j].strSVDType = "未知类型" ;
							}
							else
								m_pAdoDB->GetStrVar(var,m_EQArray[i].sPort[j].strSVDType,strTip) ;
						}
						else
						{
							strTip.Format("%s 读表 CMTSVDSpot 未发现  相应的 %s 端口类型" ,strStep,m_EQArray[i].sPort[j].strSpotSort)  ; 
							theApp.OutPut(strTip) ;
							nResult++ ;
							nState = 1 ;
						}
						pRsPtr3->Close() ;

//***********读取监测点表**********************
						strTable3 = "CMTSVDSpot" ; //与监测设备类型相同。
						strSQL.Format("SELECT * FROM %s WHERE SVDID = %d AND SVSpotSort = '%s'",strTable3,m_EQArray[i].sPort[j].nSVDID,m_EQArray[i].sPort[j].strSpotSort) ;
						strTip.Format("%s 读表 CMTSVDSpot 时  出错",strStep) ;

						if( m_pAdoDB->ReadDB(strSQL, pRsPtr3,strTip) != 0 )//读数据库监测模块端口表
						{
							nResult++ ;
							nState = 1 ;
						}
						
						if( !pRsPtr3->adoEOF )
						{
							
							//获取监测点描述
							strTip = strStep + " 读表 CMTSVDSpot 的 被监测点描述 SVSpotNote 出错" ;
							if( m_pAdoDB->GetRdData("SVSpotNote",pRsPtr3,var,strTip) != 0 )
							{
								nResult++ ;
								nState = 1 ;
								m_EQArray[i].sPort[j].strSpotNote = "未知" ;
							}
							else
								m_pAdoDB->GetStrVar(var,m_EQArray[i].sPort[j].strSpotNote,strTip) ;


							//获取监测点类型 0 状态量 ; 1 模拟量
							strTip = strStep + " 读表 CMTSVDSpot 的 被监测点类型 SVSpotType 出错" ;

							if( m_pAdoDB->GetRdData("SVSpotType",pRsPtr3,var,strTip) != 0 )
							{
								nResult++ ;
								nState = 1 ;
								m_EQArray[i].sPort[j].nSpotType = -1 ;
							}
							else
								m_pAdoDB->GetIntVar(var,m_EQArray[i].sPort[j].nSpotType,strTip) ;
						}
						else
						{
							strTip.Format("%s 读表 CMTSVDSpot 时 未能找到 端口 %s 所对应的监测点",strStep,m_EQArray[i].sPort[j].strPortSort) ; 
							theApp.OutPut(strTip) ;
							nResult++ ;
							nState = 1 ;
						}

						pRsPtr3->Close() ;

//************读取监测点所在地址***************
						strTable3 = "CMTContainer" ; //与监测设备类型相同。
						strSQL.Format("SELECT * FROM %s WHERE ContainID = %d ",strTable3,m_EQArray[i].sPort[j].nSVDContainID) ;
						strTip.Format("%s 读表 CMTContainer 时  出错",strStep) ;

						if( m_pAdoDB->ReadDB(strSQL, pRsPtr3, strTip) != 0 )//读数据库监测模块端口表
						{
							nResult++ ;
							nState = 1 ;
						}

						if( !pRsPtr3->adoEOF )
						{
							//获取监测点描述
							strTip = strStep + " 读表 CMTContainer 的 所在位置 ContainerName 出错" ;
							if( m_pAdoDB->GetRdData("ContainerName",pRsPtr3,var,strTip) != 0 )
							{
								nResult++ ;
								nState = 1 ;
								m_EQArray[i].sPort[j].strSVDPlace = "未知" ;
							}
							else
								m_pAdoDB->GetStrVar(var,m_EQArray[i].sPort[j].strSVDPlace,strTip) ;
							
							//获取所在城市
							strTip = strStep + " 读表 CMTContainer 的 所在城市 ContainerCity 出错" ;
							if( m_pAdoDB->GetRdData("ContainerCity",pRsPtr3,var,strTip) != 0 )
							{
								nResult++ ;
								nState = 1 ;
								m_EQArray[i].sPort[j].strSVDCity = "未知" ;	
							}
							else
								m_pAdoDB->GetStrVar(var,m_EQArray[i].sPort[j].strSVDCity,strTip) ;
						
							//获取所在区
							strTip = strStep + " 读表 CMTContainer 的 所在地区 ContainerArea 出错" ;
							if( m_pAdoDB->GetRdData("ContainerArea",pRsPtr3,var,strTip) != 0 )
							{
								nResult++ ;
								nState = 1 ;
								m_EQArray[i].sPort[j].strSVDArea = "未知" ;
							}
							else
								m_pAdoDB->GetStrVar(var,m_EQArray[i].sPort[j].strSVDArea,strTip) ;

							//获取所在地址
							strTip = strStep + " 读表 CMTContainer 的 所在地点 ContainerAddr 出错" ;

							if( m_pAdoDB->GetRdData("ContainerAddr",pRsPtr3,var,strTip) != 0 )
							{
								nResult++ ;
								nState = 1 ;
								m_EQArray[i].sPort[j].strSVDAddr = "未知" ;
							}
							else
								m_pAdoDB->GetStrVar(var,m_EQArray[i].sPort[j].strSVDAddr,strTip) ;

						}
						
						//其它初始化##加入告警等级
						m_EQArray[i].sPort[j].dValue = -9.91991 ;
						m_EQArray[i].sPort[j].nLevel = 0 ;
						m_EQArray[i].sPort[j].nState = PORT_NORMAL ;
						m_EQArray[i].sPort[j].nAlimitNum = ALARM_LIMIT ; //告警门限
						m_EQArray[i].sPort[j].nACount = 0 ; //三次发生报警将发生告警	
					}
					pRsPtr3->Close() ;
					pRsPtr2->MoveNext() ;
				}
				else
				{
					strTip.Format("%s 共\"%d\"个端口, 成功初始化了\"%d\"个端口, 仍有\"%d\"个端口未能找到其对应的监测点。",strStep,m_EQArray[i].nPortNum,i,m_EQArray[i].nPortNum-i ) ;
					theApp.OutPut(strTip) ;
					m_EQArray[i].nPortNum = j ;
					nResult++ ;
					nState = 1 ;
					break ;
				}
			}
			if( !pRsPtr2->adoEOF )
			{
				int nNum = 0 ;
				while( !pRsPtr2->adoEOF )
				{
					nNum++ ;
					pRsPtr2->MoveNext() ;
				}
				strTip.Format("%s 读表 CMTSVModulePort 中有\"%d\"条端口数据,与设置总数\"%d\"个端口不同。",strStep,m_EQArray[i].nPortNum+nNum,m_EQArray[i].nPortNum) ;
				theApp.OutPut(strTip) ;
			}
			pRsPtr2->Close() ;

			if( m_EQArray[i].nModel == 2 && m_EQArray[i].strCommAddr.IsEmpty() )
			{
				strTip.Format("%s TCP 通讯来源地址不能为空!",strStep) ;
				theApp.OutPut(strTip) ;
				nState = 2 ;				
			}

			if( m_EQArray[i].nModel != 1 && m_EQArray[i].nModel != 2 )
			{
				strTip.Format("%s 通讯模式出错:%d 必须为串口 1 或TCP 2 ",strStep,m_EQArray[i].nModel) ;
				theApp.OutPut(strTip) ;
				nState = 2 ;
			}

			if( m_EQArray[i].strType.GetLength() != 2 )
			{
				strTip.Format("%s 类型出错:%s 长度须为两字符",strStep,m_EQArray[i].strType) ;
				theApp.OutPut(strTip) ;
				nState = 2 ;
			}

			if( m_EQArray[i].strIDAddr.GetLength() != 2 )
			{
				strTip.Format("%s 地址码出错:%s 长度须为两字符",strStep,m_EQArray[i].strIDAddr) ;
				theApp.OutPut(strTip) ;
				nState = 2 ;
			}

			strName = m_EQArray[i].strName ;
			strName.TrimLeft() ;
			strName.TrimRight() ;

			if(nState == 2)
			{
				//f_EQ.unEQState = 2 ;//设备异常
				CString strComm ;
				nState = 0 ;
				
				strTip.Format("异常:设备 %s 加载失败 ",strName) ;
						
				if( m_EQArray[i].nModel == 2 && m_EQArray[i].strCommAddr.IsEmpty() )
					strTip += "TCP 通讯来源地址不能为空!" ;

				if( m_EQArray[i].nModel != 1 && m_EQArray[i].nModel != 2 )
				{
					strComm.Format("通讯模式未知 %d ",m_EQArray[i].nModel) ;
					strTip += strComm ;
				}

				if( m_EQArray[i].strType.GetLength() != 2 )
					strTip += "类型长度错误("+m_EQArray[i].strType+") " ;
				if( m_EQArray[i].strIDAddr.GetLength() != 2 )
					strTip += "地址码长度错误("+m_EQArray[i].strIDAddr+") " ;
				if( m_EQArray[i].nPortNum == 0 )
					strTip += "端口数为 0  " ;

				theApp.OutPut(strTip) ;
				strTip ="* "+strTip ;
				//theApp.DebugShow(strTip) ;

				for(k=0 ; k < m_EQArray[i].nPortNum ; k++)
				{
					pShield = (CList<sAShield,sAShield>*)(m_EQArray[i].sPort[k].pShield) ;

					if( !pShield->IsEmpty() )
						pShield->RemoveAll() ;
					delete pShield ;
				}

				delete pCmdList ;
				pRsPtr1->MoveNext() ;
				continue ;
			}

			strTip.Format("系统:设备 %s 加载成功 ",m_EQArray[i].strName) ;
			theApp.OutPut(strTip) ;
			
			m_EQArray[i].bIsUse = TRUE ;		//设备使用标志
			//设备通讯命令
			m_EQArray[i].unEQState = 0 ;			//设备状态 0--正常 , 1--告警 , 2--故障
			m_EQArray[i].unCommState = 0 ;			//通讯状态 0--未连接,1--通讯中					
			//f_EQ.hEvent = CreateEvent ( NULL , FALSE , TRUE , NULL ) ;	//建立信号状态是否容许操作设备
			//生成轮询包
			//f_EQ.ucCmd = 0x44 ;
			//theApp.m_pComm->m_pProtocol->Build(&m_EQArray[i],0x44,m_EQArray[i].strScanPack) ;//应考虑不同协议的扩展
			//f_EQ.ucCmd = 0x00 ;
			//命令队列初始化
			//f_EQ.hCmdEvent = CreateEvent ( NULL , FALSE , TRUE , NULL ) ;//命令队列信号旗
			m_EQArray[i].pCmdList = (LPVOID)pCmdList ;
			pCmdList = NULL ;
			//超时出错处理
			m_EQArray[i].nFault = 0 ;		//出错数据
			m_EQArray[i].nTimeOut = 0 ;		//超时数据
			// 初始化各端口

			//初始化是否设置通讯定时器
			//f_EQ.bIsTimeOut = FALSE ;
			//初始化设备通讯Socket
			//m_EQArray[i].pSock = NULL ;
			//通讯返回为无
			m_EQArray[i].bResponse = TRUE ;
			
			i++ ;

			//m_EQArray.Add(f_EQ) ;	//添加设备
			
			nState = 0 ;
			/*
			if( theApp.m_pComm->m_bIsDebug )
			{
				strTip.Format("* 系统:设备 %s 类型 %s 加载成功",m_EQArray[i].strName,m_EQArray[i].strType,m_EQArray[i].strIDAddr,m_EQArray[i].nModel) ;
				theApp.DebugShow(strTip) ;
			}
			*/

			pRsPtr1->MoveNext() ;
		}

		nNo = i ;
		pRsPtr1->Close() ;//关闭打开的记录

//**********告警状态查询*************
		pEQ = NULL ;
		strTable1 = "CMTAlarmInfo" ;
		strSQL.Format( "SELECT * FROM %s WHERE AlarmState <> 3",strTable1) ; //读告警信息表
		strTip.Format("%s 读表 CMTAlarmInfo 时  出错",strStep) ;

		if( m_pAdoDB->ReadDB(strSQL,pRsPtr1,strTip) != 0 )
		{
			nResult++ ;
			nState = 1 ;
		}

		int nEQId = -1 ;
		m_nCount = nNo ;

		while( !pRsPtr1->adoEOF )
		{

			strTip = "异常:初始化 读表 CMTAlarmInfo 的 监测模块ID 出错" ;

			if( m_pAdoDB->GetRdData("SVMID",pRsPtr1,var,strTip) !=0 )
			{
				nResult++ ;
				nState = 1 ;
				nEQId = -1 ;
			}
			else
				m_pAdoDB->GetIntVar(var,nEQId,strTip) ;

			strTip.Format("程序:获得告警信息设备 %d ",nEQId) ;
			theApp.TestWriteLog(strTip) ;

			//pEQ = FindEQ(strName) ;//寻找相应的设备
			pEQ = GetEQPtr(nEQId) ;

			//设置告警对应端口
			if( pEQ != NULL )
			{
				strName = pEQ->strName ;
				strName.TrimLeft() ;
				strName.TrimRight() ;
				strStep.Format("异常:初始化 设备 %s ",strName) ;
				strTip = strStep + " 读表 CMTAlarmInfo 的 监测模块端口序号 SVMPSort 出错" ;

				if( m_pAdoDB->GetRdData("SVMPSort",pRsPtr1,var,strTip) != 0 )
				{
					nResult++ ;
					nState = 1 ;

⌨️ 快捷键说明

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