Skip to content
Go back

Các chỉ số đánh giá hiệu suất (KPIs) cho Hệ Thống Quản Lý Năng Lượng (EMS)

|

Written at somewhere on the Earth

Table of contents

Open Table of contents

Giới thiệu

Trong các bài viết trước của series Fuel Cell, chúng ta đã đi từ Cấu tạo tế bào đến Hệ thống Stack & BoP. Chúng ta đã có phần cứng (Hardware) hoàn chỉnh.

Tuy nhiên, để vận hành hệ thống phức tạp này trên một chiếc xe lai (Hybrid), chúng ta cần một “bộ não”. Đó chính là Hệ Thống Quản Lý Năng Lượng (Energy Management System - EMS).

Nhưng làm sao để biết “bộ não” A thông minh hơn “bộ não” B? Làm sao để chứng minh thuật toán này tối ưu (Optimization) hơn thuật toán khác ? “Làm sao để biết thuật toán điều khiển của bạn ‘xịn’ hay ‘dở’? Cùng thiết lập các chỉ số KPI quan trọng: từ tiêu thụ nhiên liệu đến bảo vệ tuổi thọ pin nhiên liệu trong hệ thống truyền động lai pin nhiên liệu (Fuel Cell Hybrid Powertrain - FCHP).

Trong giai đoạn nghiên cứu, việc thiết lập các thước đo hay Chỉ số đánh giá hiệu suất (Key Performance Indicators - KPIs) là bước đầu tiên và quan trọng nhất. Bài viết này sẽ tổng hợp các công thức cốt lõi mà mình sử dụng để đánh giá một chiến lược EMS. 📊

Các chỉ số đánh giá cốt lõi (KPIs)

Để đánh giá một chiến lược EMS có hiệu quả hay không, chúng ta có rất nhiều chỉ số để đánh giá hiệu suất và sức khỏe của hệ thống. Dưới đây là 4 chỉ số quan trọng nhất:

1. Tổng lượng Hydro tiêu thụ thực tế (mH2m_{H2})

Đây là chỉ số cơ bản nhất. Nó cho biết khối lượng nhiên liệu vật lý đã bị mất đi khỏi bình chứa sau khi xe hoàn thành một chu trình lái (Driving Cycle).

Công thức:

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

Trong đó:

Ví dụ minh họa: Bạn chạy mô phỏng chu trình WLTC trong 1800 giây. Tổng tích phân lưu lượng dòng chảy cho ra kết quả là 500g Hydro. Đây là số tiền thực tế bạn phải trả tại trạm bơm.


2. Độ lệch trạng thái năng lượng pin (ΔSOC\Delta SOC)

Trong hệ thống Hybrid (Fuel Cell + Battery), xe có thể “ăn gian” bằng cách rút cạn năng lượng trong pin để tiết kiệm Hydro. Điều này làm cho chỉ số mH2m_{H2} thấp một cách giả tạo. Vì vậy, ta cần theo dõi độ lệch SOC (State of Charge).

Công thức:

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

Ý nghĩa:


3. Mức tiêu thụ nhiên liệu tương đương (mequivm_{equiv})

Để so sánh công bằng giữa các thuật toán, chúng ta phải quy đổi phần năng lượng pin bị mất (hoặc dư) ra thành Hydro. Đây là chỉ số chuẩn mực trong các bài báo khoa học.

Công thức:

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

Trong đó:

Ví dụ minh họa:

  • Thuật toán A tiêu thụ 500g Hydro, nhưng làm pin tụt 10% (tương đương năng lượng của 50g Hydro).

  • mequiv=500+50=550g\Rightarrow m_{equiv} = 500 + 50 = \mathbf{550g}.

  • Thuật toán B tiêu thụ 520g Hydro, nhưng giữ nguyên pin (tụt 0%).

  • mequiv=520+0=520g\Rightarrow m_{equiv} = 520 + 0 = \mathbf{520g}.

Kết luận: Thuật toán B tốt hơn A, dù lượng Hydro vật lý tiêu thụ cao hơn (520g so với 500g), vì nó không “ăn gian” điện của pin.


