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