Skip to content
Go back

Essential KPIs for Energy Management Systems (EMS)

|

Written at somewhere on the Earth

Table of contents

Open Table of contents

The Core Metrics (Economic & Efficiency)

To evaluate whether an EMS strategy is effective, we need to look at not just how much Hydrogen is burned, but also the hidden costs. Here are the 4 fundamental indicators:

1. Total Hydrogen Consumption (mH2m_{H2})

This is the most basic metric. It tells you the physical mass of fuel lost from the tank after completing a driving cycle.

Formula:

mH2=0Tm˙fc(t)dtm_{H2} = \int_{0}^{T} \dot{m}_{fc}(t) \, dt

Where:

Example: You run a simulation of the WLTC cycle for 1800 seconds. The integration of the flow rate results in 500g of Hydrogen. This is the actual amount you would pay for at the pump.


2. State of Charge Deviation (ΔSOC\Delta SOC)

In a Hybrid system (Fuel Cell + Battery), a car can “cheat” by draining the battery to save Hydrogen. This makes the mH2m_{H2} metric artificially low. Therefore, we must track the SOC deviation.

Formula:

ΔSOC=SOCfinalSOCinitial\Delta SOC = SOC_{final} - SOC_{initial}

What it means:


3. Equivalent Fuel Consumption (mequivm_{equiv}) - THE GOLD STANDARD ⭐

To compare algorithms fairly, we must convert the borrowed (or surplus) battery energy into equivalent Hydrogen mass. This is the standard metric used in high-quality research papers.

Formula:

mequiv=mH2+βΔEbattLHVH2m_{equiv} = m_{H2} + \beta \cdot \frac{\Delta E_{batt}}{LHV_{H2}}

Where:

Why this matters:

  • Algorithm A burns 500g H2, but drains the battery by 10% (equivalent to 50g H2). mequiv=500+50=550g\Rightarrow m_{equiv} = 500 + 50 = \mathbf{550g}.
  • Algorithm B burns 520g H2, but keeps the battery level unchanged (0% drain). mequiv=520+0=520g\Rightarrow m_{equiv} = 520 + 0 = \mathbf{520g}.

Verdict: Algorithm B is the winner, even though it burned more physical gas, because it didn’t “cheat” by draining the battery.


4. Fuel Cell Start/Stop Cycles

This metric relates to Durability/Lifetime. Fuel Cells hate being turned on and off repeatedly or fluctuating wildly (just like a light bulb that burns out faster if you flick the switch constantly).

Formula (Counting state changes):

Nstart=k=1Nsign(Pfc(k))sign(Pfc(k1))/2N_{start} = \sum_{k=1}^{N} | \text{sign}(P_{fc}(k)) - \text{sign}(P_{fc}(k-1)) | / 2

(Simply put: count how many times power PfcP_{fc} goes from 0 to >0).

Scenario:

  • Basic Rule-based: Toggles ON/OFF 50 times in 30 minutes (due to traffic lights). \to High membrane stress, reduced lifespan.
  • Optimization Algorithm: Toggles only 5 times, maintaining a steady background power. \to Much healthier for the stack.

Advanced Metrics (For Deep Tech Research)

Beyond economics, as a PhD researcher, you need to prove your algorithm is not just “thrifty” but also “robust” and “feasible.”

5. Power Ramp Rate

Fuel Cells are electrochemical devices; they dislike sudden changes. If you force the power to spike too fast (e.g., stomping the pedal), the reactants cannot diffuse into the catalyst fast enough, causing local Starvation, which degrades the polymer membrane.

Formula:

dPfcdtLimit\left| \frac{dP_{fc}}{dt} \right| \le \text{Limit}

Example:

  • A poor algorithm forces the Fuel Cell to jump from 10kW to 50kW in 1 second.
  • A good algorithm uses the Battery to “absorb the blow” of that acceleration, allowing the Fuel Cell to ramp up gradually over 5-10 seconds.

6. Time in Low-Efficiency Zones

Fuel Cells have “death zones”:

We need to count what percentage of the driving time the FC spends in these “forbidden zones.”

7. Battery Throughput (Stress)

In a Hybrid system, we often abuse the Battery to protect the Fuel Cell. But if we abuse it too much (constant high-current charging/discharging), the Battery will die before the Fuel Cell does. This metric measures the total current throughput.

Ahthroughput=0TIbatt(t)dtAh_{throughput} = \int_{0}^{T} |I_{batt}(t)| \, dt

8. Computational Cost / CPU Time 💻

This is the “killer metric” for Computer Science & Control Engineering.

Why? Because on a simulation laptop (Core i9), calculating for 1 second or 1 millisecond doesn’t matter. But in reality, algorithms must run on ECUs or embedded systems with limited power.

Vehicle control systems operate in Real-time. This means for every sampling step (e.g., Δt=10ms\Delta t = 10ms), the algorithm MUST output a decision (uu).

Feasibility Check:

Tcal<TsamplingT_{cal} < T_{sampling}

Where:

If Tcal>TsamplingT_{cal} > T_{sampling}, the system lags (Overrun), leading to instability or a system crash.

Here is a comparison of computational complexity (Normalized CPU Time) among common algorithm families, illustrating the trade-offs:

Computational Cost Comparison (CPU Time)

