定制版本逆变电源通讯程序[增加干节点状态读取和母联开关状态读取以及防雷显示]
V10.638 edit at date 2021-09-14 lijun
1.新增锂电BTS设备相关信息读取
①设备对接命令接口
CMD_GetLiDCDCParam = 0x8B; //读取锂电DCDC参数
CMD_SetLiDCDCParam = 0x8C; //设置锂电DCDC参数
CMD_GetPbDCDCParam = 0x8D; //读取铅酸DCDC参数
CMD_SetPbDCDCParam = 0x8E; //设置铅酸DCDC参数
CMD_GetSXDCDCData = 0x8F; //读取双向DCDC内部数据
CMD_GetLiBMSData = 0x95; //读取锂电池BMS模拟量
CMD_GetLiBMSState = 0x96; //读取锂电池BMS告警量

②平台对接接口
CMD_GetLiDCDCParam = 0x8B; //读取锂电DCDC参数
CMD_GetLiDCDCParam_Ack = 0x8D; //读取锂电DCDC参数成功
CMD_SetLiDCDCParam = 0x8C; //设置锂电DCDC参数
CMD_SetLiDCDCParam_Ack = 0x8E; //设置锂电DCDC参数成功
CMD_GetSXDCDCData = 0x8F; //读取双向DCDC内部数据
CMD_GetSXDCDCData_Ack = 0x92; //读取双向DCDC内部数据成功
CMD_GetLiBMSData = 0x95; //读取锂电池BMS模拟量
CMD_GetLiBMSData_Ack = 0x93; //读取锂电池BMS模拟量成功
CMD_GetLiBMSState = 0x96; //读取锂电池BMS告警量
CMD_GetLiBMSState_Ack = 0x94; //读取锂电池BMS告警量成功
2.电池参数新增锂电信息读取
10个文件已修改
4个文件已添加
116581 ■■■■■ 已修改文件
BattMonitor_FBS9100S_Inverter/batt_ms_x64_fbsdev_logs/error.log 115225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/battmonitor/sql/Sql_Mysql.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/comm/FBS9100S_SocketClient2.java 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/comm/FBS9100_Task_Thread_SQL.java 600 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100S_LIBMS_AlarmState.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100S_LiBMS_AnalogData.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100S_SX_DCDC_Data.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100S_SX_DCDC_Param.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100_ComBase.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100_DeviceInf.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100_JuHengParam.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100_ParamBatt.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/com/version_inf/version_inf.txt 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/src/main/main_MonitorServer_FBS9100S.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Inverter/batt_ms_x64_fbsdev_logs/error.log
Diff too large
BattMonitor_FBS9100S_Inverter/src/com/battmonitor/sql/Sql_Mysql.java
@@ -123,11 +123,18 @@
    public final static String UserPermitGroupTable = DB_USER + ".`tb_user_permitgroup`";
    public final static String UserPermitGroupDataTable = DB_USER + ".`tb_user_permitgroup_data`";
    public final static String UserJieJiaRiTable = DB_USER + ".`tb_user_jiejiari`";
    public final static String Tb_Batt_RealData = DB_BATT_HISTORY + ".tb_batt_realdata_";                    //电池实时数据记录表
    public final static String Tb_Batt_RealData = DB_BATT_HISTORY + ".tb_batt_realdata_";                            //电池实时数据记录表
    
    public final static String FBS9100s_stemnode_state_Table = DB_RamDB + ".`tb_fbs9100s_stemnode_state`";            //干节点状态表
    public final static String FBS9100s_buscouple_state_Table = DB_RamDB + ".`tb_fbs9100s_buscouple_state`";        //母联开关状态表
    public final static String FBS61850_jhstate_Table = DB_RamDB + ".`tb_61850_jhstate`";                            //均衡供电模块信息
    public final static String Li9130_Dcdc_Param_Table     = DB_RamDB + ".`tb_li9130_dcdc_param`";                        //锂电BTS的DCDC模块参数表
    public final static String Li9130_Dcdc_Data_Table     = DB_RamDB + ".`tb_li9130_dcdc_data`";                        //锂电BTS的DCDC模块信息表
    public final static String Li9130_Bms_State_Table    = DB_RamDB + ".`tb_li9130_bms_state`";                        //锂电BTS的BMS信息表
    public final static String Li9130_Bms_Alm_Table     = DB_RamDB + ".`tb_li9130_bms_alm`";                        //锂电BTS的BMS告警信息表
    //--------------------------------------------------------------------------------------------//
    //--------------------------------------------------------------------------------------------//
    public Connection mysql_con = null;
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/comm/FBS9100S_SocketClient2.java
@@ -24,14 +24,19 @@
import com.dev.btse.data.ComFn;
import com.dev.btse.data.Ecb_Aes;
import com.dev.btse.data.FBS9100S_BusCoupleState;
import com.dev.btse.data.FBS9100S_LIBMS_AlarmState;
import com.dev.btse.data.FBS9100S_LiBMS_AnalogData;
import com.dev.btse.data.FBS9100S_NT_DCDC_Data;
import com.dev.btse.data.FBS9100S_NT_DCDC_State;
import com.dev.btse.data.FBS9100S_NiBian_Data;
import com.dev.btse.data.FBS9100S_SX_DCDC_Data;
import com.dev.btse.data.FBS9100S_SX_DCDC_Param;
import com.dev.btse.data.FBS9100S_StemNode_State;
import com.dev.btse.data.FBS9100_CMCC_Power;
import com.dev.btse.data.FBS9100_Cmd;
import com.dev.btse.data.FBS9100_ComBase;
import com.dev.btse.data.FBS9100_ComBuf;
import com.dev.btse.data.FBS9100_Crc16;
import com.dev.btse.data.FBS9100_DeviceInf;
import com.dev.btse.data.FBS9100_JHPowerState;
import com.dev.btse.data.FBS9100_JuHengParam;
@@ -84,6 +89,10 @@
    private FBS9100S_StemNode_State mStemNode_State = null;
    private FBS9100S_BusCoupleState mBusCouple_State = null;
    
    private FBS9100S_SX_DCDC_Data[] m_SX_DCDC_DataList = null;
    private FBS9100S_LIBMS_AlarmState[] m_LiBMS_AlarmStates = null;
    private FBS9100S_LiBMS_AnalogData[] m_LiBMS_AnalogDatas = null;
    private FBS9100_JHPowerState mJHPowerState = null;
    
    private FBS9100_JuHengParam mJHParam = null;
@@ -91,9 +100,9 @@
    private Socket socket = null;
    private ByteBuffer bytebuffer_for_socket_RX = ByteBuffer.allocate(1500);
    private int m_BattMonCount = 0;
    private int m_BTSDevSoftWareVersion = 0;
    private int m_BTSDevSoftWareVersion = 0;
    private int m_BTSDevHardwareVersion = 0;
    private int m_BTSDevSoftType = 0;
    private int m_BTSDevSoftType = 0;                        //当前BTS版本
    
    private static final String TAG = "FBS9100S_Thread";
    private MysqlConnPool m_ConnPool = null;
