📄 optickettopo.cpp.bak
字号:
#include <OB/CORBA.h>#include <qstring.h>#include <algorithm>#include "cdevinfo.h"#include "optickettopo.h"#include "Scada_Opt_Report.h"#include "Scada_Pub_Report.h"#include "paramanage.h"#include "opticket_api/opticket_flow.h"#include "case_include/mode_manage.h"#include <fstream>ofstream log_file("/users/ems/open2000e/data/opticket/opt.log",ios::app|ios::out);COpticketTopo::COpticketTopo(int app_no){ g_app_no=app_no; g_ticket_mode = 1;;}COpticketTopo::~COpticketTopo(){ Free();}int COpticketTopo::Init(){ m_scadaOp=NULL; m_scadaOp=new CTableOp(); CMsgBusFactory * msgBusFactory; getmsgbusfactory(&msgBusFactory); m_optTopoBus = msgBusFactory->MsgBusFactory("opticket_topo_server", NULL,0); msgBusFactory->release(); m_optTopoBus->JoinChannel(CH_OPTICKET_TOPO_CHANNEL); m_optTopoBus->JoinChannel(CH_OPTICKET_CHANNEL); m_SendMsgBuf = NULL; m_SendMsgType = 0; if(scada_api.DbNotifyAt(SCTRL_MODEL_NO, &m_model_time_shm) < 0 || scada_api.DbNotifyAt(SCTRL_YX_CHANGE_NO, &m_yx_change_time_shm) < 0 || NULL == m_model_time_shm || NULL == m_yx_change_time_shm) {//通过m_model_time_shm和m_yx_change_time_shm来确定模型是否变化、遥信是否变化 DelayTime(5000); TRACE("fail to get m_model_time_shm or m_yx_change_time_shm.\n"); } //m_last_model_time = *m_model_time_shm; m_last_model_time = 0; m_last_yx_change_time=0; g_psntp=NULL; vector<T_Corba_Props> props_all(2); strcpy(props_all[0].prop_name , "ooc.orb.trace.connections"); strcpy(props_all[0].prop_value, "3"); strcpy(props_all[1].prop_name , "ooc.orb.policy.connect_timeout"); strcpy(props_all[1].prop_value, "2000");// 请求等待时间300秒,主要考虑到大量的LOB字段执行的速度,一般不用那么长,可以自己根据应用的性质来设定 m_sql_sp_client = new sql_sp_client_base(AP_DB_SERVICE,1,PORT_DB_SQL_SP,"sql_sp_server",props_all,AC_REALTIME_NO,NULL); SetGraphInfo(); printf("系统初始化完毕,开始等待消息!!!!!!\n"); return 1;}int COpticketTopo::Free(){ if(m_optTopoBus!=NULL) { m_optTopoBus->release(); } if(m_SendMsgBuf!=NULL) { delete []m_SendMsgBuf; } m_SendMsgBuf=NULL; if(m_sql_sp_client != NULL) { delete m_sql_sp_client; m_sql_sp_client = NULL; } if(g_psntp!=NULL) { g_psntp->Release(); } g_psntp=NULL; if(m_scadaOp != NULL) { m_scadaOp = NULL; } return 1;}int COpticketTopo::SetGraphInfo()//初始化IPsntp{ unsigned int i; AllDevice_T allDev_T; set<int> brkSet; vector<PTerm_T> gnTVec; vector<PTerm_T> ldTVec; vector<PTerm_T> bsTVec; vector<PTerm_T> gddiscrTVec; vector<PTerm_T> otherTVec; vector<STerm_T> dotTVec; vector<Trwd_T> trwdTVec; vector<KvBranch_T> brkTVec; vector<KvBranch_T> discrTVec; vector<KvBranch_T> otherbrhTVec; vector<KvTriNdDev_T> trindTVect; AllDeviceStru alldev; PTerm_T term; STerm_T sterm; KvBranch_T kvbrh; Trwd_T twd; KvTriNdDev_T tridev; clock_t starttime; starttime = clock(); ReadDevice(alldev); if(g_psntp!=NULL) { g_psntp->Release(); } IPsntpFactory * ppObj; DllGetPsntpFactoryObject(&ppObj); ppObj->CreatePsntp(&g_psntp); ppObj->Release(); vector<int> open_dev_vec; vector<int> close_dev_vec; close_dev_vec.reserve(alldev.m_gddiscrVec.size()+alldev.m_brkVec.size()+alldev.m_discrVec.size()); open_dev_vec.reserve(alldev.m_gddiscrVec.size()+alldev.m_brkVec.size()+alldev.m_discrVec.size()); printf("ReadDevice exec time ====================%d s\n",clock()-starttime); gnTVec.reserve(alldev.m_gnVec.size()); for(vector<gn_device_stru>::iterator p_gn_dev = alldev.m_gnVec.begin();p_gn_dev != alldev.m_gnVec.end();++p_gn_dev ) { if(p_gn_dev->nd1 <= 0) { continue; } term.m_id=p_gn_dev->dev_id; term.m_st=p_gn_dev->fac_id; term.m_vl=p_gn_dev->vlty_id; term.m_nd=p_gn_dev->nd1; gnTVec.push_back(term); } ldTVec.reserve(alldev.m_ldVec.size()); for(vector<ld_device_stru>::iterator p_ld_dev = alldev.m_ldVec.begin();p_ld_dev!=alldev.m_ldVec.end();++p_ld_dev) { if(p_ld_dev->nd1 <= 0) { continue; } term.m_id=p_ld_dev->dev_id; term.m_st=p_ld_dev->fac_id; term.m_vl=p_ld_dev->vlty_id; term.m_nd=p_ld_dev->nd1; ldTVec.push_back(term); } bsTVec.reserve(alldev.m_bsVec.size()+alldev.m_zdVec.size()); //end add for(vector<bs_device_stru>::iterator p_bs_dev = alldev.m_bsVec.begin();p_bs_dev != alldev.m_bsVec.end();++p_bs_dev) { if(p_bs_dev->nd1 <= 0) { continue; } term.m_id=p_bs_dev->dev_id; term.m_st=p_bs_dev->fac_id; term.m_vl=p_bs_dev->vlty_id; term.m_nd=p_bs_dev->nd1; bsTVec.push_back(term); if(term.m_id/DB_BASE == BS_DEVICE_NO) { g_bs_node_set.insert(term.m_nd); g_bs_node_map.insert(make_pair(term.m_nd,term.m_id)); } } for(vector<zd_device_stru>::iterator p_zd_dev = alldev.m_zdVec.begin();p_zd_dev != alldev.m_zdVec.end();++p_zd_dev) { if(p_zd_dev->nd1 <= 0) { continue; } term.m_id=p_zd_dev->dev_id; term.m_st=p_zd_dev->fac_id; term.m_vl=p_zd_dev->vlty_id; term.m_nd=p_zd_dev->nd1; otherTVec.push_back(term); } gddiscrTVec.reserve(alldev.m_gddiscrVec.size()); for(vector<gddiscr_device_stru>::iterator p_gddiscr_dev = alldev.m_gddiscrVec.begin();p_gddiscr_dev != alldev.m_gddiscrVec.end();++p_gddiscr_dev) { if(p_gddiscr_dev->nd1 <= 0) { continue; } term.m_id=p_gddiscr_dev->dev_id; term.m_st=p_gddiscr_dev->fac_id; term.m_vl=p_gddiscr_dev->vlty_id; term.m_nd=p_gddiscr_dev->nd1; gddiscrTVec.push_back(term); if(p_gddiscr_dev->yx_value==OPT_VALUE_YX_ON) { close_dev_vec.push_back(p_gddiscr_dev->dev_id); } else { open_dev_vec.push_back(p_gddiscr_dev->dev_id); } } map<int,unsigned char> acln_eq_flag_map; map<int,set<vector<acln_dot_stru>::iterator> > acln_dot_map; for(vector<acln_device_stru>::iterator p_acln_dev = alldev.m_aclnVec.begin();p_acln_dev != alldev.m_aclnVec.end();++p_acln_dev) { acln_eq_flag_map[p_acln_dev->dev_id] = p_acln_dev->eq_fg; } dotTVec.reserve(alldev.m_dotVec.size()); for(vector<acln_dot_stru>::iterator p_acdot_dev = alldev.m_dotVec.begin();p_acdot_dev != alldev.m_dotVec.end();++p_acdot_dev) { acln_dot_map[p_acdot_dev->acln_id].insert(p_acdot_dev); } for(vector<acln_dot_stru>::iterator p_acdot_dev = alldev.m_dotVec.begin();p_acdot_dev != alldev.m_dotVec.end();++p_acdot_dev) { /*if(p_acdot_dev->nd1 <= 0) { continue; }*/ set<vector<acln_dot_stru>::iterator> *p_acln_dot = &acln_dot_map[p_acdot_dev->acln_id]; set<vector<acln_dot_stru>::iterator>::iterator p_acdot_dev1 = p_acln_dot->begin(); int nd1_no = (*p_acdot_dev1)->nd1; int dev1_id = (*p_acdot_dev1)->dev_id; if(p_acdot_dev1==p_acln_dot->end()) continue; if((++p_acdot_dev1)==p_acln_dot->end()) continue; int nd2_no = (*p_acdot_dev1)->nd1; int dev2_id = (*p_acdot_dev1)->dev_id; if(nd1_no >1000 && nd2_no>1000) { sterm.m_id=p_acdot_dev->dev_id; sterm.m_st=p_acdot_dev->fac_id; sterm.m_vl=p_acdot_dev->vlty_id; sterm.m_nd=p_acdot_dev->nd1; sterm.m_link_dev_id=p_acdot_dev->acln_id; dotTVec.push_back(sterm); continue; } else if(nd1_no > 1000) { term.m_id=p_acdot_dev->dev_id; term.m_st=p_acdot_dev->fac_id; term.m_vl=p_acdot_dev->vlty_id; term.m_nd=p_acdot_dev->nd1; if(dev1_id == p_acdot_dev->dev_id && acln_eq_flag_map[p_acdot_dev->acln_id] == MENU_LN_EQFG_LD) { //printf("acln_id=====%d MENU_LN_EQFG_LD!!!\n",p_acdot_dev->acln_id); ldTVec.push_back(term); } else if(dev1_id == p_acdot_dev->dev_id && acln_eq_flag_map[p_acdot_dev->acln_id] == MENU_LN_EQFG_UN) { //printf("acln_id=====%d MENU_LN_EQFG_UN!!!\n",p_acdot_dev->acln_id); gnTVec.push_back(term); } } else if(nd2_no > 1000) { term.m_id=p_acdot_dev->dev_id; term.m_st=p_acdot_dev->fac_id; term.m_vl=p_acdot_dev->vlty_id; term.m_nd=p_acdot_dev->nd1; if(dev2_id == p_acdot_dev->dev_id && acln_eq_flag_map[p_acdot_dev->acln_id] == MENU_LN_EQFG_LD) { //printf("acln_id=====%d MENU_LN_EQFG_LD!!!\n",p_acdot_dev->acln_id); ldTVec.push_back(term); } else if(dev2_id == p_acdot_dev->dev_id && acln_eq_flag_map[p_acdot_dev->acln_id] == MENU_LN_EQFG_UN) { //printf("acln_id=====%d MENU_LN_EQFG_UN!!!\n",p_acdot_dev->acln_id); gnTVec.push_back(term); } } } //下面增加处理所用变。将所用变当作单端设备来处理 int trwdid,trid,nd1,nd2; vector<int> m_searchFlag; int j; m_searchFlag.resize(alldev.m_trwdVec.size(),0); int count = alldev.m_trwdVec.size(); for(i=0;i<count;i++) { trwdid=alldev.m_trwdVec[i].dev_id; nd1=alldev.m_trwdVec[i].nd1; nd2=alldev.m_trwdVec[i].nd2; trid=alldev.m_trwdVec[i].tr_id; if(nd1==-1 && nd2==-1) { for(j=0;j<count;j++) { if(m_searchFlag[j]==0 && alldev.m_trwdVec[j].tr_id==trid && alldev.m_trwdVec[j].dev_id!=trwdid) { if(alldev.m_trwdVec[j].nd1!=-1) { term.m_id=alldev.m_trwdVec[j].dev_id; term.m_st=alldev.m_trwdVec[j].fac_id; term.m_vl=alldev.m_trwdVec[j].vlty_id; term.m_nd=alldev.m_trwdVec[j].nd1; ldTVec.push_back(term); } m_searchFlag[j]=1; // alldev.m_trwdVec.erase(pos2); } } m_searchFlag[i]=1; // alldev.m_trwdVec.erase(pos1); } } for(i=0;i<count;i++) {// if(m_searchFlag[i]==0) { if(alldev.m_trwdVec[i].nd1 < 0) { continue; } twd.m_id=alldev.m_trwdVec[i].dev_id; twd.m_st=alldev.m_trwdVec[i].fac_id; twd.m_vl=alldev.m_trwdVec[i].vlty_id; twd.m_nd=alldev.m_trwdVec[i].nd1; twd.m_neu_nd=alldev.m_trwdVec[i].nd2;//中性点节点号 twd.m_link_dev_id=alldev.m_trwdVec[i].tr_id; trwdTVec.push_back(twd); } } brkTVec.reserve(alldev.m_brkVec.size()); for(vector<brk_device_stru>::iterator p_brk_dev = alldev.m_brkVec.begin();p_brk_dev != alldev.m_brkVec.end();++p_brk_dev) {// if(p_brk_dev->nd1 <= 0 || p_brk_dev->nd2 <= 0) { continue; } kvbrh.m_id=p_brk_dev->dev_id; kvbrh.m_st=p_brk_dev->fac_id; kvbrh.m_vl=p_brk_dev->vlty_id; kvbrh.m_nd_pair[0]=p_brk_dev->nd1; kvbrh.m_nd_pair[1]=p_brk_dev->nd2; brkTVec.push_back(kvbrh); if(p_brk_dev->yx_value==OPT_VALUE_YX_ON) { close_dev_vec.push_back(p_brk_dev->dev_id); } else { open_dev_vec.push_back(p_brk_dev->dev_id); } brkSet.insert(p_brk_dev->dev_id); } discrTVec.reserve(alldev.m_discrVec.size()); for(vector<discr_device_stru>::iterator p_discr_dev = alldev.m_discrVec.begin();p_discr_dev != alldev.m_discrVec.end();++p_discr_dev) {// if(p_discr_dev->nd1 <= 0 || p_discr_dev->nd2 <= 0) { continue; } kvbrh.m_id=p_discr_dev->dev_id; kvbrh.m_st=p_discr_dev->fac_id; kvbrh.m_vl=p_discr_dev->vlty_id; kvbrh.m_nd_pair[0]=p_discr_dev->nd1; kvbrh.m_nd_pair[1]=p_discr_dev->nd2; discrTVec.push_back(kvbrh); if(p_discr_dev->yx_value==OPT_VALUE_YX_ON) { close_dev_vec.push_back(p_discr_dev->dev_id); } else { open_dev_vec.push_back(p_discr_dev->dev_id); } } int blrk_test=0; int clrk_test=0; int fldk_test=0; for(vector<rc_device_stru>::iterator p_rc_dev = alldev.m_rcVec.begin();p_rc_dev != alldev.m_rcVec.end();++p_rc_dev) { if(p_rc_dev->nd1 <= 0 && p_rc_dev->nd2 <= 0 && p_rc_dev->nd3 <= 0) { continue; } switch(p_rc_dev->dev_type) { case MENU_RC_TYPE_PC://并联电容 case MENU_RC_TYPE_PR://并联电抗 { term.m_id=p_rc_dev->dev_id; term.m_st=p_rc_dev->fac_id;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -