📄 eqpool.cpp
字号:
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 + -