1 |
c137512e
|
Oto Šťáva
|
#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 |
681d1a97
|
Jakub Hejman
|
#include "curvedataserver.h"
|
11 |
|
|
|
12 |
c137512e
|
Oto Šťáva
|
#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 |
681d1a97
|
Jakub Hejman
|
|
104 |
|
|
//! TCP Server dat křivky
|
105 |
|
|
CurveDataServer *cdServer;
|
106 |
|
|
|
107 |
c137512e
|
Oto Šťáva
|
//! 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
|