Projekt

Obecné

Profil

Stáhnout (5.49 KB) Statistiky
| Větev: | Tag: | Revize:
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
(10-10/17)