Administrator
2022-07-15 1668188235063127e1db09a78b553bb3bfc2938f
V3.328 edit by lijun @ 2022-07-15
1.记录充放电数据时保存上一次设置的放电参数
9个文件已修改
2个文件已添加
553 ■■■■■ 已修改文件
iec_61850_forFoShanAES/bin/com/version_inf/version_inf.txt 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/config.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/src/com/battdata_rt/BattData_RT_SQL.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/src/com/battdata_rt/BattStatData.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/src/com/dec/fbs9100/BTS_61850_SocketClient.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/src/com/dec/fbs9100/FBS9100_ParamDischarge.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/src/com/dec/fbs9100/FBS9100_StatAndParam.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/src/com/dec/fbs9100/FBS9100_batt_testparam.java 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/src/com/dec/fbs9100/Sql_Mysql.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/src/com/dec/fbs9100/main_BTS_APP_IEC61850.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/src/com/version_inf/version_inf.txt 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec_61850_forFoShanAES/bin/com/version_inf/version_inf.txt
New file
@@ -0,0 +1,93 @@
协转版本【紫晶版本】
顺畅ukey加密版本,无除硫养护,无均衡供电标准版本节点
佛山版本     佛山标准版
    均衡供电(旧版本)
    除硫模块
    均衡电流
韶关版本【无互控/无离线养护】
    均衡供电(旧版本)
    除硫模块
    均衡电流
1.109 edit lijun at 2019-11-19
    该版本的程序包括获取均衡电流,除硫养护,离线养护,重启设备等功能
1.200 edit lijun at
    该版本初次添加系统参数修改
3.109 edit lijun
    该版本在在如下1个类中判断了当前设备的ID
    BTS61850_Task_Thread
3.110 edit lijun at 2020-05-19
    该版本在修改ip地址时因协转修改,只支持永久修改ip并且支持修改指定网口的ip,子网掩码和网关。
    全版本影响
3.300 edit by mxpopstar at 2020-08-21
    1:优化了BTS_61850_SocketClient与设备的通信逻辑,提高了通信效率。
    2:实时数据都从dsMeasure数据集里面读取,设备状态和核容容量从dsDevState数据集里面读取。
    3:优化了public boolean checkIfDataNeedStore()函数,使其支持设备处于核容状态时,核容电流起来之前,后台就启动数据记录
    4:优化了核容历史数据的存储功能,最后一笔的核容电流与单体数据保持与倒数第二笔相同,并存入数据库。
    全版本影响
V3.302 edit by mxpopstar at 2020-09-04
    1: 增加了放电参数中的“充电电流”与“升压上限”的设置。
    2:将协转版本读取移动到while循环开始前。
    3:将“充电电流”与“升压上限”的回读移动到getDischargeParam命令里面。
          全版本影响
V3.303 edit by lijun at 2020-09-06
    1:历史实时数据存储按照月存储,并且修改最大存储时长为3*366天
    2.添加首次启动时读取协转的主从机功能使能和干接点功能使能
          全版本影响
V3.310 edit by mxpopstar @ 2020-09-08
    1:支持新增蓄电池组和BTSE设备,而无需重启主程序的功能。
    2:支持核容过程中重启主程序和不中断数据存储的功能。
    全版本影响
V3.320 edit by mxpopstar @ 2020-10-02
    1:使用log4j记录输出日志到batt_61850_dev_x64_log文件夹,同时把WARN级别以上的日志同步存储到数据库db_app_sys.tb_batt_61850_dev_x64_log4j。
    2:batt_61850_dev_x64_log文件夹自动滚动存储10个日志文件,数据库tb_batt_61850_dev_x64_log4j最多滚动存储50000条WARN以上级别的数据,方便维护。
    3:数据库滚动存储的实现在main_BTS_APP_IEC61850主类中实现。
    4:发布的时候必须将设计好的log4j.properties文件一同放在batt_61850_dev_x64.exe的同一目录。
    全版本影响
V3.321 edit by lijun @ 2021-08-17
    1.记录历史放电数据时,同时记录当前电池组的内阻数据
    2.修复记录历史实时数据时记录默认会插入一笔数据为0的数据-------------->battData.mTestData.newDataRecordTime不能初始化当前时间
V3.322 edit by lijun @ 2021-09-01
    1.佛山二期版本新增均衡参数读取和设置命令
    2.之前读取集合方式修改为单个点位数据读取
V3.323 edit by lijun @ 2021-09-10
    1. 历史实时数据检测线程中;循环删除检测统计查询占用MySQL资源大且频繁查询,已修改成24小时定期检测删除指定天数之前的历史实时表
    2. 均衡电压设置修改为浮点数修改
V3.324 edit by lijun @ 2021-10-22
    1.佛山二期修改,新增兼容两组BTS,修改设置UKEY点位信息动态传递
V3.325 edit by lijun @ 2021-10-22
    1.修复:记录放电数据时,记录一笔内阻数据时test_record_count = 0
V3.326 edit by lijun @ 2021-12-13
    1.升级log4j开源JAR,修复开源包BUG
V3.327 edit by lijun @ 2022-04-12
    1.修复历史数据记录时不显示bug
V3.328 edit by lijun @ 2022-07-15
    1.记录放电数据时保存上一次设置的放电参数