@@ -194,6 +203,10 @@
                        }
                        
                        if(true == reg_in_st) {
                            //当前设备协议加密类型true:加密;false:不加密
                            logger.debug("dev_id:"+m_StatAndParam.dev_id+" Dev Encryp Type ------>" + this.DevFBS9100_Encry_en);
                            logger.debug("dev_id:"+m_StatAndParam.dev_id+" Dev Type ------>" + this.m_BTSDevSoftType);
                            if(m_Data.getItem(i).getDevRegCode().length() > 8) {
                                if(m_StatAndParam.dev_reg_code.equals(m_Data.getItem(i).getDevRegCode())) {
                                    reg_in_st = true;
@@ -282,10 +295,28 @@
            FBS9100_Task_Thread_SQL.insertFBS9100SysParam_Table(m_ConnPool, m_StatAndParam.dev_id);
            
            
            int group_max = FBS9100_ComBase.BattGroupCountMax;
            for(int n=0; n<group_max; n++) {
                m_RTData[n] = null;
            }
            m_SX_DCDC_DataList = new FBS9100S_SX_DCDC_Data[FBS9100_ComBase.LIBTS_DCDC_CountMax];
            m_LiBMS_AlarmStates = new FBS9100S_LIBMS_AlarmState[FBS9100_ComBase.LIBTS_DCDC_CountMax];
            m_LiBMS_AnalogDatas = new FBS9100S_LiBMS_AnalogData[FBS9100_ComBase.LIBTS_DCDC_CountMax];
            for(int i=0;i<m_SX_DCDC_DataList.length;i++) {
                m_SX_DCDC_DataList[i] = new FBS9100S_SX_DCDC_Data();
                m_LiBMS_AlarmStates[i] = new FBS9100S_LIBMS_AlarmState();
                m_LiBMS_AnalogDatas[i] = new FBS9100S_LiBMS_AnalogData();
            }
            if(m_BTSDevSoftType == FBS9100_ComBase.BTSE_DevType_LIBTS) {
                //锂电BTS默认插入数据
                FBS9100_Task_Thread_SQL.insertLi9130_Bms_Alm(m_ConnPool, m_StatAndParam.dev_id);
                FBS9100_Task_Thread_SQL.insertLi9130_Bms_State(m_ConnPool, m_StatAndParam.dev_id);
                FBS9100_Task_Thread_SQL.insertLi9130DcDcData_Table(m_ConnPool, m_StatAndParam.dev_id);
                FBS9100_Task_Thread_SQL.insertLi9130DcDcParam(m_ConnPool, m_StatAndParam.dev_id);
            }
            
            for(int n=0; n < AL_RTdata.getItemCount(); n++) {
                BattData_RT bt_data = AL_RTdata.getItem(n);
@@ -569,23 +600,26 @@
                        
                    }
                    
                    /**
                     *     常规BTS新增均衡供电信息和均衡电流信息读取
                     * 2021-08-31 @lijun 假负载设备新增均衡供电模块状态读取
                     *     假负载设备新增均衡供电模块状态读取
                     */
                    if(0 == (DevReadCount%(15*DevReadCount_Rate))) {
                        //读取均衡供电模块信息
                        //System.err.println("读取均衡供电模块信息");
                        SocketComm(FBS9100_ComBase.CMD_GetJunHengState, ByteBuffer.allocate(0), socket);
                    }
                    //--------------------------- 读取均衡电流数据 --------------------------------------//
                    if(0 == (DevReadCount%(39*DevReadCount_Rate))) {
                        //System.out.println("读取均衡电流");
                        SocketComm(FBS9100_ComBase.CMD_GetMonomerJHCUR, ByteBuffer.allocate(0), socket);
                    }
                    if(m_StatAndParam.dev_id/1000000 == 911) {
                        /**
                         * 2021-08-31 @lijun 假负载设备新增均衡供电模块状态读取
                         * 假负载设备新增均衡供电模块状态读取
                         */
                        if(0 == (DevReadCount%(15*DevReadCount_Rate))) {
                            //读取均衡供电模块信息
                            //System.err.println("读取均衡供电模块信息");
                            SocketComm(FBS9100_ComBase.CMD_GetJunHengState, ByteBuffer.allocate(0), socket);
                        }
                        //--------------------------- 读取均衡电流数据 --------------------------------------//
                        if(0 == (DevReadCount%(39*DevReadCount_Rate))) {
                            //System.out.println("读取均衡电流");
                            SocketComm(FBS9100_ComBase.CMD_GetMonomerJHCUR, ByteBuffer.allocate(0), socket);
                        }
                        //假负载设备
                        //--------------------------- 读取漏液电压数据 --------------------------------------//
                        if(0 == (DevReadCount%(40*DevReadCount_Rate))) {
                            //System.out.println("读取漏液电压");
@@ -593,6 +627,64 @@
                        }
                        
                    }
                    /******************  锂电BTS  ****************************************************************/
                    if(FBS9100_ComBase.BTSE_DevType_LIBTS == m_BTSDevSoftType) {
                        /************** 锂电BTS的DCDC参数信息读取 ********************************************************/
                        FBS9100_Task_Thread_SQL.queryLi9130DcDcParamCmdBydev_id(m_ConnPool, m_StatAndParam);
                        if(m_StatAndParam.op_cmd_ack == FBS9100_ComBase.CMD_NULL) {
                            if(m_StatAndParam.op_cmd == FBS9100_ComBase.CMD_GetLiDCDCParam) {
                                int read_cmd = FBS9100_ComBase.CMD_GetLiDCDCParam;
                                if(m_StatAndParam.test_type == 1) {
                                    //读取铅酸DCDC参数
                                    read_cmd = FBS9100_ComBase.CMD_GetPbDCDCParam;
                                }
                                SocketComm(read_cmd, ByteBuffer.allocate(0), socket);
                                logger.warn("DevId:" + m_StatAndParam.dev_id + " 读取锂电DCDC模块参数");
                            }else if(m_StatAndParam.op_cmd == FBS9100_ComBase.CMD_SetLiDCDCParam) {
                                int read_cmd = FBS9100_ComBase.CMD_SetLiDCDCParam;        //设置锂电DCDC参数
                                if(m_StatAndParam.test_type == 1) {
                                    //设置铅酸DCDC参数
                                    read_cmd = FBS9100_ComBase.CMD_SetPbDCDCParam;
                                }
                                FBS9100S_SX_DCDC_Param tmp_dcdc_param = new FBS9100S_SX_DCDC_Param();
                                FBS9100_Task_Thread_SQL.queryLiDCDCParamById(m_ConnPool,m_StatAndParam,tmp_dcdc_param);
                                SocketComm(read_cmd, tmp_dcdc_param.getByteBuffer(), socket);
                                tmp_dcdc_param = null;
                                logger.warn("DevId:" + m_StatAndParam.dev_id + " 设置锂电BTS主机DCDC工作设置参数"
                                        + "\n param:" + tmp_dcdc_param);
                            }
                        }
                        /************** 锂电BTS的DCDC模块信息读取 ********************************************************/
                        FBS9100_Task_Thread_SQL.queryLi9130DcDcDataCmdBydev_id(m_ConnPool, m_StatAndParam);
                        if(m_StatAndParam.op_cmd_ack == FBS9100_ComBase.CMD_NULL) {
                            if(m_StatAndParam.op_cmd == FBS9100_ComBase.CMD_GetSXDCDCData) {
                                SocketComm(FBS9100_ComBase.CMD_GetSXDCDCData, ByteBuffer.allocate(0), socket);
                                logger.warn("DevId:" + m_StatAndParam.dev_id + " 读取锂电DCDC模块信息");
                            }
                        }
                        /************** 锂电BTS的BMS模块信息读取 ********************************************************/
                        FBS9100_Task_Thread_SQL.queryLi9130_Bms_StateCmdBydev_id(m_ConnPool, m_StatAndParam);
                        if(m_StatAndParam.op_cmd_ack == FBS9100_ComBase.CMD_NULL) {
                            if(m_StatAndParam.op_cmd == FBS9100_ComBase.CMD_GetLiBMSData) {
                                SocketComm(FBS9100_ComBase.CMD_GetLiBMSData, ByteBuffer.allocate(0), socket);
                                logger.warn("DevId:" + m_StatAndParam.dev_id + " 读取锂电BMS状态信息");
                            }
                        }
                        sleep(10);
                        /************** 锂电BTS的BMS模块告警信息读取 ********************************************************/
                        FBS9100_Task_Thread_SQL.queryLi9130_Bms_AlmCmdBydev_id(m_ConnPool, m_StatAndParam);
                        if(m_StatAndParam.op_cmd_ack == FBS9100_ComBase.CMD_NULL) {
                            if(m_StatAndParam.op_cmd == FBS9100_ComBase.CMD_GetLiBMSState) {
                                logger.warn("DevId:" + m_StatAndParam.dev_id + " 读取锂电BMS状态告警信息");
                                SocketComm(FBS9100_ComBase.CMD_GetLiBMSState, ByteBuffer.allocate(0), socket);
                            }
                        }
                    }
                    
                    //---------------------------------------------------------------------------------//
                    if(DevReadCount >= (50*DevReadCount_Rate)) {
@@ -679,6 +771,7 @@
                    if(aes_en) {                        
                        cipher_tx_t = new byte[plain_tx_t.length];
                        my_aes.ecb_encrypt(plain_tx_t, cipher_tx_t, plain_tx_t.length);
                        //System.out.println("发送加密数据:"+ComFn.bytesToHexString(cipher_tx_t, cipher_tx_t.length));
                    }else {
                        cipher_tx_t = plain_tx_t;
                    }
@@ -747,7 +840,8 @@
                        //                    + " GPRS RF Level:" + m_StatAndParam.m_GPRS_CSQ);
                    }
                } else {
                    if(aes_en) {
                    if(aes_en) {
                        //System.out.println("接收数据:"+ComFn.bytesToHexString(cipher_buf,cipher_buf.length));
                        my_aes.ecb_decrypt(cipher_buf, plain_buf, cipher_buf.length);
                    }else {
                        plain_buf = cipher_buf;
@@ -878,6 +972,7 @@
        
        if(true == m_FBS_Cmd.putByteBuffer(bf))
        {
            if((FBS9100_ComBase.CMD_StartDischarge == m_FBS_Cmd.CMD)
                ||(FBS9100_ComBase.CMD_StartResDischarge == m_FBS_Cmd.CMD)
                ||(FBS9100_ComBase.CMD_StartCharge == m_FBS_Cmd.CMD)
@@ -1089,7 +1184,6 @@
                if(true == deviceinf.putByteBuffer(bf)) {
                    m_BTSDevSoftWareVersion = deviceinf.SoftwareVersion;
                    m_BTSDevHardwareVersion = deviceinf.HardwareVersion;
                    m_BTSDevSoftType = deviceinf.DeviceType;
                    m_StatAndParam.m_DevVersion = String.format("D:%d,V%d.%02d.%02d", 
                                                    deviceinf.DeviceType,
                                                    deviceinf.DeviceVersion,
@@ -1100,6 +1194,8 @@
                                            + deviceinf.BackUp5*256*256
                                            + deviceinf.BackUp4*256
                                            + deviceinf.BackUp3;
                    m_BTSDevSoftType = deviceinf.getBTSDevSoftType();
                    
                    String tmp_str = "";
                    for(int n=0; n<4; n++) {
@@ -1160,7 +1256,6 @@
            }else if(FBS9100_ComBase.CMD_ReadJunHengParam == m_FBS_Cmd.CMD) {
                //读取均衡参数成功
                if(true == mJHParam.putByteBuffer(bf)) {
                    System.out.println("");
                    m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_GetJuHengParamAck;
                    FBS9100_Task_Thread_SQL.updateFbs9100JHParamBydev_id(m_ConnPool, m_StatAndParam, mJHParam);
                    isSuccess = true;
@@ -1174,6 +1269,56 @@
                    isSuccess = true;
                }
                tmp_jh_param = null;
            }else if(FBS9100_ComBase.CMD_GetLiDCDCParam == m_FBS_Cmd.CMD ||
                    FBS9100_ComBase.CMD_GetPbDCDCParam == m_FBS_Cmd.CMD) {
                FBS9100S_SX_DCDC_Param tmp_dcdc_param = new FBS9100S_SX_DCDC_Param();
                if(tmp_dcdc_param.putByteBuffer(bf)) {
                    //读取锂电BTS的DCDC参数成功
                    m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_GetLiDCDCParam_Ack;
                    FBS9100_Task_Thread_SQL.updateLi_DCDCParamBydev_id(m_ConnPool, m_StatAndParam, tmp_dcdc_param);
                    isSuccess = true;
                }
                tmp_dcdc_param = null;
            }else if(FBS9100_ComBase.CMD_SetLiDCDCParam == m_FBS_Cmd.CMD ||
                    FBS9100_ComBase.CMD_SetPbDCDCParam == m_FBS_Cmd.CMD) {
                FBS9100S_SX_DCDC_Param tmp_dcdc_param = new FBS9100S_SX_DCDC_Param();
                if(tmp_dcdc_param.putByteBuffer(bf)) {
                    //读取锂电BTS的DCDC参数成功
                    m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_SetLiDCDCParam_Ack;
                    FBS9100_Task_Thread_SQL.updateLi_DCDCParamBydev_id(m_ConnPool, m_StatAndParam, tmp_dcdc_param);
                    isSuccess = true;
                }
                tmp_dcdc_param = null;
            } else if(FBS9100_ComBase.CMD_GetSXDCDCData == m_FBS_Cmd.CMD) {
                getLiDCDCDataFromCommBuf(bf);
                m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_GetSXDCDCData_Ack;
                FBS9100_Task_Thread_SQL.updateLi9130_Dcdc_DataBydev_id(m_ConnPool, m_StatAndParam, m_SX_DCDC_DataList);
                isSuccess = true;
            } else if(FBS9100_ComBase.CMD_GetLiBMSData == m_FBS_Cmd.CMD) {
                getLiBMSANALOGDataFromCommBuf(bf);
                m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_GetLiBMSData_Ack;
                FBS9100_Task_Thread_SQL.updateLi9130_Bms_StateBydev_id(m_ConnPool, m_StatAndParam, m_LiBMS_AnalogDatas);
                isSuccess = true;
                /*FBS9100S_LiBMS_AnalogData tmp_bms_data = new FBS9100S_LiBMS_AnalogData();
                System.err.println("读取BMS信息成功");
                if(tmp_bms_data.putByteBuffer(bf)) {
                    m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_GetLiBMSData_Ack;
                    FBS9100_Task_Thread_SQL.updateLi9130_Bms_StateBydev_id(m_ConnPool, m_StatAndParam, tmp_bms_data);
                    isSuccess = true;
                   }
                tmp_bms_data = null;*/
            }else if(FBS9100_ComBase.CMD_GetLiBMSState == m_FBS_Cmd.CMD) {
                getLiBMSAlarmDataFromCommBuf(bf);
                m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_GetLiBMSState_Ack;
                FBS9100_Task_Thread_SQL.updateLi9130_Bms_AlmBydev_id(m_ConnPool, m_StatAndParam, m_LiBMS_AlarmStates);
                isSuccess = true;
                /*FBS9100S_LIBMS_AlarmState tmp_bms_alm = new FBS9100S_LIBMS_AlarmState();
                if(tmp_bms_alm.putByteBuffer(bf)) {
                    m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_GetLiBMSState_Ack;
                    FBS9100_Task_Thread_SQL.updateLi9130_Bms_AlmBydev_id(m_ConnPool, m_StatAndParam, tmp_bms_alm);
                    isSuccess = true;
                }
                tmp_bms_alm = null;*/
            }
        }
        return isSuccess;
@@ -1341,7 +1486,52 @@
        }
    }
    /*********************************************************************************************/
    /*****************   解析锂电DCDC模块信息   ****************************************************************************/
    private void getLiDCDCDataFromCommBuf(ByteBuffer bf){
        System.out.println("开始读取锂电DCDC模块信息"+bf.limit());
        System.err.println(ComFn.bytesToHexString(bf.array(), bf.array().length));
        for(int i=0;i<m_SX_DCDC_DataList.length;i++){
            if(null != m_SX_DCDC_DataList[i]) {
                m_SX_DCDC_DataList[i].putByteBuffer(bf);
            }
        }
    }
    
    /*****************   解析锂电4个BMS模块信息   ****************************************************************************/
    private void getLiBMSANALOGDataFromCommBuf(ByteBuffer bf) {
        //System.out.println("开始读取BMS模块信息"+bf.limit());
        ByteBuffer tmpbuf = bf;
        int crc0 = tmpbuf.getShort(FBS9100S_LiBMS_AnalogData.TOTAL_BYTE_LEN-2) & 0xFFFF;
        int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, FBS9100S_LiBMS_AnalogData.TOTAL_BYTE_LEN-2);
        if(crc0 != crc1) {
            //System.out.println(crc0 +"!="+crc1);
            return;
        }
        for(int i=0;i<m_LiBMS_AnalogDatas.length;i++){
            if(null != m_LiBMS_AnalogDatas[i]) {
                m_LiBMS_AnalogDatas[i].putByteBuffer(bf);
            }
        }
    }
    /*****************   解析锂电4个BMS模块告警信息   ****************************************************************************/
    private void getLiBMSAlarmDataFromCommBuf(ByteBuffer bf) {
        System.out.println("开始读取BMS模块告警信息"+bf.limit());
        ByteBuffer tmpbuf = bf;
        int crc0 = tmpbuf.getShort(FBS9100S_LIBMS_AlarmState.TOTAL_BYTE_LEN-2) & 0xFFFF;
        int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, FBS9100S_LIBMS_AlarmState.TOTAL_BYTE_LEN-2);
        if(crc0 != crc1) {
            System.out.println(crc0+"=="+crc1);
            return;
        }
        for(int i=0;i<m_LiBMS_AlarmStates.length;i++){
            if(null != m_LiBMS_AlarmStates[i]) {
                m_LiBMS_AlarmStates[i].putByteBuffer(bf);
            }
        }
    }
    /*********************************************************************************************/
    private void getFBS9100MonResData(int cmd, FBS9100_ResCapData res_data)
    {
        int mon_index = 0;
@@ -1373,8 +1563,7 @@
                            //漏液电压
                            m_RTData[n].al_MonVol.get(index).mon_LY_vol = (float) res_data.m_DATA[mon_index];
                            //System.out.println((m_RTData[n].al_MonVol));
                        }
                        }
                        mon_index++;
                    }
                }
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/comm/FBS9100_Task_Thread_SQL.java
@@ -10,9 +10,13 @@
import com.battmonitor.sql.MysqlConnPool;
import com.battmonitor.sql.Sql_Mysql;
import com.dev.btse.data.FBS9100S_BusCoupleState;
import com.dev.btse.data.FBS9100S_LIBMS_AlarmState;
import com.dev.btse.data.FBS9100S_LiBMS_AnalogData;
import com.dev.btse.data.FBS9100S_NT_DCDC_Data;
import com.dev.btse.data.FBS9100S_NT_DCDC_State;
import com.dev.btse.data.FBS9100S_NiBian_Data;
import com.dev.btse.data.FBS9100S_SX_DCDC_Data;
import com.dev.btse.data.FBS9100S_SX_DCDC_Param;
import com.dev.btse.data.FBS9100S_StemNode_State;
import com.dev.btse.data.FBS9100_CMCC_Power;
import com.dev.btse.data.FBS9100_ComBase;
@@ -2711,7 +2715,7 @@
            if(res.next()) {
                if(null != jh_param) {
                    //param.m_FBS_SystemParam.op_cmd = res.getInt("op_cmd");
                    jh_param.jhSetVolt = res.getInt("JunHeng_Enabled");            //均衡启用使能
                    jh_param.jhSetVolt = res.getDouble("JunHeng_Enabled");        //均衡启用使能
                    jh_param.jhVoltLimit = res.getDouble("JunHeng_StVol");        //均衡停止电压阀值
                    jh_param.jhCurrLimit = res.getDouble("JunHeng_StCurr");        //均衡停止电流阀值
                }
@@ -2723,4 +2727,598 @@
        }
    }
    /************************************************************************************************/
    /**
     *     插入当前设备的默认数据
     * @param con_pool
     * @param dev_id
     */
    public static void insertLi9130DcDcParam(MysqlConnPool con_pool, int dev_id) {
        String sql_str = " SELECT op_cmd from " + Sql_Mysql.Li9130_Dcdc_Param_Table + " WHERE dev_id = " + dev_id;
        Sql_Mysql sql = new Sql_Mysql(con_pool);
        ResultSet res = null;
        try {
            res = sql.sqlMysqlQuery(sql_str);
            if(!res.next()) {
                //插入默认数据
                sql.sqlMysqlExecute(" INSERT INTO "+Sql_Mysql.Li9130_Dcdc_Param_Table+"(dev_id) values("+dev_id+");");
            }
        } catch (Exception e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.insertLi9130DcDcParam():" + e.toString(), e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error("FBS9100_Task_Thread_SQL.insertLi9130DcDcParam():" + e.toString(), e);
                }
            }
            sql.close_con();
        }
    }
    /**
     * 读取锂电池dcdc参数读取指令
     * @param con_pool
     * @param param
     */
    public static void queryLi9130DcDcParamCmdBydev_id(MysqlConnPool con_pool, FBS9100_StatAndParam param) {
        String sql_str = " SELECT op_cmd,dev_type FROM " + Sql_Mysql.Li9130_Dcdc_Param_Table + " where dev_id = " + param.dev_id;
        Sql_Mysql sql = new Sql_Mysql(con_pool.getConn());
        ResultSet res = sql.sqlMysqlQuery(sql_str);
        try {
            if(res.next()) {
                if(null != param) {
                    param.op_cmd = res.getInt("op_cmd");
                    param.test_type = res.getInt("dev_type");
                }
            }
        } catch (SQLException e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.queryLi9130DcDcParamCmdBydev_id():" + e.toString(), e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error("FBS9100_Task_Thread_SQL.queryLi9130DcDcParamCmdBydev_id():" + e.toString(), e);
                }
            }
            sql.close_con();
        }
    }
    /**
     *     更新当前读取的锂电BTS的DCDC模块参数
     * @param m_ConnPool
     * @param m_StatAndParam
     * @param param
     */
    public static void updateLi_DCDCParamBydev_id(MysqlConnPool m_ConnPool, FBS9100_StatAndParam m_StatAndParam,FBS9100S_SX_DCDC_Param param) {
        String sql_str = " UPDATE " + Sql_Mysql.Li9130_Dcdc_Param_Table +
                " SET op_cmd = " + m_StatAndParam.op_cmd_ack +
                " ,setChgVol = " + param.SetChgVol +
                " ,setChgCurr = " + param.SetChgCurr +
                " ,setChgStopCurr = " + param.SetChgStopCurr +
                " ,setReChgVol = " + param.SetReChgVol +
                " ,setDisStartVol = " + param.SetDisStartVol +
                " ,setDisVol = " + param.SetDisVol +
                " ,setDisCurr = " + param.SetDisCurr +
                " ,setChgStartVol = " + param.SetChgStartVol +
                " ,ifSaveToFlash = " + param.ifSaveToFlash +
                " ,setWorkMode = " + param.SetWorkMode +
                " WHERE dev_id = " + m_StatAndParam.dev_id;
        Sql_Mysql sql = new Sql_Mysql(m_ConnPool);
        try {
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.updateLi_DCDCParamBydev_id():" + e.toString(), e);
        } finally {
            sql.close_con();
        }
        m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_NULL;
    }
    /**
     * 查询锂电DCDC工作参数
     * @param pool
     * @param m_StatAndParam
     * @param tmp_dcdc_param
     */
    public static void queryLiDCDCParamById(MysqlConnPool pool, FBS9100_StatAndParam m_StatAndParam,FBS9100S_SX_DCDC_Param param) {
        String sql_str = " SELECT *  FROM " + Sql_Mysql.Li9130_Dcdc_Param_Table + " WHERE dev_id = " + m_StatAndParam.dev_id;
        ResultSet res = null;
        Sql_Mysql sql = new Sql_Mysql(pool);
        try {
            res = sql.sqlMysqlQuery(sql_str);
            if(res.next()) {
                param.SetChgVol = res.getDouble("setChgVol");            //充电电压设置*0.1
                param.SetChgCurr = res.getInt("setChgCurr");            //充电电流设置
                param.SetChgStopCurr = res.getDouble("setChgStopCurr"); //充电截至电流设置*0.1
                param.SetReChgVol = res.getDouble("setReChgVol");        //电压跌落再次充电阈值设置*0.1
                param.SetDisStartVol = res.getDouble("setDisStartVol");    //母线放电电压阈值设置*0.1
                param.SetDisVol = res.getDouble("setDisVol");            //放电电压设置*0.1
                param.SetDisCurr = res.getInt("setDisCurr");            //放电电流设置
                param.SetChgStartVol = res.getDouble("setChgStartVol"); //电池充电电压阈值设置*0.1
                param.ifSaveToFlash = res.getInt("ifSaveToFlash");        //是否写Flash,1-写 0-不写
                param.SetWorkMode = res.getInt("setWorkMode");               //工作模式:手动/自动
            }
        } catch (SQLException e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.queryLiDCDCParamById():" + e.toString(), e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error("FBS9100_Task_Thread_SQL.queryLiDCDCParamById():" + e.toString(), e);
                }
            }
            sql.close_con();
        }
    }
    /******************************************************************************************************/
    /**
     *     插入当前设备的DCDC默认数据
     * @param con_pool
     * @param dev_id
     */
    public static void insertLi9130DcDcData_Table(MysqlConnPool con_pool, int dev_id) {
        String sql_str = " SELECT op_cmd from " + Sql_Mysql.Li9130_Dcdc_Data_Table + " WHERE dev_id = " + dev_id;
        Sql_Mysql sql = new Sql_Mysql(con_pool);
        ResultSet res = null;
        try {
            res = sql.sqlMysqlQuery(sql_str);
            if(!res.next()) {
                //插入默认数据
                sql.sqlMysqlExecute("INSERT INTO "+Sql_Mysql.Li9130_Dcdc_Data_Table+"(dev_id,dcdc_index) values("+dev_id+",1);");
                sql.sqlMysqlExecute("INSERT INTO "+Sql_Mysql.Li9130_Dcdc_Data_Table+"(dev_id,dcdc_index) values("+dev_id+",2);");
                sql.sqlMysqlExecute("INSERT INTO "+Sql_Mysql.Li9130_Dcdc_Data_Table+"(dev_id,dcdc_index) values("+dev_id+",3);");
                sql.sqlMysqlExecute("INSERT INTO "+Sql_Mysql.Li9130_Dcdc_Data_Table+"(dev_id,dcdc_index) values("+dev_id+",4);");
            }
        } catch (Exception e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.insertLi9130DcDcData_Table():" + e.toString(), e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error("FBS9100_Task_Thread_SQL.insertLi9130DcDcData_Table():" + e.toString(), e);
                }
            }
            sql.close_con();
        }
    }
    /**
     * 读取锂电池dcdc参数读取指令
     * @param con_pool
     * @param param
     */
    public static void queryLi9130DcDcDataCmdBydev_id(MysqlConnPool con_pool, FBS9100_StatAndParam param) {
        String sql_str = " SELECT DISTINCT(op_cmd) FROM " + Sql_Mysql.Li9130_Dcdc_Data_Table + " where dev_id = " + param.dev_id;
        Sql_Mysql sql = new Sql_Mysql(con_pool.getConn());
        ResultSet res = sql.sqlMysqlQuery(sql_str);
        try {
            if(res.next()) {
                if(null != param) {
                    param.op_cmd = res.getInt("op_cmd");
                }
            }
        } catch (SQLException e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.queryLi9130DcDcDataCmdBydev_id():" + e.toString(), e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error("FBS9100_Task_Thread_SQL.queryLi9130DcDcDataCmdBydev_id():" + e.toString(), e);
                }
            }
            sql.close_con();
        }
    }
    /**
     *     更新当前读取的锂电BTS的DCDC模块信息
     * @param m_ConnPool
     * @param m_StatAndParam
     * @param param
     */
    public static void updateLi9130_Dcdc_DataBydev_id(MysqlConnPool m_ConnPool, FBS9100_StatAndParam param,FBS9100S_SX_DCDC_Data[] datas) {
        ArrayList<String> sql_strs = new ArrayList<>();
        for(int i = 0;i < datas.length ; i++) {
            FBS9100S_SX_DCDC_Data data = datas[i];
            sql_strs.add("UPDATE " + Sql_Mysql.Li9130_Dcdc_Data_Table +
                    " SET op_cmd = " + param.op_cmd_ack +
                    " ,dcdc_index = " + (i+1) +
                    " ,powerState= " + data.PowerState +
                    " ,imuxian= " + data.Imuxian +
                    " ,vmuxian= " + data.Vmuxian +
                    " ,ibatt= " + data.Ibatt +
                    " ,vbatt= " + data.Vbatt +
                    " ,currState= " + data.CurrState +
                    " ,version= " + data.Version +
                    " ,setChgVol= " + data.SetChgVol +
                    " ,setChgCurr= " + data.SetChgCurr +
                    " ,setChgStopCurr= " + data.SetChgStopCurr +
                    " ,setReChgVol= " + data.SetReChgVol +
                    " ,setDisStartVol= " + data.SetDisStartVol +
                    " ,setDisVol= " + data.SetDisVol +
                    " ,setDisCurr= " + data.SetDisCurr +
                    " ,setChgStartVol= " + data.SetChgStartVol +
                    " ,commTxCnt= " + data.CommTxCnt +
                    " ,commRxCnt= " + data.CommRxCnt +
                    " WHERE dev_id = " + param.dev_id + " AND dcdc_index = " + (i+1));
        }
        Sql_Mysql sql = new Sql_Mysql(m_ConnPool);
        try {
            sql.makeManualCommit(sql_strs);
        } catch (Exception e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.updateLi_DCDCParamBydev_id():" + e.toString(), e);
        } finally {
            sql.close_con();
        }
        param.op_cmd_ack = FBS9100_ComBase.CMD_NULL;
    }
    /******************************************************************************************************/
    /**
     * 读取锂电池dcdc参数读取指令
     * @param con_pool
     * @param param
     */
    public static void queryLi9130_Bms_StateCmdBydev_id(MysqlConnPool con_pool, FBS9100_StatAndParam param) {
        String sql_str = " SELECT distinct(op_cmd) FROM " + Sql_Mysql.Li9130_Bms_State_Table + " where dev_id = " + param.dev_id;
        Sql_Mysql sql = new Sql_Mysql(con_pool.getConn());
        ResultSet res = sql.sqlMysqlQuery(sql_str);
        try {
            if(res.next()) {
                if(null != param) {
                    param.op_cmd = res.getInt("op_cmd");
                }
            }
        } catch (SQLException e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.queryLi9130_Bms_StateCmdBydev_id():" + e.toString(), e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error("FBS9100_Task_Thread_SQL.queryLi9130_Bms_StateCmdBydev_id():" + e.toString(), e);
                }
            }
            sql.close_con();
        }
    }
    /**
     *     插入db_ram_db.tb_li9130_bms_state当前设备的默认数据
     * @param con_pool
     * @param dev_id
     */
    public static void insertLi9130_Bms_State(MysqlConnPool con_pool, int dev_id) {
        String sql_str = " SELECT op_cmd from " + Sql_Mysql.Li9130_Bms_State_Table + " WHERE dev_id = " + dev_id;
        Sql_Mysql sql = new Sql_Mysql(con_pool);
        ResultSet res = null;
        try {
            res = sql.sqlMysqlQuery(sql_str);
            if(!res.next()) {
                //插入默认数据
                sql.sqlMysqlExecute(" INSERT INTO "+Sql_Mysql.Li9130_Bms_State_Table+"(dev_id,bms_idx) values("+dev_id+",1);");
                sql.sqlMysqlExecute(" INSERT INTO "+Sql_Mysql.Li9130_Bms_State_Table+"(dev_id,bms_idx) values("+dev_id+",2);");
                sql.sqlMysqlExecute(" INSERT INTO "+Sql_Mysql.Li9130_Bms_State_Table+"(dev_id,bms_idx) values("+dev_id+",3);");
                sql.sqlMysqlExecute(" INSERT INTO "+Sql_Mysql.Li9130_Bms_State_Table+"(dev_id,bms_idx) values("+dev_id+",4);");
            }
        } catch (Exception e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.insertLi9130_Bms_State():" + e.toString(), e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error("FBS9100_Task_Thread_SQL.insertLi9130_Bms_State():" + e.toString(), e);
                }
            }
            sql.close_con();
        }
    }
    /**
     *     更新当前读取的锂电BTS的DCDC模块参数
     * @param m_ConnPool
     * @param m_StatAndParam
     * @param param
     */
    public static void updateLi9130_Bms_StateBydev_id(MysqlConnPool m_ConnPool, FBS9100_StatAndParam m_StatAndParam,FBS9100S_LiBMS_AnalogData state) {
        String sql_str = " UPDATE " + Sql_Mysql.Li9130_Bms_State_Table +
                " SET op_cmd = " + m_StatAndParam.op_cmd_ack +
                " ,data_flag = " + state.data_flag +
                " ,pack_pos = " + state.pack_pos +
                " ,monomer_cnt = " + state.monomer_cnt +
                " ,mon_vol1 = " + state.monomer_vol[0] +
                " ,mon_vol2 = " + state.monomer_vol[1] +
                " ,mon_vol3 = " + state.monomer_vol[2] +
                " ,mon_vol4 = " + state.monomer_vol[3] +
                " ,mon_vol5 = " + state.monomer_vol[4] +
                " ,mon_vol6 = " + state.monomer_vol[5] +
                " ,mon_vol7 = " + state.monomer_vol[6] +
                " ,mon_vol8 = " + state.monomer_vol[7] +
                " ,mon_vol9 = " + state.monomer_vol[8] +
                " ,mon_vol10 = " + state.monomer_vol[9] +
                " ,mon_vol11 = " + state.monomer_vol[10] +
                " ,mon_vol12 = " + state.monomer_vol[11] +
                " ,mon_vol13 = " + state.monomer_vol[12] +
                " ,mon_vol14 = " + state.monomer_vol[13] +
                " ,mon_vol15 = " + state.monomer_vol[14] +
                " ,mon_vol16 = " + state.monomer_vol[15] +
                " ,tmp_cnt = " + state.temp_cnt +
                " ,mon_tmp1 = " + state.monomer_temp[0] +
                " ,mon_tmp2 = " + state.monomer_temp[1] +
                " ,mon_tmp3 = " +  state.monomer_temp[2] +
                " ,mon_tmp4 = " +  state.monomer_temp[3] +
                " ,env_temp = " + state.env_temp +
                " ,mos_temp = " + state.mos_temp +
                " ,current = " + state.current +
                " ,sum_vol = " + state.sum_vol +
                " ,rest_cap = " + state.rest_cap +
                " ,sum_cap = " + state.sum_cap +
                " ,cycle_times = " + state.cycle_times +
                " ,user_def_cnt = " + state.user_def_cnt +
                " WHERE dev_id = " + m_StatAndParam.dev_id;
        Sql_Mysql sql = new Sql_Mysql(m_ConnPool);
        try {
            System.err.println("更新BMS模块信息"+sql_str);
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.updateLi9130_Bms_StateBydev_id():" + e.toString(), e);
        } finally {
            sql.close_con();
        }
        m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_NULL;
    }
    /**
     *     更新当前读取的锂电BTS的DCDC模块参数
     * @param m_ConnPool
     * @param m_StatAndParam
     * @param param
     */
    public static void updateLi9130_Bms_StateBydev_id(MysqlConnPool m_ConnPool, FBS9100_StatAndParam m_StatAndParam,FBS9100S_LiBMS_AnalogData[] states) {
        ArrayList<String> sql_strs = new ArrayList<>();
        for(int i=0;i<states.length;i++) {
            FBS9100S_LiBMS_AnalogData state = states[i];
            sql_strs.add(" UPDATE " + Sql_Mysql.Li9130_Bms_State_Table +
                    " SET op_cmd = " + m_StatAndParam.op_cmd_ack +
                    " ,data_flag = " + state.data_flag +
                    " ,pack_pos = " + state.pack_pos +
                    " ,monomer_cnt = " + state.monomer_cnt +
                    " ,mon_vol1 = " + state.monomer_vol[0] +
                    " ,mon_vol2 = " + state.monomer_vol[1] +
                    " ,mon_vol3 = " + state.monomer_vol[2] +
                    " ,mon_vol4 = " + state.monomer_vol[3] +
                    " ,mon_vol5 = " + state.monomer_vol[4] +
                    " ,mon_vol6 = " + state.monomer_vol[5] +
                    " ,mon_vol7 = " + state.monomer_vol[6] +
                    " ,mon_vol8 = " + state.monomer_vol[7] +
                    " ,mon_vol9 = " + state.monomer_vol[8] +
                    " ,mon_vol10 = " + state.monomer_vol[9] +
                    " ,mon_vol11 = " + state.monomer_vol[10] +
                    " ,mon_vol12 = " + state.monomer_vol[11] +
                    " ,mon_vol13 = " + state.monomer_vol[12] +
                    " ,mon_vol14 = " + state.monomer_vol[13] +
                    " ,mon_vol15 = " + state.monomer_vol[14] +
                    " ,mon_vol16 = " + state.monomer_vol[15] +
                    " ,tmp_cnt = " + state.temp_cnt +
                    " ,mon_tmp1 = " + state.monomer_temp[0] +
                    " ,mon_tmp2 = " + state.monomer_temp[1] +
                    " ,mon_tmp3 = " +  state.monomer_temp[2] +
                    " ,mon_tmp4 = " +  state.monomer_temp[3] +
                    " ,env_temp = " + state.env_temp +
                    " ,mos_temp = " + state.mos_temp +
                    " ,current = " + state.current +
                    " ,sum_vol = " + state.sum_vol +
                    " ,rest_cap = " + state.rest_cap +
                    " ,sum_cap = " + state.sum_cap +
                    " ,cycle_times = " + state.cycle_times +
                    " ,user_def_cnt = " + state.user_def_cnt +
                    " WHERE bms_idx ="+(i+1)+" and dev_id = " + m_StatAndParam.dev_id);
        }
        Sql_Mysql sql = new Sql_Mysql(m_ConnPool);
        try {
            //System.err.println("更新BMS模块信息"+sql_str);
            sql.makeManualCommit(sql_strs);
        } catch (Exception e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.updateLi9130_Bms_StateBydev_id():" + e.toString(), e);
        } finally {
            sql.close_con();
        }
        m_StatAndParam.op_cmd_ack = FBS9100_ComBase.CMD_NULL;
    }
    /******************************************************************************************************/
    /**
     * 读取锂电池BMS信息告警读取指令
     * @param con_pool
     * @param param
     */
    public static void queryLi9130_Bms_AlmCmdBydev_id(MysqlConnPool con_pool, FBS9100_StatAndParam param) {
        String sql_str = " SELECT distinct(op_cmd) FROM " + Sql_Mysql.Li9130_Bms_Alm_Table + " where dev_id = " + param.dev_id;
        Sql_Mysql sql = new Sql_Mysql(con_pool.getConn());
        ResultSet res = sql.sqlMysqlQuery(sql_str);
        try {
            if(res.next()) {
                if(null != param) {
                    param.op_cmd = res.getInt("op_cmd");
                }
            }
        } catch (SQLException e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.queryLi9130_Bms_AlmCmdBydev_id():" + e.toString(), e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error("FBS9100_Task_Thread_SQL.queryLi9130_Bms_AlmCmdBydev_id():" + e.toString(), e);
                }
            }
            sql.close_con();
        }
    }
    /**
     *     插入db_ram_db.tb_li9130_bms_alm当前设备的默认数据
     * @param con_pool
     * @param dev_id
     */
    public static void insertLi9130_Bms_Alm(MysqlConnPool con_pool, int dev_id) {
        String sql_str = " SELECT op_cmd from " + Sql_Mysql.Li9130_Bms_Alm_Table + " WHERE dev_id = " + dev_id;
        Sql_Mysql sql = new Sql_Mysql(con_pool);
        ResultSet res = null;
        try {
            res = sql.sqlMysqlQuery(sql_str);
            if(!res.next()) {
                //插入默认数据
                sql.sqlMysqlExecute(" INSERT INTO "+Sql_Mysql.Li9130_Bms_Alm_Table+"(dev_id,bms_idx) values("+dev_id+",1);");
                sql.sqlMysqlExecute(" INSERT INTO "+Sql_Mysql.Li9130_Bms_Alm_Table+"(dev_id,bms_idx) values("+dev_id+",2);");
                sql.sqlMysqlExecute(" INSERT INTO "+Sql_Mysql.Li9130_Bms_Alm_Table+"(dev_id,bms_idx) values("+dev_id+",3);");
                sql.sqlMysqlExecute(" INSERT INTO "+Sql_Mysql.Li9130_Bms_Alm_Table+"(dev_id,bms_idx) values("+dev_id+",4);");
            }
        } catch (Exception e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.insertLi9130_Bms_Alm():" + e.toString(), e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error("FBS9100_Task_Thread_SQL.insertLi9130_Bms_Alm():" + e.toString(), e);
                }
            }
            sql.close_con();
        }
    }
    /**
     *     更新当前读取的锂电BTS的BMS模块参数
     * @param m_ConnPool
     * @param m_StatAndParam
     * @param param
     */
    public static void updateLi9130_Bms_AlmBydev_id(MysqlConnPool m_ConnPool, FBS9100_StatAndParam param,FBS9100S_LIBMS_AlarmState data) {
        String sql_str = " UPDATE " + Sql_Mysql.Li9130_Bms_Alm_Table +
                " SET op_cmd = " + param.op_cmd_ack +
                " ,data_flag = " + data.data_flag +
                " ,pack_pos = " + data.pack_pos +
                " ,monomer_cnt = " + data.monomer_cnt +
                " ,mon_vol_alm1 = " + data.monomer_vol_alarm[0] +
                " ,mon_vol_alm2 = " + data.monomer_vol_alarm[1] +
                " ,mon_vol_alm3 = " + data.monomer_vol_alarm[2] +
                " ,mon_vol_alm4 = " + data.monomer_vol_alarm[3] +
                " ,mon_vol_alm5 = " + data.monomer_vol_alarm[4] +
                " ,mon_vol_alm6 = " + data.monomer_vol_alarm[5] +
                " ,mon_vol_alm7 = " + data.monomer_vol_alarm[6] +
                " ,mon_vol_alm8 = " + data.monomer_vol_alarm[7] +
                " ,mon_vol_alm9 = " + data.monomer_vol_alarm[8] +
                " ,mon_vol_alm10 = " + data.monomer_vol_alarm[9] +
                " ,mon_vol_alm11 = " + data.monomer_vol_alarm[10] +
                " ,mon_vol_alm12 = " + data.monomer_vol_alarm[11] +
                " ,mon_vol_alm13 = " + data.monomer_vol_alarm[12] +
                " ,mon_vol_alm14 = " + data.monomer_vol_alarm[13] +
                " ,mon_vol_alm15 = " + data.monomer_vol_alarm[14] +
                " ,mon_vol_alm16 = " + data.monomer_vol_alarm[15] +
                " ,temp_cnt = " + data.temp_cnt +
                " ,mon_tmp_alm1 = " + data.monomer_temp_alarm[0] +
                " ,mon_tmp_alm2 = " + data.monomer_temp_alarm[1] +
                " ,mon_tmp_alm3 = " + data.monomer_temp_alarm[2] +
                " ,mon_tmp_alm4 = " + data.monomer_temp_alarm[3] +
                " ,env_temp_alm = " + data.env_temp_alarm +
                " ,mos_temp_alm = " + data.mos_temp_alarm +
                " ,current_alm = " + data.current_alarm +
                " ,sum_vol_alm = " + data.sum_vol_alarm +
                " ,user_def_cnt = " + data.user_def_cnt +
                " ,junheng_event_code = " + data.junheng_event_code +
                " ,vol_event_code = " + data.vol_event_code +
                " ,temp_event_code = " + data.temp_event_code +
                " ,curr_event_code = " + data.curr_event_code +
                " ,rest_cap_alm = " + data.rest_cap_alarm +
                " ,fet_state_code = " + data.fet_state_code +
                " ,junheng_state_code = " + data.junheng_state_code +
                " ,sys_state_code = " + data.sys_state_code +
                " WHERE dev_id = " + param.dev_id;
        Sql_Mysql sql = new Sql_Mysql(m_ConnPool);
        try {
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.updateLi9130_Bms_AlmBydev_id():" + e.toString(), e);
        } finally {
            sql.close_con();
        }
        param.op_cmd_ack = FBS9100_ComBase.CMD_NULL;
    }
    /**
     *     更新当前读取的锂电BTS的BMS模块参数
     * @param m_ConnPool
     * @param m_StatAndParam
     * @param param
     */
    public static void updateLi9130_Bms_AlmBydev_id(MysqlConnPool m_ConnPool, FBS9100_StatAndParam param,FBS9100S_LIBMS_AlarmState[] datas) {
        ArrayList<String> sql_strs = new ArrayList<>();
         for(int i=0;i<datas.length;i++) {
             FBS9100S_LIBMS_AlarmState data = datas[i];
             sql_strs.add(" UPDATE " + Sql_Mysql.Li9130_Bms_Alm_Table +
                     " SET op_cmd = " + param.op_cmd_ack +
                     " ,data_flag = " + data.data_flag +
                     " ,pack_pos = " + data.pack_pos +
                     " ,monomer_cnt = " + data.monomer_cnt +
                     " ,mon_vol_alm1 = " + data.monomer_vol_alarm[0] +
                     " ,mon_vol_alm2 = " + data.monomer_vol_alarm[1] +
                     " ,mon_vol_alm3 = " + data.monomer_vol_alarm[2] +
                     " ,mon_vol_alm4 = " + data.monomer_vol_alarm[3] +
                     " ,mon_vol_alm5 = " + data.monomer_vol_alarm[4] +
                     " ,mon_vol_alm6 = " + data.monomer_vol_alarm[5] +
                     " ,mon_vol_alm7 = " + data.monomer_vol_alarm[6] +
                     " ,mon_vol_alm8 = " + data.monomer_vol_alarm[7] +
                     " ,mon_vol_alm9 = " + data.monomer_vol_alarm[8] +
                     " ,mon_vol_alm10 = " + data.monomer_vol_alarm[9] +
                     " ,mon_vol_alm11 = " + data.monomer_vol_alarm[10] +
                     " ,mon_vol_alm12 = " + data.monomer_vol_alarm[11] +
                     " ,mon_vol_alm13 = " + data.monomer_vol_alarm[12] +
                     " ,mon_vol_alm14 = " + data.monomer_vol_alarm[13] +
                     " ,mon_vol_alm15 = " + data.monomer_vol_alarm[14] +
                     " ,mon_vol_alm16 = " + data.monomer_vol_alarm[15] +
                     " ,temp_cnt = " + data.temp_cnt +
                     " ,mon_tmp_alm1 = " + data.monomer_temp_alarm[0] +
                     " ,mon_tmp_alm2 = " + data.monomer_temp_alarm[1] +
                     " ,mon_tmp_alm3 = " + data.monomer_temp_alarm[2] +
                     " ,mon_tmp_alm4 = " + data.monomer_temp_alarm[3] +
                     " ,env_temp_alm = " + data.env_temp_alarm +
                     " ,mos_temp_alm = " + data.mos_temp_alarm +
                     " ,current_alm = " + data.current_alarm +
                     " ,sum_vol_alm = " + data.sum_vol_alarm +
                     " ,user_def_cnt = " + data.user_def_cnt +
                     " ,junheng_event_code = " + data.junheng_event_code +
                     " ,vol_event_code = " + data.vol_event_code +
                     " ,temp_event_code = " + data.temp_event_code +
                     " ,curr_event_code = " + data.curr_event_code +
                     " ,rest_cap_alm = " + data.rest_cap_alarm +
                     " ,fet_state_code = " + data.fet_state_code +
                     " ,junheng_state_code = " + data.junheng_state_code +
                     " ,sys_state_code = " + data.sys_state_code +
                     " WHERE bms_idx = "+(i+1)+" and dev_id = " + param.dev_id);
         }
        Sql_Mysql sql = new Sql_Mysql(m_ConnPool);
        try {
            //sql.sqlMysqlExecute(sql_str);
            sql.makeManualCommit(sql_strs);
        } catch (Exception e) {
            sql.logger.error("FBS9100_Task_Thread_SQL.updateLi9130_Bms_AlmBydev_id():" + e.toString(), e);
        } finally {
            sql.close_con();
        }
        param.op_cmd_ack = FBS9100_ComBase.CMD_NULL;
    }
}
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100S_LIBMS_AlarmState.java
New file
@@ -0,0 +1,103 @@
package com.dev.btse.data;
import java.nio.ByteBuffer;
public class FBS9100S_LIBMS_AlarmState {
    public static final int TOTAL_BYTE_LEN = 162;        //结构体总长度
    public static final int BYTE_LEN = 40;                //单个结构体长度
    public static final int LiBMS_MONOMER_MAX = 16;
    public static final int    LiBMS_TEMP_MAX = 4;
    public int data_flag;
    public int pack_pos;                      //上位机需要获取的PACK组位置
    public int monomer_cnt;                  //单体电池数量
    public int monomer_vol_alarm[];
    public int temp_cnt;                    //电芯温度数量
    public int monomer_temp_alarm[];
    public int env_temp_alarm;               //环境温度
    public int mos_temp_alarm;               //MOS管温度
    public int current_alarm;                //电流
    public int sum_vol_alarm;               //总压
    public int user_def_cnt;                 //自定义告警数量
    public int junheng_event_code;             //均衡事件代码
    public int vol_event_code;                 //电压事件代码
    public int temp_event_code;               //温度事件代码
    public int curr_event_code;                //电流事件代码
    public int rest_cap_alarm;              //剩余容量告警
    public int fet_state_code;              //FET状态代码
    public int junheng_state_code;             //均衡状态代码
    public int sys_state_code;                 //系统状态代码
    public int reserved;                       //预留
    public FBS9100S_LIBMS_AlarmState() {
        monomer_vol_alarm = new int[LiBMS_MONOMER_MAX];
        monomer_temp_alarm = new int[LiBMS_TEMP_MAX];
    }
    /**
     *     将bytebuffer中的数据取出放入该对象的属性中,并返回是否取出成功
     * @param bf
     * @return
     */
    public boolean putByteBuffer(final ByteBuffer bf)
    {
        if(bf.limit() < BYTE_LEN)
            return false;
        ByteBuffer tmpbuf = bf;
//        int crc0 = tmpbuf.getShort(BYTE_LEN-2) & 0xFFFF;
//        int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2);
//        if(crc0 != crc1)
//            return false;
        tmpbuf.position(0);
        data_flag = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
        pack_pos = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                     //上位机需要获取的PACK组位置
        monomer_cnt = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                 //单体电池数量
        for(int n = 0;n<monomer_vol_alarm.length;n++) {
            monomer_vol_alarm[n] = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
        }
        temp_cnt = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                   //电芯温度数量
        for(int n = 0;n<monomer_temp_alarm.length;n++) {
            monomer_temp_alarm[n] = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
        }
        env_temp_alarm = FBS9100_ComBase.changeByteToInt(tmpbuf.get());;               //环境温度
        mos_temp_alarm = FBS9100_ComBase.changeByteToInt(tmpbuf.get());;               //MOS管温度
        current_alarm = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                //电流
        sum_vol_alarm = FBS9100_ComBase.changeByteToInt(tmpbuf.get());               //总压
        user_def_cnt = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                //自定义告警数量
        junheng_event_code = FBS9100_ComBase.changeByteToInt(tmpbuf.get());         //均衡事件代码
        vol_event_code = FBS9100_ComBase.changeByteToInt(tmpbuf.get());             //电压事件代码
        temp_event_code = FBS9100_ComBase.changeByteToInt(tmpbuf.get());               //温度事件代码
        curr_event_code = FBS9100_ComBase.changeByteToInt(tmpbuf.get());            //电流事件代码
        rest_cap_alarm = FBS9100_ComBase.changeByteToInt(tmpbuf.get());              //剩余容量告警
        fet_state_code = FBS9100_ComBase.changeByteToInt(tmpbuf.get());              //FET状态代码
        junheng_state_code = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());     //均衡状态代码
        sys_state_code = FBS9100_ComBase.changeByteToInt(tmpbuf.get());             //系统状态代码
        reserved = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                   //预留
        tmpbuf.compact();
        tmpbuf.flip();
        return true;
    }
}
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100S_LiBMS_AnalogData.java
New file
@@ -0,0 +1,88 @@
package com.dev.btse.data;
import java.nio.ByteBuffer;
public class FBS9100S_LiBMS_AnalogData {
    public static final int TOTAL_BYTE_LEN = 246;
    private static final int BYTE_LEN = 61;
    public static final int LiBMS_MONOMER_MAX = 16;
    public static final int LiBMS_TEMP_MAX = 4;
    public int data_flag;
    public int pack_pos;             //上位机需要获取的PACK组位置
    public int monomer_cnt;          //单体电池数量
    public double monomer_vol[] = new double[LiBMS_MONOMER_MAX];
    public int temp_cnt;               //电芯温度数量
    public double monomer_temp[] = new double[LiBMS_TEMP_MAX];
    public int env_temp;               //环境温度
    public int mos_temp;               //MOS管温度
    public double current;            //电流
    public double sum_vol;           //总压
    public double rest_cap;           //剩余容量
    public double sum_cap;            //总容量
    public int cycle_times;         //电池循环次数
    public int user_def_cnt;         //自定义遥测数量
    public int reserved;            //预留
    /**
     *     将bytebuffer中的数据取出放入该对象的属性中,并返回是否取出成功
     * @param bf
     * @return
     */
    public boolean putByteBuffer(final ByteBuffer bf)
    {
        if(bf.limit() < BYTE_LEN)
            return false;
        ByteBuffer tmpbuf = bf;
        /*int crc0 = tmpbuf.getShort(BYTE_LEN-2) & 0xFFFF;
        int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2);
        if(crc0 != crc1)
            return false;*/
        tmpbuf.position(0);
        data_flag = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
        pack_pos = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                     //上位机需要获取的PACK组位置
        monomer_cnt = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                  //单体电池数量
        for(int n = 0;n<monomer_vol.length;n++) {
            monomer_vol[n] = (double)tmpbuf.getShort()/1000;
        }
        temp_cnt = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                   //电芯温度数量
        for(int n = 0;n<monomer_temp.length;n++) {
            monomer_temp[n] = (double)(tmpbuf.getShort()-2731)/10;
        }
        env_temp = tmpbuf.getShort();                                               //环境温度
        mos_temp = tmpbuf.getShort();                                               //MOS管温度
        current = (double)tmpbuf.getShort()/100;                                    //电流
        sum_vol =(double) FBS9100_ComBase.changeShortToInt(tmpbuf.getShort())/100;  //总压
        rest_cap = (double)tmpbuf.getShort()/100;                                   //剩余容量
        sum_cap = (double)tmpbuf.getShort()/100;                                    //总容量
        cycle_times = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());             //电池循环次数
        user_def_cnt = FBS9100_ComBase.changeByteToInt(tmpbuf.get());                 //自定义遥测数量
        reserved = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());                //预留
        tmpbuf.compact();
        tmpbuf.flip();
        return true;
    }
}
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100S_SX_DCDC_Data.java
New file
@@ -0,0 +1,92 @@
package com.dev.btse.data;
import java.nio.ByteBuffer;
public class FBS9100S_SX_DCDC_Data {
    private final int BYTE_LEN = 62;
    public int PowerState;                    //电源状态:0-停止,1-正常输出,2/3/4/5-异常保护
    public double Imuxian;                    //电源(母线)端电流*0.01
    public double Vmuxian;                    //电源(母线)端电压*0.01
    public double Ibatt;                    //电池端电流*0.01
    public double Vbatt;                    //电池端电压*0.01
    public int CurrState;                    //电流状态: 0-母线对电池充电   1-电池对母线放电
    public int reserved1[] = new int[4];
    public double Version;                    //版本*0.01
    public int reserved2[] = new int[9];
    public double SetChgVol;                //充电电压设置*0.01
    public double SetChgCurr;                //充电电流设置*0.01
    public double SetChgStopCurr;            //充电截至电流设置*0.01
    public double SetReChgVol;                //电压跌落再次充电阈值设置*0.01
    public double SetDisStartVol;            //母线放电电压阈值设置*0.01
    public double SetDisVol;                //放电电压设置*0.01
    public double SetDisCurr;                //放电电流设置*0.01
    public double SetChgStartVol;            //电池充电电压阈值设置*0.01
    public int CommTxCnt;                    //发送计数
    public int CommRxCnt;                    //接收计数
    public int Crc16;
    /**
     * 将bytebuffer中的数据取出放入该对象的属性中,并返回是否取出成功
     * @param bf
     * @return
     */
    public boolean putByteBuffer(final ByteBuffer bf)
    {
        if(bf.limit() < BYTE_LEN)
            return false;
        ByteBuffer tmpbuf = bf;
        int crc0 = tmpbuf.getShort(BYTE_LEN-2) & 0xFFFF;
        int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2);
        if(crc0 != crc1) {
            System.out.println(crc0 + " != " + crc1);
            return false;
        }
        tmpbuf.position(0);
        PowerState = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());                //电源状态:0-停止,1-正常输出,2/3/4/5-异常保护
        Imuxian = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;            //电源(母线)端电流*0.01
        Vmuxian = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;            //电源(母线)端电压*0.01
        Ibatt = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;                //电池端电流*0.01
        Vbatt = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;                //电池端电压*0.01
        CurrState = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());                //电流状态: 0-母线对电池充电   1-电池对母线放电
        for(int i=0;i<reserved1.length;i++) {
            reserved1[i] = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        }
        Version = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort());            //版本*0.01
        for(int i=0;i<reserved2.length;i++) {
            reserved2[i] = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        }
        SetChgVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;            //充电电压设置*0.01
        SetChgCurr = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;        //充电电流设置*0.01
        SetChgStopCurr = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;    //充电截至电流设置*0.01
        SetReChgVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;        //电压跌落再次充电阈值设置*0.01
        SetDisStartVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;    //母线放电电压阈值设置*0.01
        SetDisVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;            //放电电压设置*0.01
        SetDisCurr = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;        //放电电流设置*0.01
        SetChgStartVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;    //电池充电电压阈值设置*0.01
        CommTxCnt = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());                //发送计数
        CommRxCnt = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());                //接收计数
        Crc16 = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort())&0xFFFF;
        tmpbuf.compact();
        tmpbuf.flip();
        return true;
    }
}
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100S_SX_DCDC_Param.java
New file
@@ -0,0 +1,102 @@
package com.dev.btse.data;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
/**
 * 2021-09-03 锂电BTS新增DCDC工作参数
 * @author LiJun
 *
 */
