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

📄 optickettopo.cpp.bak

📁 电力系统潮流程序adsfasdfasfd
💻 BAK
📖 第 1 页 / 共 5 页
字号:
    string          app_name;    string          mode_app_name;    string          copy_app_name;    struct timeval	t_start;    struct timeval  t_end;    char            mode_path[200];    char            tmp_str[100];    char            command_str[200];    CModeManage     mode_manage;	int ret;	       	cur_time = time(NULL);    cur_time = cur_time - cur_time % 5;                strcpy(mode_path, getenv(HOME_ENV_NAME));    strcat(mode_path, "/data/case/temp_mode");                cout << "开始导出源应用的方式数据 ..." << endl;    ret = mode_manage.SaveModeToFile(mode_path, copyfromapp, cur_time);	if (ret < 0)	{			    cout << "导出源应用 " << copyfromapp << " 的方式数据时出错" << endl;			    return 0;	}	else	{			    cout << "开始导入目标应用的方式数据 ..." << endl; 			    ret = mode_manage.ModeDownLoadFromFile(mode_path, cur_time, copytoapp, copyfromapp);			    if (ret < 0)			    {			        cout << "导入目标应用 " << copyfromapp << " 的方式数据时出错" << endl;				    return 0;			    }			}						// 删除形成的方式数据文件#ifndef  _WINDOWS32			sprintf(command_str, "rm %s/%d_%d_*", mode_path, cur_time, copyfromapp);			cout << command_str << endl;			system(command_str);#else			sprintf(command_str, "del %s/%d_%d_*", mode_path, cur_time, copyfromapp);			cout << command_str << endl;			WinExec(command_str,SW_HIDE);#endif			return 1;}#endifint	COpticketTopo::DownloadBase(TDownloadAppRequest download_app_request){  int   send_len;  char  *send_buf;	int   ret; 	MARSHAL(download_app_request, send_buf, send_len);  ret=m_optTopoBus->SendMessageToChannel(send_buf, MT_DOWNLOAD_APP_REQUEST, send_len, CH_DOWNLOAD_APP);  delete [] send_buf;  	//printf("DownloadBase ret==%d\n",ret);		if(ret==1)	{		if(ReceiveDownloadAppAnswer(download_app_request.request_id)==1)		{			return 1;		}	}	return 0;}int COpticketTopo::PrintErrors(const SEQDBErrorStru_var & seq_db_err){	int     i;    /*  for (i = 0; i < seq_db_err->length(); i++)  {  	printf( "err_no = %d   err_msg =%s",seq_db_err[i].error_no,CORBA::string_dup(seq_db_err[i].error_msg));  }*/  return 1; }int	COpticketTopo::GetSecDevRule(int op_rule_id,opt_secdev_rule_def_scada &rule)//依据规则id,得到二次规则{//OK    int nStart;	int	nEnd;	int nMiddle;  nStart=0;	nEnd=m_secDevRuleVect.size();  if(nEnd<=0)   return 0;  while(nStart<=nEnd)  {    nMiddle=(nStart+nEnd)/2;    if(m_secDevRuleVect[nMiddle].op_rule_id==op_rule_id)    { 			rule=m_secDevRuleVect[nMiddle];    		return 1;	}    else if(m_secDevRuleVect[nMiddle].op_rule_id>op_rule_id) //判断方向,折半继续查找    {      nEnd=nMiddle-1;    }     else    {      nStart=nMiddle+1;    }  }	return 0;}int	COpticketTopo::GetDescRule(int op_rule_id,opt_desc_rule_def_scada &rule)//依据规则id,得到描述规则{//OK  int nStart;  int	nEnd;  int nMiddle;  nStart=0;  nEnd=m_descRuleVect.size();  if(nEnd<=0)   return 0;  while(nStart<=nEnd)  {    nMiddle=(nStart+nEnd)/2;    if(m_descRuleVect[nMiddle].op_rule_id==op_rule_id)    { 		rule=m_descRuleVect[nMiddle];    	return 1;	}    else if(m_descRuleVect[nMiddle].op_rule_id>op_rule_id) //判断方向,折半继续查找    {      nEnd=nMiddle-1;    }     else    {      nStart=nMiddle+1;    }  }	return 0;}int	COpticketTopo::GetOptTerm(int op_term_id,opt_term_def_scada &term)//依据op_term_id获取术语{//OK	int		 i;	for(i=0;i<m_termVect.size();i++)	{		if(m_termVect[i].op_term_id==op_term_id)		{			term=m_termVect[i];			return 1;		}	}	return 0;}int COpticketTopo::ScadaYxLock(int dev_id,unsigned char yx_value,OpStepVerResRpt &opRes)//遥信置数{        if(dev_id/DB_BASE != BRK_DEVICE_NO && dev_id/DB_BASE != DISCR_DEVICE_NO && dev_id/DB_BASE != GDDISCR_DEVICE_NO )        {            return 1;        }	int m_length;	int m_msg_type;	char *m_report_buf=NULL;	QString                          verifymsg="";//add by xuxianfeng 1206		SRptOptYx	opt_yx_stru;	time_t m_cur_time;	time(&m_cur_time);	opt_yx_stru.time = m_cur_time;	opt_yx_stru.key_id.record_id = dev_id;;	opt_yx_stru.app_id = g_app_no;	GetColumnIDByFieldName(g_app_no,dev_id/DB_BASE,"yx_value",opt_yx_stru.key_id.column_id);	GetColumnIDByFieldName(g_app_no,dev_id/DB_BASE,"stat",opt_yx_stru.state_column_id);	//printf("yx_value field_no==%d,stat field_no==%d\n",opt_yx_stru.key_id.column_id,opt_yx_stru.state_column_id);		/*DevInfoStru devInfo;	devInfo.device_id=dev_id; 	opt_yx_stru.fac_id = -1;	if(GetDevStru(devInfo)==1)//查询设备信息	{		opt_yx_stru.fac_id=devInfo.fac_id;	}	opt_yx_stru.yx_value=yx_value;	opt_yx_stru.note  = CORBA::string_dup("操作票");         //add by xuxianfeng         //原来是图形传来nodeid,但当取消操作时,dispadmin没有办法传nodeid。        char localhostname[100];        gethostname(localhostname,100);        string node_name=localhostname;        //end add 	opt_yx_stru.machine_name     = CORBA::string_dup(node_name.c_str());	opt_yx_stru.operator_name    = CORBA::string_dup("");	opt_yx_stru.guarder_name     = CORBA::string_dup("");	MARSHAL(opt_yx_stru, m_report_buf, m_length);		m_msg_type = SCADA_OPT_YX_LOCK;  printf("----------------sendmessage to scada_op-,dev_id===%d,op_value==%d--------------------------\n",dev_id,yx_value);  int ret=m_optTopoBus->SendMessageToChannel(m_report_buf, m_msg_type, m_length, CH_SCADA_OP_CHANNEL);	delete [] m_report_buf;		if(ret==1)	{//发出去了		ret=ReveiveYxSetAns();		if(ret==0)		{			  opRes.res.ret_code=RETURN_SUCCESS;		   	opRes.verResult.ret_value=OPTICKET_VERIFY_FAILED;				//opRes.verResult.ret_messge=CORBA::string_dup("危险的接地操作!");				  			temp_str += devInfo.device_name;  			temp_str += "模拟失败,请检查设备是否遥信封锁!!!";					devInfo.device_id=devInfo.fac_id;				GetDevStru(devInfo);				temp_str = ":"+temp_str;				temp_str = devInfo.device_name+temp_str;				verifymsg +=temp_str.c_str();	  			verifymsg +="\n";	  											opRes.verResult.ret_messge=CORBA::string_dup(verifymsg.ascii());	      return 0; 		}			}	else	{		return 0;}*/        if(g_app_no != AP_SCADA)        {            printf("不是scada应用,人工修改设备状态!!!!\n");	DevInfoStru	devInfo;				QString temp_str = "";	devInfo.device_id=dev_id;  	GetDevStru(devInfo);	int retcode = m_scadaOp->Open(g_app_no, dev_id/DB_BASE);	if(retcode != DB_OK) 	{	        temp_str += devInfo.device_name.c_str();  		temp_str += QString("模拟失败,打开实时库的%1号表失败!!!").arg(dev_id/DB_BASE);		devInfo.device_id=devInfo.fac_id;		GetDevStru(devInfo);		temp_str = ":"+temp_str;		temp_str = devInfo.device_name.c_str()+temp_str;		verifymsg +=temp_str.ascii();	  		verifymsg +="\n";	  									opRes.verResult.ret_messge=CORBA::string_dup(verifymsg.ascii());				return 0;	}	retcode = m_scadaOp->TableModifyByKey((char*)&dev_id, opt_yx_stru.key_id.column_id, (char*)&yx_value, sizeof(char));	if(retcode  != DB_OK) 	{		temp_str += devInfo.device_name.c_str();  		temp_str += QString("模拟失败,修改%1号遥信值失败!!!").arg(devInfo.device_name.c_str());		devInfo.device_id=devInfo.fac_id;		GetDevStru(devInfo);		temp_str = ":"+temp_str;		temp_str = devInfo.device_name.c_str()+temp_str;		verifymsg +=temp_str.ascii();	  		verifymsg +="\n";	  									opRes.verResult.ret_messge=CORBA::string_dup(verifymsg.ascii());				return 0;	}        }	//修改pnstp中的yx_value;	vector<int>  open_dev_vec;	vector<int>  close_dev_vec;	if(yx_value == OPT_VALUE_YX_OFF)	{		open_dev_vec.push_back(dev_id);	}	else	{		close_dev_vec.push_back(dev_id);	}        SetRunMode(open_dev_vec,close_dev_vec,true);	IslandResult();	return 1;}	int COpticketTopo::ReveiveYxSetAns()//等待请求模拟服务端应答{//1104  int                 ret_code;  MESSAGE_HEADER	    msg_head;	CBuffer							buf_base;  time_t							starttime;  time_t							currenttime;  SRptOptYx           opt_yx_stru;	time(&starttime);  while(1)	{		time(&currenttime);		if((currenttime-starttime)>OPT_ANS_WAITANSWER_TIME_SHORT)		{//超时			return 0;			}		ret_code = m_optTopoBus->RecvMessage(&msg_head, buf_base);		if (ret_code == 1)		{              			if (msg_head.msg_type == SCADA_OPT_YX_SET)			{ 			 // printf("\n+++++++++++++++++++++++++++++++++++++++++++receive CADA_OPT_YX_SET+++++++++++++++++++++++++++++++++\n");          //add by xuxianfeng 1201				UN_MARSHAL(opt_yx_stru, buf_base.GetBufPtr(),  buf_base.GetLength());				if(opt_yx_stru.fac_id==0)//用fac_id用于测试模拟是否成功				{				   return 0;				}	      return 1;			}		}        DelayTime(100);	}}int COpticketTopo::GetColumnIDByFieldName(int app_no,int table_no,string field_name,short &field_no){  int retcode;  int fieldid;  retcode=m_scadaOp->Open(app_no,table_no);  if(retcode!=DB_OK)  {//  	cout<<"failed to open table"<<table_no<<endl;  	return 0;  } // cout<<"succeed to open table"<<table_no<<endl;   retcode=m_scadaOp->GetFieldNoByName(fieldid,field_name.c_str());   if(retcode<0)  {//  	cout<<"failed to Getfield_noByname "<<field_no<<endl;  	return 0;  } // cout<<"fieldid============="<<field_no<<endl; field_no=fieldid; return 1;}int COpticketTopo::GetWdByTr(int tr_id,vector<trwd_device_stru> &wdVec)//根据变压器得到绕组{//按高、中、低排序		char sql_str[1000];   if(tr_id/DB_BASE==TRWD_DEVICE_NO)	{		trwd_device_stru device;		if(m_scadaOp->Open(g_app_no,TRWD_DEVICE_NO)< DB_OK)		{			//printf("tableop->Open(m_current_app_no,TRWD_DEVICE_NO) fail");			return 0;		}   	if(m_scadaOp->TableGetByKey((char *)&tr_id,TRWD_DEVICE_FIELDS,(char *)&device,sizeof(trwd_device_stru))<DB_OK)		{				return 0;		}	  tr_id=device.tr_id;	}	wdVec.clear();	sprintf(sql_str,"SELECT %s FROM trwd_device WHERE tr_id=%d ORDER BY trwd_type",TRWD_DEVICE_FIELDS,tr_id);		if(ConFindByKey<ODB::CTableOp,trwd_device_stru>(g_app_no,TRWD_DEVICE_NO,sql_str,wdVec)>=0)	{		return 1;	}	return 0;	}int COpticketTopo::SetToken(int dev_id,int token_no){    CDevInfo *devinfo = GetDevInfo(dev_id);    int m_msg_type = SCADA_OPT_TOKEN_SET;    if(devinfo == NULL)    {       return 0;    }    OptToken(m_msg_type,dev_id,devinfo->GetFacID());        TokenOpPkg 	send_buffer;    time_t cur_time;    time(&cur_time);    char hostname[128];    gethostname(hostname,128);    send_buffer.package_head.package_type = 0;    send_buffer.token_op_info.length(1);    send_buffer.package_head.data_num = 1;    send_buffer.token_op_info[0].app_id = g_app_no;    send_buffer.token_op_info[0].time = cur_time;    send_buffer.token_op_info[0].fac_id = 0;    send_buffer.token_op_info[0].record_id = dev_id;    send_buffer.token_op_info[0].token_id = cur_time;    send_buffer.token_op_info[0].token_no = token_no;    send_buffer.token_op_info[0].token_op_flag = 1;    send_buffer.token_op_info[0].note = CORBA::string_dup("操作票挂牌");     send_buffer.token_op_info[0].machine_name = CORBA::string_dup(m_machinename.c_str());    send_buffer.token_op_info[0].operator_name = CORBA::string_dup("aaaa");    send_buffer.token_op_info[0].token_pos_x = -1;    send_buffer.token_op_info[0].token_pos_y = -1;    send_buffer.token_op_info[0].graph_name = CORBA::string_dup(m_stepGraphName.c_str());    send_buffer.token_op_info[0].father_token_id = -1;    send_buffer.token_op_info[0].if_display = 1;        MARSHAL(send_buffer, m_SendMsgBuf, m_SendMsgLen);        m_optTopoBus->SendMessageToChannel(m_SendMsgBuf,m_msg_type,m_SendMsgLen,CH_SCADA_OP_CHANNEL);    delete m_SendMsgBuf;    m_SendMsgBuf = NULL;	SendMsgToGraph(g_app_no);//发送消息给图

⌨️ 快捷键说明

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