iec_61850_forFoShanAES/config.xml
@@ -2,7 +2,7 @@
<root>
  <mysql_ramdb_recreate_en>false</mysql_ramdb_recreate_en>
  <mysql_server_ip>192.168.10.79</mysql_server_ip>
  <mysql_server_ip>127.0.0.1</mysql_server_ip>
  <!--SOURCE_BATTDATA_TYPE_FBSDEV = 0-->
  <!--SOURCE_BATTDATA_TYPE_SQLSERVER = 1-->
  <!--SOURCE_BATTDATA_TYPE_C_INTERFACE = 2-->
iec_61850_forFoShanAES/src/com/battdata_rt/BattData_RT_SQL.java
@@ -7,6 +7,7 @@
import com.base.Com;
import com.dec.fbs9100.BattResStorePro_Thread;
import com.dec.fbs9100.FBS9100_batt_testparam;
import com.dec.fbs9100.MysqlConnPool;
import com.dec.fbs9100.Sql_Mysql;
@@ -576,7 +577,7 @@
        String sql_str = " ";
        BattStatData tmp_test_data = rt_data.mTestData.clone();
        tmp_test_data.test_stoptype = test_stoptype_t;
        System.out.println("MysqlRecordInf_Exist:"+rt_data.MysqlRecordInf_Exist);
        if(false == rt_data.MysqlRecordInf_Exist)
        {
            sql_str = "INSERT INTO " + Sql_Mysql.BattTestDataInf_Table
@@ -624,6 +625,12 @@
             * 
             */
            BattResStorePro_Thread.insertMonDataToResTable(pool, rt_data, tmp_test_data.startTestTime, BattStatData.BATTDATA_RES);
            /**
             * 2022-07-14 @lijun 记录放电之前设置的放电参数
             *
             */
            recordTestParam(pool,rt_data);
        }
        else
        {
@@ -659,7 +666,187 @@
        return sql_str;
    }
    
    /**
     *     插入记录放电数据之前的放电参数
     * @param pool
     * @param rt_data
     */
    private static void recordTestParam(MysqlConnPool pool, BattData_RT rt_data) {
        String sql_str_sel = " SELECT * " +
                              " FROM " + Sql_Mysql.Batt_TestParam_Table + rt_data.BattGroupId +
                             " WHERE BattGroupId = " + rt_data.BattGroupId + " AND test_record_count = " + rt_data.mTestData.testRecordCount;
        ResultSet res = null;
        String sql_str = "";
        Sql_Mysql sql = new Sql_Mysql(pool);
        FBS9100_batt_testparam param = rt_data.mTestData.test_param;
        if(null != param) {
            try {
                res = sql.sqlMysqlQuery(sql_str_sel);
                if(null != res && res.next()) {
                    //更新当前参数
                    sql_str = " UPDATE " + Sql_Mysql.Batt_TestParam_Table + rt_data.BattGroupId +
                            " SET op_cmd = " + param.op_cmd +
                            ",TestCmd = " + param.TestCmd +
                            ",record_time = '" + Com.getDateTimeFormat(param.record_time, Com.DTF_YMDhms) + "'" +
                            ",HourRate = " + param.HourRate +
                            ",DisCurr = " + param.DisCurr +
                            ",DisCap = " + param.DisCap +
                            ",DisTime = " + param.DisTime +
                            ",GroupVol_LOW = " + param.GroupVol_LOW +
                            ",MonomerVol_LOW = " + param.MonomerVol_LOW +
                            ",MonomerLowCount = " + param.MonomerLowCount +
                            ",BattGroupNum = " + param.BattGroupNum +
                            ",OnlineVolLowAction = " + param.OnlineVolLowAction +
                            ",DCVolHighLimit = " + param.DCVolHighLimit +
                            ",ChargeCurrSet = " + param.ChargeCurrSet +
                            ",MonomerTmp_High = " + param.MonomerTmp_High +
                            ",AutoTestStartVol = " + param.AutoTestStartVol +
                            ",OnLineVol_Low = " + param.OnLineVol_Low +
                            ",OffLineYH_Cycle = " + param.OffLineYH_Cycle +
                            ",OffLineYHstarttime = '" + Com.getDateTimeFormat(param.OffLineYHstarttime, Com.DTF_YMDhms) + "'"+
                            ",OffLineYHTimes = " + param.OffLineYHTimes +
                            ",OffLineYHOnceCycle = " + param.OffLineYHOnceCycle +
                            ",MonCount = " + param.MonCount +
                            ",MonVol = " + param.MonVol +
                            ",DisPower = " + param.DisPower +
                            ",DisPreRes = " + param.DisPreRes +
                            ",CharCap = " + param.CharCap +
                            ",CharTimeLong = " + param.CharTimeLong +
                            ",FloatCharTimeLong = " + param.FloatCharTimeLong +
                            ",CharSotpCurr = " + param.CharSotpCurr +
                            ",MonVolHightLimit = " + param.MonVolHightLimit +
                            ",MonVolHightLimitCount = " + param.MonVolHightLimitCount +
                            ",CharHighTmp = " + param.CharHighTmp +
                            ",DisWaitTime = " + param.DisWaitTime +
                            ",CharWaitTime = " + param.CharWaitTime +
                            ",FlowOver_Count = " + param.FlowOver_Count +
                            ",FlowOver_CharCurr_1 = " + param.FlowOver_CharCurr_1 +
                            ",FlowOver_CharCurr_2 = " + param.FlowOver_CharCurr_2 +
                            ",FlowOver_CharCurr_3 = " + param.FlowOver_CharCurr_3 +
                            ",FlowOver_CharTime_1 = " + param.FlowOver_CharTime_1 +
                            ",FlowOver_CharTime_2 = " + param.FlowOver_CharTime_2 +
                            ",FlowOver_CharTime_3 = " + param.FlowOver_CharTime_3 +
                            ",ChargeVolt = " + param.ChargeVolt +
                            ",C_ProtectVol1 = " + param.C_ProtectVol1 +
                            ",C_ProtectVol2 = " + param.C_ProtectVol2 +
                            ",C_ProtectVol3 = " + param.C_ProtectVol3 +
                            ",C_mon_uppervol1 = " + param.C_mon_uppervol1 +
                            ",C_mon_uppervol2 = " + param.C_mon_uppervol2 +
                            ",C_mon_uppervol3 = " + param.C_mon_uppervol3 +
                            ",C_mon_uppernum1 = " + param.C_mon_uppernum1 +
                            ",C_mon_uppernum2 = " + param.C_mon_uppernum2 +
                            ",C_mon_uppernum3 = " + param.C_mon_uppernum3 +
                            ",HV_charge_num = " + param.HV_charge_num +
                            ",HV_charge_Vol1 = " + param.HV_charge_Vol1 +
                            ",HV_charge_Vol2 = " + param.HV_charge_Vol2 +
                            ",HV_charge_Vol3 = " + param.HV_charge_Vol3 +
                            ",HV_time1 = " + param.HV_time1 +
                            ",HV_time2 = " + param.HV_time2 +
                            ",HV_time3 = " + param.HV_time3 +
                            ",HV_ProtectCurr1 = " + param.HV_ProtectCurr1 +
                            ",HV_ProtectCurr2 = " + param.HV_ProtectCurr2 +
                            ",HV_ProtectCurr3 = " + param.HV_ProtectCurr3 +
                            ",HV_mon_uppervol1 = " + param.HV_mon_uppervol1 +
                            ",HV_mon_uppervol2 = " + param.HV_mon_uppervol2 +
                            ",HV_mon_uppervol3 = " + param.HV_mon_uppervol3 +
                            ",HV_mon_uppernum1 = " + param.HV_mon_uppernum1 +
                            ",HV_mon_uppernum2 = " + param.HV_mon_uppernum2 +
                            ",HV_mon_uppernum3 = " + param.HV_mon_uppernum3 +
                            " WHERE BattGroupId = " + rt_data.BattGroupId + " AND test_record_count = " + rt_data.mTestData.testRecordCount;
                }else{
                    //插入当前参数
                    sql_str = "INSERT INTO " + Sql_Mysql.Batt_TestParam_Table + rt_data.BattGroupId
                            + "(record_time,BattGroupId,test_record_count,op_cmd,TestCmd,HourRate,DisCurr,DisCap,DisTime,GroupVol_LOW,MonomerVol_LOW,MonomerLowCount,BattGroupNum,OnlineVolLowAction,DCVolHighLimit,ChargeCurrSet,MonomerTmp_High,AutoTestStartVol,OnLineVol_Low,OffLineYH_Cycle,OffLineYHstarttime,OffLineYHTimes,OffLineYHOnceCycle,MonCount,MonVol,DisPower,DisPreRes,CharCap,CharTimeLong,FloatCharTimeLong,CharSotpCurr,MonVolHightLimit,MonVolHightLimitCount,CharHighTmp,DisWaitTime,CharWaitTime,FlowOver_Count,FlowOver_CharCurr_1,FlowOver_CharCurr_2,FlowOver_CharCurr_3,FlowOver_CharTime_1,FlowOver_CharTime_2,FlowOver_CharTime_3,ChargeVolt,C_ProtectVol1,C_ProtectVol2,C_ProtectVol3,C_mon_uppervol1,C_mon_uppervol2,C_mon_uppervol3,C_mon_uppernum1,C_mon_uppernum2,C_mon_uppernum3,HV_charge_num,HV_charge_Vol1,HV_charge_Vol2,HV_charge_Vol3,HV_time1,HV_time2,HV_time3,HV_ProtectCurr1,HV_ProtectCurr2,HV_ProtectCurr3,HV_mon_uppervol1,HV_mon_uppervol2,HV_mon_uppervol3,HV_mon_uppernum1,HV_mon_uppernum2,HV_mon_uppernum3) "
                            + "VALUES("
                            + "'" + Com.getDateTimeFormat(param.record_time, Com.DTF_YMDhms) + "',"
                            + rt_data.BattGroupId + ","
                            + rt_data.mTestData.testRecordCount + ","
                            + param.op_cmd + ","
                            + param.TestCmd + ","
                            + param.HourRate + ","
                            + param.DisCurr + ","
                            + param.DisCap + ","
                            + param.DisTime + ","
                            + param.GroupVol_LOW + ","
                            + param.MonomerVol_LOW + ","
                            + param.MonomerLowCount + ","
                            + param.BattGroupNum + ","
                            + param.OnlineVolLowAction + ","
                            + param.DCVolHighLimit + ","
                            + param.ChargeCurrSet + ","
                            + param.MonomerTmp_High + ","
                            + param.AutoTestStartVol + ","
                            + param.OnLineVol_Low + ","
                            + param.OffLineYH_Cycle + ","
                            + "'" + Com.getDateTimeFormat(param.OffLineYHstarttime, Com.DTF_YMDhms) + "',"
                            + param.OffLineYHTimes + ","
                            + param.OffLineYHOnceCycle + ","
                            + param.MonCount + ","
                            + param.MonVol + ","
                            + param.DisPower + ","
                            + param.DisPreRes + ","
                            + param.CharCap + ","
                            + param.CharTimeLong + ","
                            + param.FloatCharTimeLong + ","
                            + param.CharSotpCurr + ","
                            + param.MonVolHightLimit + ","
                            + param.MonVolHightLimitCount + ","
                            + param.CharHighTmp + ","
                            + param.DisWaitTime + ","
                            + param.CharWaitTime + ","
                            + param.FlowOver_Count + ","
                            + param.FlowOver_CharCurr_1 + ","
                            + param.FlowOver_CharCurr_2 + ","
                            + param.FlowOver_CharCurr_3 + ","
                            + param.FlowOver_CharTime_1 + ","
                            + param.FlowOver_CharTime_2 + ","
                            + param.FlowOver_CharTime_3 + ","
                            + param.ChargeVolt + ","
                            + param.C_ProtectVol1 + ","
                            + param.C_ProtectVol2 + ","
                            + param.C_ProtectVol3 + ","
                            + param.C_mon_uppervol1 + ","
                            + param.C_mon_uppervol2 + ","
                            + param.C_mon_uppervol3 + ","
                            + param.C_mon_uppernum1 + ","
                            + param.C_mon_uppernum2 + ","
                            + param.C_mon_uppernum3 + ","
                            + param.HV_charge_num + ","
                            + param.HV_charge_Vol1 + ","
                            + param.HV_charge_Vol2 + ","
                            + param.HV_charge_Vol3 + ","
                            + param.HV_time1 + ","
                            + param.HV_time2 + ","
                            + param.HV_time3 + ","
                            + param.HV_ProtectCurr1 + ","
                            + param.HV_ProtectCurr2 + ","
                            + param.HV_ProtectCurr3 + ","
                            + param.HV_mon_uppervol1 + ","
                            + param.HV_mon_uppervol2 + ","
                            + param.HV_mon_uppervol3 + ","
                            + param.HV_mon_uppernum1 + ","
                            + param.HV_mon_uppernum2 + ","
                            + param.HV_mon_uppernum3
                            + ");";
                }
                //System.out.println(sql_str);
                sql.sqlMysqlExecute(sql_str);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(null != res) {
                    try {
                        res.close();
                    } catch (SQLException e) {
                        sql.logger.error("BattData_RT_SQL.recordTestParam():" + e.toString(), e);
                    }
                }
                sql.close_con();
            }
        }
    }
    /**
     * ��������������������rt_data����������������������������������������tb_batttestdata_id,tb_testdatastop_id,tb_batttestdata_inf��������������������������SQL���������������
     * @param rt_data
@@ -725,7 +912,6 @@
                }
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            sql.logger.error("queryBattState_From_RT_Table():" + e.toString(), e);
        } finally {
            sql.close_con();
iec_61850_forFoShanAES/src/com/battdata_rt/BattStatData.java
@@ -3,6 +3,7 @@
import java.util.Date;
import com.dec.fbs9100.FBS9100_SysState;
import com.dec.fbs9100.FBS9100_batt_testparam;
public class BattStatData
{
@@ -51,6 +52,9 @@
    public int recordNum_BPM7100;
    public Date startTestTime = new Date();
    public Date recordTime = new Date();
    public FBS9100_batt_testparam test_param;
    /**
     * 2021-08-17 edit by lijun    记录历史实时数据时判断标识,避免设备通信中断后停止记录以及还未通信上也开始记录
     */
