From 8f097be43fd82fedeb0b5da820ec77fc896cc133 Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 7 Apr 2025 09:53:42 +0200 Subject: [PATCH] UpdateAlarm message Struct --- .../BatteryDeligreen/AlarmBitMessage.cs | 294 +++++++++++------- .../BatteryDeligreenAlarmRecord.cs | 66 ++-- 2 files changed, 215 insertions(+), 145 deletions(-) diff --git a/csharp/Lib/Devices/BatteryDeligreen/AlarmBitMessage.cs b/csharp/Lib/Devices/BatteryDeligreen/AlarmBitMessage.cs index ebad3e245..5142f7495 100644 --- a/csharp/Lib/Devices/BatteryDeligreen/AlarmBitMessage.cs +++ b/csharp/Lib/Devices/BatteryDeligreen/AlarmBitMessage.cs @@ -3,7 +3,7 @@ namespace InnovEnergy.Lib.Devices.BatteryDeligreen; public class AlarmBitMessage { - public readonly struct AlarmEvent1_ + public readonly struct AlarmEvent1 { private readonly Byte _record; @@ -16,7 +16,7 @@ public class AlarmBitMessage public Boolean DischargeSwitchFault => (_record & (1 << 6)) == 1; public Boolean CurrentLimitSwitchFault => (_record & (1 << 7)) == 1; - public AlarmEvent1_(Byte record) => _record = record; + public AlarmEvent1(Byte record) => _record = record; } @@ -34,172 +34,226 @@ public class AlarmBitMessage //} // Enum for Alarm Event 2 - public enum AlarmEvent2 + public readonly struct AlarmEvent2 { - MonomerHighVoltageAlarm, - MonomerOvervoltageProtection, - MonomerLowVoltageAlarm, - MonomerUnderVoltageProtection, - HighVoltageAlarmForTotalVoltage, - OvervoltageProtectionForTotalVoltage, - LowVoltageAlarmForTotalVoltage, - UnderVoltageProtectionForTotalVoltage + private readonly Byte _record; + public Boolean MonomerHighVoltageAlarm => (_record & (1 << 0)) == 1; + public Boolean MonomerOvervoltageProtection => (_record & (1 << 1)) == 1; + public Boolean MonomerLowVoltageAlarm => (_record & (1 << 2)) == 1; + public Boolean MonomerUnderVoltageProtection => (_record & (1 << 3)) == 1; + public Boolean HighVoltageAlarmForTotalVoltage => (_record & (1 << 4)) == 1; + public Boolean OvervoltageProtectionForTotalVoltage => (_record & (1 << 5)) == 1; + public Boolean LowVoltageAlarmForTotalVoltage => (_record & (1 << 6)) == 1; + public Boolean UnderVoltageProtectionForTotalVoltage => (_record & (1 << 7)) == 1; + + public AlarmEvent2(Byte record) => _record = record; + } // Enum for Alarm Event 3 - public enum AlarmEvent3 + public readonly struct AlarmEvent3 { - ChargeHighTemperatureAlarm, - ChargeOverTemperatureProtection, - ChargeLowTemperatureAlarm, - ChargeUnderTemperatureProtection, - DischargeHighTemperatureAlarm, - DischargeOverTemperatureProtection, - DischargeLowTemperatureAlarm, - DischargeUnderTemperatureProtection + private readonly Byte _record; + + public Boolean ChargeHighTemperatureAlarm => (_record & (1 << 0)) == 1; + public Boolean ChargeOverTemperatureProtection => (_record & (1 << 1)) == 1; + public Boolean ChargeLowTemperatureAlarm => (_record & (1 << 2)) == 1; + public Boolean ChargeUnderTemperatureProtection => (_record & (1 << 3)) == 1; + public Boolean DischargeHighTemperatureAlarm => (_record & (1 << 4)) == 1; + public Boolean DischargeOverTemperatureProtection => (_record & (1 << 5)) == 1; + public Boolean DischargeLowTemperatureAlarm => (_record & (1 << 6)) == 1; + public Boolean DischargeUnderTemperatureProtection => (_record & (1 << 7)) == 1; + + public AlarmEvent3(Byte record) => _record = record; } // Enum for Alarm Event 4 - public enum AlarmEvent4 + public readonly struct AlarmEvent4 { - EnvironmentHighTemperatureAlarm, - EnvironmentOverTemperatureProtection, - EnvironmentLowTemperatureAlarm, - EnvironmentUnderTemperatureProtection, - PowerOverTemperatureProtection, - PowerHighTemperatureAlarm, - CellLowTemperatureHeating, - ReservationBit + private readonly Byte _record; + + public Boolean EnvironmentHighTemperatureAlarm => (_record & (1 << 0)) == 1; + public Boolean EnvironmentOverTemperatureProtection => (_record & (1 << 1)) == 1; + public Boolean EnvironmentLowTemperatureAlarm => (_record & (1 << 2)) == 1; + public Boolean EnvironmentUnderTemperatureProtection => (_record & (1 << 3)) == 1; + public Boolean PowerOverTemperatureProtection => (_record & (1 << 4)) == 1; + public Boolean PowerHighTemperatureAlarm => (_record & (1 << 5)) == 1; + public Boolean CellLowTemperatureHeating => (_record & (1 << 6)) == 1; + public Boolean ReservationBit => (_record & (1 << 7)) == 1; + + public AlarmEvent4(Byte record) => _record = record; } // Enum for Alarm Event 5 - public enum AlarmEvent5 + public readonly struct AlarmEvent5 { - ChargeOverCurrentAlarm, - ChargeOverCurrentProtection, - DischargeOverCurrentAlarm, - DischargeOverCurrentProtection, - TransientOverCurrentProtection, - OutputShortCircuitProtection, - TransientOverCurrentLockout, - OutputShortCircuitLockout + private readonly Byte _record; + + public Boolean ChargeOverCurrentAlarm => (_record & (1 << 0)) == 1; + public Boolean ChargeOverCurrentProtection => (_record & (1 << 1)) == 1; + public Boolean DischargeOverCurrentAlarm => (_record & (1 << 2)) == 1; + public Boolean DischargeOverCurrentProtection => (_record & (1 << 3)) == 1; + public Boolean TransientOverCurrentProtection => (_record & (1 << 4)) == 1; + public Boolean OutputShortCircuitProtection => (_record & (1 << 5)) == 1; + public Boolean TransientOverCurrentLockout => (_record & (1 << 6)) == 1; + public Boolean OutputShortCircuitLockout => (_record & (1 << 7)) == 1; + + public AlarmEvent5(Byte record) => _record = record; } // Enum for Alarm Event 6 - public enum AlarmEvent6 + public readonly struct AlarmEvent6 { - ChargeHighVoltageProtection, - IntermittentRechargeWaiting, - ResidualCapacityAlarm, - ResidualCapacityProtection, - CellLowVoltageChargingProhibition, - OutputReversePolarityProtection, - OutputConnectionFault, - InsideBit + private readonly Byte _record; + public Boolean ChargeHighVoltageProtection => (_record & (1 << 0)) == 1; + public Boolean IntermittentRechargeWaiting => (_record & (1 << 1)) == 1; + public Boolean ResidualCapacityAlarm => (_record & (1 << 2)) == 1; + public Boolean ResidualCapacityProtection => (_record & (1 << 3)) == 1; + public Boolean CellLowVoltageChargingProhibition => (_record & (1 << 4)) == 1; + public Boolean OutputReversePolarityProtection => (_record & (1 << 5)) == 1; + public Boolean OutputConnectionFault => (_record & (1 << 6)) == 1; + public Boolean InsideBit => (_record & (1 << 7)) == 1; + + public AlarmEvent6(Byte record) => _record = record; } // Enum for On-Off State - public enum OnOffState + public readonly struct OnOffState { - DischargeSwitchState, - ChargeSwitchState, - CurrentLimitSwitchState, - HeatingSwitchState, - ReservationBit1, - ReservationBit2, - ReservationBit3, - ReservationBit4 + private readonly Byte _record; + + public Boolean DischargeSwitchState => (_record & (1 << 0)) == 1; + public Boolean ChargeSwitchState => (_record & (1 << 1)) == 1; + public Boolean CurrentLimitSwitchStat => (_record & (1 << 2)) == 1; + public Boolean HeatingSwitchState => (_record & (1 << 3)) == 1; + public Boolean ReservationBit1 => (_record & (1 << 4)) == 1; + public Boolean ReservationBit2 => (_record & (1 << 5)) == 1; + public Boolean ReservationBit3 => (_record & (1 << 6)) == 1; + public Boolean ReservationBit4 => (_record & (1 << 7)) == 1; + + public OnOffState(Byte record) => _record = record; + } // Enum for Equilibrium State 1 - public enum EquilibriumState1 + public readonly struct EquilibriumState1 { - Cell01Equilibrium, - Cell02Equilibrium, - Cell03Equilibrium, - Cell04Equilibrium, - Cell05Equilibrium, - Cell06Equilibrium, - Cell07Equilibrium, - Cell08Equilibrium + private readonly Byte _record; + + public Boolean Cell01Equilibrium => (_record & (1 << 0)) == 1; + public Boolean Cell02Equilibrium => (_record & (1 << 1)) == 1; + public Boolean Cell03Equilibrium => (_record & (1 << 2)) == 1; + public Boolean Cell04Equilibrium => (_record & (1 << 3)) == 1; + public Boolean Cell05Equilibrium => (_record & (1 << 4)) == 1; + public Boolean Cell06Equilibrium => (_record & (1 << 5)) == 1; + public Boolean Cell07Equilibrium => (_record & (1 << 6)) == 1; + public Boolean Cell08Equilibrium => (_record & (1 << 7)) == 1; + + public EquilibriumState1(Byte record) => _record = record; } // Enum for Equilibrium State 2 - public enum EquilibriumState2 + public readonly struct EquilibriumState2 { - Cell09Equilibrium, - Cell10Equilibrium, - Cell11Equilibrium, - Cell12Equilibrium, - Cell13Equilibrium, - Cell14Equilibrium, - Cell15Equilibrium, - Cell16Equilibrium + private readonly Byte _record; + + + public Boolean Cell09Equilibrium => (_record & (1 << 0)) == 1; + public Boolean Cell10Equilibrium => (_record & (1 << 1)) == 1; + public Boolean Cell11Equilibrium => (_record & (1 << 2)) == 1; + public Boolean Cell12Equilibrium => (_record & (1 << 3)) == 1; + public Boolean Cell13Equilibrium => (_record & (1 << 4)) == 1; + public Boolean Cell14Equilibrium => (_record & (1 << 5)) == 1; + public Boolean Cell15Equilibrium => (_record & (1 << 6)) == 1; + public Boolean Cell16Equilibrium => (_record & (1 << 7)) == 1; + + public EquilibriumState2(Byte record) => _record = record; + } // Enum for System State - public enum SystemState + public readonly struct SystemState { - Discharge, - Charge, - FloatingCharge, - ReservationBit1, - Standby, - Shutdown, - ReservationBit2, - ReservationBit3 + private readonly Byte _record; + + public Boolean Discharge => (_record & (1 << 0)) == 1; + public Boolean Charge => (_record & (1 << 1)) == 1; + public Boolean FloatingCharge => (_record & (1 << 2)) == 1; + public Boolean ReservationBit1 => (_record & (1 << 3)) == 1; + public Boolean Standby => (_record & (1 << 4)) == 1; + public Boolean Shutdown => (_record & (1 << 5)) == 1; + public Boolean ReservationBit2 => (_record & (1 << 6)) == 1; + public Boolean ReservationBit3 => (_record & (1 << 7)) == 1; + + public SystemState(Byte record) => _record = record; } // Enum for Disconnection State 1 - public enum DisconnectionState1 + public readonly struct DisconnectionState1 { - Cell01Disconnection, - Cell02Disconnection, - Cell03Disconnection, - Cell04Disconnection, - Cell05Disconnection, - Cell06Disconnection, - Cell07Disconnection, - Cell08Disconnection + private readonly Byte _record; + + public Boolean Cell01Disconnection => (_record & (1 << 0)) == 1; + public Boolean Cell02Disconnection => (_record & (1 << 1)) == 1; + public Boolean Cell03Disconnection => (_record & (1 << 2)) == 1; + public Boolean Cell04Disconnection => (_record & (1 << 3)) == 1; + public Boolean Cell05Disconnection => (_record & (1 << 4)) == 1; + public Boolean Cell06Disconnection => (_record & (1 << 5)) == 1; + public Boolean Cell07Disconnection => (_record & (1 << 6)) == 1; + public Boolean Cell08Disconnection => (_record & (1 << 7)) == 1; + + public DisconnectionState1(Byte record) => _record = record; } // Enum for Disconnection State 2 - public enum DisconnectionState2 + public readonly struct DisconnectionState2 { - Cell09Disconnection, - Cell10Disconnection, - Cell11Disconnection, - Cell12Disconnection, - Cell13Disconnection, - Cell14Disconnection, - Cell15Disconnection, - Cell16Disconnection - } + private readonly Byte _record; + public Boolean Cell09Disconnection => (_record & (1 << 0)) == 1; + public Boolean Cell10Disconnection => (_record & (1 << 1)) == 1; + public Boolean Cell11Disconnection => (_record & (1 << 2)) == 1; + public Boolean Cell12Disconnection => (_record & (1 << 3)) == 1; + public Boolean Cell13Disconnection => (_record & (1 << 4)) == 1; + public Boolean Cell14Disconnection => (_record & (1 << 5)) == 1; + public Boolean Cell15Disconnection => (_record & (1 << 6)) == 1; + public Boolean Cell16Disconnection => (_record & (1 << 7)) == 1; + + public DisconnectionState2(Byte record) => _record = record; + } // Enum for Alarm Event 7 - public enum AlarmEvent7 + public readonly struct AlarmEvent7 { - InsideBit1, - InsideBit2, - InsideBit3, - InsideBit4, - AutomaticChargingWaiting, - ManualChargingWaiting, - InsideBit5, - InsideBit6 + private readonly Byte _record; + + public Boolean InsideBit1 => (_record & (1 << 0)) == 1; + public Boolean InsideBit2 => (_record & (1 << 1)) == 1; + public Boolean InsideBit3 => (_record & (1 << 2)) == 1; + public Boolean InsideBit4 => (_record & (1 << 3)) == 1; + public Boolean AutomaticChargingWaiting => (_record & (1 << 4)) == 1; + public Boolean ManualChargingWaiting => (_record & (1 << 5)) == 1; + public Boolean InsideBit5 => (_record & (1 << 6)) == 1; + public Boolean InsideBit6 => (_record & (1 << 7)) == 1; + + public AlarmEvent7(Byte record) => _record = record; } // Enum for Alarm Event 8 - public enum AlarmEvent8 + public readonly struct AlarmEvent8 { - EepStorageFault, - RtcError, - VoltageCalibrationNotPerformed, - CurrentCalibrationNotPerformed, - ZeroCalibrationNotPerformed, - InsideBit1, - InsideBit2, - InsideBit3 + private readonly Byte _record; + + public Boolean EepStorageFault => (_record & (1 << 0)) == 1; + public Boolean RtcError => (_record & (1 << 1)) == 1; + public Boolean VoltageCalibrationNotPerformed => (_record & (1 << 2)) == 1; + public Boolean CurrentCalibrationNotPerformed => (_record & (1 << 3)) == 1; + public Boolean ZeroCalibrationNotPerformed => (_record & (1 << 4)) == 1; + public Boolean InsideBit1 => (_record & (1 << 5)) == 1; + public Boolean InsideBit2 => (_record & (1 << 6)) == 1; + public Boolean InsideBit3 => (_record & (1 << 7)) == 1; + + public AlarmEvent8(Byte record) => _record = record; + } } diff --git a/csharp/Lib/Devices/BatteryDeligreen/BatteryDeligreenAlarmRecord.cs b/csharp/Lib/Devices/BatteryDeligreen/BatteryDeligreenAlarmRecord.cs index 297befac4..fdb5f9e86 100644 --- a/csharp/Lib/Devices/BatteryDeligreen/BatteryDeligreenAlarmRecord.cs +++ b/csharp/Lib/Devices/BatteryDeligreen/BatteryDeligreenAlarmRecord.cs @@ -5,32 +5,31 @@ namespace InnovEnergy.Lib.Devices.BatteryDeligreen; public class BatteryDeligreenAlarmRecord { - public List CellAlarmList { get; set; } - public List CellTemperatureAlarm { get; set; } - public String EnviTempAlarm { get; set; } - public String PowerTempAlarm { get; set; } - public String CurrentAlarm { get; set; } - public String TotalVoltageAlarm { get; set; } - public AlarmEvent1_ AlarmEvent1 { get; set; } - /* public AlarmBitMessage.AlarmEvent2 AlarmEvent2 { get; set; } - public AlarmBitMessage.AlarmEvent3 AlarmEvent3 { get; set; } - public AlarmBitMessage.AlarmEvent4 AlarmEvent4 { get; set; } - public AlarmBitMessage.AlarmEvent5 AlarmEvent5 { get; set; } - public AlarmBitMessage.AlarmEvent6 AlarmEvent6 { get; set; } - public AlarmBitMessage.AlarmEvent7 AlarmEvent7 { get; set; } - public AlarmBitMessage.AlarmEvent8 AlarmEvent8 { get; set; } - - public AlarmBitMessage.DisconnectionState1 DisconnectionState1 { get; set; } - public AlarmBitMessage.DisconnectionState2 DisconnectionState2 { get; set; } - public AlarmBitMessage.EquilibriumState1 EquilibriumState1 { get; set; } - public AlarmBitMessage.EquilibriumState2 EquilibriumState2 { get; set; } - public AlarmBitMessage.OnOffState OnOffState { get; set; } - public AlarmBitMessage.SystemState SystemState { get; set; }*/ + public List CellAlarmList { get; } + public List CellTemperatureAlarm { get; } + public String EnviTempAlarm { get; } + public String PowerTempAlarm { get; } + public String CurrentAlarm { get; } + public String TotalVoltageAlarm { get; } + public AlarmEvent1 AlarmEvent1 { get; } + public AlarmEvent2 AlarmEvent2 { get; } + public AlarmEvent3 AlarmEvent3 { get; } + public AlarmEvent4 AlarmEvent4 { get; } + public AlarmEvent5 AlarmEvent5 { get; } + public AlarmEvent6 AlarmEvent6 { get; } + public AlarmEvent7 AlarmEvent7 { get; } + public AlarmEvent8 AlarmEvent8 { get; } + public DisconnectionState1 DisconnectionState1 { get; } + public DisconnectionState2 DisconnectionState2 { get; } + public EquilibriumState1 EquilibriumState1 { get; } + public EquilibriumState2 EquilibriumState2 { get; } + public OnOffState OnOffState { get; } + public SystemState SystemState { get; } public BatteryDeligreenAlarmRecord( List cellAlarmList, List cellTemperatureAlarm, String enviTempAlarm1, String powerTempAlarm1, - String currentAlarm1, String totalVoltageAlarm1, Byte alarmEvent1/*, Enum alarmEvent2, Enum alarmEvent3, - Enum alarmEvent4, Enum alarmEvent5, Enum alarmEvent6, Enum alarmEvent7, Enum alarmEvent8, Enum disconnectionState1, - Enum disconnectionState2, Enum equilibriumState1, Enum equilibriumState2, Enum onOffState, Enum systemState*/) + String currentAlarm1, String totalVoltageAlarm1, Byte alarmEvent1, Byte alarmEvent2, Byte alarmEvent3, + Byte alarmEvent4, Byte alarmEvent5, Byte alarmEvent6, Byte alarmEvent7, Byte alarmEvent8, Byte disconnectionState1, + Byte disconnectionState2, Byte equilibriumState1, Byte equilibriumState2, Byte onOffState, Byte systemState) { CellAlarmList = cellAlarmList; CellTemperatureAlarm = cellTemperatureAlarm; @@ -38,6 +37,23 @@ public class BatteryDeligreenAlarmRecord PowerTempAlarm = powerTempAlarm1; CurrentAlarm = currentAlarm1; TotalVoltageAlarm = totalVoltageAlarm1; - AlarmEvent1 = new AlarmEvent1_(alarmEvent1); + + AlarmEvent1 = new AlarmEvent1(alarmEvent1); + AlarmEvent2 = new AlarmEvent2(alarmEvent2); + AlarmEvent3 = new AlarmEvent3(alarmEvent3); + AlarmEvent4 = new AlarmEvent4(alarmEvent4); + AlarmEvent5 = new AlarmEvent5(alarmEvent5); + AlarmEvent6 = new AlarmEvent6(alarmEvent6); + AlarmEvent7 = new AlarmEvent7(alarmEvent7); + AlarmEvent8 = new AlarmEvent8(alarmEvent8); + + DisconnectionState1 = new DisconnectionState1(disconnectionState1); + DisconnectionState2 = new DisconnectionState2(disconnectionState2); + + EquilibriumState1 = new EquilibriumState1(equilibriumState1); + EquilibriumState2 = new EquilibriumState2(equilibriumState2); + + OnOffState = new OnOffState(onOffState); + SystemState = new SystemState(systemState); } } \ No newline at end of file