Rule-based / Fuzzy ~0.001s (Ultra Fast)
MPC / A-ECMS (Real-time Opt.) ~0.1s - 1s (Heavy)
Dynamic Programming (Global Opt.) > 3600s (Offline Only)

The Selling Point: When comparing your optimized algorithm against the Dynamic Programming (DP) benchmark:

  • DP: Finds the absolute best solution (saves 500g H2), but takes 3 hours to simulate. -> Impossible for real cars.
  • Your optimized algorithm: Consumes 505g H2 (slightly worse), but decides in 0.01 seconds. -> Perfectly feasible for onboard chips.

\to This balance between Optimality and Computability is where the value of your research lies.

To calculate these metrics automatically, you need to export key signals to the MATLAB Workspace.

Step 1: Add “To Workspace” Blocks

In your Simulink model, connect these signals to To Workspace blocks:

  1. H2 Flow Rate: Fuel flow signal (usually g/sg/s) from the Fuel Cell System.
    • Variable name: sim_H2_flow (Format: Array)
  2. SOC: Battery SOC (%).
    • Variable name: sim_SOC (Format: Array)
  3. Vehicle Velocity: Vehicle speed (m/s or km/h).
    • Variable name: sim_V (Format: Array)
  4. FC Power/State: To detect ON/OFF status.
    • Variable name: sim_P_fc (Format: Array)

Step 2: Automatic Calculation Script

Create a new MATLAB script named calc_kpi.m. Paste the code below. After every simulation run, just execute this script to get your report card.

%% --- AUTOMATED KPI CALCULATION SCRIPT ---
% Prerequisite: Run Simulink first to populate Workspace variables

% 1. PHYSICAL CONSTANTS
LHV_H2      = 119960; % (J/g) Lower Heating Value of Hydrogen
V_NOM_PACK  = 345.6;  % (V) Nominal Battery Pack Voltage
Q_PACK_AH   = 17;     % (Ah) Pack Capacity
ETA_FC_AVG  = 0.55;   % Estimated Avg Efficiency of FC System

% Check for data
if ~exist('sim_H2_flow','var') || ~exist('sim_SOC','var')
    error('Data not found! Run Simulink and ensure "To Workspace" blocks are active.');
end

try
    time = sim_H2_flow.time;
    h2_flow = sim_H2_flow.data; % g/s
    soc = sim_SOC.data;         % % (0-100)
    v_veh = sim_V.data;         % m/s
    p_fc = sim_P_fc.data;       % W
catch
    error('Data format error. Check "To Workspace" settings (Structure With Time is recommended).');
end

%% 2. CALCULATE METRICS

% A. Total H2 Consumed (Gram)
dt = [0; diff(time)];
m_h2_total_g = sum(h2_flow .* dt); 

% B. Distance Traveled (km)
dist_m = sum(v_veh .* dt);
dist_km = dist_m / 1000;

% C. Raw Fuel Consumption (kg/100km)
fuel_consumption_raw = (dist_km > 0) ? (m_h2_total_g / 1000) / dist_km * 100 : 0;

% D. Equivalent Consumption (Correcting for SOC)
soc_start = soc(1);
soc_end = soc(end);
delta_soc = soc_start - soc_end; % Positive = Discharged, Negative = Charged

% Battery Energy Used (Joule)
e_batt_used_J = (delta_soc / 100) * Q_PACK_AH * V_NOM_PACK * 3600;

% Equivalent H2 Mass
m_h2_equiv_g = m_h2_total_g + (e_batt_used_J / (LHV_H2 * ETA_FC_AVG));

% E. Equivalent Fuel Consumption (kg/100km)
fuel_consumption_eq = (dist_km > 0) ? (m_h2_equiv_g / 1000) / dist_km * 100 : 0;

% F. Start/Stop Count
fc_status = p_fc > 100; % Threshold 100W to determine ON state
starts = diff([0; fc_status]); 
num_starts = sum(starts == 1);

%% 3. REPORT
fprintf('\n================ PERFORMANCE REPORT ================\n');
fprintf('1. Distance:             %.2f km\n', dist_km);
fprintf('2. Physical H2 Used:     %.2f g\n', m_h2_total_g);
fprintf('3. SOC Delta:            %.1f%% -> %.1f%% (Delta: %.1f%%)\n', soc_start, soc_end, delta_soc);
fprintf('----------------------------------------------------\n');
fprintf('4. Raw Consumption:      %.4f kg/100km\n', fuel_consumption_raw);
fprintf('5. EQUIVALENT CONSUMPTION: %.4f kg/100km (Use this for comparison)\n', fuel_consumption_eq);
fprintf('----------------------------------------------------\n');
fprintf('6. FC Start/Stop Cycles: %d times\n', num_starts);
fprintf('====================================================\n');

Final Thoughts

With these KPIs and the automated script, you can objectively evaluate and compare different EMS strategies. Whether you’re testing a simple control strategy, these metrics will help you prove your solution’s effectiveness and feasibility.


👨🏻‍💻🏀

Previous Post
Academic Writing Notes: Structure, Vocabulary, and the Art of Argumentation
Next Post
From A Fuel Cell to Fuel Cell System: The Fuel Cell Stack and the Balance of Plant (BoP)