Innovenergy_trunk/csharp/App/Backend/Services/AlarmKnowledgeBase.cs

1513 lines
81 KiB
C#

namespace InnovEnergy.App.Backend.Services;
/// <summary>
/// Static knowledge base for Sinexcel and Growatt alarms.
/// Provides pre-defined diagnostics without requiring Mistral API calls.
/// Data sourced from vendor alarm documentation.
/// </summary>
public static class AlarmKnowledgeBase
{
/// <summary>
/// Tries to find a pre-defined diagnostic for the given alarm description.
/// Returns null if the alarm is not in the knowledge base.
/// </summary>
public static DiagnosticResponse? TryGetDiagnosis(string alarmDescription)
{
if (string.IsNullOrWhiteSpace(alarmDescription))
return null;
// Normalize the description for lookup
var normalized = alarmDescription.Trim();
// Try exact match first
if (SinexcelAlarms.TryGetValue(normalized, out var sinexcelDiag))
return sinexcelDiag;
if (GrowattAlarms.TryGetValue(normalized, out var growattDiag))
return growattDiag;
// Try case-insensitive match for Sinexcel (alarm names may vary in casing)
var lowerDesc = normalized.ToLowerInvariant();
foreach (var kvp in SinexcelAlarms)
{
if (kvp.Key.ToLowerInvariant() == lowerDesc)
return kvp.Value;
}
return null;
}
// ── Sinexcel Alarms ──────────────────────────────────────────────────────
// Register addresses: 0x1048 - 0x10D5
// Recovery types: AUTO (wait), MANUAL (fix and restart), SERVICE (contact service)
private static readonly IReadOnlyDictionary<string, DiagnosticResponse> SinexcelAlarms = new Dictionary<string, DiagnosticResponse>
{
// Grid-related alarms
["AbnormalGridVoltage"] = new()
{
Explanation = "The inverter has detected that the grid voltage is outside the acceptable operating range. This is an ERROR level condition requiring manual intervention.",
Causes = new[] { "Utility grid voltage fluctuation", "Poor grid connection", "Local transformer issues", "High load demand on grid" },
NextSteps = new[] { "Check the grid voltage with a multimeter", "Verify grid connection wiring", "Fix the underlying cause", "Restart the inverter after the issue is resolved" }
},
["AbnormalGridFrequency"] = new()
{
Explanation = "The inverter has detected that the grid frequency is outside the acceptable range (typically 50Hz or 60Hz +/- tolerance). This is an ERROR level condition.",
Causes = new[] { "Grid instability", "Generator frequency drift", "Local grid issues" },
NextSteps = new[] { "Check grid frequency stability", "If using a generator, verify its frequency setting", "Fix the cause, then restart the inverter" }
},
["InvertedSequenceOfGridVoltage"] = new()
{
Explanation = "The phase sequence of the three-phase grid voltage is reversed. This is a WARNING level condition.",
Causes = new[] { "Incorrect wiring of grid phases (L1, L2, L3)", "Installation error" },
NextSteps = new[] { "Power off the system safely", "Swap any two phase wires to correct the sequence", "Restart the inverter" }
},
["GridVoltagePhaseLoss"] = new()
{
Explanation = "One or more phases of the three-phase grid connection are missing. This is an ERROR level condition.",
Causes = new[] { "Blown fuse on one phase", "Loose connection on a phase wire", "Grid-side breaker tripped", "Cable damage" },
NextSteps = new[] { "Check all three phase connections", "Verify fuses and breakers", "Fix the missing phase connection", "Restart after repair" }
},
["AbnormalGridCurrent"] = new()
{
Explanation = "The grid current is abnormal, which may indicate overcurrent or current imbalance. This is an ERROR level condition.",
Causes = new[] { "Grid-side short circuit", "Overloaded system", "Faulty current sensor", "Ground fault" },
NextSteps = new[] { "Check for short circuits", "Reduce system load", "Verify current sensor operation", "Fix the cause, then restart" }
},
// Output-related alarms
["AbnormalOutputVoltage"] = new()
{
Explanation = "The inverter's output voltage is outside acceptable limits. This is an ERROR level condition.",
Causes = new[] { "Internal inverter fault", "Overload condition", "Grid voltage influence" },
NextSteps = new[] { "Check connected load", "Verify inverter settings", "Fix the cause, then restart the inverter" }
},
["AbnormalOutputFrequency"] = new()
{
Explanation = "The inverter's output frequency is abnormal. This is an ERROR level condition.",
Causes = new[] { "Internal control system fault", "Heavy load transients" },
NextSteps = new[] { "Reduce load if possible", "Fix the cause, then restart the inverter" }
},
["AbnormalNullLine"] = new()
{
Explanation = "The neutral line connection is abnormal. This is an ERROR level condition.",
Causes = new[] { "Loose or missing neutral wire", "Neutral wire damage", "Incorrect wiring" },
NextSteps = new[] { "Power off safely", "Check neutral wire connection", "Fix wiring issues", "Restart after repair" }
},
["AbnormalOffGridOutputVoltage"] = new()
{
Explanation = "The off-grid (backup) output voltage is abnormal. This is an ERROR level condition.",
Causes = new[] { "Overload on backup output", "Internal inverter issue", "Battery voltage too low" },
NextSteps = new[] { "Check backup load", "Verify battery state", "Fix the cause, then restart" }
},
// Temperature alarms
["ExcessivelyHighAmbientTemperature"] = new()
{
Explanation = "The ambient temperature around the inverter is too high. This is a WARNING - the inverter may reduce output to protect itself.",
Causes = new[] { "Poor ventilation", "High environmental temperature", "Direct sunlight exposure", "Enclosure overheating" },
NextSteps = new[] { "Improve ventilation around the inverter", "Provide shade if outdoors", "Consider adding cooling", "Restart after temperature drops" }
},
["ExcessiveRadiatorTemperature"] = new()
{
Explanation = "The inverter's heat sink/radiator temperature is too high. This is a WARNING level condition.",
Causes = new[] { "Blocked air vents", "Fan failure", "High ambient temperature", "Excessive load" },
NextSteps = new[] { "Clean air vents and filters", "Check fan operation", "Reduce load temporarily", "Fix the cause, then restart" }
},
["PcbOvertemperature"] = new()
{
Explanation = "The printed circuit board temperature is too high. This is a WARNING level condition.",
Causes = new[] { "Poor cooling", "High ambient temperature", "Excessive power output" },
NextSteps = new[] { "Improve ventilation", "Check fan operation", "Allow cooling before restart" }
},
["DcConverterOvertemperature"] = new()
{
Explanation = "The DC converter section is overheating. This is a WARNING level condition.",
Causes = new[] { "High charging/discharging current", "Poor cooling", "Ambient temperature too high" },
NextSteps = new[] { "Reduce power flow", "Improve ventilation", "Fix the cause, then restart" }
},
["InverterOvertemperatureAlarm"] = new()
{
Explanation = "The inverter temperature is approaching dangerous levels. This is a WARNING.",
Causes = new[] { "Overload", "Poor ventilation", "Fan failure", "High ambient temperature" },
NextSteps = new[] { "Reduce load", "Check cooling system", "Fix the cause, then restart" }
},
["InverterOvertemperature"] = new()
{
Explanation = "The inverter has overheated. This is a WARNING level condition.",
Causes = new[] { "Sustained overload", "Cooling system failure", "Environmental conditions" },
NextSteps = new[] { "Allow inverter to cool down", "Check fans and ventilation", "Fix the cause, then restart" }
},
["DcConverterOvertemperatureAlarm"] = new()
{
Explanation = "The DC converter temperature alarm is active. This is a WARNING.",
Causes = new[] { "High power throughput", "Inadequate cooling" },
NextSteps = new[] { "Reduce power flow temporarily", "Check cooling", "Fix the cause, then restart" }
},
// Insulation and safety alarms
["InsulationFault"] = new()
{
Explanation = "An insulation fault has been detected, indicating possible current leakage to ground. This is an ERROR level safety condition.",
Causes = new[] { "Damaged cable insulation", "Moisture ingress", "Component insulation breakdown", "Ground fault in PV array" },
NextSteps = new[] { "Do not touch the system", "Power off safely", "Check all cable insulation", "Test insulation resistance", "Repair before restart" }
},
["LeakageProtectionFault"] = new()
{
Explanation = "The ground fault/leakage current protection has tripped. This is an ERROR level safety condition.",
Causes = new[] { "Ground fault in the system", "Damaged insulation", "Moisture in connections", "Faulty RCD/GFCI" },
NextSteps = new[] { "Power off the system", "Check for ground faults", "Inspect cable insulation", "Fix the cause before restart" }
},
["AbnormalLeakageSelfCheck"] = new()
{
Explanation = "The leakage current self-check has failed. This is an ERROR level condition.",
Causes = new[] { "Self-check circuit fault", "Ground fault present", "Sensor malfunction" },
NextSteps = new[] { "Power off safely", "Check system grounding", "Fix the cause, then restart" }
},
["PoorGrounding"] = new()
{
Explanation = "Poor grounding connection detected. This is a WARNING level safety condition.",
Causes = new[] { "Loose ground connection", "Corroded ground terminal", "High ground resistance", "Missing ground wire" },
NextSteps = new[] { "Check all ground connections", "Clean corroded terminals", "Verify ground resistance", "Fix grounding, then restart" }
},
// Fan and cooling alarms
["FanFault"] = new()
{
Explanation = "The cooling fan has failed or is not operating correctly. This is an ERROR level condition that can lead to overheating.",
Causes = new[] { "Fan motor failure", "Fan blade obstruction", "Loose fan connector", "Control circuit fault" },
NextSteps = new[] { "Check fan operation visually", "Remove any obstructions", "Check fan power connection", "Replace fan if faulty" }
},
// Power supply alarms
["AuxiliaryPowerFault"] = new()
{
Explanation = "The auxiliary power supply inside the inverter has failed. This is an ERROR level condition.",
Causes = new[] { "Internal power supply failure", "Input voltage issue", "Component failure" },
NextSteps = new[] { "Power cycle the inverter", "If persistent, contact service technician" }
},
// Model and configuration alarms
["ModelCapacityFault"] = new()
{
Explanation = "The inverter has detected a model/capacity configuration mismatch. This is an ERROR level condition.",
Causes = new[] { "Incorrect model configuration", "Firmware mismatch", "Hardware mismatch" },
NextSteps = new[] { "Verify inverter model settings", "Check firmware version", "Fix configuration, then restart" }
},
// Lightning and surge protection
["AbnormalLightningArrester"] = new()
{
Explanation = "The surge protection device (lightning arrester) has failed or triggered. This is an ERROR level condition.",
Causes = new[] { "Lightning strike damage", "Surge event", "SPD component failure" },
NextSteps = new[] { "Check SPD indicator", "Replace SPD if triggered", "Fix the cause, then restart" }
},
// Island protection
["IslandProtection"] = new()
{
Explanation = "Island protection is active - the inverter has disconnected from the grid to prevent back-feeding during a grid outage. This is an INFO level condition that typically auto-recovers.",
Causes = new[] { "Grid power outage", "Grid voltage/frequency outside limits", "Intentional grid disconnection" },
NextSteps = new[] { "Wait for grid to stabilize", "The inverter will automatically reconnect when grid is normal", "Monitor until it clears" }
},
// Battery 1 alarms
["Battery1NotConnected"] = new()
{
Explanation = "Battery 1 is not detected or not connected. This is an ERROR level condition.",
Causes = new[] { "Battery disconnect switch open", "Loose battery cable", "Battery BMS shutdown", "Battery fuse blown" },
NextSteps = new[] { "Check battery disconnect switch", "Verify battery cable connections", "Check battery BMS status", "Fix connection, then restart" }
},
["Battery1Overvoltage"] = new()
{
Explanation = "Battery 1 voltage is too high. This is a WARNING level condition - charging will be limited.",
Causes = new[] { "Overcharging", "BMS malfunction", "Incorrect battery voltage setting", "Cell imbalance" },
NextSteps = new[] { "Check battery SOC", "Verify charging settings", "Check BMS operation", "Fix the cause, then restart" }
},
["Battery1Undervoltage"] = new()
{
Explanation = "Battery 1 voltage is too low. This is a WARNING level condition - discharging will be limited.",
Causes = new[] { "Battery deeply discharged", "Cell failure", "BMS cutoff", "High load drain" },
NextSteps = new[] { "Allow battery to charge", "Check for excessive loads", "Verify battery health", "Fix the cause, then restart" }
},
["Battery1DischargeEnd"] = new()
{
Explanation = "Battery 1 has reached its discharge end point (minimum SOC). This is an INFO level condition that auto-recovers when charged.",
Causes = new[] { "Battery fully discharged to SOC limit", "High power consumption" },
NextSteps = new[] { "Wait for battery to recharge from PV or grid", "Monitor until it clears" }
},
["Battery1Inverted"] = new()
{
Explanation = "Battery 1 polarity is reversed. This is a WARNING level condition - do not operate!",
Causes = new[] { "Battery cables connected in reverse", "Installation error" },
NextSteps = new[] { "IMMEDIATELY power off the system", "Correct battery cable polarity", "Check for damage before restart" }
},
["Battery1OverloadTimeout"] = new()
{
Explanation = "Battery 1 has been overloaded for too long. This is an ERROR level condition.",
Causes = new[] { "Sustained high load", "Undersized battery", "Battery degradation" },
NextSteps = new[] { "Reduce system load", "Check battery capacity", "Fix the cause, then restart" }
},
["Battery1SoftStartFailure"] = new()
{
Explanation = "Battery 1 failed to soft-start properly. This is a WARNING level condition.",
Causes = new[] { "Pre-charge circuit fault", "Battery voltage mismatch", "Contactor issue" },
NextSteps = new[] { "Check battery voltage", "Verify pre-charge circuit", "Fix the cause, then restart" }
},
["Battery1PowerTubeFault"] = new()
{
Explanation = "Battery 1 power electronics (IGBT/MOSFET) have failed. This is a PROTECTION level condition requiring service.",
Causes = new[] { "Power semiconductor failure", "Overcurrent damage", "Manufacturing defect" },
NextSteps = new[] { "Do not restart the system", "Contact service technician", "Hardware repair required" }
},
["Battery1InsufficientPower"] = new()
{
Explanation = "Battery 1 cannot provide sufficient power for the load. This is an INFO level condition.",
Causes = new[] { "Low state of charge", "High load demand", "Battery capacity limitation" },
NextSteps = new[] { "Wait for battery to recharge", "Reduce load if possible", "Monitor until it clears" }
},
["Battery1BackupProhibited"] = new()
{
Explanation = "Battery 1 is prohibited from providing backup power. This is a WARNING level condition.",
Causes = new[] { "BMS protection active", "Battery in maintenance mode", "SOC too low for backup" },
NextSteps = new[] { "Check BMS settings", "Verify battery SOC", "Fix the cause, then restart" }
},
// Battery 2 alarms (similar to Battery 1)
["Battery2NotConnected"] = new()
{
Explanation = "Battery 2 is not detected or not connected. This is an ERROR level condition.",
Causes = new[] { "Battery disconnect switch open", "Loose battery cable", "Battery BMS shutdown", "Battery fuse blown" },
NextSteps = new[] { "Check battery disconnect switch", "Verify battery cable connections", "Check battery BMS status", "Fix connection, then restart" }
},
["Battery2Overvoltage"] = new()
{
Explanation = "Battery 2 voltage is too high. This is a WARNING level condition.",
Causes = new[] { "Overcharging", "BMS malfunction", "Incorrect voltage setting" },
NextSteps = new[] { "Check battery SOC", "Verify charging settings", "Fix the cause, then restart" }
},
["Battery2Undervoltage"] = new()
{
Explanation = "Battery 2 voltage is too low. This is a WARNING level condition.",
Causes = new[] { "Battery deeply discharged", "Cell failure", "BMS cutoff" },
NextSteps = new[] { "Allow battery to charge", "Check battery health", "Fix the cause, then restart" }
},
["Battery2DischargeEnd"] = new()
{
Explanation = "Battery 2 has reached its discharge end point. This is an INFO level condition.",
Causes = new[] { "Battery fully discharged to SOC limit" },
NextSteps = new[] { "Wait for battery to recharge", "Monitor until it clears" }
},
["Battery2Inverted"] = new()
{
Explanation = "Battery 2 polarity is reversed. This is a WARNING - do not operate!",
Causes = new[] { "Battery cables connected in reverse" },
NextSteps = new[] { "IMMEDIATELY power off", "Correct battery polarity", "Check for damage" }
},
["Battery2OverloadTimeout"] = new()
{
Explanation = "Battery 2 has been overloaded for too long. This is an ERROR level condition.",
Causes = new[] { "Sustained high load", "Battery degradation" },
NextSteps = new[] { "Reduce system load", "Fix the cause, then restart" }
},
["Battery2SoftStartFailure"] = new()
{
Explanation = "Battery 2 failed to soft-start properly. This is a WARNING level condition.",
Causes = new[] { "Pre-charge circuit fault", "Voltage mismatch" },
NextSteps = new[] { "Check battery voltage", "Fix the cause, then restart" }
},
["Battery2PowerTubeFault"] = new()
{
Explanation = "Battery 2 power electronics have failed. This is a PROTECTION level condition.",
Causes = new[] { "Power semiconductor failure" },
NextSteps = new[] { "Do not restart", "Contact service technician" }
},
["Battery2InsufficientPower"] = new()
{
Explanation = "Battery 2 cannot provide sufficient power. This is a WARNING level condition.",
Causes = new[] { "Low SOC", "High load demand" },
NextSteps = new[] { "Wait for recharge", "Reduce load", "Fix the cause, then restart" }
},
["Battery2BackupProhibited"] = new()
{
Explanation = "Battery 2 is prohibited from providing backup power. This is a WARNING.",
Causes = new[] { "BMS protection active", "SOC too low" },
NextSteps = new[] { "Check BMS settings", "Fix the cause, then restart" }
},
// Lithium battery specific alarms
["LithiumBattery1ChargeForbidden"] = new()
{
Explanation = "Lithium battery 1 BMS has forbidden charging. This is a WARNING level condition.",
Causes = new[] { "Battery fully charged", "Temperature out of range", "BMS protection active", "Cell imbalance" },
NextSteps = new[] { "Check battery temperature", "Verify BMS status", "Fix the cause, then restart" }
},
["LithiumBattery1DischargeForbidden"] = new()
{
Explanation = "Lithium battery 1 BMS has forbidden discharging. This is a WARNING level condition.",
Causes = new[] { "Battery empty", "Temperature out of range", "BMS protection", "Low voltage protection" },
NextSteps = new[] { "Allow battery to charge", "Check temperature", "Fix the cause, then restart" }
},
["LithiumBattery2ChargeForbidden"] = new()
{
Explanation = "Lithium battery 2 BMS has forbidden charging. This is a WARNING level condition.",
Causes = new[] { "Battery fully charged", "Temperature out of range", "BMS protection" },
NextSteps = new[] { "Check battery status", "Fix the cause, then restart" }
},
["LithiumBattery2DischargeForbidden"] = new()
{
Explanation = "Lithium battery 2 BMS has forbidden discharging. This is a WARNING level condition.",
Causes = new[] { "Battery empty", "Temperature out of range", "BMS protection" },
NextSteps = new[] { "Allow battery to charge", "Fix the cause, then restart" }
},
["LithiumBattery1Full"] = new()
{
Explanation = "Lithium battery 1 is fully charged. This is a WARNING indicating charging will stop.",
Causes = new[] { "Battery at 100% SOC", "Cell voltage at maximum" },
NextSteps = new[] { "Normal condition if intentional", "Monitor battery health" }
},
["LithiumBattery1DischargeEnd"] = new()
{
Explanation = "Lithium battery 1 has reached discharge end. This is a WARNING.",
Causes = new[] { "Battery at minimum SOC" },
NextSteps = new[] { "Allow battery to recharge", "Fix the cause, then restart" }
},
["LithiumBattery2Full"] = new()
{
Explanation = "Lithium battery 2 is fully charged. This is a WARNING.",
Causes = new[] { "Battery at 100% SOC" },
NextSteps = new[] { "Normal condition if intentional" }
},
["LithiumBattery2DischargeEnd"] = new()
{
Explanation = "Lithium battery 2 has reached discharge end. This is a WARNING.",
Causes = new[] { "Battery at minimum SOC" },
NextSteps = new[] { "Allow battery to recharge" }
},
["LeadBatteryTemperatureAbnormality"] = new()
{
Explanation = "Lead-acid battery temperature is abnormal. This is an ERROR level condition.",
Causes = new[] { "Overheating", "Temperature sensor fault", "Environmental temperature extreme" },
NextSteps = new[] { "Check battery temperature", "Verify sensor", "Fix the cause, then restart" }
},
["BatteryAccessMethodError"] = new()
{
Explanation = "Battery access method configuration error. This is a WARNING.",
Causes = new[] { "Incorrect configuration", "Communication setup error" },
NextSteps = new[] { "Check battery configuration", "Fix the cause, then restart" }
},
// PV 1 alarms
["Pv1NotAccessed"] = new()
{
Explanation = "PV string 1 is not detected or accessible. This is a WARNING level condition.",
Causes = new[] { "PV disconnector open", "Cable damage", "PV module fault", "No sunlight" },
NextSteps = new[] { "Check PV disconnector", "Verify PV cable connections", "Check for shading", "Fix the cause, then restart" }
},
["Pv1Overvoltage"] = new()
{
Explanation = "PV string 1 voltage exceeds maximum input voltage. This is a WARNING - PV input will be limited.",
Causes = new[] { "Too many PV modules in series", "Low temperature increasing voltage", "Design error" },
NextSteps = new[] { "Check PV string configuration", "Verify Voc at low temperature", "Reduce modules if needed" }
},
["AbnormalPv1CurrentSharing"] = new()
{
Explanation = "PV string 1 current sharing is abnormal. This is an ERROR level condition.",
Causes = new[] { "Mismatched PV modules", "Partial shading", "Module fault" },
NextSteps = new[] { "Check for shading", "Verify module matching", "Fix the cause, then restart" }
},
["Pv1PowerTubeFault"] = new()
{
Explanation = "PV 1 DC converter power electronics have failed. This is a PROTECTION level condition.",
Causes = new[] { "IGBT/MOSFET failure", "Overcurrent damage" },
NextSteps = new[] { "Do not restart", "Contact service technician" }
},
["Pv1SoftStartFailure"] = new()
{
Explanation = "PV 1 failed to soft-start properly. This is a WARNING level condition.",
Causes = new[] { "Pre-charge circuit fault", "Voltage mismatch" },
NextSteps = new[] { "Check PV voltage", "Fix the cause, then restart" }
},
["Pv1OverloadTimeout"] = new()
{
Explanation = "PV 1 has been overloaded for too long. This is an ERROR level condition.",
Causes = new[] { "Excessive PV power", "DC converter limitation" },
NextSteps = new[] { "Check PV sizing", "Fix the cause, then restart" }
},
["Pv1InsufficientPower"] = new()
{
Explanation = "PV string 1 is not providing enough power. This is an INFO level condition.",
Causes = new[] { "Low irradiance", "Shading", "Cloud cover", "Evening/morning" },
NextSteps = new[] { "Wait for better sunlight conditions", "Check for shading", "Monitor until it clears" }
},
["Photovoltaic1Overcurrent"] = new()
{
Explanation = "PV string 1 current exceeds limits. This is a WARNING level condition.",
Causes = new[] { "PV array oversized", "Ground fault", "Short circuit" },
NextSteps = new[] { "Check PV configuration", "Look for ground faults", "Fix the cause, then restart" }
},
// PV 2 alarms
["Pv2NotAccessed"] = new()
{
Explanation = "PV string 2 is not detected or accessible. This is a WARNING level condition.",
Causes = new[] { "PV disconnector open", "Cable damage", "No sunlight" },
NextSteps = new[] { "Check PV disconnector", "Verify connections", "Fix the cause, then restart" }
},
["Pv2Overvoltage"] = new()
{
Explanation = "PV string 2 voltage exceeds maximum. This is a WARNING level condition.",
Causes = new[] { "Too many PV modules in series", "Low temperature" },
NextSteps = new[] { "Check PV configuration", "Reduce modules if needed" }
},
["AbnormalPv2CurrentSharing"] = new()
{
Explanation = "PV string 2 current sharing is abnormal. This is an ERROR level condition.",
Causes = new[] { "Mismatched modules", "Partial shading" },
NextSteps = new[] { "Check for shading", "Fix the cause, then restart" }
},
["Pv2PowerTubeFault"] = new()
{
Explanation = "PV 2 power electronics have failed. This is a PROTECTION level condition.",
Causes = new[] { "Power semiconductor failure" },
NextSteps = new[] { "Do not restart", "Contact service technician" }
},
["Pv2SoftStartFailure"] = new()
{
Explanation = "PV 2 failed to soft-start. This is a WARNING level condition.",
Causes = new[] { "Pre-charge fault", "Voltage mismatch" },
NextSteps = new[] { "Check PV voltage", "Fix the cause, then restart" }
},
["Pv2OverloadTimeout"] = new()
{
Explanation = "PV 2 has been overloaded for too long. This is an ERROR level condition.",
Causes = new[] { "Excessive PV power" },
NextSteps = new[] { "Check PV sizing", "Fix the cause, then restart" }
},
["Pv2InsufficientPower"] = new()
{
Explanation = "PV string 2 is not providing enough power. This is an INFO level condition.",
Causes = new[] { "Low irradiance", "Shading" },
NextSteps = new[] { "Wait for better conditions", "Monitor until it clears" }
},
// PV 3 alarms
["Pv3NotConnected"] = new()
{
Explanation = "PV string 3 is not connected. This is an ERROR level condition.",
Causes = new[] { "PV disconnector open", "Cable issue" },
NextSteps = new[] { "Check connections", "Fix the cause, then restart" }
},
["Pv3Overvoltage"] = new()
{
Explanation = "PV string 3 voltage exceeds maximum. This is a WARNING.",
Causes = new[] { "Too many modules in series" },
NextSteps = new[] { "Check PV configuration" }
},
["Pv3AverageCurrentAnomaly"] = new()
{
Explanation = "PV string 3 current is abnormal. This is a WARNING.",
Causes = new[] { "Module mismatch", "Shading" },
NextSteps = new[] { "Check modules", "Fix the cause, then restart" }
},
["Pv3PowerTubeFailure"] = new()
{
Explanation = "PV 3 power electronics failed. This is a PROTECTION level condition.",
Causes = new[] { "Hardware failure" },
NextSteps = new[] { "Do not restart", "Contact service" }
},
["Pv3SoftStartFailure"] = new()
{
Explanation = "PV 3 soft start failed. This is a WARNING.",
Causes = new[] { "Pre-charge fault" },
NextSteps = new[] { "Fix the cause, then restart" }
},
["Pv3OverloadTimeout"] = new()
{
Explanation = "PV 3 overloaded too long. This is an ERROR.",
Causes = new[] { "Excessive power" },
NextSteps = new[] { "Fix the cause, then restart" }
},
["Pv3ReverseConnection"] = new()
{
Explanation = "PV string 3 is connected with reversed polarity. This is a PROTECTION level condition.",
Causes = new[] { "Installation error", "Wrong cable connection" },
NextSteps = new[] { "Do not restart", "Contact service to correct wiring" }
},
// PV 4 alarms
["Pv4NotConnected"] = new()
{
Explanation = "PV string 4 is not connected. This is an ERROR.",
Causes = new[] { "Disconnector open", "Cable issue" },
NextSteps = new[] { "Check connections", "Fix the cause, then restart" }
},
["Pv4Overvoltage"] = new()
{
Explanation = "PV string 4 voltage exceeds maximum. This is a WARNING.",
Causes = new[] { "Too many modules" },
NextSteps = new[] { "Check configuration" }
},
["Pv4AverageCurrentAnomaly"] = new()
{
Explanation = "PV string 4 current abnormal. This is a WARNING.",
Causes = new[] { "Module mismatch" },
NextSteps = new[] { "Check modules" }
},
["Pv4PowerTubeFailure"] = new()
{
Explanation = "PV 4 power electronics failed. This is a PROTECTION level condition.",
Causes = new[] { "Hardware failure" },
NextSteps = new[] { "Do not restart", "Contact service" }
},
["Pv4SoftStartFailure"] = new()
{
Explanation = "PV 4 soft start failed. This is a WARNING.",
Causes = new[] { "Pre-charge fault" },
NextSteps = new[] { "Fix the cause, then restart" }
},
["Pv4OverloadTimeout"] = new()
{
Explanation = "PV 4 overloaded too long. This is an ERROR.",
Causes = new[] { "Excessive power" },
NextSteps = new[] { "Fix the cause, then restart" }
},
["Pv4ReverseConnection"] = new()
{
Explanation = "PV string 4 polarity reversed. This is a PROTECTION condition.",
Causes = new[] { "Wrong wiring" },
NextSteps = new[] { "Do not restart", "Contact service" }
},
["InsufficientPhotovoltaicPower"] = new()
{
Explanation = "Not enough PV power available. This is a WARNING.",
Causes = new[] { "Low irradiance", "Evening/cloudy" },
NextSteps = new[] { "Wait for better conditions", "Fix the cause, then restart" }
},
// DC Bus alarms
["DcBusOvervoltage"] = new()
{
Explanation = "The DC bus voltage is too high. This is a WARNING level condition.",
Causes = new[] { "Excessive charging power", "Regenerative load", "Control fault" },
NextSteps = new[] { "Check power balance", "Fix the cause, then restart" }
},
["DcBusUndervoltage"] = new()
{
Explanation = "The DC bus voltage is too low. This is a WARNING level condition.",
Causes = new[] { "Excessive load", "Power supply issue", "Battery depletion" },
NextSteps = new[] { "Reduce load", "Check power sources", "Fix the cause, then restart" }
},
["DcBusVoltageUnbalance"] = new()
{
Explanation = "The DC bus voltage is unbalanced. This is an ERROR level condition.",
Causes = new[] { "Capacitor failure", "Control issue", "Asymmetric loading" },
NextSteps = new[] { "Check capacitor bank", "Fix the cause, then restart" }
},
["BusSlowOvervoltage"] = new()
{
Explanation = "DC bus slow over-voltage detected. This is a WARNING.",
Causes = new[] { "Gradual voltage rise", "Charging imbalance" },
NextSteps = new[] { "Check charging control", "Fix the cause, then restart" }
},
["HardwareBusOvervoltage"] = new()
{
Explanation = "Hardware-level bus over-voltage protection tripped. This is a PROTECTION level condition.",
Causes = new[] { "Severe overvoltage event", "Component failure" },
NextSteps = new[] { "Do not restart", "Contact service technician" }
},
["BusSoftStartFailure"] = new()
{
Explanation = "DC bus failed to soft-start. This is a WARNING.",
Causes = new[] { "Pre-charge fault", "Capacitor issue" },
NextSteps = new[] { "Check pre-charge circuit", "Fix the cause, then restart" }
},
// Inverter power tube and hardware faults
["InverterPowerTubeFault"] = new()
{
Explanation = "The main inverter power electronics (IGBT/MOSFET) have failed. This is a PROTECTION level condition requiring professional service.",
Causes = new[] { "Power semiconductor failure", "Overcurrent damage", "Short circuit damage", "Thermal damage" },
NextSteps = new[] { "Do not attempt to restart", "Contact service technician", "Hardware repair/replacement required" }
},
["HardwareOvercurrent"] = new()
{
Explanation = "Hardware overcurrent protection has tripped. This is a PROTECTION level condition.",
Causes = new[] { "Short circuit", "Severe overload", "Component failure" },
NextSteps = new[] { "Do not restart", "Contact service technician" }
},
["DcConverterOvervoltage"] = new()
{
Explanation = "DC converter voltage too high. This is a WARNING.",
Causes = new[] { "Input overvoltage", "Control issue" },
NextSteps = new[] { "Check input voltage", "Fix the cause, then restart" }
},
["DcConverterHardwareOvervoltage"] = new()
{
Explanation = "DC converter hardware overvoltage protection. This is a PROTECTION condition.",
Causes = new[] { "Severe overvoltage" },
NextSteps = new[] { "Do not restart", "Contact service" }
},
["DcConverterOvercurrent"] = new()
{
Explanation = "DC converter current too high. This is a WARNING.",
Causes = new[] { "Overload", "Short circuit" },
NextSteps = new[] { "Reduce load", "Fix the cause, then restart" }
},
["DcConverterHardwareOvercurrent"] = new()
{
Explanation = "DC converter hardware overcurrent protection. This is a PROTECTION condition.",
Causes = new[] { "Severe overcurrent" },
NextSteps = new[] { "Do not restart", "Contact service" }
},
["DcConverterResonatorOvercurrent"] = new()
{
Explanation = "DC converter resonator overcurrent. This is a WARNING.",
Causes = new[] { "Resonance condition", "Control issue" },
NextSteps = new[] { "Fix the cause, then restart" }
},
// Overload alarms
["SystemOutputOverload"] = new()
{
Explanation = "The total system output is overloaded. This is an ERROR level condition.",
Causes = new[] { "Too many loads connected", "Load exceeds inverter capacity", "Short circuit in load" },
NextSteps = new[] { "Disconnect some loads", "Check for short circuits", "Fix the cause, then restart" }
},
["InverterOverload"] = new()
{
Explanation = "The inverter is overloaded. This is an ERROR level condition.",
Causes = new[] { "Load exceeds rated power", "Inrush current from motors", "Short circuit" },
NextSteps = new[] { "Reduce connected load", "Check load power rating", "Fix the cause, then restart" }
},
["InverterOverloadTimeout"] = new()
{
Explanation = "The inverter has been overloaded for too long. This is an ERROR level condition.",
Causes = new[] { "Sustained overload condition", "Undersized inverter for load" },
NextSteps = new[] { "Permanently reduce load", "Consider larger inverter", "Fix the cause, then restart" }
},
["LoadPowerOverload"] = new()
{
Explanation = "Load power exceeds system capacity. This is an ERROR.",
Causes = new[] { "Excessive load" },
NextSteps = new[] { "Reduce load", "Fix the cause, then restart" }
},
["BalancedCircuitOverloadTimeout"] = new()
{
Explanation = "Balanced circuit overloaded too long. This is an ERROR.",
Causes = new[] { "Unbalanced loading", "Phase overload" },
NextSteps = new[] { "Balance loads", "Fix the cause, then restart" }
},
// Soft start failures
["InverterSoftStartFailure"] = new()
{
Explanation = "The inverter failed during soft-start sequence. This is a WARNING level condition.",
Causes = new[] { "Pre-charge resistor fault", "Contactor failure", "DC bus capacitor issue", "Control board fault" },
NextSteps = new[] { "Power cycle the system", "Check DC bus voltage", "If persistent, contact service", "Fix the cause, then restart" }
},
// DSP and firmware alarms
["Dsp1ParameterSettingFault"] = new()
{
Explanation = "DSP 1 parameter configuration error. This is an ERROR level condition.",
Causes = new[] { "Incorrect parameter setting", "Firmware corruption", "Configuration mismatch" },
NextSteps = new[] { "Check parameter settings", "Reset to defaults if needed", "Fix the cause, then restart" }
},
["Dsp2ParameterSettingFault"] = new()
{
Explanation = "DSP 2 parameter configuration error. This is an ERROR level condition.",
Causes = new[] { "Incorrect parameter setting", "Firmware corruption" },
NextSteps = new[] { "Check parameter settings", "Fix the cause, then restart" }
},
["DspVersionCompatibilityFault"] = new()
{
Explanation = "DSP firmware version is incompatible. This is an ERROR level condition.",
Causes = new[] { "Firmware mismatch between components", "Incomplete firmware update" },
NextSteps = new[] { "Update firmware to compatible version", "Contact support if needed" }
},
["CpldVersionCompatibilityFault"] = new()
{
Explanation = "CPLD version is incompatible. This is an ERROR level condition.",
Causes = new[] { "Firmware mismatch", "Incomplete update" },
NextSteps = new[] { "Update firmware", "Fix the cause, then restart" }
},
["CpldCommunicationFault"] = new()
{
Explanation = "Communication with CPLD failed. This is an ERROR level condition.",
Causes = new[] { "Internal communication bus fault", "CPLD failure" },
NextSteps = new[] { "Power cycle the system", "If persistent, contact service" }
},
["DspCommunicationFault"] = new()
{
Explanation = "Communication with DSP failed. This is an ERROR level condition.",
Causes = new[] { "Internal communication bus fault", "DSP failure" },
NextSteps = new[] { "Power cycle the system", "If persistent, contact service" }
},
// Output DC component alarms
["OutputVoltageDcOverlimit"] = new()
{
Explanation = "DC component in output voltage exceeds limit. This is a WARNING.",
Causes = new[] { "Control drift", "Sensor offset", "Hardware issue" },
NextSteps = new[] { "Restart the inverter", "If persistent, contact service" }
},
["OutputCurrentDcOverlimit"] = new()
{
Explanation = "DC component in output current exceeds limit. This is a WARNING.",
Causes = new[] { "Control issue", "Sensor fault" },
NextSteps = new[] { "Restart the inverter", "Fix the cause, then restart" }
},
// Relay alarms
["RelaySelfCheckFails"] = new()
{
Explanation = "Relay self-check has failed. This is an ERROR level condition.",
Causes = new[] { "Relay contact fault", "Relay driver fault", "Welded contacts" },
NextSteps = new[] { "Check relay operation", "Fix the cause, then restart" }
},
["InverterRelayOpen"] = new()
{
Explanation = "Inverter relay is unexpectedly open. This is an ERROR.",
Causes = new[] { "Relay driver fault", "Protection trip" },
NextSteps = new[] { "Check protection status", "Fix the cause, then restart" }
},
["InverterRelayShortCircuit"] = new()
{
Explanation = "Inverter relay has a short circuit (welded contacts). This is a PROTECTION condition.",
Causes = new[] { "Welded relay contacts", "Relay failure" },
NextSteps = new[] { "Do not restart", "Contact service to replace relay" }
},
["OpenCircuitOfPowerGridRelay"] = new()
{
Explanation = "Grid relay is unexpectedly open. This is an ERROR.",
Causes = new[] { "Relay fault", "Protection active" },
NextSteps = new[] { "Check relay", "Fix the cause, then restart" }
},
["ShortCircuitOfPowerGridRelay"] = new()
{
Explanation = "Grid relay has welded contacts. This is an ERROR.",
Causes = new[] { "Relay failure" },
NextSteps = new[] { "Contact service", "Fix the cause, then restart" }
},
["GeneratorRelayOpenCircuit"] = new()
{
Explanation = "Generator relay is open. This is an ERROR.",
Causes = new[] { "Relay fault" },
NextSteps = new[] { "Check relay", "Fix the cause, then restart" }
},
["GeneratorRelayShortCircuit"] = new()
{
Explanation = "Generator relay has welded. This is an ERROR.",
Causes = new[] { "Relay failure" },
NextSteps = new[] { "Contact service", "Fix the cause, then restart" }
},
// Abnormal inverter
["AbnormalInverter"] = new()
{
Explanation = "General inverter abnormality detected. This is an ERROR level condition.",
Causes = new[] { "Various internal faults", "Control system issue" },
NextSteps = new[] { "Power cycle the inverter", "Check for other specific alarms", "Fix the cause, then restart" }
},
// Parallel operation alarms
["ParallelCommunicationAlarm"] = new()
{
Explanation = "Communication between parallel inverters has failed. This is an ERROR level condition.",
Causes = new[] { "Communication cable fault", "Parallel interface failure", "Settings mismatch" },
NextSteps = new[] { "Check parallel communication cables", "Verify settings match", "Fix the cause, then restart" }
},
["ParallelModuleMissing"] = new()
{
Explanation = "A parallel module is missing from the system. This is a WARNING.",
Causes = new[] { "Module offline", "Communication loss", "Power failure on module" },
NextSteps = new[] { "Check all parallel modules", "Fix the cause, then restart" }
},
["DuplicateMachineNumbersForParallelModules"] = new()
{
Explanation = "Two parallel modules have the same ID number. This is a WARNING.",
Causes = new[] { "Configuration error", "Duplicate addressing" },
NextSteps = new[] { "Assign unique IDs to each module", "Fix the cause, then restart" }
},
["ParameterConflictInParallelModule"] = new()
{
Explanation = "Parameter conflict between parallel modules. This is a WARNING.",
Causes = new[] { "Mismatched settings between units" },
NextSteps = new[] { "Synchronize settings across all units", "Fix the cause, then restart" }
},
// System derating
["SystemDerating"] = new()
{
Explanation = "The system is operating at reduced power (derating). This is a WARNING.",
Causes = new[] { "High temperature", "Voltage out of range", "Component limitation" },
NextSteps = new[] { "Check temperature and ventilation", "Identify derating cause", "Fix the cause, then restart" }
},
// PV access method
["PvAccessMethodErrorAlarm"] = new()
{
Explanation = "PV access configuration error. This is a WARNING.",
Causes = new[] { "Incorrect PV configuration", "Wiring mismatch" },
NextSteps = new[] { "Check PV configuration settings", "Fix the cause, then restart" }
},
// Reserved alarms
["ReservedAlarms4"] = new()
{
Explanation = "Reserved alarm 4 is active. This is a WARNING level condition.",
Causes = new[] { "Undocumented condition" },
NextSteps = new[] { "Monitor the system", "Contact support if issue persists" }
},
["ReservedAlarms5"] = new()
{
Explanation = "Reserved alarm 5 is active. This is a WARNING level condition.",
Causes = new[] { "Undocumented condition" },
NextSteps = new[] { "Monitor the system", "Contact support if issue persists" }
},
// Meter alarms
["ReverseMeterConnection"] = new()
{
Explanation = "The energy meter is connected in reverse. This is a PROTECTION level condition.",
Causes = new[] { "Meter CT installed backwards", "Meter wiring reversed" },
NextSteps = new[] { "Do not rely on meter readings", "Contact service to correct meter installation" }
},
// Seal pulse
["InverterSealPulse"] = new()
{
Explanation = "Inverter seal pulse active. This is a WARNING indicating output limiting.",
Causes = new[] { "Protection active", "Output limiting" },
NextSteps = new[] { "Check system status", "Fix the cause, then restart" }
},
// Diesel generator alarms
["AbnormalDieselGeneratorVoltage"] = new()
{
Explanation = "Diesel generator voltage is abnormal. This is an ERROR.",
Causes = new[] { "Generator voltage out of range", "AVR fault" },
NextSteps = new[] { "Check generator voltage setting", "Fix the cause, then restart" }
},
["AbnormalDieselGeneratorFrequency"] = new()
{
Explanation = "Diesel generator frequency is abnormal. This is an ERROR.",
Causes = new[] { "Generator speed issue", "Governor fault" },
NextSteps = new[] { "Check generator frequency", "Fix the cause, then restart" }
},
["DieselGeneratorVoltageReverseSequence"] = new()
{
Explanation = "Generator phase sequence is reversed. This is a PROTECTION condition.",
Causes = new[] { "Wrong phase wiring" },
NextSteps = new[] { "Do not restart", "Contact service to correct wiring" }
},
["DieselGeneratorVoltageOutOfPhase"] = new()
{
Explanation = "Generator voltage is out of phase with grid. This is an ERROR.",
Causes = new[] { "Sync issue", "Phase angle mismatch" },
NextSteps = new[] { "Check synchronization", "Fix the cause, then restart" }
},
["GeneratorOverload"] = new()
{
Explanation = "The generator is overloaded. This is an ERROR.",
Causes = new[] { "Load exceeds generator capacity" },
NextSteps = new[] { "Reduce load", "Fix the cause, then restart" }
},
};
// ── Growatt Alarms ───────────────────────────────────────────────────────
// Keys match GrowattWarningCode and GrowattErrorCode enum member names
private static readonly IReadOnlyDictionary<string, DiagnosticResponse> GrowattAlarms = new Dictionary<string, DiagnosticResponse>
{
// Warnings (200-series: PV/String)
["StringFault"] = new()
{
Explanation = "String fault detected. One or more PV strings may have issues affecting power generation.",
Causes = new[] { "PV panel fault", "String wiring issue", "Connector problem", "Module degradation" },
NextSteps = new[] { "Check if PV panels are normal after shutdown", "Inspect string connections", "Look for damaged cables" }
},
["PvStringPidQuickConnectAbnormal"] = new()
{
Explanation = "PV string/PID quick-connect terminals are abnormal.",
Causes = new[] { "Loose terminal connections", "Damaged quick-connect", "Corrosion on terminals" },
NextSteps = new[] { "Check wiring of string terminals after shutdown", "Clean and secure connections" }
},
["DcSpdFunctionAbnormal"] = new()
{
Explanation = "DC SPD function abnormal.",
Causes = new[] { "SPD failure" },
NextSteps = new[] { "Check DC SPD after shutdown" }
},
["PvShortCircuited"] = new()
{
Explanation = "PV1 or PV2 string is short-circuited.",
Causes = new[] { "Cable damage causing short", "Connector failure", "Module junction box fault" },
NextSteps = new[] { "Check if PV1 or PV2 is short-circuited", "Inspect cables for damage", "Test string isolation" }
},
["PvBoostDriverAbnormal"] = new()
{
Explanation = "PV boost driver abnormal.",
Causes = new[] { "Driver circuit fault" },
NextSteps = new[] { "Restart the inverter" }
},
["AcSpdFunctionAbnormal"] = new()
{
Explanation = "AC SPD function abnormal.",
Causes = new[] { "SPD failure" },
NextSteps = new[] { "Check AC SPD after shutdown" }
},
["DcFuseBlown"] = new()
{
Explanation = "DC fuse has blown, interrupting PV input.",
Causes = new[] { "Overcurrent in DC circuit", "Short circuit", "Fuse fatigue" },
NextSteps = new[] { "Power off the system", "Check the fuse", "Identify and fix overcurrent cause before replacing fuse" }
},
["DcInputVoltageTooHigh"] = new()
{
Explanation = "DC input voltage exceeds the upper threshold - potential damage risk.",
Causes = new[] { "Too many PV modules in series", "Cold temperature increasing Voc", "System design error" },
NextSteps = new[] { "Turn off DC switch immediately", "Check DC voltage", "Reconfigure string if needed" }
},
["PvReversed"] = new()
{
Explanation = "PV string polarity is reversed.",
Causes = new[] { "Wrong cable connection" },
NextSteps = new[] { "Check PV polarity after shutdown" }
},
["PidFunctionAbnormal"] = new()
{
Explanation = "PID (Potential Induced Degradation) function is abnormal.",
Causes = new[] { "PID module fault", "Configuration issue" },
NextSteps = new[] { "Restart the inverter", "Check PID settings" }
},
["PvStringDisconnected"] = new()
{
Explanation = "A PV string is disconnected.",
Causes = new[] { "DC disconnector open", "Cable disconnection", "Connector failure" },
NextSteps = new[] { "Check if PV string is properly connected", "Verify DC switches" }
},
["PvStringCurrentUnbalanced"] = new()
{
Explanation = "PV string currents are unbalanced, indicating potential issues.",
Causes = new[] { "Shading on some modules", "Module mismatch", "Partial string failure", "Soiling" },
NextSteps = new[] { "Check if PV panels of the corresponding string are normal", "Look for shading", "Clean panels" }
},
// Warnings (300-series: Grid/AC)
["NoUtilityGrid"] = new()
{
Explanation = "No utility grid connection detected or grid power failure.",
Causes = new[] { "Grid outage", "AC breaker tripped", "Grid cable disconnected", "Utility maintenance" },
NextSteps = new[] { "Check if grid is down", "Verify AC breaker status", "Check grid cable connections" }
},
["GridVoltageOutOfRange"] = new()
{
Explanation = "Grid voltage is outside the permissible operating range.",
Causes = new[] { "Grid voltage too high or too low", "Local grid issues", "Transformer tap setting" },
NextSteps = new[] { "Check if grid voltage is within specified range", "Contact utility if persistent" }
},
["GridFrequencyOutOfRange"] = new()
{
Explanation = "Grid frequency is outside the permissible operating range.",
Causes = new[] { "Grid frequency unstable", "Generator frequency drift", "Grid disturbance" },
NextSteps = new[] { "Check if grid frequency is within specified range", "Wait for grid to stabilize" }
},
["Overload"] = new()
{
Explanation = "The system is experiencing an overload condition.",
Causes = new[] { "Connected load exceeds capacity", "Inrush current from appliances", "Short circuit in load" },
NextSteps = new[] { "Reduce load connected to EPS output terminal", "Check for faulty appliances" }
},
["MeterDisconnected"] = new()
{
Explanation = "Energy meter communication is lost.",
Causes = new[] { "Meter offline", "Communication cable fault", "Meter power loss" },
NextSteps = new[] { "Check if meter is properly connected", "Verify communication cable", "Check meter power" }
},
["MeterReverselyConnected"] = new()
{
Explanation = "Energy meter L and N lines are reversed.",
Causes = new[] { "Meter wiring error", "Installation mistake" },
NextSteps = new[] { "Check if L line and N line of meter are reversely connected", "Correct wiring" }
},
["LinePeVoltageAbnormal"] = new()
{
Explanation = "Abnormal voltage detected between neutral (N) and protective earth (PE).",
Causes = new[] { "Poor PE connection", "N-PE short somewhere in installation", "Ground fault" },
NextSteps = new[] { "Check if PE cable is reliably connected after shutdown", "Verify grounding system" }
},
["PhaseSequenceError"] = new()
{
Explanation = "Phase sequence error detected. The system will auto-adjust.",
Causes = new[] { "Three-phase wiring in wrong order" },
NextSteps = new[] { "No operation required", "The PCS will automatically adjust phase sequence" }
},
// Warnings (400-series: System/Internal)
["FanFailure"] = new()
{
Explanation = "Cooling fan failure detected - risk of overheating.",
Causes = new[] { "Fan motor failure", "Fan blocked", "Fan connector loose", "Fan control fault" },
NextSteps = new[] { "Check if fan is properly connected after shutdown", "Remove obstructions", "Replace fan if faulty" }
},
["MeterAbnormal"] = new()
{
Explanation = "Energy meter is reporting abnormal readings.",
Causes = new[] { "Meter malfunction", "Configuration error", "Communication issue" },
NextSteps = new[] { "Check if meter is turned on", "Verify meter configuration" }
},
["OptimizerCommunicationAbnormal"] = new()
{
Explanation = "Communication with PV optimizer is abnormal.",
Causes = new[] { "Optimizer offline", "Communication interference", "Optimizer fault" },
NextSteps = new[] { "Check if optimizer is turned on", "Verify communication wiring" }
},
["OverTemperature"] = new()
{
Explanation = "System temperature is too high - power may be limited.",
Causes = new[] { "Poor ventilation", "High ambient temperature", "Fan failure", "Excessive load" },
NextSteps = new[] { "Restart the inverter", "If fault persists, improve cooling", "Contact manufacturer if unresolved" }
},
["OverTemperatureAlarm"] = new()
{
Explanation = "NTC temperature sensor is broken or disconnected.",
Causes = new[] { "Sensor failure", "Sensor cable damaged", "Connector issue" },
NextSteps = new[] { "Restart the inverter", "If persistent, sensor may need replacement" }
},
["NtcTemperatureSensorBroken"] = new()
{
Explanation = "NTC temperature sensor is broken.",
Causes = new[] { "Sensor failure" },
NextSteps = new[] { "Replace sensor" }
},
["SyncSignalAbnormal"] = new()
{
Explanation = "Synchronization signal is abnormal (for parallel systems).",
Causes = new[] { "Sync cable fault", "Sync interface failure", "Configuration mismatch" },
NextSteps = new[] { "Check if sync cable is abnormal", "Verify connections" }
},
["GridStartupConditionsNotMet"] = new()
{
Explanation = "Grid-connection startup requirements are not met.",
Causes = new[] { "Grid voltage/frequency out of range", "Incorrect startup voltage configuration" },
NextSteps = new[] { "Check if grid voltage is within specified range", "Check grid-connection startup voltage configuration" }
},
// Warnings (500-series: Battery)
["BatteryCommunicationFailure"] = new()
{
Explanation = "Inverter cannot communicate with the battery BMS.",
Causes = new[] { "BMS offline", "Communication cable fault", "Protocol mismatch", "Battery in sleep mode" },
NextSteps = new[] { "Check if battery is turned on", "Verify RS485 communication cable", "Wake up battery if in sleep mode" }
},
["BatteryDisconnected"] = new()
{
Explanation = "Battery is disconnected from the system.",
Causes = new[] { "Battery breaker off", "Cable disconnected", "BMS shutdown", "Battery fault" },
NextSteps = new[] { "Check if battery is properly connected", "Verify battery breaker", "Check BMS status" }
},
["BatteryVoltageTooHigh"] = new()
{
Explanation = "Battery voltage is too high.",
Causes = new[] { "Overcharging", "BMS fault", "Cell imbalance", "Voltage setting error" },
NextSteps = new[] { "Check if battery voltage is within permissible range", "Verify charging settings" }
},
["BatteryVoltageTooLow"] = new()
{
Explanation = "Battery voltage is too low.",
Causes = new[] { "Battery deeply discharged", "Cell failure", "High load drain", "BMS cutoff" },
NextSteps = new[] { "Check if battery voltage is within permissible range", "Allow battery to charge" }
},
["BatteryReverseConnected"] = new()
{
Explanation = "Battery positive and negative terminals are reversed.",
Causes = new[] { "Installation error", "Wrong cable connection" },
NextSteps = new[] { "Check if positive and negative terminals of battery are reversely connected", "CORRECT IMMEDIATELY - risk of damage" }
},
["LeadAcidTempSensorDisconnected"] = new()
{
Explanation = "Lead-acid battery temperature sensor is disconnected.",
Causes = new[] { "Sensor not installed", "Sensor cable fault", "Sensor failure" },
NextSteps = new[] { "Check if temperature sensor of lead-acid battery is installed", "Verify connections" }
},
["BatteryTemperatureOutOfRange"] = new()
{
Explanation = "Battery temperature is outside the safe operating range.",
Causes = new[] { "High ambient temperature", "Poor battery ventilation", "Battery overheating", "Cold environment" },
NextSteps = new[] { "Check if ambient temperature of battery is within specified range", "Improve battery cooling/heating" }
},
["BmsFault"] = new()
{
Explanation = "Battery BMS has reported a fault preventing charging and discharging.",
Causes = new[] { "BMS internal fault", "Cell protection triggered", "Communication error" },
NextSteps = new[] { "Figure out the cause according to BMS error code", "Check battery status display" }
},
["LithiumBatteryOverload"] = new()
{
Explanation = "Lithium battery overload protection has activated.",
Causes = new[] { "Load power exceeds battery discharge rating", "High inrush current" },
NextSteps = new[] { "Check if power of load exceeds BAT rated discharge power", "Reduce load" }
},
["BmsCommunicationAbnormal"] = new()
{
Explanation = "BMS communication is abnormal.",
Causes = new[] { "Communication timeout", "Protocol error", "Cable fault" },
NextSteps = new[] { "Restart the inverter", "Check BMS communication cable" }
},
["BatterySpdAbnormal"] = new()
{
Explanation = "Battery surge protection device (SPD) function is abnormal.",
Causes = new[] { "SPD triggered", "SPD failure", "Lightning damage" },
NextSteps = new[] { "Check BAT SPD after powering off device", "Replace SPD if triggered" }
},
// Warnings (600-series: Off-grid/EPS)
["OutputDcComponentBiasAbnormal"] = new()
{
Explanation = "Output DC component bias is abnormal.",
Causes = new[] { "Sensor drift", "Control issue", "Hardware fault" },
NextSteps = new[] { "Restart the inverter", "If fault persists, contact manufacturer" }
},
["DcComponentOverHighOutputVoltage"] = new()
{
Explanation = "DC component in output voltage is too high.",
Causes = new[] { "Control drift", "Sensor fault", "Transformer issue" },
NextSteps = new[] { "Restart the inverter", "Check output for DC offset" }
},
["OffGridOutputVoltageTooLow"] = new()
{
Explanation = "Off-grid/EPS output voltage is too low.",
Causes = new[] { "Overload", "Battery voltage low", "Inverter limitation" },
NextSteps = new[] { "Restart the inverter", "Reduce load", "If fault persists, contact manufacturer" }
},
["OffGridOutputVoltageTooHigh"] = new()
{
Explanation = "Off-grid/EPS output voltage is too high.",
Causes = new[] { "Control fault", "Voltage regulation issue" },
NextSteps = new[] { "Restart the inverter", "If fault persists, contact manufacturer" }
},
["OffGridOutputOverCurrent"] = new()
{
Explanation = "Off-grid output current overcurrent detected.",
Causes = new[] { "Load exceeds specification", "Short circuit in load", "Inrush current" },
NextSteps = new[] { "Check if load is within specification", "Look for short circuits" }
},
["OffGridBusVoltageTooLow"] = new()
{
Explanation = "Off-grid DC bus voltage is too low.",
Causes = new[] { "Battery depleted", "High load demand", "Power electronics issue" },
NextSteps = new[] { "Check if load power exceeds upper limit", "Allow battery to charge" }
},
["OffGridOutputOverload"] = new()
{
Explanation = "Off-grid output is overloaded.",
Causes = new[] { "Load exceeds EPS capacity", "Too many appliances on backup" },
NextSteps = new[] { "Check if load is within specification", "Reduce backup load" }
},
["BalancedCircuitAbnormal"] = new()
{
Explanation = "Phase balancing circuit is abnormal.",
Causes = new[] { "Balance circuit fault", "Control issue" },
NextSteps = new[] { "Restart the inverter", "Check phase balance" }
},
// Errors (Protection-level faults)
["ExportLimitationFailSafe"] = new()
{
Explanation = "Export limitation fail-safe has triggered.",
Causes = new[] { "CT disconnected", "Meter communication lost", "Feedback loop failure" },
NextSteps = new[] { "After shutdown, check connection of CT and meter", "Verify export limit settings" }
},
["DcBiasAbnormal"] = new()
{
Explanation = "DCI (DC Injection) bias is abnormal - safety protection.",
Causes = new[] { "DC injection into grid", "Sensor fault", "Transformer issue" },
NextSteps = new[] { "Restart the inverter", "If persistent, requires service" }
},
["HighDcComponentOutputCurrent"] = new()
{
Explanation = "High DC component detected in output current.",
Causes = new[] { "Output filter issue", "Control fault", "Transformer saturation" },
NextSteps = new[] { "Restart the inverter", "Check output connections" }
},
["BusVoltageSamplingAbnormal"] = new()
{
Explanation = "DC bus voltage sampling is abnormal.",
Causes = new[] { "Voltage sensor fault", "ADC error", "Hardware issue" },
NextSteps = new[] { "Restart the inverter", "If persistent, requires service" }
},
["RelayFault"] = new()
{
Explanation = "Internal relay fault detected.",
Causes = new[] { "Relay failure", "Contact welding", "Driver circuit fault" },
NextSteps = new[] { "Restart the inverter", "If persistent, relay replacement needed" }
},
["BusVoltageAbnormal"] = new()
{
Explanation = "DC bus voltage is abnormal.",
Causes = new[] { "Power electronics fault", "Capacitor issue", "Control failure" },
NextSteps = new[] { "Restart the inverter", "If persistent, requires service" }
},
["InternalCommunicationFailure"] = new()
{
Explanation = "Internal communication failure between control boards.",
Causes = new[] { "Communication board fault", "Cable loose", "EMI interference" },
NextSteps = new[] { "Check wiring of communication board after shutdown", "Restart inverter" }
},
["TemperatureSensorDisconnected"] = new()
{
Explanation = "Temperature sensor is disconnected.",
Causes = new[] { "Sensor failure", "Cable fault", "Connector issue" },
NextSteps = new[] { "Check wiring of communication board after shutdown", "Replace sensor if faulty" }
},
["IgbtDriveFault"] = new()
{
Explanation = "IGBT gate drive fault detected.",
Causes = new[] { "Driver circuit failure", "IGBT fault", "Power supply issue" },
NextSteps = new[] { "Restart the inverter", "If persistent, requires professional service" }
},
["EepromError"] = new()
{
Explanation = "EEPROM read/write error.",
Causes = new[] { "Memory chip fault", "Data corruption", "Hardware failure" },
NextSteps = new[] { "Restart the inverter", "Factory reset may be required" }
},
["AuxiliaryPowerAbnormal"] = new()
{
Explanation = "Auxiliary power supply is abnormal.",
Causes = new[] { "Internal power supply failure", "Component fault" },
NextSteps = new[] { "Restart the inverter", "If persistent, requires service" }
},
["DcAcOvercurrentProtection"] = new()
{
Explanation = "DC/AC overcurrent protection has triggered.",
Causes = new[] { "Short circuit", "Severe overload", "Power electronics fault" },
NextSteps = new[] { "Restart the inverter", "Check for short circuits", "Reduce load" }
},
["CommunicationProtocolMismatch"] = new()
{
Explanation = "Communication protocol mismatch between components.",
Causes = new[] { "Firmware version mismatch", "Configuration error" },
NextSteps = new[] { "Restart the inverter", "Update firmware if needed" }
},
["DspComFirmwareMismatch"] = new()
{
Explanation = "DSP and COM board firmware versions are mismatched.",
Causes = new[] { "Incomplete firmware update", "Wrong firmware loaded" },
NextSteps = new[] { "Restart the inverter", "Perform complete firmware update" }
},
["DspSoftwareHardwareMismatch"] = new()
{
Explanation = "DSP software and hardware versions are mismatched.",
Causes = new[] { "Hardware replacement with incompatible firmware" },
NextSteps = new[] { "Restart the inverter", "Contact support for firmware update" }
},
["CpldAbnormal"] = new()
{
Explanation = "CPLD (programmable logic) is abnormal.",
Causes = new[] { "CPLD failure", "Firmware corruption" },
NextSteps = new[] { "Restart the inverter", "If persistent, requires service" }
},
["RedundancySamplingInconsistent"] = new()
{
Explanation = "Redundancy sampling values are inconsistent.",
Causes = new[] { "Sensor mismatch", "Calibration error", "Hardware fault" },
NextSteps = new[] { "Restart the inverter", "May require recalibration" }
},
["PwmPassThroughSignalFailure"] = new()
{
Explanation = "PWM pass-through signal failure.",
Causes = new[] { "Control board fault", "Signal path issue" },
NextSteps = new[] { "Restart the inverter", "If persistent, requires service" }
},
["AfciSelfTestFailure"] = new()
{
Explanation = "AFCI (Arc Fault Circuit Interrupter) self-test failed.",
Causes = new[] { "AFCI module fault", "Self-test circuit issue" },
NextSteps = new[] { "Restart the inverter", "AFCI may need replacement" }
},
["PvCurrentSamplingAbnormal"] = new()
{
Explanation = "PV current sampling is abnormal.",
Causes = new[] { "Current sensor fault", "ADC error" },
NextSteps = new[] { "Restart the inverter", "If persistent, requires service" }
},
["AcCurrentSamplingAbnormal"] = new()
{
Explanation = "AC current sampling is abnormal.",
Causes = new[] { "CT fault", "Sensor failure", "ADC error" },
NextSteps = new[] { "Restart the inverter", "Check CT connections" }
},
["BusSoftbootFailure"] = new()
{
Explanation = "DC bus soft-boot (pre-charge) failed.",
Causes = new[] { "Pre-charge circuit fault", "Capacitor issue", "Relay fault" },
NextSteps = new[] { "Restart the inverter", "If persistent, requires service" }
},
["EpoFault"] = new()
{
Explanation = "EPO (Emergency Power Off) fault triggered.",
Causes = new[] { "EPO button pressed", "EPO circuit activated", "Safety system trigger" },
NextSteps = new[] { "Restart the inverter", "Check EPO circuit if unintentional" }
},
["MonitoringChipBootVerificationFailed"] = new()
{
Explanation = "Monitoring chip BOOT verification failed.",
Causes = new[] { "Firmware corruption", "Chip failure" },
NextSteps = new[] { "Restart the inverter", "May require firmware reload" }
},
// Battery Errors
["BmsCommunicationFailure"] = new()
{
Explanation = "BMS failed to communicate with the inverter.",
Causes = new[] { "RS485 cable fault", "BMS offline", "Protocol mismatch" },
NextSteps = new[] { "Check connection of RS485 cable between inverter and battery" }
},
["BmsChargeDischargeFailure"] = new()
{
Explanation = "BMS reports that battery cannot charge or discharge.",
Causes = new[] { "BMS internal fault", "Protection triggered", "Cell issue" },
NextSteps = new[] { "Figure out the fault based on BMS error code", "Check battery status" }
},
["BatteryVoltageLow"] = new()
{
Explanation = "Battery voltage is below minimum.",
Causes = new[] { "Deep discharge, cell failure" },
NextSteps = new[] { "Check battery voltage" }
},
["BatteryVoltageHigh"] = new()
{
Explanation = "Battery voltage exceeds upper threshold.",
Causes = new[] { "Overcharging", "BMS fault", "Cell failure" },
NextSteps = new[] { "Check battery voltage", "If within permissible range, restart inverter" }
},
["BatteryTemperatureAbnormal"] = new()
{
Explanation = "Battery temperature is outside safe charging/discharging range.",
Causes = new[] { "Battery too hot", "Battery too cold", "Sensor fault" },
NextSteps = new[] { "Check temperature of the battery", "Improve battery environment" }
},
["BatteryReversed"] = new()
{
Explanation = "Battery polarity reversed.",
Causes = new[] { "Wrong connection" },
NextSteps = new[] { "Correct polarity immediately" }
},
["BatteryOpenCircuit"] = new()
{
Explanation = "Battery is open-circuited (not connected).",
Causes = new[] { "Battery cable disconnected", "Fuse blown", "BMS cutoff" },
NextSteps = new[] { "Check wiring of battery terminals", "Verify fuses" }
},
["BatteryOverloadProtection"] = new()
{
Explanation = "Battery overload protection has triggered.",
Causes = new[] { "Load exceeds battery discharge rating" },
NextSteps = new[] { "Check if power of load exceeds battery rated discharge power", "Reduce load" }
},
["Bus2VoltageAbnormal"] = new()
{
Explanation = "Secondary DC bus voltage is abnormal.",
Causes = new[] { "Power electronics fault", "Control issue" },
NextSteps = new[] { "Restart the inverter" }
},
["BatteryChargeOcp"] = new()
{
Explanation = "Battery charge overcurrent protection (OCP) triggered.",
Causes = new[] { "PV oversized for battery", "Charge current setting too high" },
NextSteps = new[] { "Check if PV voltage is oversized", "Reduce charge current setting" }
},
["BatteryDischargeOcp"] = new()
{
Explanation = "Battery discharge overcurrent protection (OCP) triggered.",
Causes = new[] { "Load too high", "Discharge current setting wrong" },
NextSteps = new[] { "Check if battery discharge current configuration is proper", "Reduce load" }
},
["BatterySoftStartFailed"] = new()
{
Explanation = "Battery soft-start failed.",
Causes = new[] { "Pre-charge circuit fault", "Battery voltage mismatch" },
NextSteps = new[] { "Restart the inverter", "Check battery voltage" }
},
// Off-grid Errors
["EpsOutputShortCircuited"] = new()
{
Explanation = "EPS output is short-circuited.",
Causes = new[] { "Short circuit in load" },
NextSteps = new[] { "Check load wiring" }
},
["OffGridBusVoltageLow"] = new()
{
Explanation = "Off-grid DC bus voltage is too low.",
Causes = new[] { "Battery depleted", "High load", "Power electronics issue" },
NextSteps = new[] { "Check if battery is working properly or has capacity loss" }
},
["OffGridTerminalVoltageAbnormal"] = new()
{
Explanation = "Abnormal voltage detected at off-grid terminal.",
Causes = new[] { "External voltage present", "Wiring fault", "Backfeed" },
NextSteps = new[] { "Check if a voltage is present at AC port", "Verify wiring" }
},
["SoftStartFailed"] = new()
{
Explanation = "Off-grid soft-start failed.",
Causes = new[] { "Pre-charge failure", "Load too heavy at startup" },
NextSteps = new[] { "Restart the inverter", "Reduce initial load" }
},
["OffGridOutputVoltageAbnormal"] = new()
{
Explanation = "Off-grid output voltage is abnormal.",
Causes = new[] { "Control fault", "Hardware issue" },
NextSteps = new[] { "Restart the inverter" }
},
["BalancedCircuitSelfTestFailed"] = new()
{
Explanation = "Balanced circuit self-test failed.",
Causes = new[] { "Balance circuit fault" },
NextSteps = new[] { "Restart the inverter" }
},
["HighDcComponentOutputVoltage"] = new()
{
Explanation = "High DC component in output voltage.",
Causes = new[] { "Control drift", "Transformer issue" },
NextSteps = new[] { "Restart the inverter" }
},
["OffGridOutputOverload"] = new()
{
Explanation = "Off-grid output overloaded.",
Causes = new[] { "Excessive load" },
NextSteps = new[] { "Reduce load" }
},
["OffGridParallelSignalAbnormal"] = new()
{
Explanation = "Off-grid parallel communication signal is abnormal.",
Causes = new[] { "Parallel cable fault", "Configuration mismatch" },
NextSteps = new[] { "Check if communication cables are properly connected" }
},
// Special fault codes
["AFCIFault"] = new()
{
Explanation = "An arc fault has been detected in the PV system - fire risk protection activated.",
Causes = new[] { "Loose connection causing arcing", "Damaged cable insulation", "Connector fault", "Module junction box issue" },
NextSteps = new[] { "After shutdown, check connection of PV string", "Inspect all connectors", "Look for damaged insulation" }
},
["GFCIHigh"] = new()
{
Explanation = "Excessively high ground fault/leakage current detected.",
Causes = new[] { "Ground fault in PV array", "Insulation breakdown", "Moisture ingress", "Cable damage" },
NextSteps = new[] { "Restart the inverter", "If persistent, check PV array insulation" }
},
["PVVoltageHigh"] = new()
{
Explanation = "DC input voltage exceeds the maximum safe limit.",
Causes = new[] { "Too many PV modules in series", "Cold temperature increasing Voc" },
NextSteps = new[] { "Disconnect DC switch immediately", "Check voltage", "Reconfigure strings if needed" }
},
};
}