Administrator
2021-05-13 80ef12799a70a916846aa9cf50562c919e6e9357
V1.201 edit at date 2021-02-12
1.通过识别当前模块是否是锂电池进行读取锂电池数据
7个文件已修改
166 ■■■■■ 已修改文件
BattFBS9600XSP2/src/com/dev/fbs9600/FBS9600_ServerSocket_Thread.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattFBS9600XSP2/src/com/dev/fbs9600/FBS9600_SocketClient2.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattFBS9600XSP2/src/com/dev/fbs9600/FBS9600_State.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattFBS9600XSP2/src/com/dev/fbs9600/FBS9600_State_SQL.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattFBS9600XSP2/src/com/dev/modbus4j/MyModbusMaster.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattFBS9600XSP2/src/com/sql/Sql_Mysql.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattFBS9600XSP2/src/com/version_inf/version_inf.txt 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattFBS9600XSP2/src/com/dev/fbs9600/FBS9600_ServerSocket_Thread.java
@@ -28,7 +28,7 @@
        while(true) {
            try {
                logger.info(" FBS9600_ServerSocket_Thread 开始监听9611端口");
                //监听9100端口
                //监听9611端口
                server = new ServerSocket(9611);
                while(true) {
                    Socket tmp_socket = server.accept();
BattFBS9600XSP2/src/com/dev/fbs9600/FBS9600_SocketClient2.java
@@ -207,6 +207,7 @@
                e.printStackTrace();
            }
        }
        master.destory();
        logger.trace(m_FBS9600_State.dev_id+"  at " + Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
    }
@@ -221,6 +222,14 @@
        if(m_FBS9600_State.putGroupBatchResult(res,index,battData_RT)) {
            battData_RT.updata_BattRtSate_To_RamDb();            //更新电池组端数据
        }        
        if(m_FBS9600_State.batt_type[index] == 1) {
            //读取锂电池数据
            batch = m_FBS9600_State.createLithiumBatchRead(master,index);
            res = MyModbusUtils.readMutilRegisters(batch, master);
            if(m_FBS9600_State.putLithiumBatchResult(res,index,battData_RT)) {
                FBS9600_State_SQL.insertOrUpdate(conn, m_FBS9600_State.lidata[index]);                                //更新锂电池实时数据
            }
        }
    }
    
    private void readMonData(BattData_RT battData_RT,int index) {
BattFBS9600XSP2/src/com/dev/fbs9600/FBS9600_State.java
@@ -1,7 +1,5 @@
package com.dev.fbs9600;
import java.util.Arrays;
import com.battdata_rt.BattData_RT;
import com.dev.modbus4j.MyModbusMaster;
import com.dev.modbus4j.MyModbusUtils;
@@ -29,7 +27,9 @@
    public int[] dev_works = new int[BATT_MAXGOROUP_COUNT];
    public float[] dev_currs = new float[BATT_MAXGOROUP_COUNT];
    public float[] dev_groupvols = new float[BATT_MAXGOROUP_COUNT];
    public int[] batt_type =  new int[BATT_MAXGOROUP_COUNT];                        //电池类型0铅酸;1锂电池
    public FBS9600_Lithium_Data[] lidata = new FBS9600_Lithium_Data[BATT_MAXGOROUP_COUNT];
    public FBS9600_State(String ipaddr, int id) {
        this.ip_addr = ipaddr;
        this.dev_id = id;
@@ -119,6 +119,8 @@
        batch.addLocator(3,MyModbusUtils.createBaseLocator(0x0007+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //蓄电池状态                            
        batch.addLocator(4,MyModbusUtils.createBaseLocator(0x000A+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //纹波电流均值                            
        batch.addLocator(5,MyModbusUtils.createBaseLocator(0x000B+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //纹波电流峰值                                
        batch.addLocator(6,MyModbusUtils.createBaseLocator(0x098D+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //电池类型
        return batch;
    }
@@ -139,6 +141,7 @@
            float curr_avg = ((float)res.getIntValue(4))/10;
            float curr_top = ((float)res.getIntValue(5))/10;
            //System.out.println(res);
            batt_type[index] = res.getIntValue(6);        //电池型号
            return true;
        }
        return false;
@@ -248,4 +251,58 @@
        this.com_err_count = master.getTotalerr();
        
    }
    public BatchRead<Integer> createLithiumBatchRead(MyModbusMaster master, int index) {
        int offset = index*0x1000;
        BatchRead<Integer> batch = new BatchRead<Integer>();
        batch.addLocator(0,MyModbusUtils.createBaseLocator(0x0ABE+offset,DataType.TWO_BYTE_INT_UNSIGNED, master));            //环境温度
        batch.addLocator(1,MyModbusUtils.createBaseLocator(0x0ABF+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));            //功率温度
        batch.addLocator(2,MyModbusUtils.createBaseLocator(0x0AC0+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));            //剩余容量
        batch.addLocator(3,MyModbusUtils.createBaseLocator(0x0AC1+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));            //自定义遥测量数量
        batch.addLocator(4,MyModbusUtils.createBaseLocator(0x0AC2+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));            //电池总容量
        batch.addLocator(5,MyModbusUtils.createBaseLocator(0x0AC3+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));            //电池循环次数
        batch.addLocator(6,MyModbusUtils.createBaseLocator(0x0AC4+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));            //环境温度告警状态
        batch.addLocator(7,MyModbusUtils.createBaseLocator(0x0AC5+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));            //功率温度告警状态
        batch.addLocator(8,MyModbusUtils.createBaseLocator(0x0AC6+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));            //充放电电流告警状态
        batch.addLocator(9,MyModbusUtils.createBaseLocator(0x0AC7+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));            //电池总电压告警状态
        batch.addLocator(10,MyModbusUtils.createBaseLocator(0x0AC8+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //自定义告警量数量
        batch.addLocator(11,MyModbusUtils.createBaseLocator(0x0AC9+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //均衡事件代码
        batch.addLocator(12,MyModbusUtils.createBaseLocator(0x0ACA+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //电压事件代码
        batch.addLocator(13,MyModbusUtils.createBaseLocator(0x0ACB+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //温度事件代码
        batch.addLocator(14,MyModbusUtils.createBaseLocator(0x0ACC+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //电流事件代码
        batch.addLocator(15,MyModbusUtils.createBaseLocator(0x0ACD+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //FET状态代码
        batch.addLocator(16,MyModbusUtils.createBaseLocator(0x0ACE+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //均衡状态代码
        batch.addLocator(17,MyModbusUtils.createBaseLocator(0x0ACF+offset, DataType.TWO_BYTE_INT_UNSIGNED, master));        //系统状态代码
        return batch;
    }
    public boolean putLithiumBatchResult(BatchResults<Integer> res, int index,BattData_RT battData_RT) {
        if(null != res) {
            if(null == lidata[index]) {
                lidata[index] = new FBS9600_Lithium_Data(battData_RT.BattGroupId);
            }
            FBS9600_Lithium_Data data = lidata[index];
            data.envir_tmp = ((float)res.getIntValue(0)-100)/10;                    //'环境温度',
            data.power_tmp = ((float)res.getIntValue(1)-100)/10;                    //'功率温度',
            data.rest_cap = ((float)res.getIntValue(2))/100;                        //'剩余容量',
            data.remote_control_count = res.getIntValue(3);                            //'自定义遥控数量',
            data.batt_total_cap = (float)res.getIntValue(4);                        //'电池总容量',
            data.batt_cycles = res.getIntValue(5);                                    //'电池循环次数',
            data.evir_tmp_alm_state = res.getIntValue(6);                            //'环境温度告警状态',
            data.power_tmp_alm_state = res.getIntValue(7);                            //'功率温度告警状态',
            data.discharge_curr_alm_state = res.getIntValue(8);                        //'充放电电流告警状态',
            data.batt_totalvol_alm_state = res.getIntValue(9);                        //'电池总电压告警状态',
            data.custom_alm_count = res.getIntValue(10);                            //'自定义告警量数量',
            data.junheng_event_code = res.getIntValue(11);                            //'均衡事件代码',
            data.vol_event_code = res.getIntValue(12);                                //'电压事件代码',
            data.tmp_event_code = res.getIntValue(13);                                //'温度事件代码',
            data.curr_event_code = res.getIntValue(14);                                //'电流事件代码',
            data.fet_state_code = res.getIntValue(15);                                //'FET状态代码',
            data.junheng_state_code = res.getIntValue(16);                            //'均衡状态代码',
            data.sys_state_code = res.getIntValue(17);                                //'系统状态代码',
            return true;
        }
        return false;
    }
}
BattFBS9600XSP2/src/com/dev/fbs9600/FBS9600_State_SQL.java
@@ -10,6 +10,60 @@
public class FBS9600_State_SQL {
    
    /**
     * 插入或更新锂电池数据
     * @param pool
     * @param data
     */
    public static void insertOrUpdate(MysqlConnPool pool,FBS9600_Lithium_Data data) {
        String sql_str = " SELECT BattGroupId,record_time FROM "+Sql_Mysql.Tb_Lithium_Data_Table+" WHERE BattGroupId = " + data.BattGroupId;
        String sql_ins = " INSERT INTO "+Sql_Mysql.Tb_Lithium_Data_Table+"(BattGroupId,record_time) VALUES("+data.BattGroupId+",'"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)+"'); ";
        String sql_upd = " UPDATE " + Sql_Mysql.Tb_Lithium_Data_Table +
                " Set record_time= '" + Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms) +
                "',envir_tmp= " +data.envir_tmp +
                ",power_tmp= " + data.power_tmp +
                ",rest_cap= " + data.rest_cap +
                ",remote_control_count= " + data.remote_control_count +
                ",batt_total_cap= " + data.batt_total_cap +
                ",batt_cycles= " + data.batt_cycles +
                ",evir_tmp_alm_state= " + data.evir_tmp_alm_state +
                ",power_tmp_alm_state= " + data.power_tmp_alm_state +
                ",discharge_curr_alm_state= " + data.discharge_curr_alm_state +
                ",batt_totalvol_alm_state= " + data.batt_totalvol_alm_state +
                ",custom_alm_count= " + data.custom_alm_count +
                ",junheng_event_code= " + data.junheng_event_code +
                ",vol_event_code= " + data.vol_event_code +
                ",tmp_event_code= " + data.tmp_event_code +
                ",curr_event_code= " + data.curr_event_code +
                ",fet_state_code= " + data.fet_state_code +
                ",junheng_state_code= " + data.junheng_state_code +
                ",sys_state_code= " + data.sys_state_code +
                " WHERE BattGroupId =  " + data.BattGroupId;
        ResultSet res = null;
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            res = sql.sqlMysqlQuery(sql_str);
            if(res.next()) {
                sql.sqlMysqlExecute(sql_upd);
            }else {
                sql.sqlMysqlExecute(sql_ins);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            sql.close_con();
        }
    }
    /**
     *     查询当前是否有控制操作
@@ -378,4 +432,13 @@
        }
    }
    
    public static void main(String[] args) {
        MysqlConnPool pool = new MysqlConnPool("127.0.0.1", 3360, 10);
        FBS9600_Lithium_Data data = new FBS9600_Lithium_Data(1000003);
        insertOrUpdate(pool, data);
    }
}
BattFBS9600XSP2/src/com/dev/modbus4j/MyModbusMaster.java
@@ -1,5 +1,6 @@
package com.dev.modbus4j;
import java.io.IOException;
import java.net.Socket;
import com.serotonin.modbus4j.ModbusMaster;
@@ -157,6 +158,17 @@
        this.slaveId = slaveId;
    }
    public void destory() {
        master.destroy();
        if(null != socket) {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    @Override
    public String toString() {
        return "MyModbusMaster [SLAVEID_DEFAULT=" + SLAVEID_DEFAULT + ", master=" + master + ", errcount=" + errcount
BattFBS9600XSP2/src/com/sql/Sql_Mysql.java
@@ -96,6 +96,11 @@
    public static final String Tb_Batt_Param_LowTable = "web_site.tb_batt_param_low";
    public static final String Tb_AnnounceTable = "web_site.tb_announce";
    public static final String Tb_Process_SurveyTable = "web_site.tb_process_survey";
    public static final String Tb_Lithium_Data_Table = DB_RamDB + ".`tb_lithium_data`";
    public Connection mysql_con;
    public Sql_Mysql(Connection conn) {
BattFBS9600XSP2/src/com/version_inf/version_inf.txt
@@ -1,7 +1,13 @@
9600显示屏通讯程序
V1.201 edit at date 2021-02-12
    1.通过识别当前模块是否是锂电池进行读取锂电池数据
V1.102 edit at date 2021-04-29
    1.修改使用modbus4j框架和9600显示屏进行通信
    2.修复多组电池组bug
V1.101 edit at date 2021-04-28
    修改成被动式通讯方式
V1.102 edit at date 2021-04-29
    1.修改使用modbus4j框架和9600显示屏进行通信
    2.修复多组电池组bug