Projekt

Obecné

Profil

Stáhnout (5.58 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 "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
(12-12/19)