📄 optickettopo.cpp.bak
字号:
} 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; 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更新指定设备的运行方式
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -