whyclj
2019-11-23 d4c7dbd51fa93b0dae3d55f68518a12bb20ed79c
platforms/android/app/src/main/java/com/socket/BattDataThread.java
@@ -22,6 +22,7 @@
 *     电池组组操作相关类
 */
public class BattDataThread extends Thread{
    public static final int TESTTYPE_NULL    = 0;               //
    public static final int TESTTYPE_CHRTEST = 2;               //充电测试
    public static final int TESTTYPE_DISTEST = 3;               //放电测试
    public static final int TESTTYPE_RESTEST = 5;               //内阻测试
@@ -33,17 +34,18 @@
    public Handler mSocketHandler = null;
    private CommSockClientThread clientThread = null;
    public boolean isInstall = false;                                   //是否安装
    public int battIndex = 1;                                           //电池组ID                   默认电池组ID
    public Concentrator_Param param;                                    //汇集器参数
    public Concentrator_State state;                                    //汇集器状态
    public boolean isInstall = false;                                               //是否安装
    public int battIndex = 1;                                                       //电池组ID                   默认电池组ID
    public Concentrator_Param param;                                                //汇集器参数
    public Concentrator_State state;                                                //汇集器状态
    public Battinf battinf;                                                         //电池组信息
    public DBHelper dbHelper;
    public WebView webView;
    public Date lastUpdateTime = new Date();                                         //上一次获取数据时间
    public boolean isOutTime = true;                                    //通讯是否超时               超时重连时会重新获取设备的系统参数
    public boolean isOutTime = true;                                                //通讯是否超时               超时重连时会重新获取设备的系统参数
    public long loseTimeLong = 0;                                                   //断开连接时长
    public BattDataThread(int battIndex, DBHelper dbHelper,WebView webView){
        this.webView = webView;
@@ -52,6 +54,7 @@
        param = new Concentrator_Param();
        state = new Concentrator_State();
        clientThread = CommSockClientThread.createClientThread();      //串口通讯线程                     //每个电池组通用同一个串口线程
        BattResDataRecordThread battResDataRecordThread = new BattResDataRecordThread(this,dbHelper);
        battResDataRecordThread.start();
@@ -78,16 +81,19 @@
                                //Log.e(TAG, "handleMessage: 获取设备状态成功" );
                            }else if(model.cmd >= Concentrator_ComBase.CMD_MODEBUS_BATTMONVOL_INDEX && model.cmd < Concentrator_ComBase.CMD_MODEBUS_BATTMONTMP_INDEX){
                                //读取单体电压成功
                                int index = (model.cmd - Concentrator_ComBase.CMD_MODEBUS_BATTMONVOL_INDEX);
                                //Log.e(TAG, "handleMessage: 获取单体电压成功" );
                                state.cloneMonVol((Concentrator_State)model.data);
                                state.cloneMonVol((Concentrator_State)model.data,index);
                            }else if(model.cmd >=  Concentrator_ComBase.CMD_MODEBUS_BATTMONTMP_INDEX && model.cmd < Concentrator_ComBase.CMD_MODEBUS_BATTMONRES_INDEX){
                                //读取单体温度成功
                                int index = (model.cmd - Concentrator_ComBase.CMD_MODEBUS_BATTMONTMP_INDEX);
                                //Log.e(TAG, "handleMessage: 获取单体温度成功" );
                                state.cloneMonTmp((Concentrator_State)model.data);
                                state.cloneMonTmp((Concentrator_State)model.data,index);
                            }else if(model.cmd >= Concentrator_ComBase.CMD_MODEBUS_BATTMONRES_INDEX && model.cmd < (Concentrator_ComBase.CMD_MODEBUS_BATTMONRES_INDEX+300)){
                                //读取单体内阻成功
                                int index = (model.cmd - Concentrator_ComBase.CMD_MODEBUS_BATTMONRES_INDEX);
                                //Log.e(TAG, "handleMessage: 获取单体内阻成功" );
                                state.cloneMonRes((Concentrator_State)model.data);
                                state.cloneMonRes((Concentrator_State)model.data,index);
                            }
                        }else if(model.cmd_type == Concentrator_ComBase.CMD_MODEBUS_WRITECMD){
                            //设置成功
@@ -125,19 +131,21 @@
        while(true){
            try {
                //Log.e(TAG, "run: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&install" + isInstall+"\tOutTime"+isOutTime);
                //Log.e(TAG, "run: &&&&&&&&&&&&&&&&"+battIndex+"&&&&&&&&&&&&&&&&&&&&&&&&&&&install" + isInstall+"\tOutTime"+isOutTime);
                if(isInstall){
                    //如果当前电池组已安装则实时获取当前电池组的单体信息
                    if( isOutTime ){
                        //超时之后只获取当前的系统参数
                        readSystemParam("");                                                          //读取系统参数
                        if(runCount %15 == 0) {
                            //超时之后只获取当前的系统参数
                            readSystemParam("");                                                          //读取系统参数
                        }
                    }else{
                        if(runCount %15 == 0){
                            //读取系统状态
                            readSystemState("");
                        }
                        if(runCount % 15 == 0){
                        if(runCount % 20 == 0){
                            int maxCount = (int)Math.ceil((double)state.monCount/100);              //最多需要读取次数
                            int monindex = monRCount % maxCount;                                     //单体索引
                            //读取单体电压
@@ -155,14 +163,12 @@
                }
                runCount ++;
                nowTime = new Date();
                long timeCount =  (nowTime.getTime() - lastUpdateTime.getTime())/1000;
                if(timeCount > 60){
                loseTimeLong =  (nowTime.getTime() - lastUpdateTime.getTime())/1000;
                if(loseTimeLong > 60){
                    isOutTime = true;                                                               //60秒未通讯判定为通讯超时
                }else{
                    isOutTime = false;
                }
                sleep(200);
            } catch (Exception e) {
@@ -170,6 +176,7 @@
            }
        }
    }
    //获取系统参数
    public void readSystemParam(String method){
@@ -235,6 +242,7 @@
        Message childMsg = clientThread.mHandler.obtainMessage();
        childMsg.obj = model;
        //Log.e(TAG, battIndex+"sendMessageToSocketClient: isStall"+ isInstall);
        return (clientThread.mHandler.sendMessage(childMsg));
    }