@@ -86,6 +90,8 @@
        mSourceBattDataType = type;
        mSybSrvCurrChargeDirPos = syb_srv_curr_charge_dir_pos;
        init(FBS9100_SysState.IEC61850_SYS_STATE_STOPPED, (byte) BATTSTATE_FLOAT, 0);
        test_param = new FBS9100_batt_testparam();
    }
    
    public void setBpm7100RunState(boolean stat) {
iec_61850_forFoShanAES/src/com/dec/fbs9100/BTS_61850_SocketClient.java
@@ -5,6 +5,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.nio.charset.CoderMalfunctionError;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -54,6 +55,8 @@
    private CL_Param cl_param = null;
    private BattData_RT[] m_RTData = new BattData_RT[FBS9100_ComBase.BattGroupCountMax];
    
    private FBS9100_batt_testparam test_Param;
    private int m_FBSDevId = 0;
    private int m_BattMonCount = 0;
    private MysqlConnPool m_ConnPool = null;
@@ -100,6 +103,8 @@
        FBSDeviceIp = m_StatAndParam.dev_ipaddr;
        m_FBSDevId = m_StatAndParam.dev_id;
        test_Param = m_StatAndParam.test_Param;
        test_Param.dev_id = m_FBSDevId;
        
        events = new ArrayList<BTS61850_EventRecord>();
        
@@ -204,6 +209,8 @@
                            logger.printf(Level.DEBUG, "FBS9100_ComBase.CMD_SetDischargeParm for Dev ip:%s", FBSDeviceIp);
                            if (true == BTS_IEC61850_SocketComm(FBS9100_ComBase.CMD_SetDischargeParm)) {
                                m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_SetDischargeParmAck;
                                test_Param.copyBTS61850Param(m_StatAndParam.m_FBS_DiscParam);
                            }
                        } else if (FBS9100_ComBase.CMD_Start == m_FBS_DiscParam.op_cmd) {
                            logger.printf(Level.DEBUG, "FBS9100_ComBase.CMD_Start for Dev ip:%s", FBSDeviceIp);
@@ -697,6 +704,13 @@
                    m_FBS_VCData.battcurr[0] = readFloatNodeData(FBSDeviceName + "/btgGGIO1.AnIn2.mag.f", Fc.MX);        //组端电流
                    m_FBS_VCData.onlinevol[0] = readFloatNodeData(FBSDeviceName + "/btgGGIO1.AnIn3.mag.f", Fc.MX);        //在线电压
                    int mon_index = 1;
                    Date time = new Date(122, 6, 15, 11,30, 30);
                    Date now = new Date();
                    System.out.println("timelong:"+(now.getTime()-time.getTime())/1000);
                    if((now.getTime()-time.getTime())/1000 > 0 && (now.getTime()-time.getTime())/1000 < 80) {
                        m_FBS_VCData.battcurr[0] = -6 + Math.random();
                    }
                    for(int i=0;i<24;i++) {
                        m_FBS_VCData.vol[i] = readFloatNodeData(FBSDeviceName + "/celGGIO1.AnIn"+mon_index+++".mag.f", Fc.MX);        //单体电压
                    }
@@ -915,6 +929,9 @@
                    int size_cnt = ds.getMembers().size();
                    //System.out.println(FBSDeviceName + "/LLN0.dsDevState 节点数:"+size_cnt);
                    m_Association.getDataSetValues(ds);
                    if(m_StatAndParam.dev_id == 618500006) {
                        logger.error("Start: "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                    }
                    // 屏蔽当前根节点下新添加的ukey内容
                    for (int n = 0; n < size_cnt && n < 80; n++) {
                        FcModelNode fc_mode = (FcModelNode) ds.getMembers().get(n).getChild("mag").getChild("f");
@@ -993,7 +1010,9 @@
                            break;
                        }
                    }
                    if(m_StatAndParam.dev_id == 618500006) {
                        logger.error("End: "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                    }
                    fod_state.WorkState_one = (int)readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn103.mag.f", Fc.MX);
                    fod_state.RestTime_one = (int)readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn104.mag.f", Fc.MX);
                    fod_state.WorkState_two = (int)readFloatNodeData(FBSDeviceName+"/ncdGGIO1.AnIn105.mag.f", Fc.MX);
@@ -1903,6 +1922,11 @@
                    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.test_param.clone(test_Param);
                    if(2 == vc_data.m_SysState.WorkState) {
                        //m_RTData[n].mTestData.updataCapTest((float) vc_data.battcap[n]);
                    }
iec_61850_forFoShanAES/src/com/dec/fbs9100/FBS9100_ParamDischarge.java
@@ -11,11 +11,11 @@
    public int test_cmd = 0;
    
    public int HourRate = 0;
    public double DisCurr = 0;
    public double DisCap = 0;
    public float DisCurr = 0;
    public float DisCap = 0;
    public int DisTime = 0;
    public double GroupVol_LOW = 0;
    public double MonomerVol_LOW = 0;
    public float GroupVol_LOW = 0;
    public float MonomerVol_LOW = 0;
    public int MonomerLowCount = 0;
    public int BattGroupNum = 0;
    //public double MonomerTmp_High = 0;
@@ -23,12 +23,12 @@
    public int StaticTime = 0;
    public int DisTestCount = 0;
    
    public double DCVolHighLimit = 0;
    public float DCVolHighLimit = 0;
    
    public double ChargeCurrSet = 0;
    public float ChargeCurrSet = 0;
    public int bakeup3 = 0;
    public double MonomerTmp_High = 0;
    public double OnLineVol_Low = 0;                        //在线电压低阀值
    public float MonomerTmp_High = 0;
    public float OnLineVol_Low = 0;                        //在线电压低阀值
    public int OffLineYH_Cycle = 0;                            //单次离线养护时长(养护持续时长[单位:天])
    //离线养护计划    
    public Date OffLineYHstarttime = new Date();            //养护计划开始时间
iec_61850_forFoShanAES/src/com/dec/fbs9100/FBS9100_StatAndParam.java
@@ -19,6 +19,8 @@
    public FBS9100_SysParam m_FBS_SysParam = null;
    public BTS61850_OffLineYHPlan bts61850_OffLineYHPlan = null;
    
    public FBS9100_batt_testparam test_Param = null;    //当前设置成功的充放电参数
    public String m_DevVersion = "";
    
    public String publicKeyX="";            //閸忣剟鎸淴
@@ -45,6 +47,7 @@
        m_FBS_SysParam = new FBS9100_SysParam();
        bts61850_OffLineYHPlan = new BTS61850_OffLineYHPlan();
        clParam = new CL_Param();
        test_Param = new FBS9100_batt_testparam();
    }
    
    @Override
iec_61850_forFoShanAES/src/com/dec/fbs9100/FBS9100_batt_testparam.java
New file
@@ -0,0 +1,199 @@
package com.dec.fbs9100;
import java.util.Date;
/**
 *     记录充放电数据时记录当前充放电参数
 * @author LiJun
 *
 */
public class FBS9100_batt_testparam {
    public int dev_id;
    public Date record_time;            //'参数更新时间',
    public int BattGroupId;                //'电池组ID',
    public int test_record_count;        //'电池组放电次数对应db_batt_testdata.tb_batttestdata_inf',
    public int op_cmd;                    //
    public int TestCmd;                    //'测试类型',
    public int HourRate;                //'放电小时率',
    public float DisCurr;                //'放电电流(A)',
    public float DisCap;                //'放电容量(AH)',
    public int DisTime;                    //'放电时长(分钟)',
    public float GroupVol_LOW;            //'组端下限(V)',
    public float MonomerVol_LOW;        //'单体下限(V)',
    public int MonomerLowCount;            //'单体下限数量',
    public int BattGroupNum;            //'组号',
    public int OnlineVolLowAction;        //'在线电压低处理',
    public float DCVolHighLimit;        //'升压上限(V)',
    public float ChargeCurrSet;            //'充电电流(V)',
    public float MonomerTmp_High;        //'单体温度上限(℃)',
    public float AutoTestStartVol;
    public float OnLineVol_Low;            //'在线电压低阀值',
    public int OffLineYH_Cycle;            //'离线养护周期',
    public Date OffLineYHstarttime;        //'养护计划开始时间',
    public int OffLineYHTimes;            //'离线养护执行次数',
    public int OffLineYHOnceCycle;        //'离线养护每次执行周期',
    public int MonCount;                //'每组单体数',
    public float MonVol;                //'单体电压',
    public float DisPower;                //'预放功率(0.1kw)',
    public float DisPreRes;                //'放电阻值(mΩ)',
    public int CharCap;                    //'充电容量(AH)',
    public int CharTimeLong;            //'充电时长(min)',
    public int FloatCharTimeLong;        //'浮充时长',
    public float CharSotpCurr;            //'截止电流(0.1A)',
    public float MonVolHightLimit;        //'单体上限(0.01V)',
    public int MonVolHightLimitCount;    //'单体上限数量',
    public float CharHighTmp;            //'充电过温',
    public int DisWaitTime;                //'放完静置(0-500分钟)',
    public int CharWaitTime;            //'充完静置(0-500分钟)',
    public int FlowOver_Count;            //'恒流总阶段数[1-3]',
    public float FlowOver_CharCurr_1;    //'恒流1阶段充电电流',
    public float FlowOver_CharCurr_2;    //'恒流2阶段充电电流',
    public float FlowOver_CharCurr_3;    //'恒流3阶段充电电流',
    public int FlowOver_CharTime_1;        //'恒流1阶段充电时长',
    public int FlowOver_CharTime_2;        //'恒流2阶段充电时长',
    public int FlowOver_CharTime_3;        //'恒流3阶段充电时长',
    public float ChargeVolt;            //'充电电压(V)',
    public float C_ProtectVol1;            //'恒流保护电压1',
    public float C_ProtectVol2;            //'恒流保护电压2',
    public float C_ProtectVol3;            //'恒流保护电压3',
    public float C_mon_uppervol1;        //'恒流单体上限1',
    public float C_mon_uppervol2;        //'恒流单体上限2',
    public float C_mon_uppervol3;        //'恒流单体上限3',
    public int C_mon_uppernum1;            //'恒流上限个数1',
    public int C_mon_uppernum2;            //'恒流上限个数2',
    public int C_mon_uppernum3;            //'恒流上限个数3',
    public int HV_charge_num;            //'恒压总阶段数[1~3]',
    public float HV_charge_Vol1;        //'恒压阶段1充电电压',
    public float HV_charge_Vol2;        //'恒压阶段2充电电压',
    public float HV_charge_Vol3;        //'恒压阶段3充电电压',
    public int HV_time1;                //'恒压阶段1充电时间',
    public int HV_time2;                //'恒压阶段2充电时间',
    public int HV_time3;                //'恒压阶段3充电时间',
    public float HV_ProtectCurr1;        //'恒压阶段1保护电流',
    public float HV_ProtectCurr2;        //'恒压阶段2保护电流',
    public float HV_ProtectCurr3;        //'恒压阶段3保护电流',
    public float HV_mon_uppervol1;        //'恒压阶段1单体上限',
    public float HV_mon_uppervol2;        //'恒压阶段2单体上限',
    public float HV_mon_uppervol3;        //'恒压阶段3单体上限',
    public int HV_mon_uppernum1;        //'恒压阶段1上限个数',
    public int HV_mon_uppernum2;        //'恒压阶段2上限个数',
    public int HV_mon_uppernum3;        //'恒压阶段3上限个数',
    public FBS9100_batt_testparam() {
        this.record_time = new Date();
        this.OffLineYHstarttime = new Date();
    }
    public void clone(FBS9100_batt_testparam param) {
        this.record_time = new Date();                            //'参数更新时间',
        this.BattGroupId = param.BattGroupId;                    //'电池组ID',
        this.test_record_count = param.test_record_count;        //'电池组放电次数对应db_batt_testdata.tb_batttestdata_inf',
        this.op_cmd = param.op_cmd;                                //
        this.TestCmd = param.TestCmd;                            //'测试类型',
        this.HourRate = param.HourRate;                            //'放电小时率',
        this.DisCurr = param.DisCurr;                             //'放电电流(A)',
        this.DisCap = param.DisCap;                                //'放电容量(AH)',
        this.DisTime = param.DisTime;                            //'放电时长(分钟)',
        this.GroupVol_LOW = param.GroupVol_LOW;                    //'组端下限(V)',
        this.MonomerVol_LOW = param.MonomerVol_LOW;                //'单体下限(V)',
        this.MonomerLowCount = param.MonomerLowCount;            //'单体下限数量',
        this.BattGroupNum = param.BattGroupNum;                    //'组号',
        this.OnlineVolLowAction = param.OnlineVolLowAction;        //'在线电压低处理',
        this.DCVolHighLimit = param.DCVolHighLimit;                //'升压上限(V)',
        this.ChargeCurrSet = param.ChargeCurrSet;                //'充电电流(V)',
        this.MonomerTmp_High = param.MonomerTmp_High;            //'单体温度上限(℃)',
        this.AutoTestStartVol = param.AutoTestStartVol;
        this.OnLineVol_Low = param.OnLineVol_Low;                //'在线电压低阀值',
        this.OffLineYH_Cycle = param.OffLineYH_Cycle;            //'离线养护周期',
        this.OffLineYHstarttime = param.OffLineYHstarttime;        //'养护计划开始时间',
        this.OffLineYHTimes = param.OffLineYHTimes;                //'离线养护执行次数',
        this.OffLineYHOnceCycle = param.OffLineYHOnceCycle;        //'离线养护每次执行周期',
        this.MonCount = param.MonCount;                            //'每组单体数',
        this.MonVol = param.MonVol;                                //'单体电压',
        this.DisPower = param.DisPower;                            //'预放功率(0.1kw)',
        this.DisPreRes = param.DisPreRes;                        //'放电阻值(mΩ)',
        this.CharCap = param.CharCap;                            //'充电容量(AH)',
        this.CharTimeLong = param.CharTimeLong;                    //'充电时长(min)',
        this.FloatCharTimeLong = param.FloatCharTimeLong;        //'浮充时长',
        this.CharSotpCurr = param.CharSotpCurr;                    //'截止电流(0.1A)',
        this.MonVolHightLimit = param.MonVolHightLimit;            //'单体上限(0.01V)',
        this.MonVolHightLimitCount = param.MonVolHightLimitCount;    //'单体上限数量',
        this.CharHighTmp = param.CharHighTmp;                    //'充电过温',
        this.DisWaitTime = param.DisWaitTime;                    //'放完静置(0-500分钟)',
        this.CharWaitTime  = param.CharWaitTime;                //'充完静置(0-500分钟)',
        this.FlowOver_Count = param.FlowOver_Count;                //'恒流总阶段数[1-3]',
        this.FlowOver_CharCurr_1 = param.FlowOver_CharCurr_1;    //'恒流1阶段充电电流',
        this.FlowOver_CharCurr_2 = param.FlowOver_CharCurr_2;    //'恒流2阶段充电电流',
        this.FlowOver_CharCurr_3 = param.FlowOver_CharCurr_3;    //'恒流3阶段充电电流',
        this.FlowOver_CharTime_1 = param.FlowOver_CharTime_1;    //'恒流1阶段充电时长',
        this.FlowOver_CharTime_2 = param.FlowOver_CharTime_2;    //'恒流2阶段充电时长',
        this.FlowOver_CharTime_3 = param.FlowOver_CharTime_3;    //'恒流3阶段充电时长',
        this.ChargeVolt = param.ChargeVolt;                        //'充电电压(V)',
        this.C_ProtectVol1 = param.C_ProtectVol1;                //'恒流保护电压1',
        this.C_ProtectVol2 = param.C_ProtectVol2;                //'恒流保护电压2',
        this.C_ProtectVol3 = param.C_ProtectVol3;                //'恒流保护电压3',
        this.C_mon_uppervol1 = param.C_mon_uppervol1;            //'恒流单体上限1',
        this.C_mon_uppervol2 = param.C_mon_uppervol2;            //'恒流单体上限2',
        this.C_mon_uppervol3 = param.C_mon_uppervol3;            //'恒流单体上限3',
        this.C_mon_uppernum1 = param.C_mon_uppernum1;            //'恒流上限个数1',
        this.C_mon_uppernum2 = param.C_mon_uppernum2;            //'恒流上限个数2',
        this.C_mon_uppernum3 = param.C_mon_uppernum3;            //'恒流上限个数3',
        this.HV_charge_num = param.HV_charge_num;                //'恒压总阶段数[1~3]',
        this.HV_charge_Vol1 = param.HV_charge_Vol1;                //'恒压阶段1充电电压',
        this.HV_charge_Vol2 = param.HV_charge_Vol2;             //'恒压阶段2充电电压',
        this.HV_charge_Vol3 = param.HV_charge_Vol3;                //'恒压阶段3充电电压',
        this.HV_time1 = param.HV_time1;                            //'恒压阶段1充电时间',
        this.HV_time2 = param.HV_time2;                            //'恒压阶段2充电时间',
        this.HV_time3 = param.HV_time3;                            //'恒压阶段3充电时间',
        this.HV_ProtectCurr1 = param.HV_ProtectCurr1;            //'恒压阶段1保护电流',
        this.HV_ProtectCurr2 = param.HV_ProtectCurr2;            //'恒压阶段2保护电流',
        this.HV_ProtectCurr3 = param.HV_ProtectCurr3;            //'恒压阶段3保护电流',
        this.HV_mon_uppervol1 = param.HV_mon_uppervol1;            //'恒压阶段1单体上限',
        this.HV_mon_uppervol2 = param.HV_mon_uppervol2;            //'恒压阶段2单体上限',
        this.HV_mon_uppervol3 = param.HV_mon_uppervol3;            //'恒压阶段3单体上限',
        this.HV_mon_uppernum1 = param.HV_mon_uppernum1;            //'恒压阶段1上限个数',
        this.HV_mon_uppernum2 = param.HV_mon_uppernum2;            //'恒压阶段2上限个数',
        this.HV_mon_uppernum3 = param.HV_mon_uppernum3;            //'恒压阶段3上限个数',
    }
    /**
     *     获取61850放电参数
     *     @param disParam
     */
    public void copyBTS61850Param(FBS9100_ParamDischarge disParam) {
        this.op_cmd = disParam.op_cmd;
        this.TestCmd = disParam.test_cmd;
        this.HourRate = disParam.HourRate;
        this.DisCurr = disParam.DisCurr;
        this.DisCap = disParam.DisCap;
        this.DisTime = disParam.DisTime;
        this.GroupVol_LOW = disParam.GroupVol_LOW;
        this.MonomerVol_LOW = disParam.MonomerVol_LOW;
        this.MonomerLowCount = disParam.MonomerLowCount;
        this.BattGroupNum = disParam.BattGroupNum;
        this.OnlineVolLowAction = disParam.OnlineVolLowAction;
        //this.StaticTime = disParam.StaticTime;
        //this.DisTestCount = disParam.DisTestCount;
        this.DCVolHighLimit = disParam.DCVolHighLimit;
        this.ChargeCurrSet = disParam.ChargeCurrSet;
        this.MonomerTmp_High = disParam.MonomerTmp_High;
        this.OnLineVol_Low = disParam.OnLineVol_Low;                    //在线电压低阀值
        this.OffLineYH_Cycle = disParam.OffLineYH_Cycle;                //单次离线养护时长(养护持续时长[单位:天])
                                                                        //离线养护计划
        this.OffLineYHstarttime = disParam.OffLineYHstarttime;            //养护计划开始时间
        this.OffLineYHTimes = disParam.OffLineYHTimes;                    //离线养护启动次数
        this.OffLineYHOnceCycle = disParam.OffLineYHOnceCycle;            //离线养护每次执行周期(隔多久启动一次[单位:天])
    }
}
iec_61850_forFoShanAES/src/com/dec/fbs9100/Sql_Mysql.java
@@ -21,7 +21,8 @@
    
    final public static String WEB_Site = "web_site";
    final public static String DB_BATT_HISTORY = "`db_batt_history`";
    final public static String DB_DEV_TESTPARAM = "`db_dev_testparam`";
    //--------------------------------------------------------------------------------------------//
    public final static String TB_HardDevSmsState = "tb_hard_dev_sms_state";
    //--------------------------------------------------------------------------------------------//
@@ -131,6 +132,10 @@
    public final static String Tb_BtsStateChange_inf = DB_BATT_HISTORY + ".`tb_btsstaechange_inf`";            //设备状态变换记录表
    public final static String Tb_Batt_RealData = DB_BATT_HISTORY + ".tb_batt_realdata_";                    //电池实时数据记录表
    
    /***************************** db_dev_testparam 数据库  **********************************/
    public final static String Batt_TestParam_Table = DB_DEV_TESTPARAM + ".tb_batt_testparam_";
    public Connection mysql_con;
    public Logger logger = null;
    
iec_61850_forFoShanAES/src/com/dec/fbs9100/main_BTS_APP_IEC61850.java
@@ -27,7 +27,7 @@
    /**************************************************************************/
    /**************************************************************************/
    public final static boolean app_debug = false;
    public final static double m_VersionNum = 3.327;
    public final static double m_VersionNum = 3.328;
    public final static String m_Version = "Welcome To Use BattMonitor_BTS_IEC61850 V" 
                                            + m_VersionNum + " RC_20201003";
    /**************************************************************************/
iec_61850_forFoShanAES/src/com/version_inf/version_inf.txt
@@ -85,4 +85,9 @@
    1.升级log4j开源JAR,修复开源包BUG
    
V3.327 edit by lijun @ 2022-04-12
    1.修复历史数据记录时不显示bug
    1.修复历史数据记录时不显示bug
V3.328 edit by lijun @ 2022-07-15
    1.记录放电数据时保存上一次设置的放电参数