public class FBS9100S_SX_DCDC_Param {
    private final int BYTE_LEN = 22;
    public double SetChgVol;            //充电电压设置*0.1
    public int SetChgCurr;                //充电电流设置
    public double SetChgStopCurr;          //充电截至电流设置*0.1
    public double SetReChgVol;            //电压跌落再次充电阈值设置*0.1
    public double SetDisStartVol;        //母线放电电压阈值设置*0.1
    public double SetDisVol;            //放电电压设置*0.1
    public int SetDisCurr;                //放电电流设置
    public double SetChgStartVol;        //电池充电电压阈值设置*0.1
    public int ifSaveToFlash;               //是否写Flash,1-写 0-不写
    public int SetWorkMode;                   //工作模式:手动/自动
    public int CRC;
    /**
     * 将bytebuffer中的数据取出放入该对象的属性中,并返回是否取出成功
     * @param bf
     * @return
     */
    public boolean putByteBuffer(final ByteBuffer bf)
    {
        if(bf.limit() < BYTE_LEN)
            return false;
        ByteBuffer tmpbuf = bf;
        int crc0 = tmpbuf.getShort(BYTE_LEN-2) & 0xFFFF;
        int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2);
        if(crc0 != crc1)
            return false;
        tmpbuf.position(0);
        SetChgVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;            //充电电压设置*0.1
        SetChgCurr = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());                //充电电流设置
        SetChgStopCurr = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;      //充电截至电流设置*0.1
        SetReChgVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;        //电压跌落再次充电阈值设置*0.1
        SetDisStartVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;        //母线放电电压阈值设置*0.1
        SetDisVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;            //放电电压设置*0.1
        SetDisCurr = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());                //放电电流设置
        SetChgStartVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;        //电池充电电压阈值设置*0.1
        ifSaveToFlash = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());               //是否写Flash,1-写 0-不写
        SetWorkMode = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());                   //工作模式:手动/自动
        tmpbuf.compact();
        tmpbuf.flip();
        return true;
    }
    /**
     * 将数据放入bytebuffer中并返回
     * @return
     */
    public ByteBuffer getByteBuffer()
    {
        ByteBuffer bytebuffer = ByteBuffer.allocate(BYTE_LEN);
        bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(SetChgVol*10));
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(SetChgCurr));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(SetChgStopCurr*10));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(SetReChgVol*10));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(SetDisStartVol*10));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(SetDisVol*10));
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(SetDisCurr));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(SetChgStartVol*10));
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(ifSaveToFlash));
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(SetWorkMode));
        CRC = FBS9100_Crc16.CalCRC16(bytebuffer, bytebuffer.position());
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(CRC));
        bytebuffer.flip();
        return bytebuffer;
    }
    @Override
    public String toString() {
        return "FBS9100S_SX_DCDC_Param [SetChgVol=" + SetChgVol + ", SetChgCurr=" + SetChgCurr + ", SetChgStopCurr="
                + SetChgStopCurr + ", SetReChgVol=" + SetReChgVol + ", SetDisStartVol=" + SetDisStartVol
                + ", SetDisVol=" + SetDisVol + ", SetDisCurr=" + SetDisCurr + ", SetChgStartVol=" + SetChgStartVol
                + ", ifSaveToFlash=" + ifSaveToFlash + ", SetWorkMode=" + SetWorkMode + "]";
    }
}
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100_ComBase.java
@@ -7,6 +7,7 @@
    public static final int     MonomerCountMax                    =    480;
    //----------------------------------------------------------------------------
    public static final int     BTS_DCDC_CountMax                =    8;
    public static final int     LIBTS_DCDC_CountMax                =     4;                    //锂电BTS的最大DCDC模块信息
    //----------------------------------------------------------------------------
    public static final int     CMD_NULL                        =    0x00;
    //----------------------------------------------------------------------------
