| | |
| | | |
| | | |
| | | import com.whyc.pojo.*; |
| | | import com.whyc.util.MathUtil; |
| | | import org.dom4j.Document; |
| | | import org.dom4j.DocumentException; |
| | | import org.dom4j.Element; |
| | |
| | | } |
| | | |
| | | file_node=node.element("batt_res"); |
| | | fparam.setBattRes(Float.parseFloat(file_node.getTextTrim())); |
| | | if(file_node!=null){ |
| | | fparam.setBattRes(Float.parseFloat(file_node.getTextTrim())); |
| | | }else{ |
| | | fparam.setBattRes(0f); |
| | | } |
| | | |
| | | file_node=node.element("batt_res_good"); |
| | | if(file_node!=null){ |
| | | fparam.setBattResGood(Float.parseFloat(file_node.getTextTrim())); |
| | |
| | | if(file_node!=null){ |
| | | fparam.setConnResBad(Float.parseFloat(file_node.getTextTrim())); |
| | | } |
| | | |
| | | float battCap=fparam.getBattCap();//标称容量 |
| | | float battRes=fparam.getBattRes();//标称内阻 |
| | | //-----根据groupNum的值读取测试数据---------------------------// |
| | | Iterator nodes = rootnode.elementIterator("node_batt_num"); |
| | | BattgroupInfo battInfo=new BattgroupInfo(); |
| | | List<BattgroupData> battDataList=new ArrayList(); |
| | | //List<Float> list=new ArrayList();//存放所有的内阻数据 |
| | | List<Float> avglist=new ArrayList();//存放有效的内阻数据用于计算偏差率(当标称内阻为0时,用平内阻) |
| | | int avgNum=0; |
| | | if(nodes!=null){ |
| | | while (nodes.hasNext()){ |
| | | node= (Element) nodes.next(); |
| | |
| | | file_node=node.element("bv_1"); |
| | | battData.setBv(file_node.getTextTrim()); |
| | | file_node=node.element("br_1"); |
| | | battData.setBr(file_node.getTextTrim()); |
| | | String br=file_node.getTextTrim(); |
| | | battData.setBr(br); |
| | | /*float esCap=0f; |
| | | if(battRes==0){ |
| | | esCap=1; |
| | | }else{ |
| | | esCap=battRes/Float.valueOf(br); |
| | | } |
| | | battData.setEstimatedCap(esCap*battCap);*/ |
| | | /* float preCapPercent=MathUtil.getPreCapTest(Float.valueOf(br),battRes); |
| | | //容量百分比修改 |
| | | battData.setPreCapPercent(preCapPercent); |
| | | //预估容量 |
| | | battData.setEstimatedCap(preCapPercent*battCap); |
| | | //内阻偏差率设置默认值为0 |
| | | if(battRes==0){ |
| | | battData.setResDevRate(Float.POSITIVE_INFINITY); |
| | | }else{ |
| | | float resDevRate=(Float.valueOf(br)-battRes)/battRes; |
| | | battData.setResDevRate(resDevRate); |
| | | }*/ |
| | | file_node=node.element("bs_1"); |
| | | battData.setBs(file_node.getTextTrim()); |
| | | file_node=node.element("cr_1"); |
| | | battData.setCr(file_node.getTextTrim()); |
| | | battDataList.add(battData); |
| | | //list.add(Float.valueOf(battData.getBr())); |
| | | //获取有效内阻 |
| | | if(Float.parseFloat(battData.getBv())>0&&Float.parseFloat(battData.getBr())>0){ |
| | | avgNum++; |
| | | avglist.add(Float.parseFloat(battData.getBr())); |
| | | } |
| | | } |
| | | } |
| | | battInfo.setBattDataList(battDataList); |
| | | battInfo.setTestTime(ActionUtil.sdfwithALL.parse(testTime)); |
| | | fileInfo.getBattInfoList().add(battInfo); |
| | | //当标称内阻为0时,计算最低三分之一单体数内阻数据的平均值 |
| | | if(fparam.getBattRes()==0){ |
| | | /*if(list!=null&&list.size()>0){ |
| | | int battNum= (int) Math.ceil(list.size()/3); |
| | | float resSum=0f; |
| | | Collections.sort(list); |
| | | for(int i=0;i<battNum;i++){ |
| | | resSum=resSum+list.get(i); |
| | | } |
| | | String avgRes=String.format("%.2f",resSum/battNum); |
| | | fparam.setBattRes(Float.valueOf(avgRes)); |
| | | }*/ |
| | | //计算平局内阻 |
| | | if(avglist!=null&&avglist.size()>0){ |
| | | Collections.sort(avglist); |
| | | System.err.println(avglist.toString()); |
| | | float sunBr=0f; |
| | | avgNum= (int) Math.ceil(0.01*avgNum*(100-fparam.getSamplePercent())); |
| | | int effNum=0; |
| | | for (int i=0;i<avglist.size();i++) { |
| | | if(i!=0&&i<=avgNum){ |
| | | sunBr+=avglist.get(i); |
| | | effNum++; |
| | | } |
| | | } |
| | | String avgRes=String.format("%.2f",sunBr/effNum); |
| | | fparam.setBattRes(Float.valueOf(avgRes)); |
| | | } |
| | | } |
| | | float effRes=fparam.getBattRes(); //有效的标称内阻 |
| | | for (BattgroupData battData:battInfo.getBattDataList()) { |
| | | float resDevRate=(Float.valueOf(battData.getBr())-effRes)/effRes; |
| | | battData.setResDevRate(resDevRate); |
| | | float preCapPercent=MathUtil.getPreCapTest(Float.valueOf(battData.getBr()),effRes); |
| | | //容量百分比修改 |
| | | battData.setPreCapPercent(preCapPercent); |
| | | //预估容量 |
| | | battData.setEstimatedCap(preCapPercent*battCap); |
| | | } |
| | | fileInfo.setFileParam(fparam); |
| | | fiso.close(); |
| | | } catch (NullPointerException | NumberFormatException | DocumentException | ParseException | FileNotFoundException e) { |
| | |
| | | file_node=node.element("batt_vol"); |
| | | fparam.setBattVol(Float.parseFloat(file_node.getTextTrim())); |
| | | file_node=node.element("batt_res"); |
| | | fparam.setBattRes(Float.parseFloat(file_node.getTextTrim())); |
| | | if(file_node!=null){ |
| | | fparam.setBattRes(Float.parseFloat(file_node.getTextTrim())); |
| | | }else{ |
| | | fparam.setBattRes(0f); |
| | | } |
| | | |
| | | file_node=node.element("gropNum"); |
| | | fparam.setGroupNum(Integer.parseInt(file_node.getTextTrim())); |
| | | |
| | |
| | | |
| | | //-----根据groupNum的值读取测试数据---------------------------// |
| | | Iterator nodes = rootnode.elementIterator("node_group_num"); |
| | | |
| | | float battCap=fparam.getBattCap();//标称容量 |
| | | float battRes=fparam.getBattRes();//标称内阻 |
| | | |
| | | if(nodes!=null){ |
| | | while (nodes.hasNext()){ |
| | | node= (Element) nodes.next(); |
| | | Iterator iterator1 = node.elementIterator(); |
| | | BattgroupInfo battInfo=new BattgroupInfo(); |
| | | List<BattgroupData> battDataList=new ArrayList(); |
| | | //List<Float> list=new ArrayList();//存放所有的内阻数据 |
| | | List<Float> avglist=new ArrayList();//存放有效的内阻数据用于计算偏差率(当标称内阻为0时,用平内阻) |
| | | int avgNum=0; |
| | | while (iterator1.hasNext()){ |
| | | file_node= (Element) iterator1.next(); |
| | | BattgroupData battData=new BattgroupData(); |
| | |
| | | batt_node=file_node.element("bv_1"); |
| | | battData.setBv(batt_node.getTextTrim()); |
| | | batt_node=file_node.element("br_1"); |
| | | battData.setBr(batt_node.getTextTrim()); |
| | | String br=batt_node.getTextTrim(); |
| | | battData.setBr(br); |
| | | /* float esCap=0f; |
| | | if(battRes==0){ |
| | | esCap=1; |
| | | }else{ |
| | | esCap=battRes/Float.valueOf(br); |
| | | } |
| | | battData.setEstimatedCap(esCap*battCap);*/ |
| | | /*float preCapPercent=MathUtil.getPreCapTest(Float.valueOf(br),battRes); |
| | | //容量百分比修改 |
| | | battData.setPreCapPercent(preCapPercent); |
| | | //预估容量 |
| | | battData.setEstimatedCap(preCapPercent*battCap); |
| | | //内阻偏差率 |
| | | if(battRes==0){ |
| | | battData.setResDevRate(Float.POSITIVE_INFINITY); |
| | | }else{ |
| | | float resDevRate=(Float.valueOf(br)-battRes)/battRes; |
| | | battData.setResDevRate(resDevRate); |
| | | }*/ |
| | | |
| | | batt_node=file_node.element("bs_1"); |
| | | battData.setBs(batt_node.getTextTrim()); |
| | | batt_node=file_node.element("cr_1"); |
| | |
| | | batt_node=file_node.element("er_1"); |
| | | battData.setEr(Integer.parseInt(batt_node.getTextTrim())); |
| | | battDataList.add(battData); |
| | | //list.add(Float.valueOf(battData.getBr())); |
| | | //获取有效内阻 |
| | | if(Float.parseFloat(battData.getBv())>0&&Float.parseFloat(battData.getBr())>0){ |
| | | avgNum++; |
| | | avglist.add(Float.parseFloat(battData.getBr())); |
| | | } |
| | | } |
| | | battInfo.setTestTime(ActionUtil.sdfwithALL.parse(testTime)); |
| | | battInfo.setBattDataList(battDataList); |
| | | fileInfo.getBattInfoList().add(battInfo); |
| | | //当标称内阻为0时,计算最低三分之一单体数内阻数据的平均值 |
| | | /*if(fparam.getBattRes()==0){ |
| | | if(list!=null&&list.size()>0){ |
| | | int battNum= (int) Math.ceil(list.size()/3); |
| | | float resSum=0f; |
| | | Collections.sort(list); |
| | | for(int i=0;i<battNum;i++){ |
| | | resSum=resSum+list.get(i); |
| | | } |
| | | String avgRes=String.format("%.2f",resSum/battNum); |
| | | fparam.setBattRes(Float.valueOf(avgRes)); |
| | | } |
| | | }*/ |
| | | if(fparam.getBattRes()==0){ |
| | | //计算平局内阻 |
| | | if(avglist!=null&&avglist.size()>0){ |
| | | Collections.sort(avglist); |
| | | System.err.println(avglist.toString()); |
| | | float sunBr=0f; |
| | | avgNum= (int) Math.ceil(0.01*avgNum*(100-fparam.getSamplePercent())); |
| | | int effNum=0; |
| | | for (int i=0;i<avglist.size();i++) { |
| | | if(i!=0&&i<=avgNum){ |
| | | sunBr+=avglist.get(i); |
| | | effNum++; |
| | | } |
| | | } |
| | | String avgRes=String.format("%.2f",sunBr/effNum); |
| | | fparam.setBattRes(Float.valueOf(avgRes)); |
| | | } |
| | | } |
| | | float effRes=fparam.getBattRes(); //有效的标称内阻 |
| | | for (BattgroupData battData:battInfo.getBattDataList()) { |
| | | float resDevRate=(Float.valueOf(battData.getBr())-effRes)/effRes; |
| | | battData.setResDevRate(resDevRate); |
| | | float preCapPercent=MathUtil.getPreCapTest(Float.valueOf(battData.getBr()),effRes); |
| | | //容量百分比修改 |
| | | battData.setPreCapPercent(preCapPercent); |
| | | //预估容量 |
| | | battData.setEstimatedCap(preCapPercent*battCap); |
| | | } |
| | | } |
| | | } |
| | | fileInfo.setFileParam(fparam); |
| | |
| | | } |
| | | return fileInfo; |
| | | } |
| | | |
| | | |
| | | //解析xml文件 |
| | | public static FileInfo readXml(String xmlFilePath) |
| | | { |
| | |
| | | switch (version){ |
| | | case "V2.0": fileInfo=readFBR_6000NT_bj(xmlFilePath);break; |
| | | case "V2.7": fileInfo=readFBR_6000NT_jc(xmlFilePath);break; |
| | | default:break; |
| | | default:fileInfo=readFBR_6000NT_bj(xmlFilePath);break; |
| | | } |
| | | } |
| | | fiso.close(); |