DELL
2024-07-10 3b2ca7719939959e7659537b9aaabaa431fe52d0
iec61850_forFoShanAES_Model/src/com/dec/fbs9100/BTS_61850_SocketClient.java
@@ -43,6 +43,11 @@
   private FBS9100_VCData m_FBS_VCData = null;
   private FBS9100_ParamDischarge m_FBS_DiscParam = null;
   private FBS9100_ParamDischarge m_FBS_DiscParamFromDev = null;
   private FBS9100_AlarmParam m_FBS_AlmParamFromDev = null;
   private FBS9100_AlarmParam m_FBS_AlmParam = null;
   private FBS9100_SysParam m_FBS_SysParam = null;
   private FBS9100_StatAndParam m_StatAndParam = null;
   FBS9100_JHPowerState fbs9100_jhpowerState = null;
@@ -84,6 +89,7 @@
   
   private Logger logger = null;
   private int bg_num = 1;
   /*********************************************************************************************/
   /*********************************************************************************************/
   public BTS_61850_SocketClient(MysqlConnPool m_cp, FBS9100_StatAndParam stat_param, 
@@ -96,6 +102,10 @@
      m_FBS_VCData = m_StatAndParam.m_FBS_VCData;
      m_FBS_DiscParam = m_StatAndParam.m_FBS_DiscParam;
      m_FBS_DiscParamFromDev = m_StatAndParam.m_FBS_DiscParamFromDev;
      m_FBS_AlmParamFromDev = m_StatAndParam.m_FBS_AlmParamFromDev;
      m_FBS_AlmParam = m_StatAndParam.m_FBS_AlmParam;
      fbs9100_jhpowerState = m_StatAndParam.fbs9100_jhpowerState;
      cl_param = stat_param.clParam;
      m_FBS_SysParam = stat_param.m_FBS_SysParam;
@@ -154,21 +164,26 @@
         try {
            m_ClientSap = new ClientSap();
            m_Association = m_ClientSap.associate(InetAddress.getByName(FBSDeviceIp), 102, null, null);
            if(!FBSDeviceName.contains(m_ServerModel.getBaseDevName()) || null == m_ServerModel) {
            //System.out.println(m_ServerModel);
            if(null == m_ServerModel || !FBSDeviceName.contains(m_ServerModel.getBaseDevName())) {
               //与预加载的模型文件不一致时
               System.out.println("加载设备的模型文件...");
               m_ServerModel = m_Association.retrieveModel();
            }
            //System.err.println("Dev_BASE:"+m_ServerModel.getBaseDevName());;
            System.err.println("Dev_BASE:"+m_ServerModel.getBaseDevName());;
            
              
         } catch (Exception e) {
            logger.debug("BTS_IEC61850_Client Unable to connect to device IP:" + FBSDeviceIp);
            logger.error("BTS_IEC61850_Client Unable to connect to device IP:" + FBSDeviceIp);
            continue;
         }
         if(this.FBSDeviceName.indexOf("BTSE")>0) {
            //适配各个不同协议名称的61850设备通信[读取放电参数时用到]
            ZJDYCPSS = this.FBSDeviceName.replace("BTSE", "CPSS");
            if(ZJDYCPSS.contains("2")) {
               //标识第二组
               bg_num = 2;
            }
         }
         logger.debug("Successfully connected to ied server " + FBSDeviceIp + " " + FBSDeviceName + "\t CPSS:"+ZJDYCPSS);
@@ -205,6 +220,8 @@
         FBS9100_Task_Thread_SQL.queryBTS61850OffLineyhPlanOnRam(m_ConnPool, m_StatAndParam);
         
         FBS9100_Task_Thread_SQL.inseartDev_6185_AlmParam(m_ConnPool, m_StatAndParam.dev_id);
         m_StatAndParam.keyID = readStringNodeData(FBSDeviceName+"/btgGGIO1.ukeyID.d",Fc.DC);
            m_StatAndParam.serialNumber = readStringNodeData(FBSDeviceName+"/btgGGIO1.Bts_ID.d",Fc.DC);            //唯一序列号
         BTS61850_Task_Thread_SQL.UpdateBattInfTable(m_ConnPool, m_StatAndParam);      //更新当前参数
@@ -227,6 +244,8 @@
                     FBS9100_Task_Thread_SQL.queryFbsCL9100SetParamBydev_id(m_ConnPool, m_StatAndParam); // 查询离线养护参数
   
                     FBS9100_Task_Thread_SQL.queryFBS9100SysParamBydev_id(m_ConnPool, m_StatAndParam); // 查询系统参数
                     FBS9100_Task_Thread_SQL.queryDev6185AlmParamBydev_id(m_ConnPool, m_StatAndParam); // 查询告警参数
                  }
               }
               
