Auxiliary Engine Performance
Auxiliary engine health, scored.
The main engine moves the ship. The auxiliary engines power everything else — lose them all and you have a blackout. So the question is never just “is this engine healthy?” It is “can the fleet of generators ride through any one of them failing?“
Three stages
Collect telemetry → Score the fleet → Escalate when at risk- Collect — every monitored AE parameter from the monthly performance reports: status, running hours, load, per-cylinder temps, SFOC, alarms.
- Score — redundancy tier, SFOC variance, cylinder spread, overhaul countdown, and one composite blackout-risk number.
- Escalate — HIGH or CRITICAL auto-routes to the Technical Superintendent with engine evidence and recommended actions.
The redundancy tier
The heart of the review — how much backup is left if one engine drops.
| Running | Standby | Tier | Risk |
|---|---|---|---|
| 1 | 2+ | Adequate redundancy | LOW |
| 1 | 1 | Minimum redundancy | MEDIUM |
| 1 | 0 | No redundancy | HIGH |
| 2+ | 0 | Load-sharing, no backup | MEDIUM |
| 0 | any | Blackout — terminal | CRITICAL |
Worked example — MV POSUN
3 × MAN 7L21/31 generators. After a refresh:
| Engine | Status | Hours | SFOC var | Note |
|---|---|---|---|---|
| AE1 | RUNNING | 12,400 | +6% | Cyl 4 hot (+38 °C above mean) |
| AE2 | STANDBY | 8,200 | — | OK, available |
| AE3 | FAULT | 11,900 | — | LO-pressure trip, 6 days ago |
1 running · 1 standby · 1 faulted → redundancy tier HIGH, blackout-risk HIGH. The pipeline tags escalation_required, raises the case to CRITICAL, and messages the TSI inbox:
- Root-cause AE3’s LO-pressure trip before next departure.
- Replace AE1 cylinder-4 injector at next port — variance plus hot-cylinder signature.
- Confirm AE2 standby-readiness drill within 24 h while AE3 is out.
Under the hood
The maths — variance, cost, blackout score
SFOC variance against the design curve, same definition as the main engine:
Variance % = (SFOC_actual − SFOC_design(P)) / SFOC_design(P) × 100Above 8% is flagged; above 10% escalates. Variance shows up faster on AEs — they run narrower load bands than the ME.
Translated to commercial weight:
Δfuel/day = (SFOC_actual − SFOC_design) × P × 24 / 1e6 [MT/day]$/day = Δfuel/day × fuel_priceA 1.2 MW AE at 75% load, 5% variance, $700/MT MGO ≈ $120/day, ~$44k/year — usually enough to justify an injector swap.
Cylinder uniformity, deviation from the engine mean:
ΔTᵢ = Tᵢ − mean(T) OK ≤ 30 °C · WARNING 30–50 °C · CRITICAL > 50 °COverhaul countdown:
H_remaining = H_interval − (H_current − H_last_overhaul)Composite blackout-risk that drives the verdict:
R = w₁·N_fault + w₂·(1 − C_margin) + w₃·R_redundancy + w₄·N_overduewhere C_margin = (available kW − load kW) / available kW, and R_redundancy maps LOW=0 / MEDIUM=1 / HIGH=2. The composite maps to LOW / MEDIUM / HIGH / CRITICAL.
What gets captured
| Domain | Data |
|---|---|
| Engine state | Status (running / standby / fault / maintenance), running hours, hours since overhaul |
| Load | Load %, power output, exporting / importing |
| Per-cylinder | Pmax, exhaust temp, FW inlet/outlet temp |
| Aspiration | Boost pressure, exhaust back-pressure |
| Fuel | SFOC actual, fuel grade in use |
| Power management | Engines online, blackout-risk inputs |
| Alarms | Active alarms with severity at sample time |
Sources: vessel ERP (register, hours, status, alarms), the AE Performance form filed monthly by the Chief Engineer, and the PMS counter feed (hours since overhaul). Output is one timestamped record per vessel covering every AE plus the power-management context, over the same six-month rolling window used for ME reports.
Six-month rollup logic
Every monitored parameter, per engine, per month. Two gap states matter: a report yet to be submitted (current month, expected) versus a missing report (past month, a compliance issue).
# For each AE (AE1 / AE2 / …) build a six-month grid keyed by parameterfor ae_number in sorted(engines): for parameter_key in PARAMETERS: # PMAX, EXHAUSTTEMP, … main_row = [f"{ae_number} {parameter_key}"]
for month_date, month_label in zip(six_months_dates, six_months_labels): performance = performance_data.get(month_date)
if performance == "No Data Available": current = (month_date.month == datetime.utcnow().month and month_date.year == datetime.utcnow().year) main_row.append("Report yet to be submitted" if current else "Missing Report") continue
value = performance["data"].get(f"{parameter_key}AVERAGE") main_row.append(round(value, 2) if value is not None else "No Data Available")Escalation triggers
| Trigger | Severity |
|---|---|
| Any engine in FAULT | CRITICAL |
| Blackout-risk score HIGH or CRITICAL | CRITICAL |
| Cylinder deviation above 50 °C | CRITICAL |
| Overhaul overdue or under 500 h away | CRITICAL |
| Exhaust temp above 420 °C | CRITICAL |
| Multiple engines showing WARNING | HIGH |
| SFOC variance above 8% on any engine | HIGH |
| Load-sharing failure | HIGH |
Architecture diagram
┌─────────────────────────────────────────┐ │ ERP telemetry · Engine register · PMS │ └─────────────────────┬───────────────────┘ │ monthly reports + specs ▼ ┌─────────────────────────────────────────┐ │ Stage 1 — Collection │ │ Per-engine telemetry, hours, alarms │ └─────────────────────┬───────────────────┘ │ structured telemetry ▼ ┌─────────────────────────────────────────┐ │ Stage 2 — Analysis │ │ redundancy · load-sharing · SFOC · │ │ rollup · overhaul · blackout-risk │ └─────────────────────┬───────────────────┘ │ verdict + scores ▼ ┌─────────────────────────────────────────┐ │ Stage 3 — Expert review │ │ Auto-escalate to TSI when triggered │ └─────────────────────────────────────────┘Why script-driven
Redundancy tiers, SFOC variance, and blackout weighting all live in deterministic Python. The reviewer interprets the result; the verdict is reproducible. A tier that shifts MEDIUM → HIGH between two consecutive runs is a real event in the data — not a model mood.