@@ -81,6 +82,30 @@
     */
    public static final int     CMD_GetMonomerLYVolt            =    0x78;        //漏液电压
    public static final int     CMD_GetMonomerJHCUR                =    0x69;        //增加均衡电流
    public static final int     CMD_GetLiDCDCParam                =    0x8B;        //读取锂电DCDC参数
    public static final int     CMD_SetLiDCDCParam                =    0x8C;        //设置锂电DCDC参数
    public static final int     CMD_GetPbDCDCParam                =    0x8D;        //读取铅酸DCDC参数
    public static final int     CMD_SetPbDCDCParam                =    0x8E;        //设置铅酸DCDC参数
    public static final int     CMD_GetSXDCDCData                =    0x8F;        //读取双向DCDC内部数据
    public static final int     CMD_GetLiBMSData                =    0x95;        //读取锂电池BMS模拟量
    public static final int     CMD_GetLiBMSState                =    0x96;        //读取锂电池BMS告警量
    //------------ 平台锂电池命令 -----------------------------------------------------------------
    public static final int     CMD_GetLiDCDCParam_Ack            =     0x8D;        //读取锂电BTS参数成功
    public static final int      CMD_SetLiDCDCParam_Ack            =     0x8E;        //设置锂电BTS参数成功
    public static final int     CMD_GetSXDCDCData_Ack            =     0x92;        //读取双向DCDC内部数据成功
    public static final int     CMD_GetLiBMSData_Ack            =     0x93;        //读取锂电池BMS模拟量
    public static final int     CMD_GetLiBMSState_Ack            =     0x94;        //读取锂电池BMS告警量
    //----------------------------------------------------------------------------------------
    //-----------------------------------------------------------------------------
    //------------ 在线电压校准 ----------------------------------------------------
    public static final int     CMD_GetOnlineVolAdjParam        =    0x6A;
