251 lines
10 KiB
C
251 lines
10 KiB
C
|
#ifndef _MY_MACROS_H_INCLUDED
|
||
|
#define _MY_MACROS_H_INCLUDED
|
||
|
|
||
|
#define _DEBUG 1
|
||
|
#define _DEBUG_SENSORS 0
|
||
|
#define _DEBUG_DISPLAY 0
|
||
|
#define _DEBUG_MENU 0
|
||
|
#define _DEBUG_MODBUS 0
|
||
|
#define _MODBUS 1
|
||
|
// Das Ermitteln einer Durchschnittstemperatur braucht (zu) viel RAM und ist wahrscheinlich unnötig
|
||
|
#define _MODBUS_AVERAGE_TEMPERATURES 0
|
||
|
|
||
|
#define _REGS_INFRONTOF_EVENTS 6
|
||
|
// Ergibt sich aus 0xFF - 0x06, ev. wird
|
||
|
#define _MODBUS_MAX_EVENTS 249
|
||
|
|
||
|
#define _VERSION_MAJOR 0
|
||
|
#define _VERSION_MINOR 0
|
||
|
#define _VERSION_MICRO 1
|
||
|
#define _VERSION_NUMBER _VERSION_MICRO | (_VERSION_MINOR << 6) | (_VERSION_MAJOR << 12)
|
||
|
#define _VERSION_STRING "v0.0.1"
|
||
|
|
||
|
#define _MODBUS_ADDR_MIN 1
|
||
|
#define _MODBUS_ADDR_MAX 247 // Laut QModMaster letzte Adresse
|
||
|
#define _MODBUS_DELAY_MIN 0 // 1/10 Millisekunden
|
||
|
#define _MODBUS_DELAY_MAX 250 // 1/10 Millisekunden
|
||
|
|
||
|
#define _MODBUS_VALVE_T1_INDEX 0
|
||
|
#define _MODBUS_VALVE_T2_INDEX 1
|
||
|
#define _MODBUS_VALVE_PR_INDEX 2
|
||
|
#define _MODBUS_VALVE_PF_INDEX 3
|
||
|
#define _MODBUS_T1_INDEX 2
|
||
|
#define _MODBUS_T2_INDEX 3
|
||
|
#define _MODBUS_P_INDEX 4
|
||
|
|
||
|
#define _STD_TEMP_SETPOINT 400 // Hundertstel
|
||
|
#define _STD_TEMP_HYSTERESIS 10 // Hundertstel
|
||
|
#define _STD_P_SETPOINT 100 // Hundertstel
|
||
|
#define _STD_P_HYSTERESIS 5 // Hundertstel
|
||
|
#define _STD_P_EN_INC 1
|
||
|
#define _STD_P_EN_DEC 1
|
||
|
#define _STD_T_EN 1
|
||
|
#define _STD_C_EN 0
|
||
|
#define _MIN_TEMP_SETPOINT 10 // Hundertstel
|
||
|
#define _MAX_TEMP_SETPOINT 3000 // Hundertstel
|
||
|
#define _MIN_TEMP_HYSTERESIS 1 // Hundertstel
|
||
|
#define _MAX_TEMP_HYSTERESIS 100 // Hundertstel
|
||
|
#define _MIN_P_SETPOINT 0 // Hundertstel
|
||
|
#define _MAX_P_SETPOINT 300 // Hundertstel
|
||
|
#define _MIN_P_HYSTERESIS 1 // Hundertstel
|
||
|
#define _MAX_P_HYSTERESIS 50 // Hundertstel
|
||
|
|
||
|
#define _P_SENSOR_1_5V_0_5BAR 1
|
||
|
#define _P_SENSOR_0_5V_0_6BAR 2
|
||
|
|
||
|
#define _STD_FAULTS_ACOUSTIC 1
|
||
|
#define _STD_FAULTS_OPTICAL 1
|
||
|
#define _STD_FAULTS_T_ON 1
|
||
|
#define _STD_FAULTS_P_ON 0
|
||
|
#define _STD_FAULTS_T_R_RATE 10 // Hundertstel
|
||
|
#define _STD_FAULTS_T_F_RATE 10 // Hundertstel
|
||
|
#define _STD_FAULTS_P_RATE 10 // Hundertstel
|
||
|
#define _MIN_FAULTS_RATE 0 // Hundertstel
|
||
|
#define _MAX_FAULTS_RATE 1000 // Hundertstel
|
||
|
|
||
|
// Alarme
|
||
|
|
||
|
#define _MAX_FAULTS 30
|
||
|
|
||
|
// #define _CHECK_FAULT_INTERVAL 300000 // 5 Minuten
|
||
|
// #define _CHECK_FAULT_INTERVAL 3000 // 3 Sekunden (für Testzwecke)
|
||
|
// #define _CHECK_T_FAULT_INTERVAL 3600000 // 1 Stunde
|
||
|
// #define _CHECK_P_FAULT_INTERVAL 10000 // 10 Sekunden
|
||
|
#define _CHECK_T_FAULT_INTERVAL 3000 // 3 Sekunden (für Testzwecke)
|
||
|
#define _CHECK_P_FAULT_INTERVAL 3000 // 3 Sekunden (für Testzwecke)
|
||
|
|
||
|
// EEPROM Adressen:
|
||
|
|
||
|
#define _EEPROM_OFFSET 0 // Falls sich die Register nicht mehr beschreiben lassen
|
||
|
#define _EEPROM_MODBUS_ADDRESS (0 + _EEPROM_OFFSET) // 1 byte
|
||
|
#define _EEPROM_MODBUS_BAUDRATE (1 + _EEPROM_OFFSET) // 4 bytes
|
||
|
#define _EEPROM_MODBUS_DELAY (5 + _EEPROM_OFFSET) // 1 byte
|
||
|
#define _EEPROM_TEMP_SETPOINT (6 + _EEPROM_OFFSET) // 4 bytes
|
||
|
#define _EEPROM_TEMP_HYSTERESIS (10 + _EEPROM_OFFSET) // 4 bytes
|
||
|
#define _EEPROM_P_SETPOINT (14 + _EEPROM_OFFSET) // 4 bytes
|
||
|
#define _EEPROM_P_HYSTERESIS (18 + _EEPROM_OFFSET) // 4 bytes
|
||
|
#define _EEPROM_P_EN_INC (22 + _EEPROM_OFFSET) // 1 byte
|
||
|
#define _EEPROM_P_EN_DEC (23 + _EEPROM_OFFSET) // 1 byte
|
||
|
#define _EEPROM_P_SENSOR (24 + _EEPROM_OFFSET) // 1 byte
|
||
|
#define _EEPROM_BG_LIGHT (25 + _EEPROM_OFFSET) // 1 byte
|
||
|
#define _EEPROM_T_EN (26 + _EEPROM_OFFSET) // 1 byte
|
||
|
#define _EEPROM_CONTROL_EN (27 + _EEPROM_OFFSET) // 1 byte
|
||
|
// bisschen Reserveplatz
|
||
|
#define _EEPROM_POWERON_COUNT (48 + _EEPROM_OFFSET) // 2 bytes
|
||
|
#define _EEPROM_FAULT_SIZE 6 // 6 bytes für 1 Fehler
|
||
|
#define _EEPROM_FAULT_SETTINGS (50 + _EEPROM_OFFSET) // 20 bytes (incl. Reserve)
|
||
|
#define _EEPROM_FAULT_LAST_ID (70 + _EEPROM_OFFSET) // 2 byte
|
||
|
#define _EEPROM_FAULT_COUNT (72 + _EEPROM_OFFSET) // 1 byte
|
||
|
/*
|
||
|
* Bytes 1, 2: Alarm ID
|
||
|
* Bytes 3, 4: Bit 0...11: counterActivated
|
||
|
* Bytes 3, 4: Bit 12...15: Alarm-Code
|
||
|
* Bytes 5, 6: Bit 0...11: counterDeactivated
|
||
|
* Bytes 5, 6: Bit 12...13: active, deactivated
|
||
|
* Bytes 5, 6: Bit 14...15: reserviert
|
||
|
*/
|
||
|
#define _EEPROM_FAULT_1 (73 + _EEPROM_OFFSET)
|
||
|
#define _EEPROM_FAULT_2 (_EEPROM_FAULT_1 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_3 (_EEPROM_FAULT_2 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_4 (_EEPROM_FAULT_3 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_5 (_EEPROM_FAULT_4 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_6 (_EEPROM_FAULT_5 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_7 (_EEPROM_FAULT_6 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_8 (_EEPROM_FAULT_7 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_9 (_EEPROM_FAULT_8 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_10 (_EEPROM_FAULT_9 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_11 (_EEPROM_FAULT_10 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_12 (_EEPROM_FAULT_11 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_13 (_EEPROM_FAULT_12 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_14 (_EEPROM_FAULT_13 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_15 (_EEPROM_FAULT_14 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_16 (_EEPROM_FAULT_15 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_17 (_EEPROM_FAULT_16 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_18 (_EEPROM_FAULT_17 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_19 (_EEPROM_FAULT_18 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_20 (_EEPROM_FAULT_19 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_21 (_EEPROM_FAULT_20 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_22 (_EEPROM_FAULT_21 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_23 (_EEPROM_FAULT_22 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_24 (_EEPROM_FAULT_23 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_25 (_EEPROM_FAULT_24 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_26 (_EEPROM_FAULT_25 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_27 (_EEPROM_FAULT_26 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_28 (_EEPROM_FAULT_27 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_29 (_EEPROM_FAULT_28 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
#define _EEPROM_FAULT_30 (_EEPROM_FAULT_29 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE)
|
||
|
// bisschen Reserveplatz
|
||
|
#define _EEPROM_FAULTS_ACOUSTIC 300 // 1 byte
|
||
|
#define _EEPROM_FAULTS_OPTICAL 301 // 1 byte
|
||
|
#define _EEPROM_FAULTS_T_ON 302 // 1 byte
|
||
|
#define _EEPROM_FAULTS_P_ON 303 // 1 byte
|
||
|
#define _EEPROM_FAULTS_T_R_RATE 304 // 2 bytes
|
||
|
#define _EEPROM_FAULTS_T_F_RATE 306 // 2 bytes
|
||
|
#define _EEPROM_FAULTS_P_RATE 308 // 2 bytes
|
||
|
|
||
|
extern u32 currMillis;
|
||
|
|
||
|
#if _DEBUG == 1
|
||
|
#define _print(s) Serial.print(s)
|
||
|
#define _println(s) Serial.println(s)
|
||
|
#define _printf(s) Serial.print(F(s))
|
||
|
#define _printlnf(s) Serial.println(F(s))
|
||
|
#if _DEBUG_DISPLAY == 1
|
||
|
struct __printTimeStruct {
|
||
|
__printTimeStruct(const char *text) : _text(text) {
|
||
|
_t0 = currMillis;
|
||
|
};
|
||
|
~__printTimeStruct() {
|
||
|
_printf("Vergangene Millisekunden ["); _print(_text);
|
||
|
_printf("]: "); _println(currMillis - _t0);
|
||
|
};
|
||
|
private:
|
||
|
u32 _t0;
|
||
|
const char *_text;
|
||
|
};
|
||
|
#define _printtime(text) __printTimeStruct __printt(text)
|
||
|
#else
|
||
|
#define _printtime(text)
|
||
|
#endif // _DEBUG_DISPLAY
|
||
|
#if _DEBUG_SENSORS == 1
|
||
|
#define _prints(s) _print(s)
|
||
|
#define _printsln(s) _println(s)
|
||
|
#define _printsf(s) _printf(s)
|
||
|
#define _printslnf(s) _printlnf(s)
|
||
|
#else
|
||
|
#define _prints(s)
|
||
|
#define _printsln(s)
|
||
|
#define _printsf(s)
|
||
|
#define _printslnf(s)
|
||
|
#endif // _DEBUG_SENSORS
|
||
|
#if _DEBUG_MODBUS == 1
|
||
|
#define _printb(s) _print(s)
|
||
|
#define _printbln(s) _println(s)
|
||
|
#define _printbf(s) _printf(s)
|
||
|
#define _printblnf(s) _printlnf(s)
|
||
|
#else
|
||
|
#define _printb(s)
|
||
|
#define _printbln(s)
|
||
|
#define _printbf(s)
|
||
|
#define _printblnf(s)
|
||
|
#endif // _DEBUG_MODBUS
|
||
|
#if _DEBUG_MENU == 1
|
||
|
#define _printm(s) _print(s)
|
||
|
#define _printmln(s) _println(s)
|
||
|
#define _printmf(s) _printf(s)
|
||
|
#define _printmlnf(s) _printlnf(s)
|
||
|
#else
|
||
|
#define _printm(s)
|
||
|
#define _printmln(s)
|
||
|
#define _printmf(s)
|
||
|
#define _printmlnf(s)
|
||
|
#endif // _DEBUG_MENU
|
||
|
#else // _DEBUG != 1
|
||
|
#define _print(s)
|
||
|
#define _println(s)
|
||
|
#define _printf(s)
|
||
|
#define _printlnf(s)
|
||
|
#define _prints(s)
|
||
|
#define _printsln(s)
|
||
|
#define _printsf(s)
|
||
|
#define _printslnf(s)
|
||
|
#define _printb(s)
|
||
|
#define _printbln(s)
|
||
|
#define _printbf(s)
|
||
|
#define _printblnf(s)
|
||
|
#define _printm(s)
|
||
|
#define _printmln(s)
|
||
|
#define _printmf(s)
|
||
|
#define _printmlnf(s)
|
||
|
#define _printtime(s)
|
||
|
#endif
|
||
|
|
||
|
#if _MODBUS == 1
|
||
|
extern bool timeStampOverflow;
|
||
|
extern unsigned long timeStamp;
|
||
|
extern u8 modbusValves[];
|
||
|
extern u16 &eventCounter;
|
||
|
extern u16 modbusData[];
|
||
|
#define _setModbusValve(index, val)\
|
||
|
if (bitRead(modbusValves[0], index) != val) {\
|
||
|
bitWrite(modbusValves[0], index, val);\
|
||
|
bitWrite(modbusData[1], index+8, val);\
|
||
|
if (eventCounter <= _MODBUS_MAX_EVENTS) {\
|
||
|
/* Die ersten 12 Bits beinhalten den relativen Zeitstempel in Zehntelsekunden */\
|
||
|
/* Dieser Stempel ist immer 0xFFF, falls schon zuviel Zeit seit der letzten Referenzierung vergangen ist */\
|
||
|
/* u16 result = (timeStampOverflow) ? 0xFFF : ((currMillis - timeStamp) / 100) & 0xFFF;*/\
|
||
|
u16 result = (timeStampOverflow) ? 0xFFF : (modbusData[5] & 0xFFF);\
|
||
|
/* Die Bits 12...14 beinhalten die Nr des geschalteten Ausgangs */\
|
||
|
result |= index << 12;\
|
||
|
/* Das MSB gibt an, ob der Ausgang ein- oder ausgeschaltet wurde */\
|
||
|
result |= val << 15;\
|
||
|
modbusData[_REGS_INFRONTOF_EVENTS + eventCounter] = result;\
|
||
|
eventCounter++;\
|
||
|
}\
|
||
|
}
|
||
|
#else
|
||
|
#define _setModbusValve(index, val)
|
||
|
#endif // _MODBUS == 1
|
||
|
|
||
|
#endif // _MY_MACROS_H_INCLUDED
|