mirror of https://github.com/FOME-Tech/fome-fw.git
lambda monitor live data
This commit is contained in:
parent
600d39fd8c
commit
20ebd3a433
|
@ -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"
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
|
@ -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"
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in New Issue