@@ -182,6 +207,7 @@
    //------------------------------------------------------------------------------
    public static final int     BTSE_DevType_TieTa                =    0x08;                    //铁塔版本的bt
    public static final int     BTSE_DevType_NiBian                =   0x06;                    //逆变版本的bts
    public static final int     BTSE_DevType_LIBTS                =   0x05;                    //锂电池版本的bts
    //------------------------------------------------------------------------------
    public static final int     SYS_STATE_STOPPED                =    0x00;
    public static final int     SYS_STATE_DISCHARGING            =    0x01;
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100_DeviceInf.java
@@ -3,6 +3,8 @@
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import org.apache.logging.log4j.core.impl.ThreadContextDataInjector.ForGarbageFreeThreadContextMap;
public class FBS9100_DeviceInf {
    private final int BYTE_LEN = 144;
    
@@ -24,6 +26,8 @@
    public int BackUp9;                               //保留 
    public int[] MCU_ID  = new int[4];                 //MCUΨһID
    public int[] VersionStr  = new int[112];         //版本信息描述 
    public int dev_id;                                //设备ID
     
    public int CRC = 0; 
    
@@ -65,6 +69,7 @@
        for(int i = 0; i<VersionStr.length; i++) {
            VersionStr[i] = FBS9100_ComBase.changeByteToInt(tmpbuf.get());  //版本信息描述
        }
        dev_id = getDeviceId();
        tmpbuf.compact();
        tmpbuf.flip();
        
@@ -104,7 +109,29 @@
        return bytebuffer;
    }
    
    /**
     *     获取设备ID号
     * @return
     */
    public int getDeviceId() {
        return BackUp6*256*256*256
        + BackUp5*256*256
        + BackUp4*256
        + BackUp3;
    }
    
    /**
     *
     * @return
     */
    public int getBTSDevSoftType() {
        int BTSDevSoftType = DeviceType;
        if(this.dev_id / 1000000 == 913) {
            //锂电池BTS
            BTSDevSoftType = FBS9100_ComBase.BTSE_DevType_LIBTS;
        }
        return BTSDevSoftType;
    }
    
    
    @Override
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100_JuHengParam.java
@@ -11,7 +11,7 @@
    public int GdUnitAutoRestartCycle;            //供电模块自动重启周期
    public int AutoOffLineTestCycle;            //自动离线养护周期
    public double OnlineVolLow;                 //在线电压低阀值(0.01)
    public int jhSetVolt;                         //均衡电压设置//2021-8-13目前当做开关使用
    public double jhSetVolt;                     //均衡电压设置//2021-8-13目前当做开关使用
    public double jhVoltLimit;                     //均衡电压停止条件(0.001)
    public double jhCurrLimit;                     //均衡电流停止条件(0.001)
    public int back[] = new int[15];            //备用
