This repository has been archived by the owner on Feb 25, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerator.h
203 lines (153 loc) · 6.82 KB
/
generator.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#ifndef GENERATOR_H
#define GENERATOR_H
#include <QObject>
#include <generators_global.h>
#include <QtSerialPort/QSerialPortInfo>
#include <QtSerialPort/QSerialPort>
#include <QTime>
#include <QVector>
#include <QTimerEvent>
#include <calibrator.h>
#include <server.h>
#include <cmath>
typedef int FrequencyGrid;
typedef int LevelControlMode;
typedef int FmMode;
/* Класс Generator является базовым для всех USB генераторов компании РАДИЙ ТН и
* и определяет интерфейс производных классов
*
* Все велечины передаются в системе Cи ( Гц, В, сек).
* Стратегия обработки ошибок: при возникновении ошибки при управлении генератором
* излучается соответстующий сигнал. Дополнительная информация о работе возможна при запуске через
* консоль, если ее разрешить вызовом метода enableVerbose(true). Так же вся информация сохраняется
* в файле log.txt, которые находится в одной папке с испольняемым файлом
*/
class GENERATORS_EXPORT Generator : public QObject
{
Q_OBJECT
public:
explicit Generator(int i_vid, int i_pid, double i_lowestFreq, double i_highestFreq, double i_tFmMin, double i_tFmMax, double i_fFmBandStop, QObject * parent = 0);
public slots:
void errorSlot(QString err);
//Включение генератора
virtual bool GENERATORS_EXPORT turnOn(bool i_on) = 0;
// Установка амплитуды
virtual bool GENERATORS_EXPORT setAmp(double &m_amp) = 0;
// Установка частоты
virtual bool GENERATORS_EXPORT setFrequency(double &m_f) = 0;
// Запуск ЧМ
bool GENERATORS_EXPORT startFm(double &m_fStart, double &m_fStop, double &m_fStep, double &m_timeStep);
// Остановка ЧМ
void GENERATORS_EXPORT stopFm();
// Выбор режима ЧМ
void GENERATORS_EXPORT setFmMode(FmMode mode);
FmMode GENERATORS_EXPORT getFmMode();
public:
// Возврат текущего значения амплитуды
double GENERATORS_EXPORT getAmp();
// Возврат текущего значения частоты
double GENERATORS_EXPORT getFrequency();
// Установка шага частотной сетки
virtual void GENERATORS_EXPORT setFrequencyGrid(int i_frequencyGrid) = 0;
// Возврат шага частотной сетки
virtual FrequencyGrid GENERATORS_EXPORT getFrequencyGrid() = 0;
//Установить связь с заданным устройством
virtual bool GENERATORS_EXPORT connect(QSerialPortInfo &info);
// Закрыть устройство
void GENERATORS_EXPORT disconnect() ;
// Получить список доступных устройств
static QList<QSerialPortInfo> GENERATORS_EXPORT getAvailablePorts();
// Получить информацию о текущем порте
QSerialPortInfo GENERATORS_EXPORT getPortInfo();
// Включить вывод информации в консоль
void GENERATORS_EXPORT enableVerbose(bool);
// Включить логи
void GENERATORS_EXPORT enableLogs(bool);
// Переключение режима управление сигнала (по умолчанию стоит режим управления амплитудой)
virtual void GENERATORS_EXPORT setLevelControlMode(LevelControlMode mode) = 0;
// Возврат текущего режима управления сигналом генератора
virtual LevelControlMode GENERATORS_EXPORT getLevelControlMode() = 0;
int GENERATORS_EXPORT getPid();
int GENERATORS_EXPORT getVid();
//Установка номера порта, по которому генератор будет слушать входящие комадны.
void GENERATORS_EXPORT setTcpPort(int );
int GENERATORS_EXPORT getTcpPort() const;
QHostAddress GENERATORS_EXPORT getIpAddress() const;
//Управление сервером, слущающего команды
void GENERATORS_EXPORT startServer();
void GENERATORS_EXPORT stopServer();
//возможные сетки частот генератора
enum eFrequencyGrid {
Grid1, // 1 Кгц
Grid2, // 2 КГц
Grid5, // 5 КГц
Grid10 // 10 КГц
};
// режимы качания частоты
enum eFmMode{
UpChirp, // от меньшей к большей
DownChirp, // от большей к меньшей
FHSS // ППРЧ
};
// режимы управления уровнем сигнала генератора
enum eLevelControlMode{
Amplitude,
Attenuation
};
signals:
void error(QString e);
void disconnected();
void newFrequency(double freq_Hz);
void newAmplitude(double amp_V);
void newState(bool on);
void netControl(bool on);
void turnedOn(bool on);
void newTFm(double t_s);
protected slots:
void printMessage(QString message);
void amplitudeChanged(double amp);
void frequencyChanged(double freq);
void stateChanged(bool on);
void serverConnected();
void serverDisconnected();
protected:
void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
void fmIteration();
double roundToGrid(double);
double log2(double x);
Calibrator calibrator;
Server server;
static int objectCounter;
const int vid;
const int pid;
bool on;
bool connected;
bool verbose;
bool logs;
const double lowestFrequency;
const double highestFrequency;
int frequencyGrid;
double currentFrequency;
double currentAmp;
double fFmStart;
double fFmStop;
double fFmStep;
double fFm;
double fFmStopBand; //Частота, которое делит весь диапазон частот на нижний и верхний
// При переходе через нее идет переходный процесс, поэтому качать частоту
// непрерывно невозможно. Если такого разделения нет, то установить значение
// fFmStopBand > highestFrequency.
int fmMode;
int fmCounter;
const double tFmMin;
const double tFmMax;
QTime tFmStart;
int levelControlMode;
int connectionTimerId;
int FmTimerId;
QSerialPort serialPort;
QSerialPortInfo *serialPortInfo;
QString logFileName;
QFile logFile;
};
#endif // GENERATOR_H