4. Số lần Bật/Tắt Fuel Cell (Start/Stop Cycles) & Biến thiên công suất

Đây là chỉ số liên quan đến Tuổi thọ (Durability/Lifetime). Fuel Cell rất “ghét” việc bị bật tắt liên tục hoặc thay đổi công suất đột ngột (giống như bóng đèn bật tắt nhiều sẽ nhanh cháy).

Công thức (Đếm số lần chuyển trạng thái):

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

(Đơn giản là đếm số lần công suất PfcP_{fc} đi từ 0 lên >0).

Ví dụ minh họa:

  • Rule-based cơ bản: Bật tắt 50 lần trong 30 phút (Do xe dừng đèn đỏ liên tục). \to Hại màng Stack, giảm tuổi thọ.
  • Thuật toán Tối ưu: Chỉ bật tắt 5 lần, duy trì công suất nền ổn định. \to Bảo vệ Stack tốt hơn.

5. Tốc độ biến thiên công suất (Power Ramp Rate)

Fuel Cell là một thiết bị phản ứng điện hóa, nó không thích sự thay đổi đột ngột. Nếu bạn ép nó tăng công suất quá nhanh (ví dụ đạp thốc ga), khí nạp sẽ không kịp khuếch tán vào màng xúc tác, gây ra hiện tượng “đói khí” (Starvation) cục bộ, làm hỏng màng Polymer.

Công thức:

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

Ví dụ:

  • Một thuật toán tồi sẽ bắt Fuel Cell nhảy từ 10kW lên 50kW trong 1 giây.
  • Một thuật toán tốt sẽ dùng Pin (Battery) để “đỡ đòn” cú tăng tốc đó, cho phép Fuel Cell tăng từ từ trong 5-10 giây.

6. Thời gian hoạt động ở vùng hiệu suất thấp (Time in Low-Efficiency Zones)

Một đặc tính “chết người” của Fuel Cell là:

Chúng ta cần đếm xem bao nhiêu % thời gian xe chạy mà FC bị rơi vào các “vùng cấm” này để đánh giá độ bền.

7. Thông lượng pin (Battery Throughput)

Trong hệ thống Hybrid, chúng ta hay dùng Pin để bảo vệ Fuel Cell. Nhưng nếu lạm dụng quá mức (nạp xả liên tục với dòng lớn), Pin sẽ “chết” sớm hơn cả Fuel Cell. Chỉ số này đo lường tổng lượng điện năng đi qua pin.

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

8. Thời gian tính toán (Computational Cost / CPU Time) 💻

Đây là chỉ số quan trọng nhất đối với dân Computer ScienceControl Engineering.

Tại sao? Vì trên máy tính mô phỏng (Laptop Core i9), việc tính toán mất 1 giây hay 1 mili-giây không quan trọng. Nhưng trên thực tế, thuật toán phải chạy trên các ECU (Electronic Control Unit) hoặc vi điều khiển nhúng (Embedded Systems) với sức mạnh hạn chế.

Hệ thống điều khiển trên xe hơi hoạt động theo cơ chế Real-time (Thời gian thực). Tức là cứ mỗi chu kỳ lấy mẫu (Sampling time - ví dụ Δt=10ms\Delta t = 10ms), thuật toán BẮT BUỘC phải đưa ra được quyết định điều khiển (uu).

Công thức kiểm tra tính khả thi:

Tcal<TsamplingT_{cal} < T_{sampling}

Trong đó:

Nếu Tcal>TsamplingT_{cal} > T_{sampling}, hệ thống sẽ bị trễ (Overrun), dẫn đến mất ổn định hoặc treo xe.

Dưới đây là bảng so sánh trực quan về độ phức tạp tính toán (Normalized CPU Time) giữa các dòng thuật toán phổ biến để bạn dễ hình dung tại sao chúng ta cần đánh đổi:

So sánh Thời gian Tính toán (CPU Time)

