DELL
2024-07-27 831953352ea4df0ebaa2f47fb6b82b082883d6b5
iec61850_forFoShanAES_Model/src/com/dec/fbs9100/BTS_61850_SocketClient.java
@@ -27,6 +27,7 @@
import org.openmuc.openiec61850.FcModelNode;
import org.openmuc.openiec61850.ModelNode;
import org.openmuc.openiec61850.ServerModel;
import org.openmuc.openiec61850.ServerSap;
import org.openmuc.openiec61850.ServiceError;
import org.openmuc.openiec61850.clientgui.BasicDataBind;
import org.openmuc.openiec61850.clientgui.databind.Float32DataBind;
@@ -145,7 +146,7 @@
      Set_AppAliveState(true);
      
      while (true == Get_AppAliveState()) {
         logger.error("IP:" + FBSDeviceIp + " BTSE:" + FBSDeviceName + "- BTS_IEC61850_ClientThread Started ...");
         logger.error("IP:" + FBSDeviceIp + " ID:" + m_FBSDevId + " BTSE:" + FBSDeviceName + "- BTS_IEC61850_ClientThread Started ...");
         // FBS9100_Task_Thread_SQL.runinsertime(m_ConnPool);
         try {
            Thread.sleep(5000);
@@ -157,8 +158,6 @@
            m_ClientSap = new ClientSap();
            m_Association = m_ClientSap.associate(InetAddress.getByName(FBSDeviceIp), 102, null, null);
            
//            if(!FBSDeviceName.contains(m_ServerModel.getBaseDevName())) {
//               System.err.println("SSSSSSSSSSS");
//               //与预加载的模型文件不一致时
@@ -168,9 +167,24 @@
            
              
         } catch (Exception e) {
            logger.debug("BTS_IEC61850_Client Unable to connect to device IP:" + FBSDeviceIp);
            logger.error(e.toString(), e);
         }
         if(null == m_ServerModel && FBSDeviceName.contains("ZJDY")) {
            //紫晶协转若直连连接不上时解析icd文件
            try {
               List<ServerSap> serverSaps = ServerSap.getSapsFromSclFile("zjdy_bts_LiBatt.icd");
               m_ServerModel = serverSaps.get(0).serverModel;
            } catch (Exception e) {
               logger.error(e.toString(), e);
            }
         }
         if(null == m_ServerModel) {
            logger.info("BTS_IEC61850_Client Unable to connect to device IP:" + FBSDeviceIp +" ID:"+m_FBSDevId);
            continue;
         }
         //System.out.println(m_ServerModel);
         if(this.FBSDeviceName.indexOf("BTSE2")>0) {
            //适配各个不同协议名称的61850设备通信[读取放电参数时用到]
            ZJDYCPSS = this.FBSDeviceName.replace("BTSE2", "CPSS");
@@ -401,8 +415,8 @@
                     numberDevState = 0;
                  }
                  
                  if (m_StatAndParam != null) {
                     // System.err.println(m_StatAndParam);
                  if (m_StatAndParam != null) {
                     FBS9100_Task_Thread_SQL.updateFbs9100StateByDev_Id(m_ConnPool, m_StatAndParam);
                     FBS9100_Task_Thread_SQL.inseartOrUpdateFBS9100SFODState(m_ConnPool, m_StatAndParam,
                           m_StatAndParam.fbs9100s_fod_state);
@@ -807,12 +821,33 @@
               //---------------------------------Log Level.TRACE-------------------------------------//
               logger.printf(Level.TRACE, "m_ServerModel.getDataSet(%s/LLN0.dsBtseYc)", FBSDeviceName);
               //-------------------------------------------------------------------------------------//
               DataSet ds = null;
               DataSet ds_tmp;
               int BattMonCount = 24;
               if(null != m_RTData[0]) {
                  if(m_RTData[0].MonCount > 24) {
                     BattMonCount = m_RTData[0].MonCount;
                  }
               }
               if(FBSDeviceName.contains("ZJDY")) {
                  //紫晶协转
                  ds_tmp = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsMeasure");
                  //System.out.println(m_ServerModel.getDataSet(FBSDeviceName)+"@@");
               }else {
                  //共济协转
                  ds_tmp = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsBtseYc");
               }
               //System.out.println(ds_tmp);
               if(null == ds_tmp) {
                  return false;
               }
               ds = ds_tmp.copy();
               ///-------------------------------------------------------------------------------------//
               DataSet ds = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsBtseYc").copy();
               int size_cnt = ds.getMembers().size();
               m_Association.getDataSetValues(ds);
               int m = 0;
               boolean isStartReadMonData = true;
               for (int n = 0; n<size_cnt; n++) {
                  if(null == ds.getMembers().get(n).getChild("mag")) {
                     continue;
@@ -951,7 +986,22 @@
                           m = n;
                           isStartReadMonData = false;
                        }
                        //单体数据
                        if(FBSDeviceName.contains("ZJDY")) {
                           //锂电单体数目
                           BattMonCount = 80;
                           //锂电BTS
                           if ((n >= m) && (n < (m + BattMonCount * 1))) {
                              m_FBS_VCData.vol[n - m] = ((BdaFloat32) fc_mode).getFloat();
                           }
                           else if ((n >= (m + BattMonCount * 1)) && (n < (m + BattMonCount * 2))) {
                              m_FBS_VCData.tmp[n - (m + BattMonCount * 1)] = ((BdaFloat32) fc_mode).getFloat();
                           }
                           else if ((n >= (m + BattMonCount * 2)) && (n < (m + BattMonCount * 3))) {
                              m_FBS_VCData.mon_restcap[n - (m + BattMonCount * 2)] = ((BdaFloat32) fc_mode).getFloat();
                           }
                        }else {
                           //单体数据[南瑞协转]
                        if ((n >= m) && (n < (m + 24 * 1))) {
                           m_FBS_VCData.vol[n - m] = ((BdaFloat32) fc_mode).getFloat();
                        }
@@ -962,10 +1012,11 @@
                           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_restcap[n - (m + 24 * 2)] = ((BdaFloat32) fc_mode).getFloat();
                              m_FBS_VCData.mon_restcap[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();
                           }
                        }
                     }
                     
@@ -995,18 +1046,30 @@
               }
               
               //m_FBS_VCData.m_SysState.AlarmState = (int)readInt64NodeData(FBSDeviceName + "/btgGGIO1.AnIn28.mag.i",Fc.MX);            //核容启动失败原因
               //System.err.println("############");
               m_FBS_VCData.m_SysState.setCommCountInc();
               ds = null;
               ds = null;ds_tmp = null;
            }
            //System.err.println(m_FBS_VCData.m_SysState.ErrCommCount);
            if(1 == (numberDevState%3)) {
               //---------------------------------Log Level.TRACE-------------------------------------//
               logger.printf(Level.TRACE, "m_ServerModel.getDataSet(%s/LLN0.dsBtseYx)", FBSDeviceName);
               //-------------------------------------------------------------------------------------//
               String c[] = null;
               DataSet ds_stat = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsBtseYx").copy();
               int size_cnt_stat = ds_stat.getMembers().size();
               DataSet ds_stat = null;
               DataSet ds_tmp = null;
               if(FBSDeviceName.contains("ZJDY")) {
                  //紫晶协转
                  ds_tmp = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsDevAlarm");
               }else {
                  //共济协转
                  ds_tmp = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsBtseYx").copy();
               }
               if(null == ds_tmp) {
                  return false;
               }
               ds_stat = ds_tmp.copy();
               boolean[] alm  = new boolean[] {false,false,false,false,false};
               int size_cnt = ds_stat.getMembers().size();
               //System.out.println(FBSDeviceName + "/LLN0.dsDevState 节点数:"+size_cnt);
@@ -1038,24 +1101,6 @@
                  }
               }            
               