@@ -50,8 +50,8 @@
        
        GdUnitAutoRestartCycle = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());        //供电模块自动重启周期
        AutoOffLineTestCycle = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());            //自动离线养护周期
        OnlineVolLow = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;              //在线电压低阀值
        jhSetVolt = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());                     //均衡电压设置//2021-8-13目前当做开关使用
        OnlineVolLow = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/100;          //在线电压低阀值
        jhSetVolt = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;                 //均衡电压设置//2021-8-13目前当做开关使用
        jhVoltLimit = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;             //均衡电压停止条件
        jhCurrLimit = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;             //均衡电流停止条件
        for(int i=0;i<back.length;i++) {
@@ -59,8 +59,7 @@
        }
        
        tmpbuf.compact();
        tmpbuf.flip();
        tmpbuf.flip();
        return true;
    }
@@ -71,7 +70,7 @@
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(GdUnitAutoRestartCycle));
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(AutoOffLineTestCycle));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(OnlineVolLow*100));
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(jhSetVolt));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(jhSetVolt*1000));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(jhVoltLimit*1000));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(jhCurrLimit*1000));
        for(int i=0;i<back.length;i++) {            
BattMonitor_FBS9100S_Inverter/src/com/dev/btse/data/FBS9100_ParamBatt.java
@@ -11,8 +11,8 @@
    
    public double STD_CAP = 0.0;
    public double STD_RES = 0.0;
    public int BattGroupCount = 0;
    public int EachGroupBattCount = 0;
    public int BattGroupCount = 0;                //铅酸电池总数
    public int EachGroupBattCount = 0;            //铅酸电池节数
    public double MonomerVol = 0.0;
    public double GroupVol = 0.0;
    public double BattTemp = 0.0;
@@ -21,9 +21,13 @@
    public double OnlineVolLow = 0.0;
    public int GroupConnType = 0;
    
    public double bakeup1 = 0;
    public double bakeup2 = 0;
    public double bakeup3 = 0;
    /**
     * @lijun 2021-09-03 锂电BTS新增电池参数
     */
    public int BattGroupCountSum;                 //电池组总数(铅酸+锂电,只读)
    public int LiBattGroupCount;                 //锂电组数
    public int LiEachGroupBattCount;             //锂电节数
    public double bakeup4 = 0;
    public double bakeup5 = 0;
    public double bakeup6 = 0;
@@ -68,9 +72,9 @@
        OnlineVolLow = 0.0;
        GroupConnType = 0;
        
        bakeup1 = 0;
        bakeup2 = 0;
        bakeup3 = 0;
        BattGroupCountSum = 0;                 //电池组总数(铅酸+锂电,只读)
        LiBattGroupCount = 0;                 //锂电组数
        LiEachGroupBattCount = 0;             //锂电节数
        bakeup4 = 0;
        bakeup5 = 0;
        bakeup6 = 0;
@@ -111,9 +115,9 @@
        OnlineVolLow = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
        GroupConnType = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        
        bakeup1 = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        bakeup2 = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        bakeup3 = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        BattGroupCountSum = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        LiBattGroupCount = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        LiEachGroupBattCount = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        bakeup4 = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        bakeup5 = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
        bakeup6 = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
@@ -149,9 +153,9 @@
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(OnlineVolLow*10));
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(GroupConnType));
        
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(bakeup1));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(bakeup2));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(bakeup3));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(BattGroupCountSum));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(LiBattGroupCount));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(LiEachGroupBattCount));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(bakeup4));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(bakeup5));
        bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(bakeup6));