Rule-based / Fuzzy ~0.001s (Siêu nhanh)
MPC / A-ECMS (Real-time Opt.) ~0.1s - 1s (Nặng)
Dynamic Programming (Global Opt.) > 3600s (Không thể chạy Real-time)

Ví dụ minh họa cho bài báo: Khi so sánh thuật toán AI của bạn với thuật toán tối ưu Dynamic Programming (DP):

  • DP: Tìm ra nghiệm tối ưu nhất (tiết kiệm 500g Hydro), nhưng mất 3 giờ để chạy mô phỏng. -> Không thể áp dụng thực tế, chỉ dùng làm Benchmark. \to Đây chính là giá trị (“Selling point”) của đề tài nghiên cứu: Sự cân bằng giữa Hiệu suất (Optimality) và Tính toán (Computability).

Bạn cần xuất các tín hiệu quan trọng ra Workspace của MATLAB để tính toán sau khi chạy xong mô phỏng.

Bước 1: Thêm khối To Workspace

Trong mô hình Simulink của bạn, hãy tìm các đường tín hiệu sau và nối vào khối To Workspace:

  1. H2 Flow Rate: Tín hiệu dòng chảy nhiên liệu (thường là g/sg/s) từ khối Fuel Cell System.

    • Đặt tên biến: sim_H2_flow (Format: Array)
  2. SOC: Tín hiệu SOC từ khối Battery (đơn vị %).

    • Đặt tên biến: sim_SOC (Format: Array)
  3. Vehicle Velocity: Tín hiệu vận tốc xe (m/s hoặc km/h).

    • Đặt tên biến: sim_V (Format: Array)
  4. FC State (On/Off): Tín hiệu logic (hoặc công suất P_fc) để biết FC đang chạy hay tắt.

    • Đặt tên biến: sim_P_fc (Format: Array)

Bước 2: Cài đặt Sample Time

Để tính tích phân chính xác, hãy đảm bảo các khối To Workspace có Sample Time trùng với bước chạy của Solver (ví dụ: 0.01 hoặc -1 để kế thừa).

7. Script tính toán tự động (Code MATLAB)

Sau khi bạn setup xong Simulink, hãy tạo một file mới tên là calc_kpi.m và dán đoạn code này vào. Mỗi lần chạy xong Simulink, bạn chỉ cần chạy file này là nó tự tính ra bảng kết quả.

%% --- SCRIPT TÍNH TOÁN CHỈ SỐ TIÊU THỤ NĂNG LƯỢNG (BASELINE) ---
% Yêu cầu: Chạy mô phỏng Simulink trước để có dữ liệu trong Workspace

% 1. CẤU HÌNH THÔNG SỐ VẬT LÝ
LHV_H2      = 119960; % (J/g) Nhiệt trị thấp của Hydro (Theo báo cáo ANL)
V_NOM_PACK  = 345.6;  % (V) Điện áp danh định pack pin (3.6V * 96)
Q_PACK_AH   = 17;     % (Ah) Dung lượng pack pin (4.25Ah * 4)
ETA_FC_AVG  = 0.55;   % Hiệu suất trung bình ước lượng của FC (55%)

% Kiểm tra dữ liệu tồn tại
if ~exist('sim_H2_flow','var') || ~exist('sim_SOC','var')
    error('Chưa thấy dữ liệu! Hãy chạy Simulink và dùng khối "To Workspace" lưu biến sim_H2_flow, sim_SOC, sim_V');
end

% Lấy dữ liệu từ Workspace (Giả sử format là Timeseries hoặc StructureWithTime)
% Nếu bạn để format Array thì bỏ dòng .data đi
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 (giả sử input là m/s)
    p_fc = sim_P_fc.data;       % W hoặc kW
catch
    error('Lỗi định dạng dữ liệu. Hãy kiểm tra setting khối To Workspace (nên để Structure With Time)');
end

%% 2. TÍNH TOÁN CHỈ SỐ

% A. Tổng Hydro tiêu thụ (Gram)
% Tích phân theo thời gian: sum(flow * dt)
dt = [0; diff(time)];
m_h2_total_g = sum(h2_flow .* dt); 

