125 lines
3.5 KiB
C++
125 lines
3.5 KiB
C++
#ifndef FAULTS_H_INCLUDED
|
|
#define FAULTS_H_INCLUDED
|
|
|
|
#include <Arduino.h>
|
|
#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
|