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

📄 optickettopo.cpp.bak

📁 电力系统潮流程序adsfasdfasfd
💻 BAK
📖 第 1 页 / 共 5 页
字号:
#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 + -