#ifndef _MY_STUFF_H_INCLUDED #define _MY_STUFF_H_INCLUDED #include "./DallasTemperature/DallasTemperature.h" #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 _DEBUG 1 #define _DEBUG_SENSORS 0 #define _DEBUG_DISPLAY 0 #define _MODBUS 1 // Das Ermitteln einer Durchschnittstemperatur braucht (zu) viel RAM und ist wahrscheinlich unnötig #define _MODBUS_AVERAGE_TEMPERATURES 0 #if _DEBUG == 1 #define _print(x) Serial.print(x) #define _println(x) Serial.println(x) #if _DEBUG_DISPLAY == 1 struct __printTimeStruct { __printTimeStruct(const char *text) : _text(text) { _t0 = millis(); }; ~__printTimeStruct() { _print("Vergangene Millisekunden ["); _print(_text); _print("]: "); _println(millis() - _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(x) Serial.print(x) #define _printsln(x) Serial.println(x) #else #define _prints(x) #define _printsln(x) #endif #else #define _print(x) #define _println(x) #define _prints(x) #define _printsln(x) #define _printtime() #endif #define _REGS_INFRONTOF_EVENTS 6 #define _MODBUS_MAX_EVENTS 234 // Ergibt sich aus 0xF0 - 0x06 #if _MODBUS == 1 #include "modbus/ModbusRTUSlave.h" extern bool timeStampOverflow; extern unsigned long timeStamp; extern u8 &valves; extern u16 &eventCounter; extern u16 modbusData[]; #define _setModbusValve(index, val)\ if (bitRead(valves, index) != val) {\ bitWrite(valves, 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 : ((millis() - timeStamp) / 100) & 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++;\ }\ } //#define _setModbusValue(index, val) modbusData[index] = val #else #define _setModbusValve(index, val) //#define _setModbusValue(index, val) #endif // _MODBUS == #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_INVALID_BAUDRATE 4294967295 #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 _SENSOR_FAULT 0xFFFF #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 enum PSensor : uint8_t { SMC_1_5V_0_5BAR=1, // Sensor mit Kabel GEMS_0_5V_0_6BAR // Sensor mit Würfelstecker }; struct parameters { // Prozesswerte int16_t ts1 = _SENSOR_FAULT; // Soll-Temperatur 1 in 1/100 °C int16_t th1 = _SENSOR_FAULT; // Hysterese für Temperatur 1 (1/100) int16_t ts2 = _SENSOR_FAULT; // Soll-Temperatur 2 in 1/100 °C int16_t th2 = _SENSOR_FAULT; // Hysterese für Temperatur 2 (1/100) int16_t ps = _SENSOR_FAULT; // Druck in bar int16_t ph = _SENSOR_FAULT; // Hysterese für Druck uint8_t tEn = 255; // Kühlung (de)aktiviert uint8_t pInc = 255; // Drucksteigerung (de)aktiviert uint8_t pDec = 255; // Druckabfall (de)aktiviert uint8_t cEn = 255; // Controller (de)aktiviert }; struct values { // aktuelle Messwerte int16_t t1 = _SENSOR_FAULT; // Temperatur in 1/100 °C int16_t p = _SENSOR_FAULT; // Druck in 1/100 bar }; struct modbusParameters { // Parameter für Modbus uint32_t baudrate = _MODBUS_INVALID_BAUDRATE; // Modbus-Baudrate uint8_t address = 255; // Modbus-Adresse uint8_t delay = 255; // delay in 1/10 ms vor der Antwort }; struct valveStates { bool t1; bool t2; bool pInc; bool pDec; }; #endif // _MY_STUFF_H_INCLUDED