1
|
#ifndef MAINWINDOW_H
|
2
|
#define MAINWINDOW_H
|
3
|
|
4
|
#include <QMainWindow>
|
5
|
#include <QModbusClient>
|
6
|
#include <QModbusReply>
|
7
|
#include "QsLog.h"
|
8
|
#include "../db_browser/dbaccess.h"
|
9
|
|
10
|
#include <QFile>
|
11
|
#include <QTextStream>
|
12
|
|
13
|
#include <QProgressDialog>
|
14
|
|
15
|
#include <QBarSet>
|
16
|
#include <QBarSeries>
|
17
|
#include <QChartView>
|
18
|
#include <QValueAxis>
|
19
|
#include <QVector3D>
|
20
|
|
21
|
#undef FILE_TEST
|
22
|
#undef PROCEDURE_TEST
|
23
|
#undef GRAPH_TEST
|
24
|
|
25
|
QT_CHARTS_USE_NAMESPACE
|
26
|
|
27
|
namespace Ui {
|
28
|
class MainWindow;
|
29
|
}
|
30
|
|
31
|
class QSqlQueryModel;
|
32
|
|
33
|
//! Hlavní část celé aplikace - okno s ovládacími prvky
|
34
|
/*!
|
35
|
* Hlavní část celé aplikace. Vytvoří okno s ovládacími prvky pro ovládání stroje, zobrazení předcvičované
|
36
|
* křivky i výběr pacienta a jemu odpovídající křivku.
|
37
|
*/
|
38
|
class MainWindow : public QMainWindow
|
39
|
{
|
40
|
Q_OBJECT
|
41
|
|
42
|
public:
|
43
|
//! Konstruktor.
|
44
|
/*!
|
45
|
* V kostruktoru se inicializuje UI, vyčtou se uložené konfigurační parametry z textového souboru a
|
46
|
* a připraví se spojení s databází (pokud má být použito)
|
47
|
*/
|
48
|
explicit MainWindow(QWidget *parent = nullptr);
|
49
|
//! Destruktor.
|
50
|
/*!
|
51
|
Slouží pro správné ukončení aplikace - ukončení spojení s databází, uložení změněných konfiguračních hodnot
|
52
|
*/
|
53
|
~MainWindow();
|
54
|
|
55
|
private Q_SLOTS:
|
56
|
void connectClicked(void);
|
57
|
void changeClicked(void);
|
58
|
void curveGenerateClicked(void);
|
59
|
void curvePlayChanged(bool pressed);
|
60
|
void curveAssistChanged(bool pressed);
|
61
|
void curveTeachChanged(bool pressed);
|
62
|
void curveLoadClicked(void);
|
63
|
void measurementLoadClicked();
|
64
|
void curveStoreClicked(void);
|
65
|
void deviceResetClicked(void);
|
66
|
void patientSelectClicked(void);
|
67
|
void mainCycle(void);
|
68
|
void readyRead(void);
|
69
|
void writeFinished(void);
|
70
|
void onStateChanged(int state);
|
71
|
void handleDeviceError(QModbusDevice::Error newError);
|
72
|
void display3DScene(void);
|
73
|
void updateAppTime(void);
|
74
|
void timeDialMoved(int time);
|
75
|
void timeDialReleased(void);
|
76
|
void upDownSliderMoved(int val);
|
77
|
void movementSliderReleased(void);
|
78
|
|
79
|
private:
|
80
|
void readValue(int addr, QModbusDataUnit::RegisterType table);
|
81
|
void readValues(int addr, QModbusDataUnit::RegisterType table, qint16 regCount);
|
82
|
void writeValue(int addr, QModbusDataUnit::RegisterType table, qint16 value);
|
83
|
void writeValues(int addr, QModbusDataUnit::RegisterType table, QVector<quint16> vals);
|
84
|
int prepareCurveData(int packetNo);
|
85
|
int getCurveData(int dataType, int packetNo, QVector<quint16> data);
|
86
|
int getCurveDataFromFile(QString fileName);
|
87
|
void setCurveData(void);
|
88
|
QVector4D getDeltaMovingAverage(QVector4D point);
|
89
|
void openMeasurementFile(void);
|
90
|
#ifdef PROCEDURE_TEST
|
91
|
QList<QVector4D> readPoints(QString fName);
|
92
|
QList<QVector4D> sphere, act, dir, cur;
|
93
|
#endif
|
94
|
|
95
|
/** \brief Uživatelské rozhraní */
|
96
|
Ui::MainWindow *ui;
|
97
|
//! Modbus/TCP spojení
|
98
|
QModbusClient *mbClient;
|
99
|
//! Databázové spojení
|
100
|
dbAccess *db;
|
101
|
//! Status spojení s databází
|
102
|
bool dbConnected;
|
103
|
//! Proměnná obsahující info, má-li být databáze použita
|
104
|
int useDb;
|
105
|
//! Databázový model
|
106
|
QSqlQueryModel *model;
|
107
|
//! IP adresa Modbus/TCP serveru
|
108
|
QString serverIp;
|
109
|
//! ID Modbus/TCP serveru
|
110
|
int mbServerId;
|
111
|
//! Proměnné obsahující údaje o stavu Modbus/TCP spojení
|
112
|
/**@{*/
|
113
|
bool mbConnected, pendingRead, pendingWrite;
|
114
|
bool connectionEstablished;
|
115
|
/**@}*/
|
116
|
//! Proměnné obsahující údaje o stavu stroje a komunikace s ním
|
117
|
/**@{*/
|
118
|
bool lastPacket, initStep, bSpeedUpdated;
|
119
|
int safetyBtnState, blinkCntr, safetyBtnBlinkOn;
|
120
|
int keyAutoBtnBlinkOn;
|
121
|
int bTeachStatus, bWriteEnable, bProcedureRunning, bPartState, bKeyState, bPlay;
|
122
|
/**@}*/
|
123
|
|
124
|
//! Proměnné obsahující údaje o použité křivce a proceduře
|
125
|
/**@{*/
|
126
|
int currState, actCurveType, actCurveAngle, actCurveRot, actSeries;
|
127
|
int pronSupVal;
|
128
|
QString actCurveFileName;
|
129
|
QList<QVector4D> calculatedCurve;
|
130
|
QList<QVector4D> tmpCurveMA;
|
131
|
int curvePacket, numPoints, nIndex;
|
132
|
/**@}*/
|
133
|
//! Proměnné obsahující údaje o pacientovi a indikaci
|
134
|
/**@{*/
|
135
|
int pId, indId, procedureTimeRemaining;
|
136
|
/**@}*/
|
137
|
|
138
|
//! Proměnné obsahující údaje o kvalitě cvičení v dané proceduře
|
139
|
/**@{*/
|
140
|
qint16 overallQ, oneCycleQ, tempQ;
|
141
|
QList<int> procedureQuality;
|
142
|
/**@}*/
|
143
|
|
144
|
//! Timer používané pro periodické akce
|
145
|
/**@{*/
|
146
|
QTimer *checkTimer, *procedureTimer;
|
147
|
/**@}*/
|
148
|
|
149
|
//! Timer používaný na periodickou kontrolu spojení
|
150
|
QTime *connectionGuard;
|
151
|
|
152
|
//! aktuální pozice aktuátoru a vektory určující správný směr pohyby a aktuální směr pohybu a polohu "zarážky"
|
153
|
/**@{*/
|
154
|
QVector3D spherePos, dirArrow, actualArrow, staticSpherePos;
|
155
|
/**@}*/
|
156
|
|
157
|
//! minimální vzdálenost aktuátoru od "zarážky", aby bylo možné označit cíl za splněný
|
158
|
int minDistanceFromTarget;
|
159
|
|
160
|
//! Pole, které obsahuje údaje o zarážkách
|
161
|
QVector3D calcCurvePoints[2];
|
162
|
|
163
|
QFile file;
|
164
|
QTextStream store;
|
165
|
|
166
|
//! Proměnné pro graf
|
167
|
/*!
|
168
|
* Ukazatele na objekty, které jsou použité pro zobrazování údajů o kvalitě
|
169
|
* provedení předchozích procedur
|
170
|
*/
|
171
|
/**@{*/
|
172
|
QBarSet *qualitySet;
|
173
|
QBarSeries *qualityData;
|
174
|
QChartView *graphView;
|
175
|
QChart *chart;
|
176
|
QValueAxis *axisy;
|
177
|
/**@}*/
|
178
|
|
179
|
QVector3D testSpherePos;
|
180
|
|
181
|
//! Dialog používaný pro informaci o čekání na akci
|
182
|
/**@{*/
|
183
|
QProgressDialog *pd, *waitDlg;
|
184
|
/**@}*/
|
185
|
int itemCount, cntr;
|
186
|
|
187
|
int receivedDataSize;
|
188
|
};
|
189
|
|
190
|
#endif // MAINWINDOW_H
|