package com.dev.ntm.data.idc; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.ArrayList; import com.dev.ntm.data.fbo.FboData; import com.dev.ntm.data.fbo.FboDataInf; public class IdcData { public static final int Data400_Len = 1632; public static final int Data24_Len = 128; public static final int DataVer_YC = 0; public static final int DataVer_MR = 1; public int DataVersion = DataVer_YC; public int DataType; public IdcTestTime DateTime = new IdcTestTime(); public float SumVol; public float SumCur; public float SumAH; public float[] MonomerVol = new float[400]; public void setData(byte[] buf) { ByteBuffer bf = ByteBuffer.allocate(2048); bf.order(ByteOrder.LITTLE_ENDIAN); bf.put(buf); bf.position(0); DataVersion = DataVer_YC; DataType = (bf.getInt()&0xFFFF); DateTime.year = (int) (bf.getShort()&0xFFFF); DateTime.month = (int) (bf.getShort()&0xFFFF); DateTime.dayofweek = (int) (bf.getShort()&0xFFFF); DateTime.day = (int) (bf.getShort()&0xFFFF); DateTime.hour = (int) (bf.getShort()&0xFFFF); DateTime.minute = (int) (bf.getShort()&0xFFFF); DateTime.second = (int) (bf.getShort()&0xFFFF); DateTime.millsecond = (int) (bf.getShort()&0xFFFF); SumVol = bf.getFloat(); SumCur = bf.getFloat(); SumAH = bf.getFloat(); for(int n=0; n<400; n++) { MonomerVol[n] = bf.getFloat(); /*if(MonomerVol[n] > 2.6) { MonomerVol[n] = MonomerVol[n-1]; }*/ if(n > 30) { if(MonomerVol[n] > 0.1) { DataVersion = DataVer_MR; } } } } public static void checkIdcFile(File file, FboDataInf data_inf, ArrayList al_fbo_data) { File f = file; FileInputStream fis = null; try { fis = new FileInputStream(f); byte[] buf = new byte[1024]; if(fis.read(buf, 0, buf.length) == 1024) { IdcDataInf idc_inf = new IdcDataInf(); idc_inf.setDataInf(buf); data_inf.setDataInf(idc_inf); data_inf.DataType = 0xFD; int data_count = 0; int data_len = IdcData.Data400_Len; IdcData idc_data_begin = new IdcData(); IdcData idc_data_tmp = new IdcData(); byte[] databuf = new byte[IdcData.Data400_Len]; FboData fbo_data = new FboData(idc_inf.m_EachBattSum * idc_inf.m_BattGroup); if(fis.read(databuf, 0, data_len) == data_len) { idc_data_tmp.setData(databuf); if(IdcData.DataVer_MR == idc_data_tmp.DataVersion) { data_len = IdcData.Data24_Len; } } fis.skip(IdcData.Data400_Len * (-1)); while(true) { if(fis.read(databuf, 0, data_len) == data_len) { IdcData idc_data = new IdcData(); idc_data.setData(databuf); if(0 == data_count) { idc_data_begin = idc_data; idc_data_tmp = idc_data; if(0xCC == idc_data.DataType) { data_inf.DataType = 0xFC; } } idc_data.DataType = data_inf.DataType; fbo_data = new FboData(idc_inf.m_EachBattSum * idc_inf.m_BattGroup); fbo_data.setData(idc_data); fbo_data.m_TestTime = IdcTestTime.getFboTestTime(idc_data.DateTime, idc_data_begin.DateTime); int second_count = (int) (idc_data.DateTime.getTimeInSecond() - idc_data_tmp.DateTime.getTimeInSecond()); if(second_count > 56) { data_inf.SaveInterval = second_count / 60; if((second_count % 60) > 0) { data_inf.SaveInterval += 1; } } float tmp_cap = (fbo_data.SubCurrent[0] * second_count) / 3600; if(al_fbo_data.size() > 0) { fbo_data.SubCap[0] = al_fbo_data.get(al_fbo_data.size()-1).SubCap[0] + tmp_cap; } else { fbo_data.SubCap[0] = tmp_cap; } fbo_data.AllCap = fbo_data.SubCap[0]; al_fbo_data.add(fbo_data); idc_data_tmp = idc_data; data_count += 1; } else { break; } } data_inf.TestTimeLong.hour = fbo_data.m_TestTime.hour; data_inf.TestTimeLong.minute = fbo_data.m_TestTime.minute; data_inf.TestTimeLong.second = fbo_data.m_TestTime.second; data_inf.TestCur = fbo_data.SubCurrent[0]; data_inf.TestCap = fbo_data.SubCap[0]; data_inf.SMaxIndex[0] = fbo_data.getMaxIndex(); data_inf.SMaxVol[0] = fbo_data.getMaxVol(); data_inf.SMinIndex[0] = fbo_data.getMinIndex(); data_inf.SMinVol[0] = fbo_data.getMinVol(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(null != fis) { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }