充放电一体机FGCD通信程序【二期初版】
V1.106 2022-01-18
1. 新增设备版本号读取以及存取
2. 新增设备电池组切换功能
3. 新增内窥镜自动拍照功能
7个文件已修改
2个文件已添加
245 ■■■■ 已修改文件
BattMonitor_FGCD-A059NT/bin/.gitignore 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FGCD-A059NT/log4j2_battmonitor_fgcd_x64.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/comm/FGCD_SocketClient_Thread.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/comm/FGCD_SocketClient_Thread_SQL.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/data/FGCD_ComBase.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/data/FGCD_FileUtils.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/data/FGCD_OnlineInfo.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/data/FGCD_StateAndParam.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FGCD-A059NT/src/main/main_Monitor_FGCD_A059NT.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FGCD-A059NT/bin/.gitignore
@@ -1,18 +1,5 @@
/log4j-1.2.14.jar
/log4j-api-2.13.3.jar
/log4j-core-2.13.3.jar
/log4j.properties
/mchange-commons-java-0.2.9.jar
/mchange-commons.properties
/mchange-log.properties
/mina-core-2.0.4.jar
/mysql-connector-java-5.1.30-bin.jar
/com/
/main/
/poi-3.10.1-20140818.jar
/slf4j-api-1.5.2.jar
/slf4j-log4j12-1.5.2.jar
/spring-beans-2.5.5.jar
/spring-context-2.5.5.jar
/spring-core-2.5.5.jar
/sqljdbc4.jar
BattMonitor_FGCD-A059NT/log4j2_battmonitor_fgcd_x64.xml
@@ -43,7 +43,7 @@
    </Appenders>
    <Loggers>
        <Root level="info">
        <Root level="trace">
            <AppenderRef ref="Console" />
            <appenderRef ref="INFO" />
            <appenderRef ref="ERROR" />
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/comm/FGCD_SocketClient_Thread.java
@@ -1,12 +1,11 @@
package com.dev.fgcd.comm;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Date;
@@ -15,23 +14,17 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.battmonitor.base.Com;
import com.battmonitor.data.BattData_RT;
import com.battmonitor.data.BattData_RT_Array;
import com.battmonitor.data.BattData_RT_SQL;
import com.battmonitor.sql.MysqlConnPool;
import com.dev.btse.comm.FBS9100S_SocketClient2;
import com.dev.btse.comm.FBS9100_Task_Thread_SQL;
import com.dev.btse.data.ComFn;
import com.dev.btse.data.Ecb_Aes;
import com.dev.btse.data.FBS9100_ComBase;
import com.dev.btse.data.FBS9100_ParamDischarge;
import com.dev.btse.data.FBS9100_SysState;
import com.dev.btse.data.FBS9100_VCData;
import com.dev.fgcd.data.FGCD_BattTestParam;
import com.dev.fgcd.data.FGCD_Cmd;
import com.dev.fgcd.data.FGCD_ComBase;
import com.dev.fgcd.data.FGCD_ComBuf;
import com.dev.fgcd.data.FGCD_OnlineInfo;
import com.dev.fgcd.data.FGCD_StateAndParam;
import com.dev.fgcd.data.FGCD_SysState;
import com.dev.fgcd.data.FGCD_TestFBOFile;
@@ -47,6 +40,7 @@
    
    private FGCD_BattTestParam testParam;           //电池测试参数
    private FGCD_SysState sysState;                 //ϵͳ״̬
    private FGCD_OnlineInfo onlineInfo;                //在线模块状态
    private FGCD_Cmd m_FBS_Cmd = new FGCD_Cmd();
    public FGCD_TestFBOFile fboFile;                //历史数据文件
@@ -83,6 +77,7 @@
        testParam = new FGCD_BattTestParam();
        m_StatAndParam = new FGCD_StateAndParam();
        sysState = m_StatAndParam.getSysState();
        onlineInfo = m_StatAndParam.getOnlineInfo();
        vc_data = new FGCD_VCData();
        logger = LogManager.getLogger(this);
    }