//               c = new String[size_cnt_stat];
//               String[] split = null;
//               split = new String[2];
//               m_Association.getDataSetValues(ds_stat);
//               String sb = null;
//               String temp = "%s";
//               //限制当前告警个数
//               size_cnt_stat = 5;
//               for (int n = 0; n < size_cnt_stat; n++) {
//                  //System.err.println(ds_stat.getMembers().get(n).getName());
//                  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";
//                  }
//               }
//               sb = String.format(temp, (Object[])c);
               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;
@@ -1063,7 +1108,7 @@
               checkEventChange(); // 记录当前的告警
               //System.out.println(sb);
               m_FBS_VCData.m_SysState.setCommCountInc();
               ds_stat = null;
               ds_stat = null;ds_tmp = null;     //清空内存数据
            }
            
            if(2 == (numberDevState%3)) {
@@ -1071,14 +1116,23 @@
               logger.printf(Level.TRACE, "m_ServerModel.getDataSet(%s/LLN0.dsDevState )", FBSDeviceName);
               //-------------------------------------------------------------------------------------//
               comm_res = true;
               DataSet ds = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsDevState").copy();
               if(null == ds) {
               DataSet ds = null;
               DataSet ds_tmp = null;
               if(FBSDeviceName.contains("ZJDY")) {
                  //紫晶协转
                  ds_tmp = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsDevState");
               }else {
                  //共济协转
                  ds_tmp = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsDevState");
                  if(null == ds_tmp) {
                  //兼容老版本协转数据
                  ds = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsBtseYc");
                     ds_tmp = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsBtseYc");
               }
               if(null == ds) {
               }
               if(null == ds_tmp) {
                  return false;
               }
               ds = ds_tmp.copy();
               int size_cnt = ds.getMembers().size();
               //System.out.println(FBSDeviceName + "/LLN0.dsDevState 节点数:"+size_cnt);
               m_Association.getDataSetValues(ds);
@@ -1165,7 +1219,7 @@
               m_FBS_VCData.m_SysState.setCommCountInc();
               //----------------- 读到状态数据后再更新数据库数据 -------------------//
               getFBS9100MonVolData(m_FBS_VCData);
               ds = null;
               ds = null;ds_tmp = null;
            }
            //m_FBS_VCData.m_SysState.resetErrCommCount();
            
@@ -1213,13 +1267,27 @@
            //-------------------------------------------------------------------------------------//
            comm_res = true;
         } else if (FBS9100_ComBase.CMD_GetDischargeParm == cmd) {
            DataSet ds_pm = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsBtseYc").copy();
            DataSet ds_pm = null;
            DataSet ds_tmp = null;
            if(FBSDeviceName.contains("ZJDY")) {
               //紫晶协转
               ds_tmp = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsDevState");
            }else {
               //共济协转
               ds_tmp = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsBtseYc");
            }
            if(null == ds_tmp) {
               return false;
            }
            ds_pm = ds_tmp.copy();
            if(null != ds_pm && null !=  ds_pm.getMembers()) {
               int size_cnt = ds_pm.getMembers().size();
               m_Association.getDataSetValues(ds_pm);
//               logger.printf(Level.DEBUG, "开始读取放电参数");
               logger.printf(Level.DEBUG, "开始读取放电参数");
               for (int n = 0; n < size_cnt; n++) {
                  if(null == ds_pm.getMembers().get(n).getChild("mag")) {
                  if(null == ds_pm.getMembers().get(n).getChild("mag").getChild("f")) {
                     System.out.println(ds_pm.getMembers().get(n).getChild("mag").toString());
                     continue;
                  }
                  
@@ -1268,6 +1336,7 @@
                     //System.out.println(fc_model_str);
                  }
               }
               //System.out.println("m_FBS_DiscParamFromDev.DisTime:"+m_FBS_DiscParamFromDev.DisTime);
               if(FBSDeviceName.contains("BTSE2")) {
                  //测试时长[第二套]
                  m_FBS_DiscParamFromDev.DisTime = (int)(readFloatNodeData(ZJDYCPSS + "/cheGGIO2.HiTestTmhour.mag.f", Fc.MX)*60);
@@ -1280,7 +1349,7 @@
                  m_FBS_DiscParamFromDev.GroupVol_LOW = readFloatNodeData(ZJDYCPSS + "/cheGGIO1.LoBatVal.mag.f", Fc.MX);
               }
               
               ds_pm = null;
               ds_pm = null;ds_tmp = null;
            }else {
               
               m_FBS_DiscParamFromDev.DisCurr = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.TestCurr.mag.f", Fc.MX);