@@ -174,8 +178,8 @@
                + ", BattGroupCount=" + BattGroupCount + ", EachGroupBattCount=" + EachGroupBattCount + ", MonomerVol="
                + MonomerVol + ", GroupVol=" + GroupVol + ", BattTemp=" + BattTemp + ", FloatChargeVol="
                + FloatChargeVol + ", FloatChargeCurr=" + FloatChargeCurr + ", OnlineVolLow=" + OnlineVolLow
                + ", GroupConnType=" + GroupConnType + ", bakeup1=" + bakeup1 + ", bakeup2=" + bakeup2 + ", bakeup3="
                + bakeup3 + ", bakeup4=" + bakeup4 + ", bakeup5=" + bakeup5 + ", bakeup6=" + bakeup6 + ", bakeup7="
                + ", GroupConnType=" + GroupConnType + ", bakeup1=" + BattGroupCountSum + ", bakeup2=" + LiBattGroupCount + ", bakeup3="
                + LiEachGroupBattCount + ", bakeup4=" + bakeup4 + ", bakeup5=" + bakeup5 + ", bakeup6=" + bakeup6 + ", bakeup7="
                + bakeup7 + ", bakeup8=" + bakeup8 + ", bakeup9=" + bakeup9 + ", bakeup10=" + bakeup10 + ", CRC=" + CRC
                + "]";
    }