@@ -195,8 +190,7 @@
            if(m_BattMonCount > (FGCD_ComBase.MonomerCountMax-120)) {
                m_BattMonCount = (FGCD_ComBase.MonomerCountMax-120);
            }
            logger.warn("DevId: " + m_StatAndParam.dev_id + ", DevVer: " + m_StatAndParam.m_DevVersion
                            + " - FBS9100S_SocketServer Thread Started");
            logger.warn("DevId: " + m_StatAndParam.dev_id + " - FBS9100S_SocketClient Thread Started");
        }
        while(FGCD_Thread_Mark) {            
            try {
@@ -264,6 +258,21 @@
                        SocketComm(FGCD_ComBase.CMD_PAUSEHHTEST, ByteBuffer.allocate(0));
                    }
                    
                    if(FGCD_ComBase.CMD_SetNowBatt == m_StatAndParam.op_cmd) {
                        FGCD_BattTestParam tmp_set_pm = testParam.clone();
                        FGCD_SocketClient_Thread_SQL.queryFbs9100SetParamBydev_id(m_ConnPool, m_StatAndParam, tmp_set_pm);
                        logger.debug("dev_id:"+m_StatAndParam.dev_id+"\t切换电池组号:" + tmp_set_pm.groupCount);
                        //设置电池组号
                        SocketComm(FGCD_ComBase.CMD_SETNOWWORKBATT, tmp_set_pm.groupCount);
                        tmp_set_pm = null;
                    }else if(FGCD_ComBase.CMD_StartShowPic == m_StatAndParam.op_cmd) {
                        //开始显示图片
                        SocketComm(FGCD_ComBase.CMD_STARTSHOWPIC, 1);
                    }else if(FGCD_ComBase.CMD_StopShowPic == m_StatAndParam.op_cmd) {
                        //停止显示图片
                        SocketComm(FGCD_ComBase.CMD_STARTSHOWPIC, 0);
                    }
                }
                /************************    清除告警      *****************************************************/
                {                    
@@ -310,8 +319,24 @@
                    readCharData = false;
                }
                
                if(DevReadCount % 50 == 0) {
                    //15s读取一次版本信息
                    //logger.info("获取设备版本号");
                    FGCD_Cmd tmp_cmd = new FGCD_Cmd(FGCD_ComBase.CMD_READDEVICEVERSION);
                    SocketComm(tmp_cmd, ByteBuffer.allocate(0));
                    tmp_cmd = null;
                }
                if(DevReadCount % 13 == 0) {
                    //
                    logger.info("获取在线模块状态");
                    FGCD_Cmd tmp_cmd = new FGCD_Cmd(FGCD_ComBase.CMD_READONLINEMODEINFO);
                    SocketComm(tmp_cmd, ByteBuffer.allocate(0));
                    tmp_cmd = null;
                }
                DevReadCount++;
                if(DevReadCount >= 100) {
                if(DevReadCount >= 2400) {
                    DevReadCount = 0;
                }
            } catch (Exception e) {
@@ -930,9 +955,48 @@
                if(fboFile.putByteBuffer(bf,m_FBS_Cmd.Db2)) {
                    //读取文件列表成功
                    fboFile.op_cmd = FGCD_ComBase.CMD_ReadFBDFile_ACK;
                    System.out.println("读取文件列表成功");
                    logger.debug("dev_id:"+m_StatAndParam.dev_id+"读取文件列表成功");
                    FGCD_SocketClient_Thread_SQL.updateTb_Fgcd_Filedownload_Table(m_ConnPool, fboFile);
                    isSuccess = true;
                }
            }else if(FGCD_ComBase.CMD_READDEVICEVERSION == m_FBS_Cmd.CMD) {
                if(bf.limit() >0) {
                    byte[] ver = new byte[bf.limit()];
                    bf.get(ver);
                    //System.err.println(ComFn.bytesToHexString(ver, ver.length));
                    try {
                        m_StatAndParam.m_DevVersion = new String(ver, "utf-8");
                        logger.debug("dev_id:"+m_StatAndParam.dev_id+"\t读取设备版本号成功:"+m_StatAndParam.m_DevVersion);
                        isSuccess = true;
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
            }else if(FGCD_ComBase.CMD_READONLINEMODEINFO == m_FBS_Cmd.CMD) {
                if(onlineInfo.putByteBuffer(bf)) {
                    logger.debug("dev_id:"+m_StatAndParam.dev_id+"\t 读取在线模块信息成功"+onlineInfo);
                    isSuccess = true;
                }
            }else if(FGCD_ComBase.CMD_SETNOWWORKBATT == m_FBS_Cmd.CMD) {
                if(FGCD_ComBase.RETURN_SUCCESS == m_FBS_Cmd.RecState) {
                    m_StatAndParam.op_cmd_ack = FGCD_ComBase.CMD_SetNowBatt_ACK;
                    FGCD_SocketClient_Thread_SQL.updateFbs9100SetParamCmdAckBydev_id(m_ConnPool,m_StatAndParam);
                    isSuccess = true;
                    logger.debug("dev_id:"+m_StatAndParam.dev_id+"\t 设置电池组号" + testParam.groupCount + "成功");
                }
            }else if(FGCD_ComBase.CMD_STARTSHOWPIC == m_FBS_Cmd.CMD) {
                if(FGCD_ComBase.RETURN_SUCCESS == m_FBS_Cmd.RecState) {
                    if(FGCD_ComBase.CMD_StartShowPic == m_StatAndParam.op_cmd) {
                        m_StatAndParam.op_cmd_ack = FGCD_ComBase.CMD_StartShowPic_ACK;
                        logger.debug("dev_id:"+m_StatAndParam.dev_id+"\t 开始显示内窥镜成功·");
                    } else if(FGCD_ComBase.CMD_StopShowPic == m_StatAndParam.op_cmd){
                        m_StatAndParam.op_cmd_ack = FGCD_ComBase.CMD_StopShowPic_ACK;
                        logger.debug("dev_id:"+m_StatAndParam.dev_id+"\t 停止显示内窥镜成功·");
                    } else {
                        m_StatAndParam.op_cmd_ack = FGCD_ComBase.CMD_NULL;
                    }
                    FGCD_SocketClient_Thread_SQL.updateFbs9100SetParamCmdAckBydev_id(m_ConnPool,m_StatAndParam);
                    isSuccess = true;
                }
            }
        }
@@ -1020,6 +1084,12 @@
        }
    }
    public static void main(String[] args) {
        System.out.println(0x80);
        byte[] b = new byte[]{0x46 ,0x47, 0x43 ,0x44,0x2D ,0x41 ,0x30 ,0x35 ,0x39 ,0x58 ,0x54 ,0x20 ,0x50 ,0x72 ,0x6F ,0x2C ,0x56 ,0x31 ,0x2E ,0x38 ,0x2E ,0x30 ,0x2E ,0x38 ,0x2C ,0x31 ,0x3A ,0x49 ,0x44 ,0x43 ,0x45 ,0x2D ,0x50 ,0x72 ,0x6F ,0x2D ,0x38 ,0x4B ,0x57 ,0x2D ,0x56 ,0x33 ,0x2E ,0x30 ,0x31 ,0x2E ,0x31 ,0x39 ,0x20 };
        try {
            System.out.println(new String(b,"utf-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/comm/FGCD_SocketClient_Thread_SQL.java
@@ -1225,6 +1225,15 @@
                    
                    + "dev_last_captest_stop_type=" + m_pm.sysState.dev_captest_stop_type + ", "
                    + "dev_captest_cap=" + m_pm.sysState.testCap + ", "
                    /***
                     * 2022-01-17新增在线模块信息
                     */
                    + "dev_conresist=" + m_pm.onlineInfo.batt1_vol + ", "                //电池组1电压
                    + "dev_conresist1=" + m_pm.onlineInfo.batt2_vol + ", "                //电池组2电压
                    + "dev_onlinevollow=" + m_pm.onlineInfo.currBattNum + ", "            //当前电池组号    0->未设置;1->电池组1;2->电池组2
                    + "dev_station_poff_cnt=" + m_pm.onlineInfo.endoscopeState + ", "    //内窥镜状态  0->停止显示  1->开始显示
                    + "dev_data_flowsum=" + m_pm.sysState.dev_data_flowsum+ ", "
                    + "dev_commcount=" + m_pm.sysState.dev_commcount+ ", "
                    + "dev_errcommcount=" + m_pm.sysState.dev_errcommcount;
@@ -1793,12 +1802,16 @@
    public static void insertOrUpdateFbs9100SetParamBydev_id(MysqlConnPool con_pool, int dev_id) {
        String sql_str_sel = " Select * from "+Sql_Mysql.FBS9100SetParam_Table+" where dev_id= "+dev_id ;
        String sql_str_ins = " insert into "+Sql_Mysql.FBS9100SetParam_Table+"(dev_id) values("+dev_id+")";
        String sql_str_upd = " update "+Sql_Mysql.FBS9100SetParam_Table+" set op_cmd = 0";
        Sql_Mysql sql = new Sql_Mysql(con_pool.getConn());
        ResultSet res = null;
        try {
            res = sql.sqlMysqlQuery(sql_str_sel);
            if(!res.next()) {
                sql.sqlMysqlExecute(sql_str_ins);
            }else {
                //清空通信之前的控制命令
                sql.sqlMysqlExecute(sql_str_upd);
            }
        } catch (SQLException e) {
            sql.logger.error("FGCD_SocketClient_Thread_SQL.insertOrUpdateFbs9100SetParamBydev_id():" + e.toString(), e);
@@ -2740,6 +2753,7 @@
    public static void insertFBS9100_SysParamDefaultData(MysqlConnPool conn_pool,FGCD_StateAndParam param) {
        String sql_str_sel = " Select * from "+Sql_Mysql.FBS9100SysParam_Table +" Where dev_id = "+param.dev_id;
        String sql_str_ins = " insert into " + Sql_Mysql.FBS9100SysParam_Table+"(dev_id) values("+param.dev_id+")";
        String sql_str_upd = " update " + Sql_Mysql.FBS9100SysParam_Table+" set op_cmd = 0";
        ResultSet res = null;
        Sql_Mysql sql = null;
        try {
@@ -2747,6 +2761,9 @@
            res = sql.sqlMysqlQuery(sql_str_sel);
            if(!res.next()) {
                sql.sqlMysqlExecute(sql_str_ins);
            }else {
                //清空通信之前的控制命令
                sql.sqlMysqlExecute(sql_str_upd);
            }
        } catch (SQLException e) {
            e.printStackTrace();
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/data/FGCD_ComBase.java
@@ -167,6 +167,13 @@
    public static final int        CMD_ClearSysAlarm               =   0xB8;        //清除告警            
    public static final int        CMD_ClearSysAlarm_ACK           =   0xB9;        //清除告警成功
    
    public static final int        CMD_SetNowBatt                  =   0xBA;        //设置当前电池组
    public static final int        CMD_SetNowBatt_ACK               =   0xBB;        //设置当前电池组成功
    public static final int        CMD_StartShowPic                   =   0xBC;        //开始显示内窥镜图片
    public static final int        CMD_StartShowPic_ACK            =   0xBD;        //开始显示内窥镜图片成功
    public static final int        CMD_StopShowPic                   =   0xBE;        //停止显示内窥镜图片
    public static final int        CMD_StopShowPic_ACK             =   0xBF;        //停止显示内窥镜图片成功
    //------------ Android  读取命令 ---------------------------------------------------------------------
    public static final int        CMD_InterFace_Main               =   0x00;        //主界面    
    public static final int        CMD_InterFace_Disc               =   0x01;        //放电参数界面    
@@ -224,6 +231,12 @@
    public static final int     CMD_READTMPTESTDATA                =   0x0A28;            //获取温度测试数据
    public static final int     CMD_DELBATTTESTFILE                =   0x0A29;            //获取温度测试数据
    
    public static final int     CMD_READDEVICEVERSION            =   0x0A2A;            //获取设备版本号
    public static final int     CMD_READONLINEMODEINFO            =   0x0A2B;            //读取在线模块信息
    public static final int     CMD_SETNOWWORKBATT                =   0x0A2C;            //设置当前电池组
    public static final int     CMD_STARTSHOWPIC                =   0x0A2D;            //开始显示内窥镜图片
    public static final int     WORKSTATE_Stopped               =  0;        //ֹͣ
    public static final int     WORKSTATE_Paused_Dischg           =  1;        //暂停放电
    public static final int     WORKSTATE_Discharging             =  2;        //正在放电
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/data/FGCD_FileUtils.java
New file
@@ -0,0 +1,47 @@
package com.dev.fgcd.data;
import java.io.File;
public class FGCD_FileUtils {
    //需要存储目录
    public String tarGetPath = "apache-tomcat-7.0.67/webapps/A059/images/";
    private int dev_id;
    public FGCD_FileUtils(int dev_id) {
        this.dev_id = dev_id;
    }
    public boolean createPicFile(byte[] files) {
        boolean flag = true;
        String path = System.getProperty("user.dir");
        System.out.println(path);
        File file = new File(path);
        File root = file.getParentFile().getParentFile();
        System.out.println("root:"+root.getAbsolutePath());
        tarGetPath = root.getAbsolutePath() + File.separator + tarGetPath;
        System.out.println(tarGetPath);
        checkFilePath(tarGetPath);
        return flag;
    }
    /**
     * 判断当前文件目录是否存在不存在则创建
     * @param path
     */
    public void checkFilePath(String path) {
        File file = new File(path);
        if(!file.exists()) {
            System.out.println(file.mkdirs());
        }
    }
    public static void main(String[] args) {
        FGCD_FileUtils utils = new FGCD_FileUtils(805900001);
        utils.createPicFile(new byte[1]);
    }
}
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/data/FGCD_OnlineInfo.java
New file
@@ -0,0 +1,44 @@
package com.dev.fgcd.data;
import java.nio.ByteBuffer;
import java.util.Arrays;
/**
 *     在线模块信息
 * @author LiJun
 *
 */
public class FGCD_OnlineInfo {
    private final int BYTE_LEN = 24;
    public double batt1_vol;            //电池组1电压
    public double batt2_vol;            //电池组2电压
    public int currBattNum;                //当前选择的电池组;0:未选择电池组
    public int endoscopeState;            //内窥镜状态->0停止显示;1:开始显示
    public int backup[] = new int[14];
    public boolean putByteBuffer(ByteBuffer bf) {
        if(bf.limit()<BYTE_LEN) {
            return false;
        }
        ByteBuffer tmpbuf = bf;
        tmpbuf.position(0);
        batt1_vol = bf.getFloat();                                    //电池组1电压
        batt2_vol = bf.getFloat();                                    //电池组2电压
        currBattNum = FGCD_ComBase.changeByteToInt(bf.get());
        endoscopeState = FGCD_ComBase.changeByteToInt(bf.get());
        for(int i = 0 ; i < backup.length ; i++) {
            backup[i] = FGCD_ComBase.changeByteToInt(bf.get());
        }
        return true;
    }
    @Override
    public String toString() {
        return "FGCD_OnlineInfo [BYTE_LEN=" + BYTE_LEN + ", batt1_vol=" + batt1_vol + ", batt2_vol=" + batt2_vol
                + ", currBattNum=" + currBattNum + ", endoscopeState=" + endoscopeState + ", backup="
                + Arrays.toString(backup) + "]";
    }
}
BattMonitor_FGCD-A059NT/src/com/dev/fgcd/data/FGCD_StateAndParam.java
@@ -13,6 +13,7 @@
    
    
    public FGCD_SysState sysState = new FGCD_SysState();
    public FGCD_OnlineInfo onlineInfo = new FGCD_OnlineInfo();
    public int getDev_id() {
        return dev_id;
@@ -61,5 +62,13 @@
    public void setSysState(FGCD_SysState sysState) {
        this.sysState = sysState;
    }
    public FGCD_OnlineInfo getOnlineInfo() {
        return onlineInfo;
    }
    public void setOnlineInfo(FGCD_OnlineInfo onlineInfo) {
        this.onlineInfo = onlineInfo;
    }
    
}
BattMonitor_FGCD-A059NT/src/main/main_Monitor_FGCD_A059NT.java
@@ -17,7 +17,7 @@
public class main_Monitor_FGCD_A059NT {
    public final static double m_VersionNum = 1.104;
    public final static double m_VersionNum = 1.106;
    public final static String m_Version = "Welcome To Use main_Monitor_FGCD_A059NT PRO 20210714 V" 
                                            + m_VersionNum ;
    /**************************************************************************/