-
Notifications
You must be signed in to change notification settings - Fork 0
/
back_end.h
408 lines (346 loc) · 12.9 KB
/
back_end.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
#ifndef BACK_END_H
#define BACK_END_H
#include <QTimer>
#include <QDebug>
#include "hid_pnp.h"
class BackEndFanPV : public QObject
{
Q_OBJECT
Q_PROPERTY(quint16 rpm READ rpm WRITE setRpm NOTIFY rpmChanged)
Q_PROPERTY(quint8 pct READ pct WRITE setPct NOTIFY pctChanged)
Q_PROPERTY(quint8 mode READ mode WRITE setMode NOTIFY modeChanged)
Q_PROPERTY(quint8 source READ source WRITE setSource NOTIFY sourceChanged)
signals:
void rpmChanged();
void pctChanged();
void modeChanged();
void sourceChanged();
public:
explicit BackEndFanPV(QObject *parent = nullptr);
quint16 rpm() const;
quint8 pct() const;
quint8 mode() const;
quint8 source() const;
void setRpm(const quint16 rpm);
void setPct(const quint8 pct);
void setMode(const quint8 mode);
void setSource(const quint8 source);
private:
quint16 m_rpm = 0;
quint8 m_pct = 0;
quint8 m_mode = 0;
quint8 m_source = 0;
};
class BackEndFan : public QObject
{
Q_OBJECT
Q_PROPERTY(quint8 pinPWM READ pinPWM WRITE setPinPWM NOTIFY pinPWMChanged)
Q_PROPERTY(quint8 pinRPM READ pinRPM WRITE setPinRPM NOTIFY pinRPMChanged)
Q_PROPERTY(quint8 mode READ mode WRITE setMode NOTIFY modeChanged)
Q_PROPERTY(quint8 source READ source WRITE setSource NOTIFY sourceChanged)
Q_PROPERTY(qreal ratio READ ratio WRITE setRatio NOTIFY ratioChanged)
Q_PROPERTY(QVariantList tbl READ tbl WRITE setTbl NOTIFY tblChanged)
Q_PROPERTY(BackEndFanPV* pv READ pv WRITE setPv NOTIFY pvChanged)
signals:
void pinPWMChanged();
void pinRPMChanged();
void modeChanged();
void sourceChanged();
void ratioChanged();
void tblChanged();
void pvChanged();
public:
explicit BackEndFan(RuntimeConfig::FanConfig &fanConfig, QObject *parent = nullptr);
~BackEndFan();
quint8 pinPWM();
quint8 pinRPM();
quint8 mode();
quint8 source();
qreal ratio();
QVariantList &tbl();
BackEndFanPV* pv() const;
void setPinPWM(const quint8 pinPWM);
void setPinRPM(const quint8 pinRPM);
void setMode(const quint8 mode);
void setSource(const quint8 source);
void setRatio(const qreal &ratio);
void setTbl(const QVariantList &tbl);
void setPv(const BackEndFanPV* pv);
private:
RuntimeConfig::FanConfig &fanConfig;
QVariantList pctTbl;
BackEndFanPV* m_pv = nullptr;
};
class BackEndSensor : public QObject
{
Q_OBJECT
Q_PROPERTY(quint8 pin READ pin WRITE setPin NOTIFY pinChanged)
Q_PROPERTY(quint16 beta READ beta WRITE setBeta NOTIFY betaChanged)
Q_PROPERTY(quint16 seriesR READ seriesR WRITE setSeriesR NOTIFY seriesRChanged)
Q_PROPERTY(quint16 nominalR READ nominalR WRITE setNominalR NOTIFY nominalRChanged)
Q_PROPERTY(qreal pvTemp READ pvTemp WRITE setPvTemp NOTIFY pvTempChanged)
Q_PROPERTY(qreal pvSetpoint READ pvSetpoint WRITE setPvSetpoint NOTIFY pvSetpointChanged)
Q_PROPERTY(bool hasPid READ hasPid WRITE setHasPid NOTIFY hasPidChanged)
signals:
void pinChanged();
void betaChanged();
void seriesRChanged();
void nominalRChanged();
void pvTempChanged();
void pvSetpointChanged();
void hasPidChanged();
public:
explicit BackEndSensor(RuntimeConfig::SensorConfig &sensorConfig, QObject *parent = nullptr);
void checkUsage(const RuntimeConfig &cfg, const CONTROL_SOURCE src);
quint8 pin() const;
quint16 beta() const;
quint16 seriesR() const;
quint16 nominalR() const;
const qreal &pvTemp() const;
const qreal &pvSetpoint() const;
bool hasPid() const;
void setPin(const quint8 pin);
void setBeta(const quint16 beta);
void setSeriesR(const quint16 seriesR);
void setNominalR(const quint16 nominalR);
void setPvTemp(const qreal &temp);
void setPvSetpoint(const qreal &setpoint);
void setHasPid(const bool hasPid);
private:
RuntimeConfig::SensorConfig &sensorConfig;
bool m_hasPid = false;
qreal m_temp = 0.0;
qreal m_setpoint = 0.0;
};
class BackEndPIDStep : public QObject
{
Q_OBJECT
Q_PROPERTY(quint8 pct READ pct WRITE setPct NOTIFY pctChanged)
Q_PROPERTY(quint16 delay READ delay WRITE setDelay NOTIFY delayChanged)
Q_PROPERTY(qreal caseTempDelta READ caseTempDelta WRITE setCaseTempDelta NOTIFY caseTempDeltaChanged)
signals:
void pctChanged();
void delayChanged();
void caseTempDeltaChanged();
public:
explicit BackEndPIDStep(RuntimeConfig::PIDConfig::PIDStep &step, QObject *parent = nullptr);
quint8 pct() const;
quint16 delay() const;
qreal caseTempDelta() const;
void setPct(const quint8 pct);
void setDelay(const quint16 delay);
void setCaseTempDelta(const qreal &caseTempDelta);
private:
RuntimeConfig::PIDConfig::PIDStep &step;
};
class BackEndPID : public QObject
{
Q_OBJECT
Q_PROPERTY(qreal percentMin READ percentMin WRITE setPercentMin NOTIFY percentMinChanged)
Q_PROPERTY(qreal percentMax1 READ percentMax1 WRITE setPercentMax1 NOTIFY percentMax1Changed)
Q_PROPERTY(qreal percentMax2 READ percentMax2 WRITE setPercentMax2 NOTIFY percentMax2Changed)
Q_PROPERTY(qreal setpoint READ setpoint WRITE setSetpoint NOTIFY setpointChanged)
Q_PROPERTY(qreal setpointMin READ setpointMin WRITE setSetpointMin NOTIFY setpointMinChanged)
Q_PROPERTY(qreal setpointMax READ setpointMax WRITE setSetpointMax NOTIFY setpointMaxChanged)
Q_PROPERTY(qreal gainP READ gainP WRITE setGainP NOTIFY gainPChanged)
Q_PROPERTY(qreal gainI READ gainI WRITE setGainI NOTIFY gainIChanged)
Q_PROPERTY(qreal gainD READ gainD WRITE setGainD NOTIFY gainDChanged)
Q_PROPERTY(bool adaptiveSP READ adaptiveSP WRITE setAdaptiveSP NOTIFY adaptiveSPChanged)
Q_PROPERTY(bool adaptiveSPUseCaseTemp READ adaptiveSPUseCaseTemp WRITE setAdaptiveSPUseCaseTemp NOTIFY adaptiveSPUseCaseTempChanged)
Q_PROPERTY(qreal adaptiveSPStepSize READ adaptiveSPStepSize WRITE setAdaptiveSPStepSize NOTIFY adaptiveSPStepSizeChanged)
Q_PROPERTY(BackEndPIDStep* adaptiveSPStepUp READ adaptiveSPStepUp WRITE setAdaptiveSPStepUp NOTIFY adaptiveSPStepUpChanged)
Q_PROPERTY(BackEndPIDStep* adaptiveSPStepDown READ adaptiveSPStepDown WRITE setAdaptiveSPStepDown NOTIFY adaptiveSPStepDownChanged)
signals:
void percentMinChanged();
void percentMax1Changed();
void percentMax2Changed();
void setpointChanged();
void setpointMinChanged();
void setpointMaxChanged();
void gainPChanged();
void gainIChanged();
void gainDChanged();
void adaptiveSPChanged();
void adaptiveSPUseCaseTempChanged();
void adaptiveSPStepSizeChanged();
void adaptiveSPStepUpChanged();
void adaptiveSPStepDownChanged();
public:
explicit BackEndPID(RuntimeConfig::PIDConfig &pid, QObject *parent = nullptr);
~BackEndPID();
quint8 percentMin() const;
quint8 percentMax1() const;
quint8 percentMax2() const;
qreal setpoint() const;
qreal setpointMin() const;
qreal setpointMax() const;
qreal gainP() const;
qreal gainI() const;
qreal gainD() const;
bool adaptiveSP() const;
bool adaptiveSPUseCaseTemp() const;
qreal adaptiveSPStepSize() const;
BackEndPIDStep* adaptiveSPStepUp() const;
BackEndPIDStep* adaptiveSPStepDown() const;
void setPercentMin(const quint8 pct);
void setPercentMax1(const quint8 pct);
void setPercentMax2(const quint8 pct);
void setSetpoint(const qreal &setpoint);
void setSetpointMin(const qreal &setpointMin);
void setSetpointMax(const qreal &setpointMax);
void setGainP(const qreal &gain);
void setGainI(const qreal &gain);
void setGainD(const qreal &gain);
void setAdaptiveSP(const bool &adativeSP);
void setAdaptiveSPUseCaseTemp(const bool &adativeSPUseCaseTemp);
void setAdaptiveSPStepSize(const qreal &stepSize);
void setAdaptiveSPStepUp(BackEndPIDStep *step);
void setAdaptiveSPStepDown(BackEndPIDStep *step);
private:
RuntimeConfig::PIDConfig &pid;
BackEndPIDStep *stepUpConfig = nullptr;
BackEndPIDStep *stepDownConfig = nullptr;
};
class BackEnd : public QObject
{
public:
// QML enum for connection state
enum class UiState : uint8_t {
Offline,
Online,
Connecting,
NoLog, // DATA is connected
NoData, // LOG is connected
};
// QML enum for HID state
enum class HidState : uint8_t {
HidData,
HidConfig,
HidDownload,
};
// QML enum representing CONTROL_MODE enum
enum class ControlMode : uint8_t {
Tbl,
PID,
Fixed,
Off
};
// QML enum representing CONTROL_SOURCE enum
enum class ControlSource : uint8_t {
WaterSupplyTemp,
WaterReturnTemp,
CaseTemp,
Aux1Temp,
Aux2Temp,
VirtualDeltaT
};
private:
Q_OBJECT
Q_ENUM(UiState)
Q_ENUM(HidState)
Q_ENUM(ControlMode)
Q_ENUM(ControlSource)
// configuration
Q_PROPERTY(BackEndPID* pid1 READ pid1 WRITE setPid1 NOTIFY pid1Changed)
Q_PROPERTY(BackEndPID* pid2 READ pid2 WRITE setPid2 NOTIFY pid2Changed)
Q_PROPERTY(BackEndPID* pid3 READ pid3 WRITE setPid3 NOTIFY pid3Changed)
Q_PROPERTY(BackEndPID* pid4 READ pid4 WRITE setPid4 NOTIFY pid4Changed)
Q_PROPERTY(BackEndFan* fan1 READ fan1 WRITE setFan1 NOTIFY fan1Changed)
Q_PROPERTY(BackEndFan* fan2 READ fan2 WRITE setFan2 NOTIFY fan2Changed)
Q_PROPERTY(BackEndFan* fan3 READ fan3 WRITE setFan3 NOTIFY fan3Changed)
Q_PROPERTY(BackEndFan* fan4 READ fan4 WRITE setFan4 NOTIFY fan4Changed)
Q_PROPERTY(BackEndFan* fan5 READ fan5 WRITE setFan5 NOTIFY fan5Changed)
Q_PROPERTY(BackEndFan* fan6 READ fan6 WRITE setFan6 NOTIFY fan6Changed)
Q_PROPERTY(BackEndSensor* sensor1 READ sensor1 WRITE setSensor1 NOTIFY sensor1Changed)
Q_PROPERTY(BackEndSensor* sensor2 READ sensor2 WRITE setSensor2 NOTIFY sensor2Changed)
Q_PROPERTY(BackEndSensor* sensor3 READ sensor3 WRITE setSensor3 NOTIFY sensor3Changed)
Q_PROPERTY(BackEndSensor* sensor4 READ sensor4 WRITE setSensor4 NOTIFY sensor4Changed)
Q_PROPERTY(BackEndSensor* sensor5 READ sensor5 WRITE setSensor5 NOTIFY sensor5Changed)
// present values
Q_PROPERTY(qreal deltaT READ deltaT WRITE setDeltaT NOTIFY deltaTChanged)
public slots:
void update_gui(bool isConnected, const UI_Data &ui_data);
void update_log(bool isConnected, QString str);
void update_config(bool isConnected, const RuntimeConfig &config);
signals:
void hidState(const quint8 state);
void hidConnectStatus(const bool connecting, const bool dataOnline, const bool logOnline);
void logAppend(QString log);
void saveConfig(const RuntimeConfig &config);
void configDownloaded();
void pid1Changed();
void pid2Changed();
void pid3Changed();
void pid4Changed();
void fan1Changed();
void fan2Changed();
void fan3Changed();
void fan4Changed();
void fan5Changed();
void fan6Changed();
void sensor1Changed();
void sensor2Changed();
void sensor3Changed();
void sensor4Changed();
void sensor5Changed();
void deltaTChanged();
public:
explicit BackEnd(QObject *parent = nullptr);
~BackEnd();
Q_INVOKABLE void reconnect();
Q_INVOKABLE bool save();
void checkUsages();
BackEndPID* pid1() const;
BackEndPID* pid2() const;
BackEndPID* pid3() const;
BackEndPID* pid4() const;
BackEndFan* fan1() const;
BackEndFan* fan2() const;
BackEndFan* fan3() const;
BackEndFan* fan4() const;
BackEndFan* fan5() const;
BackEndFan* fan6() const;
BackEndSensor* sensor1() const;
BackEndSensor* sensor2() const;
BackEndSensor* sensor3() const;
BackEndSensor* sensor4() const;
BackEndSensor* sensor5() const;
qreal deltaT() const;
void setPid1(BackEndPID *pid);
void setPid2(BackEndPID *pid);
void setPid3(BackEndPID *pid);
void setPid4(BackEndPID *pid);
void setFan1(BackEndFan *fan);
void setFan2(BackEndFan *fan);
void setFan3(BackEndFan *fan);
void setFan4(BackEndFan *fan);
void setFan5(BackEndFan *fan);
void setFan6(BackEndFan *fan);
void setSensor1(BackEndSensor *sensor);
void setSensor2(BackEndSensor *sensor);
void setSensor3(BackEndSensor *sensor);
void setSensor4(BackEndSensor *sensor);
void setSensor5(BackEndSensor *sensor);
void setDeltaT(const qreal &deltaT);
private:
HID_PnP *ctrl = nullptr;
BackEndPID *pid1Config = nullptr;
BackEndPID *pid2Config = nullptr;
BackEndPID *pid3Config = nullptr;
BackEndPID *pid4Config = nullptr;
BackEndFan *fan1Config = nullptr;
BackEndFan *fan2Config = nullptr;
BackEndFan *fan3Config = nullptr;
BackEndFan *fan4Config = nullptr;
BackEndFan *fan5Config = nullptr;
BackEndFan *fan6Config = nullptr;
BackEndSensor *sensor1Config = nullptr;
BackEndSensor *sensor2Config = nullptr;
BackEndSensor *sensor3Config = nullptr;
BackEndSensor *sensor4Config = nullptr;
BackEndSensor *sensor5Config = nullptr;
qreal m_deltaT = 0.0;
QString logBuffer = "";
RuntimeConfig m_config;
};
#endif // BACK_END_H