whyclj
2020-06-18 6f1b67b93229e9ecd387cb1b53dafc4782d1b8fe
修复离线养护计划
14个文件已修改
508 ■■■■■ 已修改文件
bin/.gitignore 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
bin/org/openmuc/openiec61850/ClientAssociation$ClientReceiver$1.class 补丁 | 查看 | 原始文档 | blame | 历史
bin/org/openmuc/openiec61850/ClientAssociation$ClientReceiver$2.class 补丁 | 查看 | 原始文档 | blame | 历史
bin/org/openmuc/openiec61850/ClientAssociation$ClientReceiver$3.class 补丁 | 查看 | 原始文档 | blame | 历史
bin/org/openmuc/openiec61850/ClientAssociation$ClientReceiver.class 补丁 | 查看 | 原始文档 | blame | 历史
bin/org/openmuc/openiec61850/ClientAssociation.class 补丁 | 查看 | 原始文档 | blame | 历史
bin/org/openmuc/openiec61850/ClientSap.class 补丁 | 查看 | 原始文档 | blame | 历史
src/com/dec/fbs9100/BTS61850_OffLineYHPlan.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/dec/fbs9100/BTS_61850_SocketClient.java 455 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/dec/fbs9100/FBS9100_SysState.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/dec/fbs9100/FBS9100_Task_Thread_SQL.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/version_inf/version_inf.txt 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/org/openmuc/openiec61850/ClientAssociation.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/org/openmuc/openiec61850/ClientSap.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
bin/.gitignore
@@ -1,11 +1,2 @@
/README.md
/c3p0.properties
/config.xml
/hs_err_pid3622.log
/lastconnection.properties
/lib/
/com/
/mchange-commons.properties
/mchange-log.properties
/org/
/.settings/
bin/org/openmuc/openiec61850/ClientAssociation$ClientReceiver$1.class
Binary files differ
bin/org/openmuc/openiec61850/ClientAssociation$ClientReceiver$2.class
Binary files differ
bin/org/openmuc/openiec61850/ClientAssociation$ClientReceiver$3.class
Binary files differ
bin/org/openmuc/openiec61850/ClientAssociation$ClientReceiver.class
Binary files differ
bin/org/openmuc/openiec61850/ClientAssociation.class
Binary files differ
bin/org/openmuc/openiec61850/ClientSap.class
Binary files differ
src/com/dec/fbs9100/BTS61850_OffLineYHPlan.java
@@ -2,6 +2,8 @@
import java.util.Date;
import com.base.Com;
/**
 *     离线养护计划参数
 * @author LiJun
@@ -41,7 +43,7 @@
    @Override
    public String toString() {
        return " BTS61850_OffLineYHPlan [dev_id=" + dev_id + ", OffLineYH_Cycle=" + OffLineYH_Cycle
                + ", OffLineYHstarttime=" + OffLineYHstarttime + ", OffLineYHTimes=" + OffLineYHTimes
                + ", OffLineYHstarttime=" + Com.getDateTimeFormat(OffLineYHstarttime, Com.DTF_YMDhms) + ", OffLineYHTimes=" + OffLineYHTimes
                + ", OffLineYHOnceCycle=" + OffLineYHOnceCycle + ", note=" + note 
                + ", successCount = " + successCount + "]";
    }
src/com/dec/fbs9100/BTS_61850_SocketClient.java
@@ -1,5 +1,6 @@
/********************************* head of file SocketClient.java ***********************************/
package com.dec.fbs9100;
import java.io.IOException;
import java.net.InetAddress;
import java.text.DecimalFormat;
@@ -35,9 +36,9 @@
import com.battdata_rt.BattStatData;
import com.dec.fbs9100.FBS9100_TestTime;
import com.dec.fbs9100.BTS61850_ResCapData;
/****************************************************************************************************/
public class BTS_61850_SocketClient extends Thread
{
public class BTS_61850_SocketClient extends Thread {
    private FBS9100_VCData m_FBS_VCData = null;
    private FBS9100_ParamDischarge m_FBS_DiscParam = null;
    private FBS9100_ParamDischarge m_FBS_DiscParamFromDev = null;
@@ -72,13 +73,15 @@
    private List<BTS61850_EventRecord> events;                            //事件记录表
    
    /*********************************************************************************************/
    /********************** IEC61850 partical ****************************************************/
    /**********************
     * IEC61850 partical
     ****************************************************/
    private volatile ClientAssociation m_Association;
    private ServerModel m_ServerModel;
    /*********************************************************************************************/
    /*********************************************************************************************/
    public BTS_61850_SocketClient(MysqlConnPool m_cp, FBS9100_StatAndParam stat_param, BattData_RT_Array AL_RTdata)
    {
    public BTS_61850_SocketClient(MysqlConnPool m_cp, FBS9100_StatAndParam stat_param, BattData_RT_Array AL_RTdata) {
        test_type = 1;
        m_ConnPool = m_cp;
        m_StatAndParam = stat_param;
@@ -118,12 +121,10 @@
    }
    
    /*********************************************************************************************/
    public void run()
    {
    public void run() {
        this.setName(TAG);
        System.out.println(this.getName() + " - BTS_IEC61850_ClientThread Started ...");
        while(true)
        {
        while (true) {
            //FBS9100_Task_Thread_SQL.runinsertime(m_ConnPool);
            try {
                Thread.sleep(5000);
@@ -137,20 +138,26 @@
                ClientSap clientSap = new ClientSap();
                m_Association = clientSap.associate(InetAddress.getByName(mDevIp), 102, null, null);
            } catch (IOException e) {
                System.out.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)+" IP:"+FBSDeviceIp+" - BTS_IEC61850_Client Unable to connect to remote host.");
                System.out.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms) + " IP:" + FBSDeviceIp
                        + " - BTS_IEC61850_Client Unable to connect to remote host.");
                continue;
            }
            
            System.out.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)+" IP:"+FBSDeviceIp+" - BTS_IEC61850_Client successfully connected to ied server"+FBSDeviceIp);
            System.out.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)+" IP:"+FBSDeviceIp+" - BTS_IEC61850_Client retrieving model...");
            System.out.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms) + " IP:" + FBSDeviceIp
                    + " - BTS_IEC61850_Client successfully connected to ied server" + FBSDeviceIp);
            System.out.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms) + " IP:" + FBSDeviceIp
                    + " - BTS_IEC61850_Client retrieving model...");
            try {
                m_ServerModel = m_Association.retrieveModel();
            } catch (ServiceError | IOException e) {
                System.out.println("**********************************");
                System.out.println("Service error: " + e.getMessage());
                System.out.println("**********************************");
                continue;
            }
            System.out.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)+" IP:"+FBSDeviceIp+" - BTS_IEC61850_Client successfully read model");
            System.out.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms) + " IP:" + FBSDeviceIp
                    + " - BTS_IEC61850_Client successfully read model");
            m_FBS_VCData.m_SysState.resetErrCommCount();
            FBS9100_Task_Thread_SQL.inseartOrUpdateFBS9100SFODParam(m_ConnPool,m_StatAndParam.clParam, m_StatAndParam);
            
