?? optickettopo.cpp
字號:
vector<DevType_T> m_openDev; vector<DevType_T> m_closeDev; UN_MARSHAL(change_yx_pkg,m_BufBase.GetBufPtr(),m_BufBase.GetLength()); int bw_num; int table_num; int special_flag; int tableno; TKeyID keyid; unsigned char value; int loop; //deal yx_change //bw_num = change_yx_pkg.package_head.char_num; //printf("變化遙信發送主機=======%s,發送進程=-========%s\n",m_RecvMsgHeader.src_host_name,m_RecvMsgHeader.src_proc_name); bw_num = change_yx_pkg.char_info.length(); for(loop=0;loop<bw_num;loop++) { if(change_yx_pkg.char_info[loop].app_no!=g_app_no) { continue; } keyid = change_yx_pkg.char_info[loop].keyid; value = change_yx_pkg.char_info[loop].value; tableno =keyid.record_id/KEY_DIV_VALUE; if (tableno != BRK_DEVICE_NO && tableno != DISCR_DEVICE_NO && tableno != GDDISCR_DEVICE_NO) { continue; } if (change_yx_pkg.char_info[loop].value & 0x80) special_flag = BW_TYPE_OF_SG; else if (change_yx_pkg.char_info[loop].value & 0x08) special_flag = BW_TYPE_OF_PARA; else if (change_yx_pkg.char_info[loop].value & 0x04) special_flag = BW_TYPE_OF_UPDATE; else if (change_yx_pkg.char_info[loop].value & 0x02) special_flag = BW_TYPE_OF_MISTAKE; else special_flag = BW_TYPE_OF_NORMAL; if(special_flag != BW_TYPE_OF_MISTAKE) { if(value==MENU_VALUE_YX_ON) { // printf("keyid.record_id ====%d bw app_no====%d,value==MENU_VALUE_YX_ON!!!!\n",keyid.record_id,change_yx_pkg.char_info[loop].app_no); InsertDev(keyid.record_id,m_closeDev); } else { printf("keyid.record_id ====%d bw app_no====%d,value==MENU_VALUE_YX_OFF!!!!\n",keyid.record_id,change_yx_pkg.char_info[loop].app_no); InsertDev(keyid.record_id,m_openDev); } } } if(!m_closeDev.empty() && m_canSyncMode == 2) { printf("開始更新方式數據!!!!!!!!!!!!!!!!!!!!!!!!\n"); g_psntp->ResetCbOpen(m_closeDev,true); m_closeDev.clear(); } if(!m_openDev.empty() && m_canSyncMode == 2) { printf("開始更新方式數據!!!!!!!!!!!!!!!!!!!!!!!!\n"); g_psntp->SetCbOpen(m_openDev,true); m_openDev.clear(); } //del tablechange //table_num = change_yx_pkg.package_head.table_num; table_num = change_yx_pkg.table_info.length(); //printf("table_num=====================================%d\n",table_num); for(loop=0;loop<table_num;loop++) { if(change_yx_pkg.table_info[loop].app_no!=g_app_no) { continue; } //printf("table bw ===========%d\n",change_yx_pkg.table_info[loop].table_no); tableno = change_yx_pkg.table_info[loop].table_no; if(tableno == BRK_DEVICE_NO || tableno == DISCR_DEVICE_NO || tableno == GDDISCR_DEVICE_NO || tableno == BS_DEVICE_NO || tableno == LINE_DEVICE_NO || tableno == ACLN_DEVICE_NO || tableno == ACLN_DOT_NO || tableno == TR_DEVICE_NO || tableno == TRWD_DEVICE_NO || tableno == GN_DEVICE_NO || tableno == LD_DEVICE_NO || tableno == RC_DEVICE_NO || tableno == TERMINAL_DEVICE_NO ) { m_isModelChange = true; break; } } if(m_isModelChange && m_canSyncMode ==2) { printf("開始更新模型!!!!!!!!!!!!!!!!!!!!!!!!!\n"); ModelChange(); m_isModelChange = false; }}*/void COpticketTopo::SyncMode()//根據參數設定同步運行方式以及模型{ //modify by xuxianfeng 060427 if(g_app_no==AP_SCADA || (g_app_no!=AP_SCADA&&m_opt_sync_dev_mode==OPTICKET_SYNC_YES)) { SynDevMode(); } if(g_app_no==AP_SCADA || (g_app_no!=AP_SCADA&&m_opt_sync_run_mode==OPTICKET_SYNC_YES)) { SynRunMode(); } //end add } int COpticketTopo::ModelChange(){// SetGraphInfo(); //設置接地牌 ReadGroundToken(); g_flow_verify = ReadPara("scada/opt_para","is_flow_verify"); if(g_flow_verify == 1) { deque<OpPair> opVec; SendMsgToFlow(opVec,FLOW_MODEL_CHANGE); } return 1;}int COpticketTopo::YxValueChange(){ int i; vector<DevType_T> m_openDev; vector<DevType_T> m_closeDev; vector<dev_yx_stru> brk_yx_vec; vector<dev_yx_stru> discr_yx_vec; vector<dev_yx_stru> gddiscr_yx_vec; GetAllRec<ODB::CTableOp>(g_app_no, BRK_DEVICE_NO, BRK_YX_FIELDS, brk_yx_vec); //printf("alldev.m_brkVec.size()==%d\n",alldev.m_brkVec.size()); GetAllRec<ODB::CTableOp>(g_app_no, DISCR_DEVICE_NO, DISCR_YX_FIELDS,discr_yx_vec); //printf("alldev.m_discrVec.size()==%d\n",alldev.m_discrVec.size()); GetAllRec<ODB::CTableOp>(g_app_no, GDDISCR_DEVICE_NO, GDDISCR_YX_FIELDS, gddiscr_yx_vec); //printf("alldev.m_gddiscrVec.size()==%d\n",alldev.m_gddiscrVec.size()); m_openDev.clear(); m_closeDev.clear(); vector<int> open_dev_vec; vector<int> close_dev_vec; close_dev_vec.reserve(brk_yx_vec.size()+discr_yx_vec.size()+gddiscr_yx_vec.size()); open_dev_vec.reserve(brk_yx_vec.size()+discr_yx_vec.size()+gddiscr_yx_vec.size()); vector<dev_yx_stru>::iterator p_dev; for(p_dev=brk_yx_vec.begin();p_dev!=brk_yx_vec.end();++p_dev) {//1020 if(p_dev->yx_value==OPT_VALUE_YX_ON) { close_dev_vec.push_back(p_dev->dev_id); } else { open_dev_vec.push_back(p_dev->dev_id); } } for(p_dev=discr_yx_vec.begin();p_dev!=discr_yx_vec.end();++p_dev) {// if(p_dev->yx_value==OPT_VALUE_YX_ON) { close_dev_vec.push_back(p_dev->dev_id); } else { open_dev_vec.push_back(p_dev->dev_id); } } for( p_dev=gddiscr_yx_vec.begin();p_dev!=gddiscr_yx_vec.end();++p_dev) {// if(p_dev->yx_value==OPT_VALUE_YX_ON) { close_dev_vec.push_back(p_dev->dev_id); } else { open_dev_vec.push_back(p_dev->dev_id); } } //printf("m_openDev.size==%d\n",m_openDev.size()); //printf("m_closeDev.size==%d\n",m_closeDev.size()); //printf("m_closeDev.SWITCH_TYPE_BRK.size==%d\n",m_closeDev[SWITCH_TYPE_BRK].size()); //printf("m_openDev.SWITCH_TYPE_BRK.size==%d\n",m_openDev[SWITCH_TYPE_BRK].size()); InsertDev(close_dev_vec,m_closeDev); InsertDev(open_dev_vec,m_openDev); SetAcDotPower(); if(!m_closeDev.empty() || !m_openDev.empty()) { g_psntp->SetAndResetCbOpen(m_openDev,m_closeDev,true); } //如果拷貝完方式數據,要重新設置接地牌 ReadGroundToken(); //xxf 080814 IslandResult(); g_flow_verify = ReadPara("scada/opt_para","is_flow_verify"); if(g_flow_verify == 1) { deque<OpPair> opVec; SendMsgToFlow(opVec,FLOW_MODE_CHANGE); } return 1;}#ifdef _WINDOWS32int COpticketTopo::SaveModelBase(const int copyfromapp,const int copytoapp){ int cur_time; 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; }void COpticketTopo::SetAcDotPower(){ int issetpowerbyacdot; issetpowerbyacdot = ReadPara("scada/opt_para","issetpowerbyacdot"); if(issetpowerbyacdot != 1) { printf("不根據交流線端的潮流方向設置電源點!!!\n"); return; } int nd; DevInfoStru devInfo; vector<acln_dot_yc_stru> dotVec; vector<acln_dot_yc_stru> dotVec_temp; CLineInfo *lineinfo = NULL; vector<NodeName_T> nd_power_vec; set<int> acln_search_flag; map<int,vector<acln_dot_yc_stru> > m_acln_linkdot; map<int,vector<acln_dot_yc_stru> >::iterator pos; vector<acln_dot_yc_stru>::iterator p_acdot_dev; GetAllRec<ODB::CTableOp>(g_app_no, ACLN_DOT_NO, ACLN_DOT_YC_FIELDS,dotVec); for(p_acdot_dev = dotVec.begin();p_acdot_dev != dotVec.end();++p_acdot_dev) { pos = m_acln_linkdot.find(p_acdot_dev->acln_id); if(pos == m_acln_linkdot.end()) { dotVec_temp.clear(); dotVec_temp.push_back(*p_acdot_dev); m_acln_linkdot[p_acdot_dev->acln_id]= dotVec_temp; } else { pos->second.push_back(*p_acdot_dev); } } for(p_acdot_dev = dotVec.begin();p_acdot_dev != dotVec.end();++p_acdot_dev) { devInfo.device_id=p_acdot_dev->fac_id; GetDevStru(devInfo); //如果不是虛擬廠站,則continue //printf(__FILE__",%d p_acdot_dev->acdot_id=======%d,fac_id===%d,fac_type===%d\n",__LINE__,p_acdot_dev->dev_id,p_acdot_dev->fac_id,devInfo.sub_type_value1); if(devInfo.sub_type_value1 != 4) { continue; } //printf("線路電源端acdot_id===%d,yc_value==%f\n",p_acdot_dev->dev_id,p_acdot_dev->p_value); pos = m_acln_linkdot.find(p_acdot_dev->acln_id); if(pos == m_acln_linkdot.end()) { continue; } for(int i = 0;i<pos->second.size();i++) { if(abs(pos->second[i].p_value) > 0.66) { if(pos->second[i].nd1 >0) { nd_power_vec.push_back(pos->second[i].nd1); printf("333333線路電源端acdot_id===%d,yc_value==%f\n",pos->second[i].dev_id,pos->second[i].p_value); } } } } g_psntp->SetPower(nd_power_vec);}void COpticketTopo::IslandResult(){ //SCADA應用不需要進行拓撲著色 if(g_app_no == AP_SCADA) return; const int REL_TABLE_NUM = 12; int i; static map<int,devQcolor_T*> dev_map; map<int,devQcolor_T*>::iterator p_dev_map; vector<DevId_T> dev_vec; vector<unsigned char> c_qcolor_vec; static const int REL_TABLE_NO[REL_TABLE_NUM] = { BRK_DEVICE_NO, DISCR_DEVICE_NO, GDDISCR_DEVICE_NO, ACLN_DEVICE_NO, ACLN_DOT_NO, TR_DEVICE_NO, GN_DEVICE_NO, LD_DEVICE_NO, RC_DEVICE_NO, BS_DEVICE_NO, TERMINAL_DEVICE_NO, TRWD_DEVICE_NO }; if(dev_map.empty()) { for(i=0; i<REL_TABLE_NUM; ++i) { if(REL_TABLE_NO[i]>0) //>0條件是為了處理REL_TABLE_NO最后一個或多個元素被默認初始化為0 { dev_map[REL_TABLE_NO[i]] = new devQcolor_T(REL_TABLE_NO[i], g_app_no); } } } for(p_dev_map = dev_map.begin(); p_dev_map != dev_map.end(); ++p_dev_map) { p_dev_map->second->Reset(); } g_psntp->IslandResult(dev_vec,c_qcolor_vec); for( i=0; i < dev_vec.size(); ++i) { p_dev_map = dev_map.find(dev_vec[i]/DB_BASE); if(p_dev_map != dev_map.end()) { p_dev_map->second->AddQcolorInfo(dev_vec[i], c_qcolor_vec[i]); if(dev_vec.size()<10000) printf("dev_id===%d,qcolor===%d\n",dev_vec[i],c_qcolor_vec[i]); } } for(p_dev_map = dev_map.begin();p_dev_map != dev_map.end();++p_dev_map) { p_dev_map->second->UpdateQcolor(); } printf("dev_vec.size()===%d,color_Vec.size()===%d\n",dev_vec.size(),c_qcolor_vec.size()); SendMsgToGraph(g_app_no);//發送消息給圖形刷新 }void devQcolor_T::Reset(){ int rev_num = c_key_vec.size() * 1.01; c_key_vec.clear(); c_key_vec.reserve(rev_num); c_qcolor_vec.clear(); c_qcolor_vec.reserve(rev_num);}void devQcolor_T::AddQcolorInfo(const int key_id, const unsigned char qcolor){ c_key_vec.push_back(key_id); c_qcolor_vec.push_back(qcolor);}void devQcolor_T::UpdateQcolor(){ if(!c_key_vec.empty()) { int ret_code = c_table_op.TableModifyByKey((char*)&c_key_vec[0], sizeof(int)*c_key_vec.size(), c_qcolor_field_id, (char*)&c_qcolor_vec[0], sizeof(char)*c_qcolor_vec.size()); if(ret_code < 0) { TRACE("ret_code of TableModifyByKey is: %d\n", ret_code); } }}string COpticketTopo::GetLocalTime(){ time_t curtime; time(&curtime); char tss[100]; struct tm *timestru=localtime(&curtime); sprintf(tss,"%4d-%2d-%2d:%2d:%2d:%2d",timestru->tm_year+1900,timestru->tm_mon+1,timestru->tm_mday , timestru->tm_hour ,timestru->tm_min ,timestru->tm_sec ); return tss;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -