From e1600777781b711c570c98e3cb3305702f34dafc Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 23 Apr 2019 23:22:39 -0400 Subject: [PATCH] ETB quality instrumentation #494 --- java_console/ui/src/com/rusefi/ETBPane.java | 1 + .../src/com/rusefi/ui/etb/CommandsPanel.java | 24 +++++++- .../com/rusefi/ui/etb/MagicSpotsFinder.java | 60 +++++++++++++------ 3 files changed, 64 insertions(+), 21 deletions(-) diff --git a/java_console/ui/src/com/rusefi/ETBPane.java b/java_console/ui/src/com/rusefi/ETBPane.java index a8bd8f4528..68334ca61e 100644 --- a/java_console/ui/src/com/rusefi/ETBPane.java +++ b/java_console/ui/src/com/rusefi/ETBPane.java @@ -15,6 +15,7 @@ import java.awt.*; * (c) Andrey Belomutskiy 2013-2019 */ public class ETBPane { + public static final String SET_ETB = "set_etb "; private final JPanel content = new JPanel(new BorderLayout()); public ETBPane() { diff --git a/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java b/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java index 1f78f8ad13..1802bf3367 100644 --- a/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java +++ b/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java @@ -1,15 +1,33 @@ package com.rusefi.ui.etb; +import com.rusefi.ETBPane; +import com.rusefi.io.CommandQueue; +import com.rusefi.ui.storage.Node; import com.rusefi.ui.util.UiUtils; +import com.rusefi.ui.widgets.AnyCommand; import org.putgemin.VerticalFlowLayout; import javax.swing.*; public class CommandsPanel { private final JPanel content = new JPanel(new VerticalFlowLayout()); + private final JLabel currentOverride = new JLabel(); public CommandsPanel() { + content.add(currentOverride); + CommandQueue.getInstance().addListener(command -> { + if (command.startsWith(ETBPane.SET_ETB)) { + command = command.substring(ETBPane.SET_ETB.length()); + String finalCommand = command; + SwingUtilities.invokeLater(() -> currentOverride.setText("PWM override " + finalCommand)); + } + }); + JPanel spotsPane = new JPanel(new VerticalFlowLayout()); + spotsPane.setBorder(BorderFactory.createTitledBorder("Magic Spots")); + MagicSpotsFinder magicSpotsFinder = new MagicSpotsFinder(); + spotsPane.add(UiUtils.wrap(magicSpotsFinder.getButton())); + spotsPane.add(magicSpotsFinder.getPoints()); JPanel testParameters = new JPanel(new VerticalFlowLayout()); testParameters.setBorder(BorderFactory.createTitledBorder("Try PID settings")); @@ -24,13 +42,13 @@ public class CommandsPanel { testParameters.add(new JLabel("For example:")); testParameters.add(new JLabel("set etb_p 1.1")); - - content.setBorder(BorderFactory.createTitledBorder("Commands")); content.add(testParameters); + content.add(spotsPane); // content.add(UiUtils.wrap(new EtbMonteCarloSequence().getButton())); -// content.add(UiUtils.wrap(new MagicSpotsFinder().getButton())); + + content.add(AnyCommand.createArea(new Node(), ETBPane.SET_ETB + "10", false, false).getContent()); } public JPanel getContent() { diff --git a/java_console/ui/src/com/rusefi/ui/etb/MagicSpotsFinder.java b/java_console/ui/src/com/rusefi/ui/etb/MagicSpotsFinder.java index 070f76ad54..709a5a7fbf 100644 --- a/java_console/ui/src/com/rusefi/ui/etb/MagicSpotsFinder.java +++ b/java_console/ui/src/com/rusefi/ui/etb/MagicSpotsFinder.java @@ -1,10 +1,12 @@ package com.rusefi.ui.etb; +import com.rusefi.ETBPane; import com.rusefi.core.MessagesCentral; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; import com.rusefi.io.CommandQueue; import com.rusefi.io.InvocationConfirmationListener; +import org.putgemin.VerticalFlowLayout; import javax.swing.*; import java.awt.event.ActionEvent; @@ -24,7 +26,9 @@ public class MagicSpotsFinder { private static final long SLEEP = SECOND; // how much do we want to change duty cycle on each iteration? private static final double DUTY_CYCLE_STEP = 0.5; - private final JButton button = new JButton("ETB Research"); + private static final String MAGIC_SPOTS_FINDER = "Magic Spots Finder"; + private static final int INITIAL_SLEEP = 10 * SECOND; + private final JButton button = new JButton(MAGIC_SPOTS_FINDER); private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); // close to zero but not really zero so that we can validate this value private final static double LOW_VALUE = 0.5; @@ -41,7 +45,13 @@ public class MagicSpotsFinder { private double startedToCloseValue; private double backToZeroValue; - private InvocationConfirmationListener goingDown = new InvocationConfirmationListener() { + private final JPanel points = new JPanel(new VerticalFlowLayout()); + private final JLabel startedToOpenValueLabel = new JLabel("n/a"); + private final JLabel reached100ValueLabel = new JLabel("n/a"); + private final JLabel startedToCloseValueLabel = new JLabel("n/a"); + private final JLabel backToZeroValueLabel = new JLabel("n/a"); + + private final InvocationConfirmationListener goingDown = new InvocationConfirmationListener() { @Override public void onCommandConfirmation() { state = State.GOING_DOWN; @@ -49,40 +59,41 @@ public class MagicSpotsFinder { executor.execute(new Runnable() { @Override public void run() { - sleep(); + sleep(SLEEP); double tpsPosition = SensorCentral.getInstance().getValue(Sensor.TPS); MessagesCentral.getInstance().postMessage(getClass(), "ETB duty " + currentValue + ": tps=" + tpsPosition); if (tpsPosition >= 100) { currentValue -= DUTY_CYCLE_STEP; - CommandQueue.getInstance().write("set_etb " + currentValue, goingDown); + CommandQueue.getInstance().write(ETBPane.SET_ETB + currentValue, goingDown); } else if (tpsPosition > 0) { if (startedToCloseValue == 0) { // if that's the first we've moved let's remember duty cycle value startedToCloseValue = currentValue; + startedToCloseValueLabel.setText(String.format("Started Close %.1f", startedToCloseValue)); MessagesCentral.getInstance().postMessage(getClass(), "Started to close at " + startedToCloseValue); } currentValue -= DUTY_CYCLE_STEP; - CommandQueue.getInstance().write("set_etb " + currentValue, goingDown); - - + CommandQueue.getInstance().write(ETBPane.SET_ETB + currentValue, goingDown); } else { backToZeroValue = currentValue; + backToZeroValueLabel.setText(String.format("Back Zero %.1f", backToZeroValue)); MessagesCentral.getInstance().postMessage(getClass(), "Back closed to close at " + backToZeroValue); MessagesCentral.getInstance().postMessage(getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); MessagesCentral.getInstance().postMessage(getClass(), "startedToCloseValue = " + startedToCloseValue + ", backToZeroValue = " + backToZeroValue); + button.setEnabled(true); + button.setText(MAGIC_SPOTS_FINDER); } - } }); } }; - private InvocationConfirmationListener goingUp = new InvocationConfirmationListener() { + private final InvocationConfirmationListener goingUp = new InvocationConfirmationListener() { @Override public void onCommandConfirmation() { state = State.GOING_UP; @@ -90,7 +101,7 @@ public class MagicSpotsFinder { executor.execute(new Runnable() { @Override public void run() { - sleep(); + sleep(SLEEP); double tpsPosition = SensorCentral.getInstance().getValue(Sensor.TPS); MessagesCentral.getInstance().postMessage(getClass(), "ETB duty " + currentValue + ": tps=" + tpsPosition); @@ -98,27 +109,29 @@ public class MagicSpotsFinder { if (tpsPosition == 0) { // ETB has not moved yet, keep going up currentValue += DUTY_CYCLE_STEP; - CommandQueue.getInstance().write("set_etb " + currentValue, goingUp); + CommandQueue.getInstance().write(ETBPane.SET_ETB + currentValue, goingUp); } else if (tpsPosition < 100) { if (startedToOpenValue == 0) { // if that's the first we've moved let's remember duty cycle value startedToOpenValue = currentValue; + startedToOpenValueLabel.setText(String.format("Start to open: %.1f", startedToOpenValue)); MessagesCentral.getInstance().postMessage(getClass(), "Started to open at " + startedToOpenValue); } // ETB has not reached 100%, keep going up currentValue += DUTY_CYCLE_STEP; - CommandQueue.getInstance().write("set_etb " + currentValue, goingUp); + CommandQueue.getInstance().write(ETBPane.SET_ETB + currentValue, goingUp); } else { // looks like we have reached 100%, cool! reached100Value = currentValue; + reached100ValueLabel.setText(String.format("Reached 100: %.1f", reached100Value)); MessagesCentral.getInstance().postMessage(getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); currentValue -= DUTY_CYCLE_STEP; - CommandQueue.getInstance().write("set_etb " + currentValue, goingDown); + CommandQueue.getInstance().write(ETBPane.SET_ETB + currentValue, goingDown); } } @@ -127,6 +140,10 @@ public class MagicSpotsFinder { } }; + public JPanel getPoints() { + return points; + } + // settings are confirmed, let's start going up from zero private InvocationConfirmationListener setDebugModeConfiguration = new InvocationConfirmationListener() { @Override @@ -139,7 +156,8 @@ public class MagicSpotsFinder { MessagesCentral.getInstance().postMessage(getClass(), "Start!"); resetValues(); - CommandQueue.getInstance().write("set_etb " + currentValue, goingUp); + CommandQueue.getInstance().write(ETBPane.SET_ETB + currentValue, goingUp); + sleep(INITIAL_SLEEP); } }); } @@ -154,9 +172,16 @@ public class MagicSpotsFinder { } public MagicSpotsFinder() { + points.add(startedToOpenValueLabel); + points.add(reached100ValueLabel); + points.add(startedToCloseValueLabel); + points.add(backToZeroValueLabel); + button.addActionListener(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { + button.setEnabled(false); + button.setText("Running..."); // if (!isStarted) { //// metric.start(); // isStarted = true; @@ -169,7 +194,6 @@ public class MagicSpotsFinder { CommandQueue.getInstance().write("set debug_mode " + 29, setDebugModeConfiguration); } }); - } }); } @@ -178,10 +202,10 @@ public class MagicSpotsFinder { return button; } - private void sleep() { + private void sleep(long millis) { try { - MessagesCentral.getInstance().postMessage(getClass(), "Sleeping " + SLEEP + "ms"); - Thread.sleep(SLEEP); + MessagesCentral.getInstance().postMessage(getClass(), "Sleeping " + millis + "ms"); + Thread.sleep(millis); } catch (InterruptedException unexpected) { unexpected.printStackTrace(); throw new IllegalStateException(unexpected);