@@ -176,7 +183,14 @@
                            int cmd = m_FBS_DiscParam.test_cmd;
                            if(true == BTS_IEC61850_SocketComm(cmd)) {
                                m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_StartAck;
                            }else {
                                if(cmd == FBS9100_ComBase.CMD_StartDischarge) {
                                    int errcode = (int) (readInt64NodeData(FBSDeviceName + "/btgGGIO1.AnIn28.mag.i",Fc.MX));
                                    System.out.println("设备"+m_StatAndParam.dev_id+":启动核容测试失败;errcode:" + errcode+" at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                            }
                            }
                        } else if(FBS9100_ComBase.CMD_Stop == m_FBS_DiscParam.op_cmd) {
                            if(true == BTS_IEC61850_SocketComm(FBS9100_ComBase.CMD_Stop)) {
                                m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_StopAck;
@@ -199,7 +213,8 @@
                            //读取离线养护参数
                            if(true == BTS_IEC61850_SocketComm(FBS9100_ComBase.CMD_GetOffLineYHParam)) {
                                m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_GetOffLineYHParam_ACK;
                                FBS9100_Task_Thread_SQL.updateFbs9100SetParamOffLineYHParamBydev_id(m_ConnPool, m_StatAndParam);
                                FBS9100_Task_Thread_SQL.updateFbs9100SetParamOffLineYHParamBydev_id(m_ConnPool,
                                        m_StatAndParam);
                                //更新离线养护参数
                                FBS9100_Task_Thread_SQL.updateBTS61850OffLineyhPlanOnRam(m_ConnPool,m_StatAndParam);
                                System.out.println("读取离线养护参数成功");
@@ -259,7 +274,8 @@
                        if(FBS9100_ComBase.CMD_ReadFodParam == cl_param.op_cmd) {
                            //System.out.println(cl_param.op_cmd);
                            if(true == BTS_IEC61850_SocketComm(FBS9100_ComBase.CMD_ReadFodParam)){        
                                FBS9100_Task_Thread_SQL.inseartOrUpdateFBS9100SFODParam(m_ConnPool,m_StatAndParam.clParam, m_StatAndParam);
                                FBS9100_Task_Thread_SQL.inseartOrUpdateFBS9100SFODParam(m_ConnPool,
                                        m_StatAndParam.clParam, m_StatAndParam);
                                m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_ReadFodParamSus;
                                //System.out.println("doing read");
                            }
@@ -296,7 +312,8 @@
                        if(m_StatAndParam != null) {
                            //System.err.println(m_StatAndParam);                        
                            FBS9100_Task_Thread_SQL.updateFbs9100StateByDev_Id(m_ConnPool, m_StatAndParam);
                            FBS9100_Task_Thread_SQL.inseartOrUpdateFBS9100SFODState(m_ConnPool, m_StatAndParam,m_StatAndParam.fbs9100s_fod_state);
                            FBS9100_Task_Thread_SQL.inseartOrUpdateFBS9100SFODState(m_ConnPool, m_StatAndParam,
                                    m_StatAndParam.fbs9100s_fod_state);
                            
                            FBS9100_Task_Thread_SQL.insertOrUpdateJhStateTable(m_ConnPool, m_StatAndParam);
                            
@@ -307,17 +324,13 @@
                    }
                    //---------------------------------------------------------------------------------//
                    /*
                    if(0 == (DevReadCount%7)) {
                        BTS_IEC61850_SocketComm(FBS9100_ComBase.CMD_GetState, ByteBuffer.allocate(0));
                        if(m_StatAndParam != null) {
                            FBS9100_Task_Thread_SQL.updateFbs9100StateByDev_Id(m_ConnPool, m_StatAndParam);
                        }
                    }
                     * if(0 == (DevReadCount%7)) {
                     * BTS_IEC61850_SocketComm(FBS9100_ComBase.CMD_GetState,
                     * ByteBuffer.allocate(0)); if(m_StatAndParam != null) {
                     * FBS9100_Task_Thread_SQL.updateFbs9100StateByDev_Id(m_ConnPool,
                     * m_StatAndParam); } }
                    */
                    //---------------------------------------------------------------------------------//
                        
                     //离线养护计划监测-------------------------------------------------------------------------------//
                    RunOffLineYHPlan();
@@ -352,16 +365,14 @@
    private void RunOffLineYHPlan() {
        BTS61850_OffLineYHPlan plan = m_StatAndParam.bts61850_OffLineYHPlan;
        long timelong = calculTimelong(plan.OffLineYHstarttime, new Date());
        if (plan.OffLineYHTimes > 0 && plan.OffLineYHOnceCycle > 0 && timelong >= 0) {
        //执行中的放电计划(包含已经完成的放电放电计划)
        int day_count =(int) timelong / (60*60*24);                //和计划时间开始相差多少天
        int sec_count = (int) timelong%(60*60*24);                //和计划时间相差秒数
        if(plan.OffLineYHTimes > 0 && plan.OffLineYHOnceCycle >0) {
            int circle = day_count / plan.OffLineYHOnceCycle;    //相隔多少周期
            int remain = day_count % plan.OffLineYHOnceCycle;    //和整个周期相隔多少时长
            if(remain == 0 && circle < plan.OffLineYHTimes && sec_count < 120) {
                if(m_FBS_VCData.m_SysState.WorkState == 6) {
                    System.out.println("启动离线养护计划成功"+Com.getDateTimeFormat(new Date(),Com.DTF_YMDhms));
                    //离线养护已启动
                    plan.successCount = circle+1;            //当前成功次数
                    return;
@@ -372,7 +383,10 @@
                if(m_FBS_VCData.m_SysState.WorkState == 0) {
                    //只有设备在在线监测状态才能启动离线养护任务
                    //启动离线养护
                    BTS_IEC61850_Write_CO_Node(FBSDeviceName+"/ncdGGIO1.SPCSO13.Oper", true);
                    boolean flag =BTS_IEC61850_Write_CO_Node(FBSDeviceName + "/ncdGGIO1.SPCSO13.Oper", true);
                    if(flag) {
                        System.out.println("启动离线养护计划成功" + Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                    }
                }
            }
        }
@@ -401,9 +415,11 @@
        }
        return res_op;
    }
    /**
     * @throws IOException 
     * @throws ServiceError *******************************************************************************************/
     * @throws ServiceError
     *******************************************************************************************/
     public void writeNodeData(String reference, String fc_str,double disCurr) {
            //String[] a =null;
            //a = new String[2];
@@ -435,6 +451,7 @@
            }
           // System.out.println("Successfully write data.");       
        }
     public void writeNodeDataInt(String reference, String fc_str,long disCurr) {
            //String[] a =null;
            //a = new String[2];
@@ -466,6 +483,7 @@
            }
           // System.out.println("Successfully write data.");       
        }
    private boolean BTS_IEC61850_Write_Singal_Node(String objectReference) {
        boolean res_op = false;
        //DataSet ds_pm1 = m_ServerModel.getDataSet(FBSDeviceName+"/ncdGGIO1");    
@@ -489,11 +507,13 @@
        return res_op;
    }
    
    private boolean BTS_IEC61850_Write_SetMag_Node(String objectReference, FBS9100_ParamDischarge m_FBS_DiscParam) throws IOException, ServiceError {
    private boolean BTS_IEC61850_Write_SetMag_Node(String objectReference, FBS9100_ParamDischarge m_FBS_DiscParam)
            throws IOException, ServiceError {
        boolean res_op = false;
        DataSet ds_pm1 = m_ServerModel.getDataSet(FBSDeviceName+"/ncdGGIO1");
        
        //FcModelNode fcModelNode = (FcModelNode)m_ServerModel.findModelNode(objectReference, Fc.SP);
        // FcModelNode fcModelNode =
        // (FcModelNode)m_ServerModel.findModelNode(objectReference, Fc.SP);
         //ModelNode fc_mode = fcModelNode.getChild("ctlVal");
//         if(null != ds_pm1) {
//            try {
@@ -552,6 +572,7 @@
        //System.exit(0);
        return res_op;
    }
    /*********************************************************************************************/
    private float readFloatNodeData(String reference, Fc fc) {
        float res_val = 0;
@@ -620,6 +641,7 @@
        float res = Float.parseFloat(a[1]);  
        return res;
    }
    /*********************************************************************************************/
    private String readStringNodeData(String reference,Fc fc) {
        String res_val = null;
@@ -656,10 +678,10 @@
        //System.out.println(resul);
        return resul;  //控制节点TRUE FALSE 
    }
    /*********************************************************************************************/
    
    public boolean BTS_IEC61850_SocketComm(int cmd) throws InterruptedException
    {
    public boolean BTS_IEC61850_SocketComm(int cmd) throws InterruptedException {
        boolean comm_res = false;
        try {
            if(FBS9100_ComBase.CMD_GetVIData == cmd) {
@@ -714,6 +736,7 @@
                    int m = 28;
                    for(int n=0; n<size_cnt; n++) {
                         if(n == 27) {
                            // 跳过新添加的设备不启动原因结果返回
                             continue;
                         }
                        FcModelNode fc_mode = (FcModelNode) ds.getMembers().get(n).getChild("mag").getChild("f");
@@ -733,37 +756,21 @@
                             m_FBS_VCData.battcurr[0] = Double.parseDouble(tf_t.getText());
                         }
                         
                         /*switch(n) {
                             case 3:
                                 fod_state.VGroupVol_one= Double.parseDouble(tf_t.getText());
                                 break;
                             case 4:
                                 fod_state.VpeakVol_one = Double.parseDouble(tf_t.getText());
                                 break;
                             case 5:
                                 fod_state.VGroupVol_two = Double.parseDouble(tf_t.getText());
                                 break;
                             case 6:
                                 fod_state.VpeakVol_two = Double.parseDouble(tf_t.getText());
                                 break;
                             case 7:
                                 fod_state.VGroupVol_three = Double.parseDouble(tf_t.getText());
                                 break;
                             case 8:
                                 fod_state.VpeakVol_three = Double.parseDouble(tf_t.getText());
                                 break;
                             case 9 :
                                 fod_state.VGroupVol_four = Double.parseDouble(tf_t.getText());
                                 break;
                             case 10:
                                 fod_state.VpeakVol_four= Double.parseDouble(tf_t.getText());
                                 break;
                             case 103:
                                 fod_state.RestTime_one = Double.parseDouble(tf_t.getText());
                                 //System.out.println(Double.parseDouble(tf_t.getText()));
                                 break;
                         }*/
                        /*
                         * switch(n) { case 3: fod_state.VGroupVol_one=
                         * Double.parseDouble(tf_t.getText()); break; case 4: fod_state.VpeakVol_one =
                         * Double.parseDouble(tf_t.getText()); break; case 5: fod_state.VGroupVol_two =
                         * Double.parseDouble(tf_t.getText()); break; case 6: fod_state.VpeakVol_two =
                         * Double.parseDouble(tf_t.getText()); break; case 7: fod_state.VGroupVol_three
                         * = Double.parseDouble(tf_t.getText()); break; case 8: fod_state.VpeakVol_three
                         * = Double.parseDouble(tf_t.getText()); break; case 9 :
                         * fod_state.VGroupVol_four = Double.parseDouble(tf_t.getText()); break; case
                         * 10: fod_state.VpeakVol_four= Double.parseDouble(tf_t.getText()); break; case
                         * 103: fod_state.RestTime_one = Double.parseDouble(tf_t.getText());
                         * //System.out.println(Double.parseDouble(tf_t.getText())); break;
                         *
                         * }
                         */
                         if(3 == n) {
                             fod_state.VGroupVol_one= Double.parseDouble(tf_t.getText());
                             
@@ -797,8 +804,9 @@
                             
                         }
                         
                         /****************************  读取均衡供电模块信息  ****************************************/
                        /****************************
                         * 读取均衡供电模块信息
                         ****************************************/
                         
                         if(11 == n) {
                             fbs9100_jhpowerState.setDev_version(tf_t.getText());
@@ -854,7 +862,6 @@
                             fbs9100_jhpowerState.setDev_temp(Double.parseDouble(tf_t.getText()) - 10);
                         }
                         
                         if((n >= m) && (n < (m+24*1))) {
                             //System.out.println(n);
                             //System.out.println(Double.parseDouble(tf_t.getText()));
@@ -881,12 +888,16 @@
                split =new String[2];
                m_Association.getDataSetValues(ds_stat);
                String sb= null;
                String temp = "%s";
                for(int n=0; n<size_cnt_stat; n++) {
                    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("%s,%s,%s,%s", c);
                }
                sb = String.format(temp, c);
                m_FBS_VCData.m_SysState.last_dev_61850alam = m_FBS_VCData.m_SysState.dev_61850alam;                        //记录上一次告警状态
                m_FBS_VCData.m_SysState.dev_61850alam = sb;                 
                
@@ -899,9 +910,9 @@
                //System.out.println("WorkState:"+WorkState);
                //System.out.println("m_FBS_VCData.m_SysState.WorkState"+m_FBS_VCData.m_SysState.WorkState);
                if(m_FBS_VCData.m_SysState.WorkState != WorkState) {
                    BTS61850_EventRecord event = new BTS61850_EventRecord(m_FBSDevId, m_FBS_VCData.m_SysState.WorkState, WorkState, BTS61850_EventRecord.Event_WorkState_Type);
                    BTS61850_EventRecord event = new BTS61850_EventRecord(m_FBSDevId, m_FBS_VCData.m_SysState.WorkState,
                            WorkState, BTS61850_EventRecord.Event_WorkState_Type);
                    events.add(event);
                    
                    m_FBS_VCData.m_SysState.WorkState = WorkState;
                    if(WorkState > 0) {
@@ -911,7 +922,8 @@
                        FBS9100_TestTime.restarttime();
                    }
                }
               // m_FBS_VCData.m_SysState.CapTestStopType = (int)readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn1.mag.f", Fc.MX);
                // m_FBS_VCData.m_SysState.CapTestStopType =
                // (int)readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn1.mag.f", Fc.MX);
                m_FBS_VCData.m_SysState.conresist = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn55.mag.f", Fc.MX);
                m_FBS_VCData.m_SysState.concurr = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn56.mag.f", Fc.MX);
                m_FBS_VCData.m_SysState.condvoldp = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn57.mag.f", Fc.MX);
@@ -923,20 +935,26 @@
                m_FBS_VCData.m_SysState.condcurr = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn58.mag.f", Fc.MX);
                m_FBS_VCData.battcap[0] = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn2.mag.f", Fc.MX);
                m_FBS_VCData.m_SysState.CapTestStopType = (int) readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn1.mag.f", Fc.MX);
                //System.out.println("m_FBS_VCData.m_SysState.captest_stop_type = "+m_FBS_VCData.m_SysState.captest_stop_type);
                m_FBS_VCData.m_SysState.resttest_count = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn60.mag.f", Fc.MX);
                m_FBS_VCData.m_SysState.CapTestStopType = (int) readFloatNodeData(
                        FBSDeviceName + "/ncdGGIO1.AnIn1.mag.f", Fc.MX);
                // System.out.println("m_FBS_VCData.m_SysState.captest_stop_type =
                // "+m_FBS_VCData.m_SysState.captest_stop_type);
                m_FBS_VCData.m_SysState.resttest_count = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.AnIn60.mag.f",
                        Fc.MX);
                //System.err.println(m_FBS_VCData.m_SysState.resttest_count);
                m_StatAndParam.m_DevVersion = readStringNodeData(FBSDeviceName+"/ncdGGIO1.DevVersion.d",Fc.DC);
                m_FBS_DiscParamFromDev.DCVolHighLimit = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.DCVolLimit.mag.f", Fc.MX);
                m_FBS_DiscParamFromDev.ChargeCurrSet = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.ChargeCurr.mag.f", Fc.MX);
                m_FBS_DiscParamFromDev.DCVolHighLimit = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.DCVolLimit.mag.f",
                        Fc.MX);
                m_FBS_DiscParamFromDev.ChargeCurrSet = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.ChargeCurr.mag.f",
                        Fc.MX);
                
                //m_FBS_DiscParamFromDev.DCVolHighLimit = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.DCVolLimi.mag.f", Fc.MX);
                // m_FBS_DiscParamFromDev.ChargeCurrSet = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.ChargeCur.mag.f", Fc.MX);
                // m_FBS_DiscParamFromDev.DCVolHighLimit =
                // readFloatNodeData(FBSDeviceName+"/ncdGGIO1.DCVolLimi.mag.f", Fc.MX);
                // m_FBS_DiscParamFromDev.ChargeCurrSet =
                // readFloatNodeData(FBSDeviceName+"/ncdGGIO1.ChargeCur.mag.f", Fc.MX);
                // System.out.println("m_FBS_DiscParamFromDev.DCVolHighLimit"+m_FBS_DiscParamFromDev.DCVolHighLimit);
                //System.out.println("m_FBS_DiscParamFromDev.ChargeCurrSet"+m_FBS_DiscParamFromDev.ChargeCurrSet);         
                switch(m_FBS_VCData.m_SysState.WorkState)
                {
                switch (m_FBS_VCData.m_SysState.WorkState) {
                    case 0:
                        test_type = 1;
                        break;
@@ -1017,14 +1035,19 @@
//                }
//                sleep(1500);
                if(true == write_res_t) {
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para1.setMag.f", "SP",(float)m_StatAndParam.m_FBS_DiscParam.DisCurr);
                    writeNodeData(FBSDeviceName + "/ncdGGIO1.Para1.setMag.f", "SP",
                            (float) m_StatAndParam.m_FBS_DiscParam.DisCurr);
                    float dis_hour_t = m_StatAndParam.m_FBS_DiscParam.DisTime;
                    dis_hour_t = dis_hour_t / 60;
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para2.setMag.f", "SP",(float)dis_hour_t);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para3.setMag.f", "SP",(float)m_StatAndParam.m_FBS_DiscParam.DisCap);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para4.setMag.f", "SP",(float)m_StatAndParam.m_FBS_DiscParam.MonomerTmp_High);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para5.setMag.f", "SP",(float)m_StatAndParam.m_FBS_DiscParam.GroupVol_LOW);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para6.setMag.f", "SP",(float)m_StatAndParam.m_FBS_DiscParam.MonomerVol_LOW);
                    writeNodeData(FBSDeviceName + "/ncdGGIO1.Para3.setMag.f", "SP",
                            (float) m_StatAndParam.m_FBS_DiscParam.DisCap);
                    writeNodeData(FBSDeviceName + "/ncdGGIO1.Para4.setMag.f", "SP",
                            (float) m_StatAndParam.m_FBS_DiscParam.MonomerTmp_High);
                    writeNodeData(FBSDeviceName + "/ncdGGIO1.Para5.setMag.f", "SP",
                            (float) m_StatAndParam.m_FBS_DiscParam.GroupVol_LOW);
                    writeNodeData(FBSDeviceName + "/ncdGGIO1.Para6.setMag.f", "SP",
                            (float) m_StatAndParam.m_FBS_DiscParam.MonomerVol_LOW);
                    sleep(2000);
                }
                comm_res = true;
@@ -1194,8 +1217,7 @@
                     BasicDataBind<?> data = new Float32DataBind((BdaFloat32)fc_mode);
                     JTextField tf_t = (JTextField)data.getValueField();
                     //str_out += String.format("#%02d: ", n+1) + tf_t.getText() + " ";
                      switch(n)
                     {
                    switch (n) {
                         case 86:
                             m_StatAndParam.clParam.STDCap_one=(int) Double.parseDouble(tf_t.getText());//除硫1标称容量
                             break;
@@ -1270,33 +1292,54 @@
                }
            }else if(FBS9100_ComBase.CMD_WriteFodParam == cmd) {
                    //System.out.println(m_StatAndParam.clParam.STDCap_two);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para11.setMag.f", "SP",(float)m_StatAndParam.clParam.STDCap_one);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para12.setMag.f", "SP",(float)m_StatAndParam.clParam.FloatVol_one);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para13.setMag.f", "SP",(float)m_StatAndParam.clParam.Strength_one);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para14.setMag.f", "SP",(float)m_StatAndParam.clParam.YHStrength_one);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para15.setMag.f", "SP",(float)m_StatAndParam.clParam.TimeLong_one);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para11.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.STDCap_one);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para12.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.FloatVol_one);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para13.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.Strength_one);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para14.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.YHStrength_one);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para15.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.TimeLong_one);
                
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para17.setMag.f", "SP",(float)m_StatAndParam.clParam.STDCap_two);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para18.setMag.f", "SP",(float)m_StatAndParam.clParam.FloatVol_two);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para19.setMag.f", "SP",(float)m_StatAndParam.clParam.Strength_two);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para20.setMag.f", "SP",(float)m_StatAndParam.clParam.YHStrength_two);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para21.setMag.f", "SP",(float)m_StatAndParam.clParam.TimeLong_two);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para17.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.STDCap_two);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para18.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.FloatVol_two);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para19.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.Strength_two);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para20.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.YHStrength_two);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para21.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.TimeLong_two);
                
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para23.setMag.f", "SP",(float)m_StatAndParam.clParam.STDCap_three);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para24.setMag.f", "SP",(float)m_StatAndParam.clParam.FloatVol_three);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para25.setMag.f", "SP",(float)m_StatAndParam.clParam.Strength_three);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para26.setMag.f", "SP",(float)m_StatAndParam.clParam.YHStrength_three);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para27.setMag.f", "SP",(float)m_StatAndParam.clParam.TimeLong_three);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para23.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.STDCap_three);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para24.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.FloatVol_three);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para25.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.Strength_three);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para26.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.YHStrength_three);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para27.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.TimeLong_three);
                
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para29.setMag.f", "SP",(float)m_StatAndParam.clParam.STDCap_four);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para30.setMag.f", "SP",(float)m_StatAndParam.clParam.FloatVol_four);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para31.setMag.f", "SP",(float)m_StatAndParam.clParam.Strength_four);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para32.setMag.f", "SP",(float)m_StatAndParam.clParam.YHStrength_four);
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para33.setMag.f", "SP",(float)m_StatAndParam.clParam.TimeLong_four);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para29.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.STDCap_four);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para30.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.FloatVol_four);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para31.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.Strength_four);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para32.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.YHStrength_four);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para33.setMag.f", "SP",
                        (float) m_StatAndParam.clParam.TimeLong_four);
                    comm_res = true;
            }else if(FBS9100_ComBase.CMD_Start_FODCL_test == cmd) {
                //System.out.println(m_StatAndParam.clParam.num);
                //comm_res = BTS_IEC61850_Write_CO_Node(FBSDeviceName+"/ncdGGIO1.SPCSO5.Oper", true);
                // comm_res = BTS_IEC61850_Write_CO_Node(FBSDeviceName+"/ncdGGIO1.SPCSO5.Oper",
                // true);
                //System.out.println(m_StatAndParam.clParam.num);
                switch(m_StatAndParam.clParam.GroupNum) {
                    case 1:
@@ -1355,32 +1398,40 @@
                //System.err.println("读取离线养护参数");
                //读取离线养护参数
                //获取单体温度上限阀值    
                m_FBS_DiscParamFromDev.MonomerTmp_High    = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.HiCelTemp.mag.f", Fc.MX);
                m_FBS_DiscParamFromDev.MonomerTmp_High = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.HiCelTemp.mag.f",
                        Fc.MX);
                //获取离线养护周期
                m_StatAndParam.bts61850_OffLineYHPlan.OffLineYH_Cycle = (int)readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn111.mag.f", Fc.MX);
                m_StatAndParam.bts61850_OffLineYHPlan.OffLineYH_Cycle = (int) readFloatNodeData(
                        FBSDeviceName + "/ncdGGIO1.AnIn111.mag.f", Fc.MX);
                m_FBS_DiscParamFromDev.copyOfflineYHData(m_StatAndParam.bts61850_OffLineYHPlan);
                //获取在线电压低阀值
                m_FBS_DiscParamFromDev.OnLineVol_Low = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn112.mag.f", Fc.MX);;
                m_FBS_DiscParamFromDev.OnLineVol_Low = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.AnIn112.mag.f",
                        Fc.MX);
                ;
                
                comm_res = true;
            }else if(FBS9100_ComBase.CMD_SetOffLineYHParam == cmd) {
                //System.err.println("设置离线养护参数" + m_StatAndParam.m_FBS_DiscParam.MonomerTmp_High);
                // System.err.println("设置离线养护参数" +
                // m_StatAndParam.m_FBS_DiscParam.MonomerTmp_High);
                //设置离线养护参数
                boolean write_res_t = true;
                
                if(true == write_res_t) {
                    //离线养护周期
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para34.setMag.f", "SP", (float)m_StatAndParam.m_FBS_DiscParam.OffLineYH_Cycle);
                    writeNodeData(FBSDeviceName + "/ncdGGIO1.Para34.setMag.f", "SP",
                            (float) m_StatAndParam.m_FBS_DiscParam.OffLineYH_Cycle);
                    //在线压低
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para35.setMag.f", "SP",(float)m_StatAndParam.m_FBS_DiscParam.OnLineVol_Low);
                    writeNodeData(FBSDeviceName + "/ncdGGIO1.Para35.setMag.f", "SP",
                            (float) m_StatAndParam.m_FBS_DiscParam.OnLineVol_Low);
                    sleep(1500);
                    //单体温度上限
                    writeNodeData(FBSDeviceName+"/ncdGGIO1.Para4.setMag.f", "SP",(float)m_StatAndParam.m_FBS_DiscParam.MonomerTmp_High);
                    writeNodeData(FBSDeviceName + "/ncdGGIO1.Para4.setMag.f", "SP",
                            (float) m_StatAndParam.m_FBS_DiscParam.MonomerTmp_High);
                }
                comm_res = true;
            }else if(FBS9100_ComBase.CMD_StartOffLineYH == cmd) {
                //启动离线养护
                //System.err.println("启动离线养护");
                System.err.println("启动离线养护");
                comm_res = BTS_IEC61850_Write_CO_Node(FBSDeviceName+"/ncdGGIO1.SPCSO13.Oper", true);
                comm_res = checkMakeSuccess(5);
            }else if(FBS9100_ComBase.CMD_StopOffLineYH == cmd) {
@@ -1393,25 +1444,39 @@
                comm_res = BTS_IEC61850_Write_CO_Node(FBSDeviceName+"/ncdGGIO1.SPCSO14.Oper", true);
            }else if(FBS9100_ComBase.CMD_GetSYSSetParam == cmd) {
                //获取系统参数
                m_FBS_SysParam.POF_BG_Boost_VolStart = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn113.mag.f", Fc.MX);                //电压过低阀值
                m_FBS_SysParam.POF_BG_Boost_VolStop = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn114.mag.f", Fc.MX);                //电压过高阀值
                m_FBS_SysParam.PowerBreakChargeCurr = readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn115.mag.f", Fc.MX);                //电流异常阀值
                m_FBS_SysParam.CurrentTyte = (int)(readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn116.mag.f", Fc.MX)*10);                //浮充电流阀值
                m_FBS_SysParam.GroupVolSorce = (int)(readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn117.mag.f", Fc.MX)*10);                //在线电压低阀值
                m_FBS_SysParam.MonomerOrder = (int)(readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn118.mag.f", Fc.MX));                    //设置主从机模式
                m_FBS_SysParam.POF_BG_Boost_VolStart = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.AnIn113.mag.f",
                        Fc.MX); // 电压过低阀值
                m_FBS_SysParam.POF_BG_Boost_VolStop = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.AnIn114.mag.f",
                        Fc.MX); // 电压过高阀值
                m_FBS_SysParam.PowerBreakChargeCurr = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.AnIn115.mag.f",
                        Fc.MX); // 电流异常阀值
                m_FBS_SysParam.CurrentTyte = (int) (readFloatNodeData(FBSDeviceName + "/ncdGGIO1.AnIn116.mag.f", Fc.MX)
                        * 10); // 浮充电流阀值
                m_FBS_SysParam.GroupVolSorce = (int) (readFloatNodeData(FBSDeviceName + "/ncdGGIO1.AnIn117.mag.f",
                        Fc.MX) * 10); // 在线电压低阀值
                m_FBS_SysParam.MonomerOrder = (int) (readFloatNodeData(FBSDeviceName + "/ncdGGIO1.AnIn118.mag.f",
                        Fc.MX)); // 设置主从机模式
                //m_FBS_SysParam.LoaderCount = (int) (readInt64NodeData(FBSDeviceName + "/ncdGGIO1.AnIn120.mag.i",Fc.MX)); // 主从机使能
                //m_FBS_SysParam.DtCardCount = (int) (readInt64NodeData(FBSDeviceName + "/ncdGGIO1.AnIn121.mag.i",Fc.MX)); // 干接点使能
                comm_res = true;
            }else if(FBS9100_ComBase.CMD_SetSYSSetParam == cmd) {
                //电压过低阀值
                writeNodeData(FBSDeviceName+"/ncdGGIO1.Para36.setMag.f", "SP", (float)m_FBS_SysParam.POF_BG_Boost_VolStart);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para36.setMag.f", "SP",
                        (float) m_FBS_SysParam.POF_BG_Boost_VolStart);
                //电压过高阀值
                writeNodeData(FBSDeviceName+"/ncdGGIO1.Para37.setMag.f", "SP",(float)m_FBS_SysParam.POF_BG_Boost_VolStop);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para37.setMag.f", "SP",
                        (float) m_FBS_SysParam.POF_BG_Boost_VolStop);
                //电流异常阀值
                writeNodeData(FBSDeviceName+"/ncdGGIO1.Para38.setMag.f", "SP",(float)m_FBS_SysParam.PowerBreakChargeCurr);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para38.setMag.f", "SP",
                        (float) m_FBS_SysParam.PowerBreakChargeCurr);
                sleep(1500);
                //浮充电流阀值
                writeNodeData(FBSDeviceName+"/ncdGGIO1.Para39.setMag.f", "SP",((float)m_FBS_SysParam.CurrentTyte)/10);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para39.setMag.f", "SP",
                        ((float) m_FBS_SysParam.CurrentTyte) / 10);
                //在线电压低阀值
                writeNodeData(FBSDeviceName+"/ncdGGIO1.Para40.setMag.f", "SP",((float)m_FBS_SysParam.GroupVolSorce)/10);
                writeNodeData(FBSDeviceName + "/ncdGGIO1.Para40.setMag.f", "SP",
                        ((float) m_FBS_SysParam.GroupVolSorce) / 10);
                sleep(1500);
                //设置主从机模式
                writeNodeData(FBSDeviceName+"/ncdGGIO1.Para41.setMag.f", "SP",((float)m_FBS_SysParam.MonomerOrder));