% B. Quãng đường di chuyển (km)
dist_m = sum(v_veh .* dt);
dist_km = dist_m / 1000;

% C. Mức tiêu thụ thực tế (kg/100km)
if dist_km > 0
    fuel_consumption_raw = (m_h2_total_g / 1000) / dist_km * 100;
else
    fuel_consumption_raw = 0;
end

% D. Độ lệch SOC và Năng lượng pin bù trừ
soc_start = soc(1);
soc_end = soc(end);
delta_soc = soc_start - soc_end; % Dương là đã xả, Âm là đã sạc thêm

% Năng lượng pin đã dùng (Joule) = delta_SOC(%) * Dung lượng(Ah) * Voltage(V) * 3600
e_batt_used_J = (delta_soc / 100) * Q_PACK_AH * V_NOM_PACK * 3600;

% Quy đổi năng lượng pin ra gram Hydro tương đương
% Nếu xả pin (e > 0) -> Phải cộng thêm lượng H2 ảo cần để sạc lại nó
% Nếu sạc pin (e < 0) -> Trừ bớt lượng H2 đã tốn để sạc nó
m_h2_equiv_g = m_h2_total_g + (e_batt_used_J / (LHV_H2 * ETA_FC_AVG));

% E. Mức tiêu thụ tương đương (Equivalent Consumption - kg/100km)
if dist_km > 0
    fuel_consumption_eq = (m_h2_equiv_g / 1000) / dist_km * 100;
else
    fuel_consumption_eq = 0;
end

% F. Đếm số lần bật/tắt (Start/Stop Count)
% Coi FC bật khi công suất > 100W (0.1kW)
fc_status = p_fc > 100; % 1 là ON, 0 là OFF
starts = diff([0; fc_status]); 
num_starts = sum(starts == 1);

%% 3. HIỂN THỊ KẾT QUẢ
fprintf('\n================ BÁO CÁO HIỆU SUẤT BASELINE ================\n');
fprintf('1. Quãng đường di chuyển:  %.2f km\n', dist_km);
fprintf('2. Hydro tiêu thụ (cân):   %.2f g\n', m_h2_total_g);
fprintf('3. SOC Đầu -> Cuối:        %.1f%% -> %.1f%% (Delta: %.1f%%)\n', soc_start, soc_end, delta_soc);
fprintf('------------------------------------------------------------\n');
fprintf('4. Tiêu thụ thực (Raw):    %.4f kg/100km\n', fuel_consumption_raw);
fprintf('5. TIÊU THỤ TƯƠNG ĐƯƠNG:   %.4f kg/100km (Dùng chỉ số này để so sánh AI)\n', fuel_consumption_eq);
fprintf('------------------------------------------------------------\n');
fprintf('6. Số lần khởi động FC:    %d lần\n', num_starts);
fprintf('============================================================\n');

8. Nhiệm vụ cụ thể của bạn bây giờ

  1. Setup khối To Workspace: Vào Simulink và gắn 4 khối như hướng dẫn (lưu ý đặt tên biến y hệt script: sim_H2_flow, sim_SOC, v.v.).

  2. Chọn chu trình lái: Hãy chọn chu trình UDDS hoặc WLTP làm chuẩn.

  3. Chạy mô phỏng: Bấm Run.

  4. Chạy Script: Mở script MATLAB trên và bấm Run.

  5. Lưu kết quả: Copy bảng kết quả từ Command Window ra file Excel hoặc Note. Đây là “đối thủ” mà mô hình AI của bạn cần phải đánh bại.

Tổng kết

Việc thiết lập KPI giống như việc đặt ra luật chơi. Chỉ khi có luật chơi rõ ràng (mequivm_{equiv}, độ bền), chúng ta mới có thể công bố rằng: “Thuật toán EMS này tối ưu và tốt hơn thuật toán kia”.


👨🏻‍💻🏀

Previous Post
Academic Writing Notes: Cấu trúc, Từ vựng và Nghệ thuật Tranh luận
Next Post
Từ tế bào pin nhiên liệu đến một hệ thống: Fuel Cell Stack và hệ thống phụ trợ