BattMonitor_FBS9100S_Inverter/src/com/version_inf/version_inf.txt
@@ -1,3 +1,28 @@
V10.638 edit at date 2021-09-14 lijun
    1.新增锂电BTS设备相关信息读取
        ①设备对接命令接口
            CMD_GetLiDCDCParam        =    0x8B;        //读取锂电DCDC参数
            CMD_SetLiDCDCParam        =    0x8C;        //设置锂电DCDC参数
            CMD_GetPbDCDCParam        =    0x8D;        //读取铅酸DCDC参数
            CMD_SetPbDCDCParam        =    0x8E;        //设置铅酸DCDC参数
            CMD_GetSXDCDCData        =    0x8F;        //读取双向DCDC内部数据
            CMD_GetLiBMSData        =    0x95;        //读取锂电池BMS模拟量
            CMD_GetLiBMSState        =    0x96;        //读取锂电池BMS告警量
        ②平台对接接口
            CMD_GetLiDCDCParam        =    0x8B;        //读取锂电DCDC参数
            CMD_GetLiDCDCParam_Ack    =     0x8D;        //读取锂电DCDC参数成功
            CMD_SetLiDCDCParam        =    0x8C;        //设置锂电DCDC参数
            CMD_SetLiDCDCParam_Ack    =     0x8E;        //设置锂电DCDC参数成功
            CMD_GetSXDCDCData        =    0x8F;        //读取双向DCDC内部数据
            CMD_GetSXDCDCData_Ack    =     0x92;        //读取双向DCDC内部数据成功
            CMD_GetLiBMSData        =    0x95;        //读取锂电池BMS模拟量
            CMD_GetLiBMSData_Ack     =     0x93;        //读取锂电池BMS模拟量成功
            CMD_GetLiBMSState        =    0x96;        //读取锂电池BMS告警量
            CMD_GetLiBMSState_Ack    =     0x94;        //读取锂电池BMS告警量成功
    2.电池参数新增锂电信息读取
V10.637 edit at date 2021-09-01 lijun
    1.假负载设备新增均衡控制指令;以及单体均衡电流,单体漏液电压,以及均衡供电模块信息读取
        与平台交互指令
BattMonitor_FBS9100S_Inverter/src/main/main_MonitorServer_FBS9100S.java
@@ -28,7 +28,7 @@
    /**************************************************************************/
    /**************************************************************************/
    public final static boolean app_debug = false;
    public final static double m_VersionNum = 10.637;
    public final static double m_VersionNum = 10.638;
    public final static String m_Version = "Welcome To Use BattMonitorFBS9100S V" 
                                            + m_VersionNum + " RC_20201110";
    /**************************************************************************/