@@ -1473,7 +1538,9 @@
            for(int i = 0;i < last_alarm.length && i < now_alarm.length;i++) {
                if(!last_alarm[i].equals(now_alarm[i])) {
                    //System.out.println(last_alarm[i] +"===="+now_alarm[i]);
                    BTS61850_EventRecord event = new BTS61850_EventRecord(m_FBSDevId, last_alarm[i].equals("true")?1:0, now_alarm[i].equals("true")?1:0, BTS61850_EventRecord.Event_RELAY_Error_Type+i);
                    BTS61850_EventRecord event = new BTS61850_EventRecord(m_FBSDevId,
                            last_alarm[i].equals("true") ? 1 : 0, now_alarm[i].equals("true") ? 1 : 0,
                            BTS61850_EventRecord.Event_RELAY_Error_Type + i);
                    events.add(event);
                }
            }        
@@ -1486,41 +1553,42 @@
//    getResCapData(rtdata.MonStdCap,m_FBS_DiscParamFromDev.HourRate,m_FBS_VCData.battcap[0],m_FBS_VCData.getMaxMonomerVol,
    //        m_FBS_VCData.getMonomerVol(),rtdata.MonStdCap,CapType_Rest);
    /*********************************************************************************************/
    //获取剩余容量    STDAH:标称容量            HourRate:放电小时率    SumAH:测试容量        MaxMonomerVol:最大电池电压        MonomerVol:当前电池组的最低单体电压
    // 获取剩余容量 STDAH:标称容量 HourRate:放电小时率 SumAH:测试容量 MaxMonomerVol:最大电池电压
    // MonomerVol:当前电池组的最低单体电压
    //MonomerVolType:电池标称电压        CapType:容量类型(定值是常量)
    //MaxMonomerVol = m_FBS_VCData.getMonomerVol(); 
            
    // 获取放电小时率        stdah:标纯容量              current:当前电流    
    private float GetHourRate(float stdah,double current)
    {
    private float GetHourRate(float stdah, double current) {
        int index = 0;
        double[] value= {5.14, 3.06, 2.50, 2.00, 1.66, 1.46, 1.31, 1.18, 1.08, 1.00, 0.55, 0.40};
        float res;
        current = Math.abs(current);
        res = (float) (current/(stdah/10));
        if(res >= 5.14) return 1;
        else if(res <= 0.55) return 20;
        else
        {
            for(index=0; index<10; index++)
            {
        if (res >= 5.14)
            return 1;
        else if (res <= 0.55)
            return 20;
        else {
            for (index = 0; index < 10; index++) {
                if((res<=value[index]) && (res>value[index+1]))
                    break;
                else continue;
            }
            if((value[index]-res) < (res-value[index+1]))
            {
                return (index+1);
            }
            else
            {
                if(index+2 > 10) return (20);
                else return (index+2);
                    continue;
            }
            if ((value[index] - res) < (res - value[index + 1])) {
                return (index + 1);
            } else {
                if (index + 2 > 10)
                    return (20);
                else
                    return (index + 2);
            }
        }  
    }
    private float getResCapData(float STDAH,int HourRate,double SumAH,double MaxMonomerVol,
            double MonomerVol,float MonomerVolType,int CapType) {
    private float getResCapData(float STDAH, int HourRate, double SumAH, double MaxMonomerVol, double MonomerVol,
            float MonomerVolType, int CapType) {
        if((MaxMonomerVol - MonomerVolType*0.9) <= 0)
            return 0;
        if(SumAH < 0)
@@ -1546,22 +1614,33 @@
    private double N_TO_10H(int n_H) {
        // TODO Auto-generated method stub
         switch(n_H)
            {
                case  1 : return(1/0.55);
                case  2 : return(1/0.61);
                case  3 : return(1/0.75);
                case  4 : return(1/0.79);
                case  5 : return(1/0.833);
                case  6 : return(1/0.876);
                case  7 : return(1/0.917);
                case  8 : return(1/0.944);
                case  9 : return(1/0.974);
                case  10: return(1/1);
                case  20: return(1/1.1);
        switch (n_H) {
        case 1:
            return (1 / 0.55);
        case 2:
            return (1 / 0.61);
        case 3:
            return (1 / 0.75);
        case 4:
            return (1 / 0.79);
        case 5:
            return (1 / 0.833);
        case 6:
            return (1 / 0.876);
        case 7:
            return (1 / 0.917);
        case 8:
            return (1 / 0.944);
        case 9:
            return (1 / 0.974);
        case 10:
            return (1 / 1);
        case 20:
            return (1 / 1.1);
            }
            return 1.0;
    }
    public double getMonomerVol(double vol[]) {
        //vol[]
        double min = vol[0];
@@ -1589,13 +1668,14 @@
        }
        return max;    
    }
    /*********************************************************************************************/
    /**
     * 更新电池组数据
     *
     * @param vc_data
     */
    private void getFBS9100MonVolData(FBS9100_VCData vc_data)
    {
    private void getFBS9100MonVolData(FBS9100_VCData vc_data) {
        if(beforeWorkState==2 && vc_data.m_SysState.WorkState!=2) {
            int mon_index = 0;    
            for(int n=0; n<FBS9100_ComBase.BattGroupCountMax; n++) {
@@ -1603,8 +1683,10 @@
                    m_RTData[n].mTestData.setDevFBS9100S_WorkState(vc_data.m_SysState.CapTestStopType, 
                                                                    vc_data.m_SysState.WorkState);
                    
                    //m_RTData[n].mTestData.updateGroupCurrFrom_FBSDev((float) vc_data.battcurr[n]);
                    m_RTData[n].mTestData.updateCurrFrom_FBSDev((float) vc_data.battcurr[n],vc_data.m_SysState.WorkState);
                    // m_RTData[n].mTestData.updateGroupCurrFrom_FBSDev((float)
                    // vc_data.battcurr[n]);
                    m_RTData[n].mTestData.updateCurrFrom_FBSDev((float) vc_data.battcurr[n],
                            vc_data.m_SysState.WorkState);
                    m_RTData[n].updata_BattRtData_To_RamDb();
                    m_RTData[n].updata_BattRtSate_To_RamDb();
                    
@@ -1615,7 +1697,8 @@
                    if(null != m_RTData[n]) {
                        m_RTData[n].mTestData.updataCapTest((float)vc_data.battcap[n]);
                        m_RTData[n].mTestData.upDatebattState(test_type);
                        m_RTData[n].mTestData.updateCurrFrom_FBSDev((float) vc_data.battcurr[n],vc_data.m_SysState.WorkState);
                        m_RTData[n].mTestData.updateCurrFrom_FBSDev((float) vc_data.battcurr[n],
                                vc_data.m_SysState.WorkState);
                    }
                }
            }
@@ -1643,30 +1726,34 @@
                                                                    vc_data.m_SysState.WorkState);
                    m_RTData[n].mTestData.updateOnlineVolFrom_FBSDev((float) vc_data.onlinevol[n]);
                    m_RTData[n].mTestData.updateGroupVolFrom_FBSDev((float) vc_data.groupvol[n]);
                    m_RTData[n].mTestData.updateCurrFrom_FBSDev((float) vc_data.battcurr[n], vc_data.m_SysState.WorkState);
                    m_RTData[n].mTestData.updateCurrFrom_FBSDev((float) vc_data.battcurr[n],
                            vc_data.m_SysState.WorkState);
                    m_RTData[n].mTestData.updataCapTest((float)vc_data.battcap[n]);
                    m_RTData[n].mTestData.upDatebattState(test_type);
                    m_RTData[n].mTestData.updateGroupCurrFrom_FBSDev((float) vc_data.battcurr[n]);
                    m_RTData[n].mTestData.updateGroupTmp((float)readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn6.mag.f", Fc.MX));
                    m_RTData[n].mTestData
                            .updateGroupTmp((float) readFloatNodeData(FBSDeviceName + "/ncdGGIO1.AnIn6.mag.f", Fc.MX));
                    //m_RTData[n].mTestData.updatetestTimeLong(vc_data.testTime.getSecondCount());        
                    //---------------------------------------------------------------------------//
                    
                    /*System.out.println("MonStdCap"+MonStdCap);
                    System.out.println("m_FBS_DiscParamFromDev.HourRate"+m_FBS_DiscParamFromDev.HourRate);
                    System.out.println("vc_data.battcap[n]"+vc_data.battcap[n]);
                    System.out.println("vc_data.getMaxMonomerVol()"+vc_data.getMaxMonomerVol());
                    System.out.println("vc_data.getMonomerVol()"+vc_data.getMonomerVol());
                    System.out.println("MonVolStd"+MonVolStd);
                    System.out.println("CapType_Rest"+CapType_Rest);*/
                    /*
                     * System.out.println("MonStdCap"+MonStdCap);
                     * System.out.println("m_FBS_DiscParamFromDev.HourRate"+m_FBS_DiscParamFromDev.
                     * HourRate); System.out.println("vc_data.battcap[n]"+vc_data.battcap[n]);
                     * System.out.println("vc_data.getMaxMonomerVol()"+vc_data.getMaxMonomerVol());
                     * System.out.println("vc_data.getMonomerVol()"+vc_data.getMonomerVol());
                     * System.out.println("MonVolStd"+MonVolStd);
                     * System.out.println("CapType_Rest"+CapType_Rest);
                     */
                    double maxvol = getMaxMonomerVol(vc_data.vol);
                    double minvol = getMonomerVol(vc_data.vol);
                    //System.out.println("maxvol:"+maxvol);
                    //System.out.println("minvol:"+minvol);
                    m_FBS_DiscParamFromDev.HourRate=(int) GetHourRate(MonVolStd,vc_data.battcurr[n]);
                    float restcap = getResCapData(MonStdCap,m_FBS_DiscParamFromDev.HourRate,vc_data.battcap[n],maxvol,
                            minvol,MonVolStd,CapType_Rest);
                    float realcap = getResCapData(MonStdCap,m_FBS_DiscParamFromDev.HourRate,vc_data.battcap[n],maxvol,
                            minvol,MonVolStd,CapType_Real);
                    float restcap = getResCapData(MonStdCap, m_FBS_DiscParamFromDev.HourRate, vc_data.battcap[n],
                            maxvol, minvol, MonVolStd, CapType_Rest);
                    float realcap = getResCapData(MonStdCap, m_FBS_DiscParamFromDev.HourRate, vc_data.battcap[n],
                            maxvol, minvol, MonVolStd, CapType_Real);
                    //System.out.println("restcap"+restcap);
                    //System.out.println("realcap"+realcap);
                    m_RTData[n].mTestData.updatebattRestCap(restcap);
@@ -1682,8 +1769,7 @@
        
    }
    
    private BattData_RT[] setip()
    {
    private BattData_RT[] setip() {
        for(int n=0; n<FBS9100_ComBase.BattGroupCountMax; n++) {
            if(null != m_RTData[n]) {
                //m_RTData[n].updata_SetIp();
@@ -1695,7 +1781,6 @@
        return m_RTData;    
    }
    
    //返回指定时间间隔间的秒数
    public static long calculTimelong(Date start,Date end) {
        return (end.getTime() - start.getTime())/1000;
@@ -1703,4 +1788,6 @@
    
    /*********************************************************************************************/
}
/********************************* end of file SocketClient.java *************************************/
/*********************************
 * end of file SocketClient.java
 *************************************/
src/com/dec/fbs9100/FBS9100_SysState.java
@@ -38,6 +38,9 @@
    public float    condvoldp = 0;
    public float    condcurr = 0;
    
    public int MasterSlave_en = 0;                            //主从机使能
    public int DryContact_en = 0;                            //干接点使能
    //public int      captest_stop_type = -1;
    public int        CommCount = 0;                            //����������������
    public int        ErrCommCount = 0;
src/com/dec/fbs9100/FBS9100_Task_Thread_SQL.java
@@ -452,7 +452,7 @@
    /***********************************************************************************/
    
    /**
     * ������������������id������������  tb_fbs9100_state ������
     *     更新数据库表 tb_fbs9100_state 更新61850设备工作状态
     * @param con_pool
     * @param v_data
     * @param dev_id
@@ -507,7 +507,7 @@
                        + "dev_61850alarms= '" +v_data.m_SysState.dev_61850alam+"'";
        
        
        //String sql_str_update = "UPDATE " + sql_str_base + " WHERE dev_id=" + dev_id;
        String sql_str_update = "UPDATE " + sql_str_base + " WHERE dev_id=" + m_pm.dev_id;
        String sql_str_replace = "REPLACE INTO " + sql_str_base;
        
        Sql_Mysql sql = new Sql_Mysql(con_pool.getConn());
@@ -515,12 +515,16 @@
        
        if(v_data.m_SysState.CapTestStopType>=0 && v_data.m_SysState.CapTestStopType<=256) {
            //System.out.println(sql_str_replace);
            ResultSet res = sql.sqlMysqlQuery("SELECT * FROM db_ram_db.tb_fbs9100_state WHERE dev_id = " + m_pm.dev_id);
            try {
                if(res.next()) {
                    sql.sqlMysqlExecute(sql_str_update);
                } else {
                    sql.sqlMysqlExecute(sql_str_replace);
                }
                //System.out.println(sql_str_replace);
                
                sql.sqlMysqlExecute(sql_str_replace);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                sql.close_con();
@@ -528,6 +532,8 @@
        }
    }
    /***********************************************************************************/
    /*
     * 更新指定设备除硫模块的工作状态
     */
@@ -707,6 +713,10 @@
                    
                    param.m_FBS_DiscParam.OffLineYH_Cycle = res.getInt("OffLineYH_Cycle");
                    param.m_FBS_DiscParam.OnLineVol_Low = res.getFloat("OnLineVol_Low");
                    param.m_FBS_DiscParam.OffLineYHstarttime = res.getTimestamp("OffLineYHstarttime");
                    param.m_FBS_DiscParam.OffLineYHTimes = res.getInt("OffLineYHTimes");
                    param.m_FBS_DiscParam.OffLineYHOnceCycle = res.getInt("OffLineYHOnceCycle");
                    
                }
            }
@@ -1274,7 +1284,9 @@
                            + " PowerBreakChargeCurr =" + sysparam.PowerBreakChargeCurr  + ", "        //电流异常阀值
                            + " POF_BG_Boost_VolStop =" + sysparam.POF_BG_Boost_VolStop  + ", "        //电压过高阀值
                            + " POF_BG_Boost_VolStart =" + sysparam.POF_BG_Boost_VolStart  + ", "    //电压过低阀值
                            + " MonomerOrder =" + sysparam.MonomerOrder  + " ";                        //主从机模式
                            + " MonomerOrder =" + sysparam.MonomerOrder  + ", "                        //主从机模式
                            + " LoaderCount =" + sysparam.LoaderCount  + ", "                        //主从机使能
                            + " DtCardCount =" + sysparam.DtCardCount  + " ";                        //干接点使能
                            //+ " where dev_id = " + param.dev_id;
            //String sql_str_update = "UPDATE " + sql_str_base;
            String sql_str_replace = " REPLACE INTO " + sql_str_base;
src/com/version_inf/version_inf.txt
@@ -1,3 +1,14 @@
协转版本    2.00X
佛山版本
    均衡供电(旧版本)
    除硫模块
    均衡电流
韶关版本【无互控/无离线养护】
    均衡供电(旧版本)
    除硫模块
    均衡电流
1.109 edit lijun at 2019-11-19
    该版本的程序包括获取均衡电流,除硫养护,离线养护,重启设备等功能
    
src/org/openmuc/openiec61850/ClientAssociation.java
@@ -139,7 +139,6 @@
                        // Error decoding the OSI headers of the received packet
                        continue;
                    }
                    MMSpdu decodedResponsePdu = new MMSpdu();
                    try {
                         decodedResponsePdu.decode(new ByteArrayInputStream(buffer), null);
@@ -200,6 +199,7 @@
                            }
                            else if (decodedResponsePdu.getConfirmedErrorPDU().getInvokeID().value
                                    .intValue() != expectedResponseId) {
                                // Discarding ConfirmedError MMS PDU because no listener with fitting invokeID was
                                // found.
                                continue;
@@ -235,6 +235,7 @@
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
                close(e);
            } catch (Exception e) {
                close(new IOException("unexpected exception while receiving", e));
src/org/openmuc/openiec61850/ClientSap.java
@@ -334,7 +334,6 @@
                authenticationParameter, acseSap, proposedMaxMmsPduSize, proposedMaxServOutstandingCalling,
                proposedMaxServOutstandingCalled, proposedDataStructureNestingLevel, servicesSupportedCalling,
                responseTimeout, messageFragmentTimeout, reportListener);
        return clientAssociation;
    }