📄 optickettopo.cpp
字号:
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 + -