@@ -414,6 +433,29 @@
                  }
                  FBS9100_Task_Thread_SQL.updateCL9100SetParamCmdBydev_id(m_ConnPool, m_StatAndParam);
               }
               if (FBS9100_ComBase.CMD_NULL != m_FBS_AlmParam.op_cmd) {
                  if (FBS9100_ComBase.CMD_ReadAlarmParam == m_FBS_AlmParam.op_cmd) {
                     System.out.println("读取告警参数"+m_FBS_AlmParam.op_cmd);
                     //读取告警参数
                     if (true == BTS_IEC61850_SocketComm(FBS9100_ComBase.CMD_ReadAlarmParam)) {
                        m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_ReadAlarmParam_ACK;
                        FBS9100_Task_Thread_SQL.UpdateDev61850AlmParam(m_ConnPool,m_StatAndParam.m_FBS_AlmParamFromDev, m_StatAndParam);
                     }else {
                        m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_FAIL;
                     }
                  }else if(FBS9100_ComBase.CMD_WriteAlarmParam == m_FBS_AlmParam.op_cmd) {
                     //设置告警参数
                     if (true == BTS_IEC61850_SocketComm(FBS9100_ComBase.CMD_WriteAlarmParam)) {
                        m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_WriteAlarmParam_ACK;
                     }else {
                        m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_FAIL;
                     }
                  }
                  FBS9100_Task_Thread_SQL.updateDev61850AlmParamCmdBydev_id(m_ConnPool, m_StatAndParam);
               }
               // -----------------------------------------------------------------------------------//
               // -----------------------------------------------------------------------------------//
@@ -992,7 +1034,12 @@
                        else if ((n >= (m + 24 * 2)) && (n < (m + 24 * 3))) {
                           m_FBS_VCData.tmp[n - (m + 24 * 2)] = ((BdaFloat32) fc_mode).getFloat();
                        }
                        //跳过剩余剩余容量
                        else if ((n >= (m + 24 * 3)) && (n < (m + 24 * 4))) {
                           m_FBS_VCData.mon_rest_cap[n - (m + 24 * 3)] = ((BdaFloat32) fc_mode).getFloat();
                        }
                        else if ((n >= (m + 24 * 4)) && (n < (m + 24 * 5))) {
                           m_FBS_VCData.mon_JH[n - (m + 24 * 4)] = ((BdaFloat32) fc_mode).getFloat();
                        }
