lambda monitor live data

This commit is contained in:
Matthew Kennedy 2023-07-25 23:59:00 -07:00
parent 600d39fd8c
commit 20ebd3a433
6 changed files with 28 additions and 7 deletions

View File

@ -183,6 +183,11 @@ const throttle_model_s* getLiveData(size_t) {
return &engine->module<ThrottleModel>().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"

View File

@ -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();
}
}

View File

@ -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 {

View File

@ -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

View File

@ -165,3 +165,8 @@ Usages:
folder: controllers/actuators
constexpr: "___engine.module<VvtController1>()"
isPtr: true
- name: lambda_monitor
java: LambdaMonitor.java
folder: controllers/math
constexpr: "___engine.lambdaMonitor"

View File

@ -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<live_data_e> missing = new HashSet<>(Arrays.asList(live_data_e.values()));
missing.removeAll(map.keySet());