📄 optickettopo.cpp.bak
字号:
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(¤ttime); 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 + -