@@ -1033,31 +1080,66 @@
               //---------------------------------Log Level.TRACE-------------------------------------//
               logger.printf(Level.TRACE, "m_ServerModel.getDataSet(%s/LLN0.dsDevAlarm)", FBSDeviceName);
               //-------------------------------------------------------------------------------------//
               String c[] = null;
               DataSet tmp_ds_stat = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsDevAlarm");
               if(null == tmp_ds_stat) {
                  return false;
               }
               DataSet ds_stat = tmp_ds_stat.copy();
               int size_cnt_stat = ds_stat.getMembers().size();
               c = new String[size_cnt_stat];
               String[] split = null;
               split = new String[2];
               boolean[] alm  = new boolean[] {false,false,false,false,false};
               int size_cnt_stat = tmp_ds_stat.getMembers().size();
               m_Association.getDataSetValues(ds_stat);
               String sb = null;
               String temp = "%s";
               //限制当前告警个数
               size_cnt_stat = 5;
               int mon_alm_idx = 0;
               for (int n = 0; n < size_cnt_stat; n++) {
                  //System.err.println(ds_stat.getMembers().get(n).getName());
                  if(null == ds_stat.getMembers().get(n).getChild("stVal")) {
                     System.err.println(ds_stat.getMembers().get(n).getChild("mag").toString1());
                     continue;
                  }
                  FcModelNode fc_mode = (FcModelNode) ds_stat.getMembers().get(n).getChild("stVal");
                  split = fc_mode.toString().split(": ");
                  c[n] = split[1];
                  if(n>0) {
                     temp += ",%s";
                  if(fc_mode instanceof BdaBoolean) {
                     //JTextField tf_t = (JTextField) data.getValueField();
                     String fc_mode_str = fc_mode.toString1();
                     //System.out.println("n:"+n+" "+fc_mode_str+"=="+((BdaBoolean)fc_mode).getValue());
                     if(fc_mode_str.contains(FBSDeviceName + "/ncdGGIO1.Alm1")){
                        //通信蓄电池远程核容装置常闭接触器K1告警
                        alm[0] = ((BdaBoolean)fc_mode).getValue();
                     }else if(fc_mode_str.contains(FBSDeviceName + "/ncdGGIO1.Alm2")){
                        //通信蓄电池远程核容装置通讯告警
                        alm[1] = ((BdaBoolean)fc_mode).getValue();
                     }else if(fc_mode_str.contains(FBSDeviceName + "/ncdGGIO1.Alm3")){
                        //通信蓄电池远程核容装置过温告警
                        alm[2] = ((BdaBoolean)fc_mode).getValue();
                     }else if(fc_mode_str.contains(FBSDeviceName + "/ncdGGIO1.Alm4")){
                        //通信蓄电池远程核容装置二极管D1告警
                        alm[3] = ((BdaBoolean)fc_mode).getValue();
                     }else if(fc_mode_str.contains(FBSDeviceName + "/ncdGGIO") && fc_mode_str.contains(".Alm5")){
                        //干接点输入故障-10个干接点点位有一个告警即触发干接点告警
                        alm[4] = (alm[4] || ((BdaBoolean)fc_mode).getValue());
                     }else if(fc_mode_str.contains(FBSDeviceName + "/btgGGIO1.Alm1")) {
                        //电池组端电压告警
                        m_FBS_VCData.groupvolalm[0] = ((BdaBoolean)fc_mode).getValue();
                     }else if(fc_mode_str.contains(FBSDeviceName + "/celGGIO1.Alm")) {
                        //电池组单体告警
                        if(0 <= mon_alm_idx && mon_alm_idx < 24) {
                           //单体电压告警
                           m_FBS_VCData.monvol_alm[mon_alm_idx] = ((BdaBoolean)fc_mode).getValue();
                        }else if(24 <= mon_alm_idx && mon_alm_idx < 48) {
                           //单体内阻告警
                           m_FBS_VCData.monres_alm[mon_alm_idx-24] = ((BdaBoolean)fc_mode).getValue();
                        }else if(48 <= mon_alm_idx && mon_alm_idx < 72) {
                           //单体温度告警
                           m_FBS_VCData.montmp_alm[mon_alm_idx-48] = ((BdaBoolean)fc_mode).getValue();
                        }else if(72 <= mon_alm_idx && mon_alm_idx < 96) {
                           //单体剩余容量告警
                           m_FBS_VCData.moncap_alm[mon_alm_idx-72] = ((BdaBoolean)fc_mode).getValue();
                        }
                        mon_alm_idx ++;
                     }
                  }
               }
               sb = String.format(temp, (Object[])c);
               getFBS9100MonAlmData(m_FBS_VCData);
               String sb = String.format("%b,%b,%b,%b,%b",alm[0],alm[1],alm[2],alm[3],alm[4]);
               m_FBS_VCData.m_SysState.last_dev_61850alam = m_FBS_VCData.m_SysState.dev_61850alam; // 记录上一次告警状态
               m_FBS_VCData.m_SysState.dev_61850alam = sb;
   
@@ -1082,7 +1164,7 @@
               //System.out.println(FBSDeviceName + "/LLN0.dsDevState 节点数:"+size_cnt);
               m_Association.getDataSetValues(ds);
               // 屏蔽当前根节点下新添加的ukey内容
               for (int n = 0; n < size_cnt && n < 120; n++) {
               for (int n = 0; n < size_cnt ; n++) {
                  if(null == ds.getMembers().get(n).getChild("mag") || null == ds.getMembers().get(n).getChild("mag").getChild("f")) {
                     //System.err.println(ds.getMembers().get(n).getChild("mag").toString1());
                     continue;
@@ -1158,6 +1240,16 @@
                  }else if (fc_mode_str.contains(FBSDeviceName+"/ncdGGIO1.AnIn110.mag.f")) {
                     fod_state.RestTime_four = ((BdaFloat32) fc_mode).getFloat();
                     //fod_state.RestTime_four = (int)readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn110.mag.f", Fc.MX);
                  }else if(fc_mode_str.contains(ZJDYCPSS + "/cheGGIO1.LoBatAh.mag.f")) {
                     //核容终止时剩余容量
                     m_FBS_VCData.test_end_cap[0] = ((BdaFloat32) fc_mode).getFloat();
                  }else if(fc_mode_str.contains(FBSDeviceName + "/ncdGGIO1.AnIn4.mag.f")) {
                     //核容终止时组端电压
                     m_FBS_VCData.test_end_vol[0] = ((BdaFloat32) fc_mode).getFloat();
                  }else if(fc_mode_str.contains(FBSDeviceName + "/ncdGGIO1.AnIn3.mag.f")) {
                     //核容终止时间
                     m_FBS_VCData.test_timelong[0] = ((BdaFloat32) fc_mode).getFloat()*60*60;
                     //System.out.println("test_timelong:" + ((BdaFloat32) fc_mode).getFloat());
                  }
               
               }
@@ -1791,6 +1883,53 @@
            if(!setBTSPublicKeyY(getUKEYRootDomStr(FBSDeviceName,sign_type)+"/ncdGGIO1.SysTime_SYS.setMag.i"));
            comm_res = writeNodeData_Int64(FBSDeviceName + "/ncdGGIO1.SysTime_SYS.setMag.i", "SP",time_l);
            logger.printf(Level.WARN, "DevIp:%s operate FBS9100_ComBase.CMD_UpdateXZTime , SetTime:"+Com.getDateTimeFormat(m_StatAndParam.m_FBS_DiscParam.OffLineYHstarttime, Com.DTFYMDhms), FBSDeviceIp);
         }else if(FBS9100_ComBase.CMD_ReadAlarmParam == cmd) {
            //读取告警参数
            m_FBS_AlmParamFromDev.groupvol_high_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para1.setMag.f", Fc.SP);
            m_FBS_AlmParamFromDev.groupvol_low_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para2.setMag.f", Fc.SP);
            m_FBS_AlmParamFromDev.monvol_high_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para3.setMag.f", Fc.SP);
            m_FBS_AlmParamFromDev.monvol_low_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para4.setMag.f", Fc.SP);
            m_FBS_AlmParamFromDev.monres_high_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para5.setMag.f", Fc.SP);
            m_FBS_AlmParamFromDev.monres_low_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para6.setMag.f", Fc.SP);
            m_FBS_AlmParamFromDev.montmp_high_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para7.setMag.f", Fc.SP);
            m_FBS_AlmParamFromDev.montmp_low_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para8.setMag.f", Fc.SP);
            m_FBS_AlmParamFromDev.moncap_high_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para9.setMag.f", Fc.SP);
            m_FBS_AlmParamFromDev.moncap_low_val = readFloatNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para10.setMag.f", Fc.SP);
            //System.out.println(m_FBS_AlmParamFromDev);
            comm_res = true;
         }else if(FBS9100_ComBase.CMD_WriteAlarmParam == cmd) {
            //设置告警参数
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para1.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para1.setMag.f", "SP", m_FBS_AlmParam.groupvol_high_val);
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para2.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para2.setMag.f", "SP", m_FBS_AlmParam.groupvol_low_val);
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para3.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para3.setMag.f", "SP", m_FBS_AlmParam.monvol_high_val);
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para4.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para4.setMag.f", "SP", m_FBS_AlmParam.monvol_low_val);
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para5.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para5.setMag.f", "SP", m_FBS_AlmParam.monres_high_val);
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para6.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para6.setMag.f", "SP", m_FBS_AlmParam.monres_low_val);
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para7.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para7.setMag.f", "SP", m_FBS_AlmParam.montmp_high_val);
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para8.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para8.setMag.f", "SP", m_FBS_AlmParam.montmp_low_val);
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para9.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para9.setMag.f", "SP", m_FBS_AlmParam.moncap_high_val);
            if(!setBTSPublicKeyY("CPSS/cheGGIO" + bg_num + ".Para10.setMag.f"));
            writeNodeData(ZJDYCPSS + "/cheGGIO" + bg_num + ".Para10.setMag.f", "SP", m_FBS_AlmParam.moncap_low_val);
            comm_res = true;
         }
         //comm_res = true;
      } catch (Exception e) {
@@ -2130,6 +2269,7 @@
                  m_RTData[n].al_MonVol.get(index).monRes = (float) vc_data.res[mon_index];
                  m_RTData[n].al_MonVol.get(index).monTmp = (float) vc_data.tmp[mon_index];
                  m_RTData[n].al_MonVol.get(index).mon_JH_curr = (float) vc_data.mon_JH[mon_index];
                  m_RTData[n].al_MonVol.get(index).mon_rest_cap = (float) vc_data.mon_rest_cap[mon_index];
                  mon_index++;
               }
