?? optickettopo.cpp
字號:
#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字段執(zhí)行的速度,一般不用那么長,可以自己根據(jù)應用的性質(zhì)來設定 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("系統(tǒng)初始化完畢,開始等待消息!!!!!!\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;//中性點節(jié)點號 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://并聯(lián)電容 case MENU_RC_TYPE_PR://并聯(lián)電抗 { term.m_id=p_rc_dev->dev_id; term.m_st=p_rc_dev->fac_id; term.m_vl=p_rc_dev->vlty_id; term.m_nd=p_rc_dev->nd1; otherTVec.push_back(term); blrk_test++; break; } case MENU_RC_TYPE_SC://串聯(lián)電容 case MENU_RC_TYPE_SR://串聯(lián)電抗 { kvbrh.m_id=p_rc_dev->dev_id; kvbrh.m_st=p_rc_dev->fac_id; kvbrh.m_vl=p_rc_dev->vlty_id; kvbrh.m_nd_pair[0]=p_rc_dev->nd1; kvbrh.m_nd_pair[1]=p_rc_dev->nd2; otherbrhTVec.push_back(kvbrh); clrk_test++; break; } case MENU_RC_TYPE_DR://分裂電抗 { tridev.m_id=p_rc_dev->dev_id; tridev.m_st=p_rc_dev->fac_id; tridev.m_vl=p_rc_dev->vlty_id; tridev.m_nd_arr[0]=p_rc_dev->nd1; tridev.m_nd_arr[1]=p_rc_dev->nd2; tridev.m_nd_arr[2]=p_rc_dev->nd3; trindTVect.push_back(tridev); fldk_test++; break; } default: { break; } } } // for(i=0;i<alldev.m_zdVec.size();i++) // {//終端設備:PT、CT等// term.m_id=alldev.m_zdVec[i].dev_id;// term.m_st=alldev.m_zdVec[i].fac_id;// term.m_vl=alldev.m_zdVec[i].vlty_id;// term.m_nd=alldev.m_zdVec[i].nd1;// otherTVec.push_back(term); // } if(gnTVec.size() > 0) { allDev_T.m_gn_sec.first = &gnTVec[0]; allDev_T.m_gn_sec.second = &gnTVec[0] + gnTVec.size(); printf("gnTVec.size()==%d\n",gnTVec.size()); } if(ldTVec.size() > 0) { allDev_T.m_ld_sec.first = &ldTVec[0]; allDev_T.m_ld_sec.second = &ldTVec[0]+ldTVec.size(); printf("ldTVec.size()==%d\n",ldTVec.size()); } if(bsTVec.size() > 0) { allDev_T.m_bsbar_sec.first = &bsTVec[0]; allDev_T.m_bsbar_sec.second = &bsTVec[0]+bsTVec.size();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -