159 lines
5.2 KiB
C++
159 lines
5.2 KiB
C++
#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
|