📄 optickettopo.cpp
字号:
printf("bsTVec.size()==%d\n",bsTVec.size()); } if(gddiscrTVec.size() > 0) { allDev_T.m_gddiscr_sec.first = &gddiscrTVec[0]; allDev_T.m_gddiscr_sec.second = &gddiscrTVec[0]+gddiscrTVec.size(); printf("gddiscrTVec.size()==%d\n",gddiscrTVec.size()); } if(otherTVec.size() > 0) { allDev_T.m_other_pterm_sec.first = &otherTVec[0]; allDev_T.m_other_pterm_sec.second = &otherTVec[0] + otherTVec.size(); printf("otherTVec.size()==%d\n",otherTVec.size()); } if(dotTVec.size() > 0) { allDev_T.m_dot_sec.first = &dotTVec[0]; allDev_T.m_dot_sec.second = &dotTVec[0]+dotTVec.size(); printf("dotTVec.size()==%d\n",dotTVec.size()); } if(trwdTVec.size() > 0) { allDev_T.m_trwd_sec.first = &trwdTVec[0]; allDev_T.m_trwd_sec.second = &trwdTVec[0] + trwdTVec.size(); printf("trwdTVec.size()==%d\n",trwdTVec.size()); } if(brkTVec.size() >0) { allDev_T.m_brk_sec.first=&brkTVec[0]; allDev_T.m_brk_sec.second=&brkTVec[0]+brkTVec.size(); printf("brkTVec.size()==%d\n",brkTVec.size()); } if(discrTVec.size() > 0) { allDev_T.m_discr_sec.first=&discrTVec[0]; allDev_T.m_discr_sec.second=&discrTVec[0]+discrTVec.size(); printf("discrTVec.size()==%d\n",discrTVec.size()); } if(otherbrhTVec.size()>0) { allDev_T.m_other_branch_sec.first=&otherbrhTVec[0]; allDev_T.m_other_branch_sec.second=&otherbrhTVec[0]+otherbrhTVec.size(); printf("otherbrhTVec.size()==%d\n",otherbrhTVec.size()); } if(trindTVect.size()>0) { allDev_T.m_kvtrind_dev_sec.first= &trindTVect[0]; allDev_T.m_kvtrind_dev_sec.second= &trindTVect[0]+trindTVect.size(); printf("trindTVect.size()==%d\n",trindTVect.size()); } SetAcDotPower(); starttime = clock(); g_psntp->UpdateModel(allDev_T); printf("UpdateModel exec time ====================%d s\n",clock()-starttime); SetRunMode(open_dev_vec,close_dev_vec);//初始化运行方式 /*m_buslink_set.clear(); for(vector<KvBranch_T>::iterator pos = brkTVec.begin();pos != brkTVec.end(); ++pos) { CBrkInfo *brkinfo = new CBrkInfo(pos->m_id); int type = brkinfo->IsBypassBrk(); bitset<32> devtypeset(type); if(devtypeset[OPT_SEMA_BUSLINK_BRK-BRK_DEVICE_NO*DB_BASE-1]) { printf("brk=====%d is buslinker!!!!\n",pos->m_id); m_buslink_set.insert(pos->m_id); } }*/ //g_psntp->SetBusLinkBrk(m_buslink_set); gnTVec.clear(); ldTVec.clear(); bsTVec.clear(); gddiscrTVec.clear(); otherTVec.clear(); dotTVec.clear(); trwdTVec.clear(); brkTVec.clear(); discrTVec.clear(); otherbrhTVec.clear(); trindTVect.clear(); FreeDevice(alldev); return 1;}int COpticketTopo::SetRunMode(vector<int> &open_dev_vec,vector<int> &close_dev_vec,bool update_mode)//设定初始的运行方式{ vector<DevType_T> m_openDev; vector<DevType_T> m_closeDev; InsertDev(close_dev_vec,m_closeDev); InsertDev(open_dev_vec,m_openDev); if(!m_closeDev.empty()) { g_psntp->ResetCbOpen(m_closeDev,update_mode); } if(!m_openDev.empty()) { g_psntp->SetCbOpen(m_openDev,update_mode); } return 1;}int COpticketTopo::ReadDevice(AllDeviceStru &alldev)//读取所有设备信息{//OK int i; //printf("CALL ReadDevice BEGIN\n"); FreeDevice(alldev); GetAllRec<ODB::CTableOp>(g_app_no, BRK_DEVICE_NO, BRK_DEVICE_FIELDS, alldev.m_brkVec); //printf("alldev.m_brkVec.size()==%d\n",alldev.m_brkVec.size()); GetAllRec<ODB::CTableOp>(g_app_no, DISCR_DEVICE_NO, DISCR_DEVICE_FIELDS, alldev.m_discrVec); //printf("alldev.m_discrVec.size()==%d\n",alldev.m_discrVec.size()); GetAllRec<ODB::CTableOp>(g_app_no, GDDISCR_DEVICE_NO, GDDISCR_DEVICE_FIELDS, alldev.m_gddiscrVec); //printf("alldev.m_gddiscrVec.size()==%d\n",alldev.m_gddiscrVec.size()); GetAllRec<ODB::CTableOp>(g_app_no, BS_DEVICE_NO, BS_DEVICE_FIELDS, alldev.m_bsVec); //printf("alldev.m_bsVec.size()==%d\n",alldev.m_bsVec.size()); GetAllRec<ODB::CTableOp>(g_app_no, GN_DEVICE_NO, GN_DEVICE_FIELDS, alldev.m_gnVec); //printf("alldev.m_gnVec.size()==%d\n",alldev.m_gnVec.size()); GetAllRec<ODB::CTableOp>(g_app_no, LD_DEVICE_NO, LD_DEVICE_FIELDS, alldev.m_ldVec); //printf("alldev.m_ldVec.size()==%d\n",alldev.m_ldVec.size()); GetAllRec<ODB::CTableOp>(g_app_no, ACLN_DOT_NO, ACLN_DOT_FIELDS, alldev.m_dotVec); GetAllRec<ODB::CTableOp>(g_app_no, ACLN_DEVICE_NO, ACLN_DEVICE_FIELDS, alldev.m_aclnVec); //printf("alldev.m_dotVec.size()==%d\n",alldev.m_dotVec.size()); //add by xuxianfeng.如果交流线段的节点号是-1,人工给它们编个号。否则拓扑时认为它们是一个点。 for(i=0;i<alldev.m_dotVec.size();i++) { if(alldev.m_dotVec[i].nd1==-1) { alldev.m_dotVec[i].nd1=i; } } //end add GetAllRec<ODB::CTableOp>(g_app_no, RC_DEVICE_NO, RC_DEVICE_FIELDS, alldev.m_rcVec); //printf("alldev.m_rcVec.size()==%d\n",alldev.m_rcVec.size()); GetAllRec<ODB::CTableOp>(g_app_no, TRWD_DEVICE_NO, TRWD_DEVICE_FIELDS, alldev.m_trwdVec); //printf("alldev.m_trwdVec.size()==%d\n",alldev.m_trwdVec.size()); int ret=GetAllRec<ODB::CTableOp>(g_app_no, TERMINAL_DEVICE_NO, ZD_DEVICE_FIELDS, alldev.m_zdVec);//add by xuxianfeng 06-1-9 //printf("***************ret=================%d\n",ret); //printf("CALL ReadDevice END\n"); return 1;}int COpticketTopo::FreeDevice(AllDeviceStru &alldev)//读取所有设备信息{ alldev.m_brkVec.clear(); alldev.m_discrVec.clear(); alldev.m_gddiscrVec.clear(); alldev.m_bsVec.clear(); alldev.m_gnVec.clear(); alldev.m_ldVec.clear(); alldev.m_dotVec.clear(); alldev.m_rcVec.clear(); alldev.m_trwdVec.clear(); alldev.m_zdVec.clear(); return 1;}int COpticketTopo::GetYxValue(int dev_id){//OK YxValueStruct yx; if(FindByKey<ODB::CTableOp,YxValueStruct>(g_app_no,dev_id/DB_BASE,dev_id,"yx_value,stat",yx)>=0) { //printf("dev_id ==%d,yx_value==%d\n",dev_id,yx.yx_value); return yx.yx_value; } return -1;}void COpticketTopo::SetAppNo(int app){ g_app_no=app;}int COpticketTopo::GetAppNo(){ return g_app_no;} int COpticketTopo::RecvReport(int time){ // printf("开始收消息!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); int retcode=m_optTopoBus->RecvMessage(&m_RecvMsgHeader, m_BufBase); // printf("retcode================%d!!!!!!!!!!!!!!!!\n",retcode); return retcode; }int COpticketTopo::SendToChannel(int channel_id){ int retcode; if(m_SendMsgBuf!=NULL) { retcode=m_optTopoBus->SendMessageToChannel(m_SendMsgBuf,m_SendMsgType,m_SendMsgLen,channel_id); delete [] m_SendMsgBuf; m_SendMsgBuf=NULL; } return retcode;}int COpticketTopo::SendToHost(const char *machinename,const char *processname,const char* instancename){ int retcode = -1; if(m_SendMsgBuf!=NULL) { retcode=m_optTopoBus->SendMessageToHost(m_SendMsgBuf,m_SendMsgType,m_SendMsgLen,machinename,processname,instancename); //printf("SendMessageToHost retcode==%d\n",retcode); delete [] m_SendMsgBuf; m_SendMsgBuf=NULL; } return retcode;}int COpticketTopo::GetRecvReportType() { return m_RecvMsgHeader.msg_type; }void COpticketTopo::CopyModeFromSCADA()//从SCADA拷贝方式数据{ TDownloadAppRequest download_app_request; int result = 1; int opt_downmodel_mode = ReadPara("scada/opt_para","opt_downmodel_mode"); printf("m_opt_downmodel_mode========================================%d\n",opt_downmodel_mode); if(opt_downmodel_mode==0) { #ifndef _WINDOWS32 download_app_request.request_id=10003; download_app_request.app_no=g_app_no; download_app_request.model_source=DOWN_APP_MODEL_SOURCE_NONE;// download_app_request.need_mode=DOWN_APP_YES; download_app_request.is_research=DOWN_APP_NO; download_app_request.copy_from_app=DOWN_APP_NO; download_app_request.mode_from_app=AP_SCADA; download_app_request.is_copy_host=DOWN_APP_NO; printf("开始DownloadBase\n"); result=DownloadBase(download_app_request); #else result=SaveModelBase(AP_SCADA,g_app_no); #endif } else {#ifdef _CIMIMPORT TRACE("begin to m_CimDateExg.GetSectionE!!!!!!!!!!!!\n"); int ret_value=m_CimDateExg.GetSectionE(g_app_no); TRACE("end to m_CimDateExg.GetSectionE!!!!!!!!!!!!\n"); if(!ret_value) result=1; else result=0;#endif } if(result) { printf("Call YxValueChange!\n"); YxValueChange(); } }int COpticketTopo::CopyModeFromSCADA(int dutyflag)//从SCADA拷贝方式数据{ TDownloadAppRequest download_app_request; int app_no; AppInfoRpt app; ComResRpt comRes; int result; m_SendMsgType=OPTICKET_COPY_MODE_RES; 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; if(app_no!=g_app_no||g_app_no==AP_SCADA) { printf("应用不对应app_no===%d,g_app_no===%d\n",app_no,g_app_no); result= 0; return RETURN_FAILED; } else { int opt_downmodel_mode = ReadPara("scada/opt_para","opt_downmodel_mode"); printf("m_opt_downmodel_mode========================================%d\n",opt_downmodel_mode); if(opt_downmodel_mode==0) { #ifndef _WINDOWS32 download_app_request.request_id=10003; download_app_request.app_no=g_app_no; download_app_request.model_source=DOWN_APP_MODEL_SOURCE_NONE;// download_app_request.need_mode=DOWN_APP_YES; download_app_request.is_research=DOWN_APP_NO; download_app_request.copy_from_app=DOWN_APP_NO; download_app_request.mode_from_app=AP_SCADA; download_app_request.is_copy_host=DOWN_APP_NO; printf("开始DownloadBase\n"); result=DownloadBase(download_app_request); #else printf("开始SaveModeBase\n"); result=SaveModelBase(AP_SCADA,g_app_no); #endif } else {#ifdef _CIMIMPORT TRACE("begin to m_CimDateExg.GetSectionE!!!!!!!!!!!!\n"); int ret_value=m_CimDateExg.GetSectionE(g_app_no); TRACE("end to m_CimDateExg.GetSectionE!!!!!!!!!!!!\n"); if(!ret_value) result=1; else result=0;#endif } if(result) { printf("Call YxValueChange!\n"); YxValueChange(); } } //完成后应答 if(dutyflag==1) { if(result) { comRes.ret_code=RETURN_SUCCESS; } else { result=RETURN_FAILED; } printf("拷贝完成!!!!!!!!!!\n"); MARSHAL(comRes, m_SendMsgBuf, m_SendMsgLen); SendToHost(m_RecvMsgHeader.src_host_name,m_RecvMsgHeader.src_proc_name); SendMsgToGraph(app_no);//发送消息给图形刷新 xuxianfeng 1202 delete [] m_SendMsgBuf; m_SendMsgBuf=NULL; } return result;}int COpticketTopo::SendMsgToFlow(deque<OpPair> tempopVec,int caltype){ if(g_app_no == AP_SCADA) return 0; deque<OpPair> opVec; OpPair tempPair; int i; printf("开始发送潮流校验报文,caltype==========%d!!!!!!!!!!!!\n",caltype); bool brk_oper = false; for(i = 0;i<tempopVec.size();++i) { if(tempopVec[i].dev_id/DB_BASE == BRK_DEVICE_NO) { brk_oper = true; } if(tempopVec[i].dev_id/DB_BASE == BRK_DEVICE_NO || tempopVec[i].dev_id/DB_BASE == DISCR_DEVICE_NO) { opVec.push_back(tempopVec[i]); } } int m_SendMsgType = OPTICKET_FLOW_REQ; int m_SendMsgLen; int channelid=CH_OPTICKET_TOPO_CHANNEL; char *report_buf=NULL; optFlowReqStru flowreq; flowreq.app_id = g_app_no; flowreq.context_no = AC_REALTIME_NO; flowreq.cal_type = caltype; flowreq.user_name = CORBA::string_dup(m_username.c_str()); flowreq.host_name = CORBA::string_dup(m_machinename.c_str()); flowreq.dev_pair.length(opVec.size()); for(i = 0;i<opVec.size();++i) { flowreq.dev_pair[i].dev_id = opVec[i].dev_id; flowreq.dev_pair[i].op_value = opVec[i].op_value; } MARSHAL(flowreq,report_buf,m_SendMsgLen); int ret_code = m_optTopoBus->SendMessageToChannel(report_buf, m_SendMsgType, m_SendMsgLen,channelid, NULL, NULL); printf("发送潮流校验报文结束报文!!!!!!!!!!!!\n"); delete report_buf; report_buf=NULL; if(brk_oper) return 1; return 0;}int COpticketTopo::ReceiveFlowVerifyAnswer(SEQOpStepVerFlowRpt &verFlowSeq,string &msg){ int ret_code; MESSAGE_HEADER msg_head; ::CBuffer buf_base; optFlowResStru flowreq; time_t starttime; time_t currenttime; vector<opt_flow_verify_stru> temp_flow_verify_result_vec; opt_flow_verify_stru temp_flow_verify_result; time(&starttime); printf("Call ReceiveFlowVerifyAnswer\n"); while(1) { time(¤ttime); if((currenttime-starttime)>10)// {//超时 //printf("ReceiveDownloadAppAnswer 超时\n"); msg = "潮流校验服务端没有响应,校验超时"; return -1; } ret_code = m_optTopoBus->RecvMessage(&msg_head, buf_base); if (ret_code == 1) { // 接受到下装申请应答 printf("receive flowcal result msg_type ===%d\n",msg_head.msg_type); if (msg_head.msg_type == OPTICKET_FLOW_RES) { UN_MARSHAL(flowreq, buf_base.GetBufPtr(), buf_base.GetLength()); printf("app_id ==%d,ret_code === %d\n",flowreq.app_id,flowreq.ret_code); if(flowreq.app_id != g_app_no) { return 1; } if(flowreq.ret_code == FLOW_CAL_NO_OVER) { printf("潮流计算完成,无越限信息!!!\n"); msg = "潮流计算完成,无越限信息!!!"; return 1; } else if(flowreq.ret_code == FLOW_CAL_FAIL) { printf("潮流计算不收敛!!!\n"); msg = "潮流计算不收敛!!!"; return 0; } else if(flowreq.ret_code == FLOW_INIT_FAIL) { printf("潮流初始化失败!!!\n"); msg = "潮流初始化失败!!!"; return 0; } else if(flowreq.ret_code == FLOW_CAL_OVER) { /*printf("电压越限的母线如下:\n"); verFlowSeq.length(flowreq.over_bs_vec.length()+flowreq.over_branch_vec.length()); for(int i = 0;i<flowreq.over_bs_vec.length();++i) { verFlowSeq[i].device_id = flowreq.over_bs_vec[i].dev_id; verFlowSeq[i].limit_value = flowreq.over_bs_vec[i].limit_value; verFlowSeq[i].cal_value = flowreq.over_bs_vec[i].cal_value;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -