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

📄 optickettopo.cpp

📁 电力系统潮流程序adsfasdfasfd
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                                printf("dev_id ====%d,limit_value===%f,cal_value===%f\n",flowreq.over_bs_vec[i].dev_id,flowreq.over_bs_vec[i].limit_value,flowreq.over_bs_vec[i].cal_value);                        }*/                        int i,j;                        for(i = 0;i<flowreq.over_branch_vec.length();++i)                        {                            for(j = 0;j<flowreq.pre_over_branch_vec.length();++j)                            {                                if(flowreq.over_branch_vec[i].dev_id == flowreq.pre_over_branch_vec[j].dev_id)                                {                                    if(abs(flowreq.over_branch_vec[i].cal_value-flowreq.pre_over_branch_vec[j].cal_value)/flowreq.over_branch_vec[i].limit_value> 0.01)                                    {                                       //printf("diff===%f,i=====%d\n",abs(flowreq.over_branch_vec[i].cal_value-flowreq.pre_over_branch_vec[i].cal_value),i);                                        temp_flow_verify_result.dev_id = flowreq.over_branch_vec[i].dev_id;                                        temp_flow_verify_result.limit_value = flowreq.over_branch_vec[i].limit_value;                                        temp_flow_verify_result.cal_value = flowreq.over_branch_vec[i].cal_value;                                        temp_flow_verify_result_vec.push_back(temp_flow_verify_result);                                                                            }                                    break;                                }                            }                            if(flowreq.pre_over_branch_vec.length() == 0 || j == flowreq.pre_over_branch_vec.length())                            {                                 temp_flow_verify_result.dev_id = flowreq.over_branch_vec[i].dev_id;                                 temp_flow_verify_result.limit_value = flowreq.over_branch_vec[i].limit_value;                                 temp_flow_verify_result.cal_value = flowreq.over_branch_vec[i].cal_value;                                 temp_flow_verify_result_vec.push_back(temp_flow_verify_result);                            }                        }                                               printf("计算前潮流越限的支路:\n");                        for(i = 0;i<flowreq.pre_over_branch_vec.length();++i)                        {                            printf("dev_id ====%d,limit_value===%f,cal_value===%f\n",flowreq.pre_over_branch_vec[i].dev_id,flowreq.pre_over_branch_vec[i].limit_value,flowreq.pre_over_branch_vec[i].cal_value);                        }                        printf("计算后潮流越限的支路:\n");                        for(i = 0;i<flowreq.over_branch_vec.length();++i)                        {                                printf("dev_id ====%d,limit_value===%f,cal_value===%f\n",flowreq.over_branch_vec[i].dev_id,flowreq.over_branch_vec[i].limit_value,flowreq.over_branch_vec[i].cal_value);                        }                        if(temp_flow_verify_result_vec.size() <= 0)                        {                            msg = "潮流计算结束,无变化越限信息!!!";                            return 1;                        }                        msg = "潮流计算结束,有越限信息!!!";                        verFlowSeq.length( temp_flow_verify_result_vec.size());                        for(i = 0;i < temp_flow_verify_result_vec.size();++i)                        {                                verFlowSeq[i].device_id = temp_flow_verify_result_vec[i].dev_id;                                verFlowSeq[i].limit_value = temp_flow_verify_result_vec[i].limit_value;                                verFlowSeq[i].cal_value = temp_flow_verify_result_vec[i].cal_value;                        }                        return 0;                    }                    else                     {                          return 1;                    }                 }            }            DelayTime(100);        }        return 1;}void COpticketTopo::SendMsgToGraph(int appno){        printf("开始发送变化报文!!!!!!!!!!!!\n");        int m_SendMsgType = MT_CHANGE_DATA;        int m_SendMsgLen;        int channelid=CH_CHANGE_DATA;        char *report_buf=NULL;        ChangeDataPkg	m_ChangeMsg;        int	len;	m_ChangeMsg.package_head.char_num=1;	m_ChangeMsg.package_head.table_num=1;	len = m_ChangeMsg.package_head.char_num;	m_ChangeMsg.char_info.length(len);	m_ChangeMsg.char_info[len-1].app_no = appno;	m_ChangeMsg.char_info[len-1].keyid.record_id=-1;	m_ChangeMsg.char_info[len-1].keyid.column_id=-1;		m_ChangeMsg.table_info.length(len);	m_ChangeMsg.table_info[len-1].app_no = appno;	m_ChangeMsg.table_info[len-1].table_no = TOKEN_INFO_NO;			MARSHAL(m_ChangeMsg,report_buf,m_SendMsgLen);        int ret_code = m_optTopoBus->SendMessageToChannel(report_buf, m_SendMsgType, m_SendMsgLen,	                                                  channelid, NULL, NULL);	 printf("发送变化报文!!len=======%d,apopno====%d,retcode=============%d!!!!!!!!!!\n",len,appno,ret_code);                                                  	 delete report_buf;	 report_buf=NULL;}int COpticketTopo::DownloadModel(int dutyflag){	TDownloadAppRequest				download_app_request;	int												app_no;	AppInfoRpt 								app;	QString                          msg;;	int												result;	char cmdstr[100];	m_SendMsgType=OPTICKET_DOWN_MODE_RES;	int retcode;	int rec_num;	int retno;	const char *field_name = "graph_name,graph_version";	UN_MARSHAL(app,m_BufBase.GetBufPtr(),m_BufBase.GetLength());   printf("DownloadModel g_app_no==%d\n",app.app_no);	app_no=app.app_no;	result=1;	int tmpvalue = 0;	if(app_no!=g_app_no)	{		//printf("应用不对应\n");		result= 0;		return RETURN_FAILED;	}	else	{		printf("开始下装模型!!!!!!!!!!!!!!!\n");                /*if(dutyflag==1)                {                        SendDownModelMsgToHost("开始下装模型!!!");                }*/        int opt_downmodel_mode  = ReadPara("scada/opt_para","opt_downmodel_mode");	    printf("opt_downmodel_mode========================================%d\n",opt_downmodel_mode);	    if(opt_downmodel_mode==1)		{#ifdef _CIMIMPORT            vector<string> graph_file_vec;			printf("开始调用CCimDataExchangeClient接口传输图形\n");			vec_pic_info.clear();			map_pic_info.clear();			if(dutyflag==1)			{				SendDownModelMsgToHost("开始读取公共信息平台图形信息!!!");			}			int ret_value = m_CimDateExg.GetPicInfo(vec_pic_info);//调用接口读取图形信息			CBuffer	buf_base;			CTableNet *temp_net = new CTableNet();			struct t_graph_info_net_public 			{				char graph_name[64];				int graph_version;			};			struct t_graph_info_net_public 		*graph_Info_buf;		 			    retcode =  temp_net->Open(AP_PUBLIC,GRAPH_INFO_NET_NO);			int successNum=0;			int i;			if(retcode ==DB_OK)			{				if(dutyflag==1)				{					SendDownModelMsgToHost("开始读取操作票系统图形版本信息!!!");				}				retcode =  temp_net->TableGet(field_name,buf_base);				if(retcode > 0)				{					rec_num = buf_base.GetLength()/sizeof(struct t_graph_info_net_public);					graph_Info_buf = (struct t_graph_info_net_public *)buf_base.GetBufPtr();								for(i=0;i<rec_num;i++)					{						map_pic_info[graph_Info_buf[i].graph_name]=graph_Info_buf[i].graph_version;						graph_file_vec.push_back(graph_Info_buf[i].graph_name);					}                    for(i=0;i<vec_pic_info.size();i++)					{												map<string,int>::iterator npos;						npos = map_pic_info.find(vec_pic_info[i].pic_name);						if( npos == map_pic_info.end() || npos -> second < vec_pic_info[i].pic_version)						{								printf("需要更新图形名称:============%s\n",vec_pic_info[i].pic_name);								if(dutyflag==1)								{									msg = "开始更新图形:";									msg +=vec_pic_info[i].pic_name.c_str();									SendDownModelMsgToHost(msg);								}								//tmpvalue = m_CimDateExg.GetPic(vec_pic_info[i].pic_name);								if(!tmpvalue)								{									//graph_file_vec.push_back(vec_pic_info[i].pic_name);									printf("成功更新图形名称:========================%s\n",vec_pic_info[i].pic_name);									if(dutyflag==1)									{										msg = vec_pic_info[i].pic_name.c_str();										msg +="  更新成功!!!";										SendDownModelMsgToHost(msg);									}								}								else  								{									if(dutyflag==1)									{										msg = vec_pic_info[i].pic_name.c_str();										msg +="  更新失败!!!";										SendDownModelMsgToHost(msg);									}									printf("更新图形名称:========================%s失败\n",vec_pic_info[i].pic_name);								}						}																								}//end for				}				delete temp_net;				temp_net = NULL;						}				        printf("开始调用CCimDataExchangeClient接口传输模型\n");			if(dutyflag==1)			{				SendDownModelMsgToHost("开始从公共信息平台传输模型!!!");;			}            tmpvalue = m_CimDateExg.GetModel(g_app_no);			if(tmpvalue==0)			{				if(dutyflag==1)				{					SendDownModelMsgToHost("从公共信息平台传输模型成功!!!");					sprintf(cmdstr,"down_load SCADA");					system(cmdstr);				}				printf("从公共信息平台传输模型成功!!!\n");			}			else			{				if(dutyflag==1)				{					SendDownModelMsgToHost("从公共信息平台传输模型失败!!!");									}				printf("从公共信息平台读取模型失败!!!!!!!!!!!!\n");			}   #endif	   }	   if(tmpvalue == 0)	   {                   /*if(dutyflag==1)                   {                       SendDownModelMsgToHost("开始down_load模型到操作票模式下!!!");                          }*/		    sprintf(cmdstr,"down_load SCADA_SIM%d",g_app_no%AP_SCADA_SIM);			printf("cmdstr===============%s\n",cmdstr);			system(cmdstr);			printf("下装模型结束!!!!!!!!!!!!!!!\n");			if(result)			{				printf("Call ModelChange!\n");				ModelChange();		   			    printf("ModelChange结束!\n");			    //printf("down_load failed\n");		   			}			printf("Call CopyModeFromSCADA!\n");			CopyModeFromSCADA();			printf("CopyModeFromSCADA 结束!\n");			   }	}	//完成后应答    if(dutyflag==1)    {	    SendDownModelMsgToHost("下装模型结束!!!",RETURN_SUCCESS);	}		return result;}int COpticketTopo::SendDownModelMsgToHost(QString msg,int finished){	OpStepVerResultRpt comRes;	comRes.ret_value=finished;	comRes.ret_messge = CORBA::string_dup(msg);   	MARSHAL(comRes, m_SendMsgBuf, m_SendMsgLen);		SendToHost(m_RecvMsgHeader.src_host_name,m_RecvMsgHeader.src_proc_name);	delete [] m_SendMsgBuf;	m_SendMsgBuf=NULL;	return 1;}	int COpticketTopo::ReadDevRunMode(int dutyflag)//通知opticket_topo_srver更新指定设备的运行方式{	int										i;	ReadDevRunModeResRpt 	runmodeRes;	printf("CALL ReadDevRunMode\n");		vector<DevType_T> m_openDev;	vector<DevType_T> m_closeDev;			ReadDevRunModeReqRpt runmodeReq;	UN_MARSHAL(runmodeReq,m_BufBase.GetBufPtr(),m_BufBase.GetLength());	int app_no=runmodeReq.app_info.app_no;	if(app_no!=g_app_no)	{		//printf("应用不对应\n");		return 0;	}	for(i=0;i<runmodeReq.devs.length();i++)	{	       		switch(GetYxValue(runmodeReq.devs[i]))		{		         			case OPT_VALUE_YX_ON:			{				InsertDev(runmodeReq.devs[i],m_closeDev);			  //printf("设备id=============%d当前是合位!!!!!!11\n",runmodeReq.devs[i]);				break;			}			case OPT_VALUE_YX_OFF:			{				InsertDev(runmodeReq.devs[i],m_openDev);				//printf("设备id=============%d当前是分位!!!!!!11\n",runmodeReq.devs[i]);				break;			}			default:			{				break;			}		}	}		if(!m_closeDev.empty() || !m_openDev.empty())	{		g_psntp->ResetCbOpen(m_closeDev,true);		g_psntp->SetCbOpen(m_openDev,true);	}	//完成后应答        if(dutyflag==1)        {         ReadGroundToken();	runmodeRes.res.ret_code=RETURN_SUCCESS;	m_SendMsgType=OPTICKET_READ_DEV_MODE_RES;	MARSHAL(runmodeRes, m_SendMsgBuf, m_SendMsgLen);	SendToHost(m_RecvMsgHeader.src_host_name,m_RecvMsgHeader.src_proc_name);	delete [] m_SendMsgBuf;	m_SendMsgBuf=NULL;	}	return 1;}int	COpticketTopo::InsertDev(int dev_id,vector<DevType_T> &mapDev){	DevType_T          dev_type;	if(dev_id/DB_BASE==BRK_DEVICE_NO)	{		dev_type.switch_type=SWITCH_TYPE_BRK;	}	else if(dev_id/DB_BASE==DISCR_DEVICE_NO)	{		dev_type.switch_type=SWITCH_TYPE_DISCR;	}	else if(dev_id/DB_BASE==GDDISCR_DEVICE_NO)	{		dev_type.switch_type=SWITCH_TYPE_GDDISCR;	}	else	{		return 0;	}	dev_type.m_id = dev_id;	 mapDev.push_back(dev_type);	return 1;}	int	COpticketTopo::InsertDev(vector<int> dev_vec,vector<DevType_T > &mapDev){   	DevType_T          dev_type;	for(int i = 0;i < dev_vec.size();i++)	{		if(dev_vec[i]/DB_BASE==BRK_DEVICE_NO)		{			dev_type.switch_type=SWITCH_TYPE_BRK;		}		else if(dev_vec[i]/DB_BASE==DISCR_DEVICE_NO)		{			dev_type.switch_type=SWITCH_TYPE_DISCR;		}		else if(dev_vec[i]/DB_BASE==GDDISCR_DEVICE_NO)		{			dev_type.switch_type=SWITCH_TYPE_GDDISCR;		}		else		{			continue;		}		dev_type.m_id = dev_vec[i];	        mapDev.push_back(dev_type);//		if((it=mapDev.find(swtype))!=mapDev.end())//		{//			(it->second).push_back(dev_vec[i]);//		}//		else//		{//			vector<DevId_T> vec;//			vec.push_back(dev_vec[i]);//			mapDev.insert(make_pair(swtype,vec));//		}	}	return 1;}int COpticketTopo::SynDevMode()//实时同步运行方式{  if(*m_model_time_shm > m_last_model_time)  {//模型变化    clock_t							starttime;    cout<<"模型 changed."<<endl;    starttime = clock();    m_last_model_time = *m_model_time_shm;		ModelChange();//    printf("ModelChange   exec   time ====================%d s\n",clock()-starttime);		  }	return 1;}int COpticketTopo::SynRunMode()//实时同步运行方式{  bool sleep_flag = false;  if(*m_yx_change_time_shm > m_last_yx_change_time)  {//遥信变位  	cout<<"运行方式 changed."<<endl;  	clock_t							starttime;        m_last_yx_change_time = *m_yx_change_time_shm;        starttime = clock();	  YxValueChange();        if(time(NULL) <= m_last_yx_change_time)    {       DelayTime(1000);    }				sleep_flag = false;    while((*m_yx_change_time_shm - m_last_yx_change_time > 0)              && (*m_yx_change_time_shm - m_last_yx_change_time <= 3))    {//处理系统有大量遥信变位的情况,直到遥信间隔时间大于3秒或者等待时间大于计算周期才进行一次计算    	sleep_flag = true;      cout<<"sleep........................................................................................."<<endl;      m_last_yx_change_time = *m_yx_change_time_shm;      DelayTime(2000);    }    if(sleep_flag)    {    	YxValueChange();    }    printf("YxValueChange   exec   time ====================%d s\n",clock()-starttime);  }	return 1;}/*void COpticketTopo::ProcessYxChange(){	ChangeDataPkg		   change_yx_pkg;

⌨️ 快捷键说明

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