@@ -2251,7 +2391,36 @@
      
      System.out.println(createSignature(btsid, keyid));
   }
   /**
    *    更新电池组数据
    *
    * @param vc_data
    */
   private void getFBS9100MonAlmData(FBS9100_VCData vc_data) {
      {
         int mon_index = 0;
         for (int n = 0; n < FBS9100_ComBase.BattGroupCountMax; n++) {
            if (null != m_RTData[n]) {
               for (int index = 0; index < m_RTData[n].MonCount; index++) {
                  if (mon_index >= FBS9100_ComBase.MonomerCountMax) {
                     break;
                  }
                  m_RTData[n].al_MonVol.get(index).monvol_alm =  vc_data.monvol_alm[mon_index];
                  m_RTData[n].al_MonVol.get(index).monres_alm =  vc_data.monres_alm[mon_index];
                  m_RTData[n].al_MonVol.get(index).montmp_alm =  vc_data.montmp_alm[mon_index];
                  m_RTData[n].al_MonVol.get(index).monrestcap_alm = vc_data.moncap_alm[mon_index];
                  mon_index++;
               }
               m_RTData[n].updata_BattRtAlARM_To_RamDb();
               BTS61850_Task_Thread_SQL.updateBattRtState_Table(m_ConnPool,vc_data,m_RTData);
               // ---------------------------------------------------------------------------//
            }
         }
      }
   }
   /*********************************************************************************************/
}
/*********************************