From 20ebd3a433a98f9a5e4486535c5e0bc9c3b1f072 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 25 Jul 2023 23:59:00 -0700 Subject: [PATCH] lambda monitor live data --- firmware/console/binary/live_data.cpp | 5 +++++ firmware/controllers/math/lambda_monitor.cpp | 14 +++++++++----- firmware/controllers/math/lambda_monitor.h | 5 +++-- firmware/controllers/math/lambda_monitor.txt | 5 +++++ firmware/integration/LiveData.yaml | 5 +++++ .../main/java/com/rusefi/ldmp/StateDictionary.java | 1 + 6 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 firmware/controllers/math/lambda_monitor.txt diff --git a/firmware/console/binary/live_data.cpp b/firmware/console/binary/live_data.cpp index 0c023c2849..75717b3118 100644 --- a/firmware/console/binary/live_data.cpp +++ b/firmware/console/binary/live_data.cpp @@ -183,6 +183,11 @@ const throttle_model_s* getLiveData(size_t) { return &engine->module().unmock(); } +template<> +const lambda_monitor_s* getLiveData(size_t) { + return &engine->lambdaMonitor; +} + static const FragmentEntry fragments[] = { // This header is generated - do not edit by hand! #include "live_data_fragments.h" diff --git a/firmware/controllers/math/lambda_monitor.cpp b/firmware/controllers/math/lambda_monitor.cpp index 22dc0aa92c..e23336c533 100644 --- a/firmware/controllers/math/lambda_monitor.cpp +++ b/firmware/controllers/math/lambda_monitor.cpp @@ -13,23 +13,27 @@ float LambdaMonitor::getMaxAllowedLambda(float rpm, float load) const { } bool LambdaMonitorBase::isCut() const { - return m_isCut; + return lambdaMonitorCut; } void LambdaMonitorBase::update(float rpm, float load) { - if (isCurrentlyGood(rpm, load)) { + bool isGood = isCurrentlyGood(rpm, load); + lambdaCurrentlyGood = isGood; + if (isGood) { m_timeSinceGoodLambda.reset(); } + lambdaTimeSinceGood = m_timeSinceGoodLambda.getElapsedSeconds(); + if (m_timeSinceGoodLambda.hasElapsedSec(engineConfiguration->lambdaProtectionTimeout)) { // Things have been bad long enough, cut! - m_isCut = true; + lambdaMonitorCut = true; } - if (m_isCut) { + if (lambdaMonitorCut) { // If things are back to normal, cancel the cut and force a reset if (restoreConditionsMet(rpm, load)) { - m_isCut = false; + lambdaMonitorCut = false; m_timeSinceGoodLambda.reset(); } } diff --git a/firmware/controllers/math/lambda_monitor.h b/firmware/controllers/math/lambda_monitor.h index fdaea8638e..936da4824a 100644 --- a/firmware/controllers/math/lambda_monitor.h +++ b/firmware/controllers/math/lambda_monitor.h @@ -1,6 +1,8 @@ #pragma once -struct LambdaMonitorBase { +#include "lambda_monitor_generated.h" + +struct LambdaMonitorBase : public lambda_monitor_s { void update(float rpm, float load); bool isCut() const; @@ -19,7 +21,6 @@ protected: private: Timer m_timeSinceGoodLambda; - bool m_isCut = false; }; class LambdaMonitor : public LambdaMonitorBase { diff --git a/firmware/controllers/math/lambda_monitor.txt b/firmware/controllers/math/lambda_monitor.txt new file mode 100644 index 0000000000..c2848e016b --- /dev/null +++ b/firmware/controllers/math/lambda_monitor.txt @@ -0,0 +1,5 @@ +struct_no_prefix lambda_monitor_s + bit lambdaCurrentlyGood + bit lambdaMonitorCut + uint16_t autoscale lambdaTimeSinceGood;;"sec", 0.01, 0, 0, 1, 2 +end_struct diff --git a/firmware/integration/LiveData.yaml b/firmware/integration/LiveData.yaml index 8e6f3552a1..8a5f1b4d05 100644 --- a/firmware/integration/LiveData.yaml +++ b/firmware/integration/LiveData.yaml @@ -165,3 +165,8 @@ Usages: folder: controllers/actuators constexpr: "___engine.module()" isPtr: true + + - name: lambda_monitor + java: LambdaMonitor.java + folder: controllers/math + constexpr: "___engine.lambdaMonitor" diff --git a/java_console/io/src/main/java/com/rusefi/ldmp/StateDictionary.java b/java_console/io/src/main/java/com/rusefi/ldmp/StateDictionary.java index e9682fb5f8..422909576a 100644 --- a/java_console/io/src/main/java/com/rusefi/ldmp/StateDictionary.java +++ b/java_console/io/src/main/java/com/rusefi/ldmp/StateDictionary.java @@ -49,6 +49,7 @@ public enum StateDictionary { register(live_data_e.LDS_sent_state, SentState.VALUES, "sent"); register(live_data_e.LDS_throttle_model, ThrottleModel.VALUES, "throttle_model"); register(live_data_e.LDS_vvt, VvtState.VALUES, "vvt"); + register(live_data_e.LDS_lambda_monitor, VvtState.VALUES, "lambda_monitor"); if (map.size() != live_data_e.values().length) { Set missing = new HashSet<>(Arrays.asList(live_data_e.values())); missing.removeAll(map.keySet());