#ifndef FAULTS_H_INCLUDED #define FAULTS_H_INCLUDED #include #include "../macros.h" enum FaultCode : u8 { invalidCode = 0, t1TooHi, t1TooLo, t1Invalid, t2TooHi, t2TooLo, t2Invalid, pTooHi, pTooLo, pInvalid }; enum FaultState : u8 { noFault, activeFault, inactiveFault }; struct SavedFault { FaultCode code; // Fehlercode u16 id; // ID, mit der der Master den Alarm identifizieren kann u16 counterActivated; // Wie oft der Regler seit dem Alarm gestartet/resetted wurde u16 counterDeactivated; // Wie oft der Regler seit der Alarm-Deaktivierung gestartet/resetted wurde bool active; // Ob der Fehler beim Ausschalten noch vorhanden war bool deactivated; // Ob der Fehler vor dem Ausschalten noch behoben wurde }; class Fault { public: Fault(); Fault(FaultCode, const u16); Fault(const Fault&); Fault(const SavedFault&); void process(); const char* title(); const char* activatedText(); const char* deactivatedText(); FaultCode code; // Fehlercode u16 id; // ID, mit der der Master den Alarm identifizieren kann u16 counterActivated; // Wie oft der Regler seit der Alarm-Aktivierung gestartet/resetted wurde u16 counterDeactivated; // Wie oft der Regler seit der Alarm-Deaktivierung gestartet/resetted wurde u32 timeActivated; // millis() zum Zeitpunkt des Fehlers u32 timeDeactivated = 0xFFFFFFFF; // millis(), als die Fehlerursache nicht mehr vorhanden war bool timeActivatedOverflow = false; // Ob schon mehr als 0xFFFFFFFF (u32) ms vergangen sind bool timeDeactivatedOverflow = false; // Ob schon mehr als 0xFFFFFFFF (u32) ms vergangen sind bool active = true; // Ob der Fehler noch vorhanden ist private: bool _of1 = false; bool _of2 = false; }; struct FaultSettings { uint8_t acoustic = 0xFF; uint8_t optical = 0xFF; uint8_t tOnIfError = 0xFF; uint8_t pOnIfError = 0xFF; int16_t tMinRRate = 0x8000; // Hundertstel-°C / 5 Minuten int16_t tMinFRate = 0x8000; // Hundertstel-°C / 5 Minuten int16_t pMinRate = 0x8000; // Hundertstel-Bar / 5 Minuten }; class FaultList { public: FaultList(); void process(); bool check(FaultCode, int16_t val=0); u8 count(); Fault* first(); Fault* last(); Fault* at(const u8); bool removeID(const u16); bool removeOne(const u8); bool removeAll(); FaultState state(); void t1Idle(); void t1Idle(const int16_t); void t2Idle(); void t2Idle(const int16_t); void pIdle(); void pIdle(const int16_t); const char* menu(); bool tActive(); bool pActive(); private: Fault _list[_MAX_FAULTS]; u8 _size = 0; u16 _lastID; FaultState _state = noFault; FaultCode _lastActiveT1Fault = invalidCode; FaultCode _lastActiveT2Fault = invalidCode; FaultCode _lastActivePFault = invalidCode; bool _t1Active = false; bool _t2Active = false; bool _pActive = false; u32 _lastT1Idle; u32 _lastT2Idle; u32 _lastPIdle; int16_t _compT1; int16_t _compT2; int16_t _compP; String _str; bool _removeAllActive = false; bool _tStateBefore; bool _pIncBefore; bool _pDecBefore; void _save(const u8); void _saveSize(); void _saveLastID(); void _test(Fault&, const bool&, const FaultCode&); void _setModbusAlarm(const Fault&, const u8, const bool); }; extern FaultList faults; extern FaultSettings faultSettings; // extern const u8 EEPROM_FAULTS[]; #endif // FAULTS_H_INCLUDED