diff --git a/java_console/models/src/com/irnems/core/Sensor.java b/java_console/models/src/com/irnems/core/Sensor.java index 83b9f4df84..aeec63ba76 100644 --- a/java_console/models/src/com/irnems/core/Sensor.java +++ b/java_console/models/src/com/irnems/core/Sensor.java @@ -34,10 +34,16 @@ public enum Sensor { VREF_WIDTH("VRef w", "", 1), DWELL0("Dwell0", "ms", 0, 30, BackgroundColor.BEIGE), DWELL1("Dwell1", "ms", 0, 30, BackgroundColor.BEIGE), + DWELL2("Dwell2", "ms", 0, 30, BackgroundColor.BEIGE), + DWELL3("Dwell3", "ms", 0, 30, BackgroundColor.BEIGE), TOTAL_DWELL0("total Dwell0", "ms", 0, 30, BackgroundColor.BEIGE), TOTAL_DWELL1("total Dwell1", "ms", 0, 30, BackgroundColor.BEIGE), + TOTAL_DWELL2("total Dwell2", "ms", 0, 30, BackgroundColor.BEIGE), + TOTAL_DWELL3("total Dwell3", "ms", 0, 30, BackgroundColor.BEIGE), ADVANCE0("Advance0", "dg", -40, 40, BackgroundColor.BROWN), ADVANCE1("Advance1", "dg", -40, 40, BackgroundColor.BROWN), + ADVANCE2("Advance2", "dg", -40, 40, BackgroundColor.BROWN), + ADVANCE3("Advance3", "dg", -40, 40, BackgroundColor.BROWN), PERIOD0("Period", "dg", 0, 400), DUTY0("Duty0", "%", 0, 100, BackgroundColor.RED), DUTY1("Duty1", "%", 0, 100, BackgroundColor.RED), diff --git a/java_console/models/src/com/irnems/core/SensorCentral.java b/java_console/models/src/com/irnems/core/SensorCentral.java index 8885983afe..ec6f3f82d7 100644 --- a/java_console/models/src/com/irnems/core/SensorCentral.java +++ b/java_console/models/src/com/irnems/core/SensorCentral.java @@ -84,10 +84,20 @@ public class SensorCentral { addDoubleSensor("baro", Sensor.BARO, es); addDoubleSensor("clt", Sensor.CLT, es); addDoubleSensor("tp", Sensor.TPS, es); + addDoubleSensor(Sensor.DWELL0, es); addDoubleSensor(Sensor.DWELL1, es); + addDoubleSensor(Sensor.DWELL2, es); + addDoubleSensor(Sensor.DWELL3, es); addDoubleSensor(Sensor.TOTAL_DWELL0, es); addDoubleSensor(Sensor.TOTAL_DWELL1, es); + addDoubleSensor(Sensor.TOTAL_DWELL2, es); + addDoubleSensor(Sensor.TOTAL_DWELL3, es); + addDoubleSensor(Sensor.ADVANCE0, es); + addDoubleSensor(Sensor.ADVANCE1, es); + addDoubleSensor(Sensor.ADVANCE2, es); + addDoubleSensor(Sensor.ADVANCE3, es); + addDoubleSensor("tch", Sensor.T_CHARGE, es); addDoubleSensor(Sensor.AFR, es); addDoubleSensor("d_fuel", Sensor.DEFAULT_FUEL, es); @@ -97,8 +107,6 @@ public class SensorCentral { addDoubleSensor(Sensor.FUEL_CLT, es); addDoubleSensor(Sensor.FUEL_IAT, es); addDoubleSensor(Sensor.TABLE_SPARK, es); - addDoubleSensor(Sensor.ADVANCE0, es); - addDoubleSensor(Sensor.ADVANCE1, es); addDoubleSensor(Sensor.VREF, es); addDoubleSensor(Sensor.VBATT, es); addDoubleSensor(Sensor.MAF, es); diff --git a/java_console/ui/src/com/rusefi/EcuStimulator.java b/java_console/ui/src/com/rusefi/EcuStimulator.java index 5d9fd913d4..3377a9fff5 100644 --- a/java_console/ui/src/com/rusefi/EcuStimulator.java +++ b/java_console/ui/src/com/rusefi/EcuStimulator.java @@ -46,6 +46,7 @@ public class EcuStimulator { private static final int RPM_MAX = 6000; private static final int RPM_INCREMENT = 250; private static final Sensor DWELL_SENSOR = Sensor.DWELL0; + public static final Sensor ADVANCE_SENSOR = Sensor.ADVANCE0; private static final String CSV_FILE_NAME = "table" + RPM_INCREMENT + "_" + EL_INCREMENT + ".csv"; @@ -71,7 +72,7 @@ public class EcuStimulator { JPanel panel = ChartHelper.create3DControl(data, model, TITLE); content.add(statusLabel, BorderLayout.NORTH); content.add(panel, BorderLayout.CENTER); - content.add(inputs.getContent(), BorderLayout.WEST); + content.add(inputs.getContent(), BorderLayout.SOUTH); } public static EcuStimulator getInstance() { @@ -98,12 +99,12 @@ public class EcuStimulator { ResultListener listener = new ResultListener() { @Override - public void onResult(int rpm, double maf, float advance, double dwell) { - data.addPoint(new Point3D(rpm, maf, (float) dwell)); + public void onResult(int rpm, double engineLoad, float advance, double dwell) { + data.addPoint(new Point3D(rpm, engineLoad, (float) advance)); model.plot().execute(); String msg = putValue("rpm", rpm) + - putValue("engine_load", maf) + + putValue("engine_load", engineLoad) + putValue("advance", advance) + putValue("dwell", dwell); MessagesCentral.getInstance().postMessage(EcuStimulator.class, msg); @@ -131,50 +132,53 @@ public class EcuStimulator { } private void buildTable(ResultListener listener, Sensor dwellSensor) { - for (int rpm = RPM_MIN; rpm <= RPM_MAX; rpm += RPM_INCREMENT) - runSimulation(rpm, listener, dwellSensor); + for (int rpm = inputs.getRpmFrom(); rpm <= inputs.getRpmTo(); rpm += RPM_INCREMENT) { + for (double engineLoad = inputs.getEngineLoadMin(); engineLoad <= inputs.getEngineLoadMax(); engineLoad += EL_INCREMENT) { + for (int clt = inputs.getCltFrom(); clt <= inputs.getCltTo(); clt += 100) { + testPoint(rpm, engineLoad, clt, listener, dwellSensor); + } + } + } } - private void runSimulation(int rpm, ResultListener resultListener, final Sensor dwellSensor) { - for (double engineLoad = inputs.getEngineLoadMin(); engineLoad <= inputs.getEngineLoadMax(); engineLoad += EL_INCREMENT) { - //setPotVoltage(maf, Sensor.MAF); - setPotVoltage(engineLoad, null); - setRpm(rpm); - /** - * Let's give the firmware some time to react - */ - sleepRuntime(SLEEP_TIME); + private void testPoint(int rpm, double engineLoad, int clt, ResultListener resultListener, Sensor dwellSensor) { + //setPotVoltage(maf, Sensor.MAF); + setPotVoltage(engineLoad, null); + setRpm(rpm); + /** + * Let's give the firmware some time to react + */ + sleepRuntime(SLEEP_TIME); - statusLabel.setText("RPM " + rpm + ", el " + engineLoad); + statusLabel.setText("RPM " + rpm + ", el " + engineLoad + ", CLT " + clt); - /** - * We are making a number of measurements and then we take the middle one - */ - MultipleMeasurements r = waitForMultipleResults(dwellSensor); - List dwells = r.getDwells(); - List advances = r.getAdvances(); + /** + * We are making a number of measurements and then we take the middle one + */ + MultipleMeasurements r = waitForMultipleResults(dwellSensor, ADVANCE_SENSOR); + List dwells = r.getDwells(); + List advances = r.getAdvances(); - // sorting measurements, taking middle value - Collections.sort(dwells); - Collections.sort(advances); + // sorting measurements, taking middle value + Collections.sort(dwells); + Collections.sort(advances); - double dwellDiff = Math.abs(dwells.get(0) - dwells.get(MEASURES - 1)); - if (dwellDiff > 1) - System.out.println("dwells " + dwells); + double dwellDiff = Math.abs(dwells.get(0) - dwells.get(MEASURES - 1)); + if (dwellDiff > 1) + System.out.println("dwells " + dwells); - double dwell = dwells.get(MEASURES / 2); - double advance = advances.get(MEASURES / 2); + double dwell = dwells.get(MEASURES / 2); + double advance = advances.get(MEASURES / 2); - if (dwell > 40) - throw new IllegalStateException("Unexpected value, how comes? " + dwell); +// if (dwell > 40) +// throw new IllegalStateException("Unexpected value, how comes? " + dwell); - log("Stimulator result: " + rpm + "@" + engineLoad + ": " + dwell); + log("Stimulator result: " + rpm + "@" + engineLoad + ": " + dwell); // double dwell = Launcher.getAdcModel().getValue(Sensor.DWELL0); // double advance = Launcher.getAdcModel().getValue(Sensor.ADVANCE); - resultListener.onResult(rpm, engineLoad, (float) advance, dwell); - } + resultListener.onResult(rpm, engineLoad, (float) advance, dwell); } private static void sleepRuntime(long sleepTime) { @@ -282,7 +286,7 @@ public class EcuStimulator { void onResult(int rpm, double engineLoad, float advance, double dwell); } - public MultipleMeasurements waitForMultipleResults(final Sensor dwellSensor) { + public MultipleMeasurements waitForMultipleResults(final Sensor dwellSensor, final Sensor advanceSensor) { final MultipleMeasurements result = new MultipleMeasurements(); final CountDownLatch latch = new CountDownLatch(MEASURES); @@ -293,7 +297,8 @@ public class EcuStimulator { if (latch.getCount() == 0) return; double dwell = getValue(dwellSensor); - double advance = 0;//getValue(Sensor.ADVANCE0); + double advance = getValue(advanceSensor); + advance = processAdvance(advance); result.dwells.add(dwell); result.advances.add(advance); latch.countDown(); @@ -309,6 +314,10 @@ public class EcuStimulator { return result; } + private double processAdvance(double advance) { + return advance > 360 ? advance - 720 : advance; + } + private class MultipleMeasurements { private List dwells = new ArrayList<>(MEASURES); private List advances = new ArrayList<>(MEASURES); diff --git a/java_console/ui/src/com/rusefi/StimulationInputs.java b/java_console/ui/src/com/rusefi/StimulationInputs.java index 8de74a9bff..e200a49b3a 100644 --- a/java_console/ui/src/com/rusefi/StimulationInputs.java +++ b/java_console/ui/src/com/rusefi/StimulationInputs.java @@ -10,20 +10,28 @@ import java.awt.*; * (c) Andrey Belomutskiy */ public class StimulationInputs { - - private final JPanel content = new JPanel(new GridLayout(12, 1)); - - private final JSpinner loadEngineMin = new JSpinner(new SpinnerNumberModel(1.0, 0.0, 5.0, 0.1)); - private final JSpinner loadEngineMax = new JSpinner(new SpinnerNumberModel(4.0, 0.0, 5.0, 0.1)); + private final JPanel content = new JPanel(new GridLayout(7, 1)); private final JSpinner elResistance2 = new JSpinner(new SpinnerNumberModel(10000, 0, 100000, 1)); + private final ValueRangeControl elRange = new ValueRangeControl("engine load", 1, 0.1, 4.6); + + private final ValueRangeControl rpmRange = new ValueRangeControl("RPM", 400, 100, 6000); + private final ValueRangeControl cltRange = new ValueRangeControl("CLR r", 100, 100, 100); + private final ValueRangeControl iatRange = new ValueRangeControl("IAT r", 100, 100, 9900); + private final ValueRangeControl tpsRange = new ValueRangeControl("TPS", 1, 0.1, 4.5); public StimulationInputs(EcuStimulator ecuStimulator) { - content.add(new JLabel("Engine load from")); - content.add(wrap(loadEngineMin)); - content.add(new JLabel("Engine load to")); - content.add(wrap(loadEngineMax)); + JPanel channelPanel = new JPanel(new FlowLayout()); + channelPanel.add(new JLabel("Input channel")); + content.add(channelPanel); + + + content.add(rpmRange.getContent()); + content.add(elRange.getContent()); + content.add(cltRange.getContent()); + content.add(iatRange.getContent()); + content.add(tpsRange.getContent()); content.add(new JLabel("EL resistance")); content.add(wrap(elResistance2)); @@ -34,11 +42,27 @@ public class StimulationInputs { } public double getEngineLoadMin() { - return (Double) loadEngineMin.getValue(); + return elRange.getFrom(); } public double getEngineLoadMax() { - return (Double) loadEngineMax.getValue(); + return elRange.getTo(); + } + + public int getRpmFrom() { + return (int) rpmRange.getFrom(); + } + + public int getRpmTo() { + return (int) rpmRange.getTo(); + } + + public int getCltFrom() { + return (int) cltRange.getFrom(); + } + + public int getCltTo() { + return (int) cltRange.getTo(); } public static JComponent wrap(JComponent component) {