diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
index 1519872..7cdd61a 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
@@ -4,48 +4,12 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
-static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
-static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
-static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
-static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;
-
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
-static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
-
class SignalGeneratorProtocolBM : public QObject
{
public:
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
index 1519872..7cdd61a 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
@@ -4,48 +4,12 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
-static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
-static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
-static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
-static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;
-
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
-static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
-
class SignalGeneratorProtocolBM : public QObject
{
public:
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
new file mode 100644
index 0000000..2046ba2
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
@@ -0,0 +1,156 @@
+#include "TimeSwitcherProtocolBM.h"
+
+TimeSwitcherProtocolBM::TimeSwitcherProtocolBM(QObject *parent) : QObject(parent)
+{
+
+}
+
+TimeSwitcherProtocolBM::~TimeSwitcherProtocolBM()
+{
+
+}
+
+DeviceFrameBaseDto * TimeSwitcherProtocolBM::frameFactory(int frameType)
+{
+ DeviceFrameBaseDto * frameData = 0;
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+ frameData = new TimeSwitcherInterfaceDto();
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+ frameData = new TimeSwitcherStatusDto();
+ break;
+
+ default:
+ frameData = nullptr;
+ break;
+ }
+
+ return frameData;
+}
+
+bool TimeSwitcherProtocolBM::parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType)
+{
+ // get the raw data between ',' and '*'
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
+
+ QByteArray content = rawData.mid(start + 1, end - start - 1);
+ QString contentStr = QString(content);
+ QStringList subList = contentStr.split(",");
+
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+
+ ((TimeSwitcherInterfaceDto *)frameData)->ctrlStatus = subList.at(0);
+ ((TimeSwitcherInterfaceDto *)frameData)->frameType = TIME_SWITCHER_INTERFACE_FRAME_TYPE;
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+
+ ((TimeSwitcherStatusDto *)frameData)->devStatus = subList.at(0);
+ ((TimeSwitcherStatusDto *)frameData)->refSelectType = subList.at(1);
+ ((TimeSwitcherStatusDto *)frameData)->refTmSrc = subList.at(2);
+ ((TimeSwitcherStatusDto *)frameData)->oppsPhaseAccOut = subList.at(13).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->bacRatio = subList.at(14).toInt();
+ ((TimeSwitcherStatusDto *)frameData)->bacRange = subList.at(15).toFloat();
+ for (int i = 0; i < 5; i++)
+ {
+ //
+ QString tmSrcStatus = subList.at(i + 3);
+ ((TimeSwitcherStatusDto *)frameData)->tmSrcStatusList.append(tmSrcStatus);
+
+ //
+ double localTmDiff = subList.at(i + 8).toDouble();
+ ((TimeSwitcherStatusDto *)frameData)->localTmDiffList.append(localTmDiff);
+
+ //
+ qlonglong delayComp = subList.at(i + 16).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->delayCompensList.append(delayComp);
+
+ //
+ QString oppsOutStatus = subList.at(21).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->oppsOutStatusList.append(oppsOutStatus);
+
+ //
+ QString bdcOutStatus = subList.at(22).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bdcOutStatusList.append(bdcOutStatus);
+
+ //
+ QString bacOutStatus = subList.at(23).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bacOutStatusList.append(bacOutStatus);
+ }
+
+ ((TimeSwitcherStatusDto *)frameData)->frameType = TIME_SWITCHER_STATUS_FRAME_TYPE;
+ break;
+
+ }
+
+ return true;
+}
+
+QList TimeSwitcherProtocolBM::extractFrameList(QByteArray rawData)
+{
+ QList resultList;
+ if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$") == true)
+ {
+ QByteArray ba;
+ for (int i = 0; i < rawData.size() - 1; i++)
+ {
+ if (rawData.at(i) != '\r')
+ {
+ ba.append(rawData.at(i));
+ } else
+ {
+ if (rawData.at(i + 1) == '\n')
+ {
+ ba.append("\r\n");
+ resultList.append(ba);
+ ba.clear();
+ i++;
+ } else
+ {
+ ba.append(rawData.at(i));
+ }
+ }
+ }
+ }
+
+ return resultList;
+}
+
+int TimeSwitcherProtocolBM::checkFrame(QByteArray rawData)
+{
+ // 帧尾不是\r\n
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+
+ // 帧头不是$GL
+ if (TIME_SWITCHER_INTERFACE_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_INTERFACE_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME;
+ }
+ } else if (TIME_SWITCHER_STATUS_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_STATUS_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME;
+ }
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
index 1519872..7cdd61a 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
@@ -4,48 +4,12 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
-static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
-static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
-static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
-static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;
-
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
-static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
-
class SignalGeneratorProtocolBM : public QObject
{
public:
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
new file mode 100644
index 0000000..2046ba2
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
@@ -0,0 +1,156 @@
+#include "TimeSwitcherProtocolBM.h"
+
+TimeSwitcherProtocolBM::TimeSwitcherProtocolBM(QObject *parent) : QObject(parent)
+{
+
+}
+
+TimeSwitcherProtocolBM::~TimeSwitcherProtocolBM()
+{
+
+}
+
+DeviceFrameBaseDto * TimeSwitcherProtocolBM::frameFactory(int frameType)
+{
+ DeviceFrameBaseDto * frameData = 0;
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+ frameData = new TimeSwitcherInterfaceDto();
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+ frameData = new TimeSwitcherStatusDto();
+ break;
+
+ default:
+ frameData = nullptr;
+ break;
+ }
+
+ return frameData;
+}
+
+bool TimeSwitcherProtocolBM::parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType)
+{
+ // get the raw data between ',' and '*'
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
+
+ QByteArray content = rawData.mid(start + 1, end - start - 1);
+ QString contentStr = QString(content);
+ QStringList subList = contentStr.split(",");
+
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+
+ ((TimeSwitcherInterfaceDto *)frameData)->ctrlStatus = subList.at(0);
+ ((TimeSwitcherInterfaceDto *)frameData)->frameType = TIME_SWITCHER_INTERFACE_FRAME_TYPE;
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+
+ ((TimeSwitcherStatusDto *)frameData)->devStatus = subList.at(0);
+ ((TimeSwitcherStatusDto *)frameData)->refSelectType = subList.at(1);
+ ((TimeSwitcherStatusDto *)frameData)->refTmSrc = subList.at(2);
+ ((TimeSwitcherStatusDto *)frameData)->oppsPhaseAccOut = subList.at(13).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->bacRatio = subList.at(14).toInt();
+ ((TimeSwitcherStatusDto *)frameData)->bacRange = subList.at(15).toFloat();
+ for (int i = 0; i < 5; i++)
+ {
+ //
+ QString tmSrcStatus = subList.at(i + 3);
+ ((TimeSwitcherStatusDto *)frameData)->tmSrcStatusList.append(tmSrcStatus);
+
+ //
+ double localTmDiff = subList.at(i + 8).toDouble();
+ ((TimeSwitcherStatusDto *)frameData)->localTmDiffList.append(localTmDiff);
+
+ //
+ qlonglong delayComp = subList.at(i + 16).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->delayCompensList.append(delayComp);
+
+ //
+ QString oppsOutStatus = subList.at(21).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->oppsOutStatusList.append(oppsOutStatus);
+
+ //
+ QString bdcOutStatus = subList.at(22).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bdcOutStatusList.append(bdcOutStatus);
+
+ //
+ QString bacOutStatus = subList.at(23).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bacOutStatusList.append(bacOutStatus);
+ }
+
+ ((TimeSwitcherStatusDto *)frameData)->frameType = TIME_SWITCHER_STATUS_FRAME_TYPE;
+ break;
+
+ }
+
+ return true;
+}
+
+QList TimeSwitcherProtocolBM::extractFrameList(QByteArray rawData)
+{
+ QList resultList;
+ if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$") == true)
+ {
+ QByteArray ba;
+ for (int i = 0; i < rawData.size() - 1; i++)
+ {
+ if (rawData.at(i) != '\r')
+ {
+ ba.append(rawData.at(i));
+ } else
+ {
+ if (rawData.at(i + 1) == '\n')
+ {
+ ba.append("\r\n");
+ resultList.append(ba);
+ ba.clear();
+ i++;
+ } else
+ {
+ ba.append(rawData.at(i));
+ }
+ }
+ }
+ }
+
+ return resultList;
+}
+
+int TimeSwitcherProtocolBM::checkFrame(QByteArray rawData)
+{
+ // 帧尾不是\r\n
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+
+ // 帧头不是$GL
+ if (TIME_SWITCHER_INTERFACE_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_INTERFACE_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME;
+ }
+ } else if (TIME_SWITCHER_STATUS_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_STATUS_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME;
+ }
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+}
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
new file mode 100644
index 0000000..39436d9
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
@@ -0,0 +1,37 @@
+#ifndef TIMESWITCHERPROTOCOLBM_H
+#define TIMESWITCHERPROTOCOLBM_H
+
+#include
+#include
+
+#include "protocol/DeviceStatusProtocolBase.h"
+#include "protocol/dto/TimeSwitcherInterfaceDto.h"
+#include "protocol/dto/TimeSwitcherStatusDto.h"
+
+class TimeSwitcherProtocolBM : public QObject
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcherProtocolBM(QObject *parent = nullptr);
+ ~TimeSwitcherProtocolBM();
+
+ // 解析数据
+ static bool parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType);
+ static DeviceFrameBaseDto * frameFactory(int frameType);
+
+ //
+ static QList extractFrameList(QByteArray rawData);
+
+ // 检测帧格式,帧头帧尾
+ static int checkFrame(QByteArray rawData);
+
+ enum TIME_SWITCHER_FRAME_TYPE
+ {
+ UNKNOW_FRAME = 0,
+ INTERFACE_FRAME = 1,
+ STATUS_FRAME = 2,
+ NETWORK_FRAME = 3
+ };
+};
+
+#endif // TIMESWITCHERPROTOCOLBM_H
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
index 1519872..7cdd61a 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
@@ -4,48 +4,12 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
-static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
-static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
-static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
-static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;
-
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
-static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
-
class SignalGeneratorProtocolBM : public QObject
{
public:
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
new file mode 100644
index 0000000..2046ba2
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
@@ -0,0 +1,156 @@
+#include "TimeSwitcherProtocolBM.h"
+
+TimeSwitcherProtocolBM::TimeSwitcherProtocolBM(QObject *parent) : QObject(parent)
+{
+
+}
+
+TimeSwitcherProtocolBM::~TimeSwitcherProtocolBM()
+{
+
+}
+
+DeviceFrameBaseDto * TimeSwitcherProtocolBM::frameFactory(int frameType)
+{
+ DeviceFrameBaseDto * frameData = 0;
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+ frameData = new TimeSwitcherInterfaceDto();
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+ frameData = new TimeSwitcherStatusDto();
+ break;
+
+ default:
+ frameData = nullptr;
+ break;
+ }
+
+ return frameData;
+}
+
+bool TimeSwitcherProtocolBM::parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType)
+{
+ // get the raw data between ',' and '*'
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
+
+ QByteArray content = rawData.mid(start + 1, end - start - 1);
+ QString contentStr = QString(content);
+ QStringList subList = contentStr.split(",");
+
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+
+ ((TimeSwitcherInterfaceDto *)frameData)->ctrlStatus = subList.at(0);
+ ((TimeSwitcherInterfaceDto *)frameData)->frameType = TIME_SWITCHER_INTERFACE_FRAME_TYPE;
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+
+ ((TimeSwitcherStatusDto *)frameData)->devStatus = subList.at(0);
+ ((TimeSwitcherStatusDto *)frameData)->refSelectType = subList.at(1);
+ ((TimeSwitcherStatusDto *)frameData)->refTmSrc = subList.at(2);
+ ((TimeSwitcherStatusDto *)frameData)->oppsPhaseAccOut = subList.at(13).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->bacRatio = subList.at(14).toInt();
+ ((TimeSwitcherStatusDto *)frameData)->bacRange = subList.at(15).toFloat();
+ for (int i = 0; i < 5; i++)
+ {
+ //
+ QString tmSrcStatus = subList.at(i + 3);
+ ((TimeSwitcherStatusDto *)frameData)->tmSrcStatusList.append(tmSrcStatus);
+
+ //
+ double localTmDiff = subList.at(i + 8).toDouble();
+ ((TimeSwitcherStatusDto *)frameData)->localTmDiffList.append(localTmDiff);
+
+ //
+ qlonglong delayComp = subList.at(i + 16).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->delayCompensList.append(delayComp);
+
+ //
+ QString oppsOutStatus = subList.at(21).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->oppsOutStatusList.append(oppsOutStatus);
+
+ //
+ QString bdcOutStatus = subList.at(22).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bdcOutStatusList.append(bdcOutStatus);
+
+ //
+ QString bacOutStatus = subList.at(23).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bacOutStatusList.append(bacOutStatus);
+ }
+
+ ((TimeSwitcherStatusDto *)frameData)->frameType = TIME_SWITCHER_STATUS_FRAME_TYPE;
+ break;
+
+ }
+
+ return true;
+}
+
+QList TimeSwitcherProtocolBM::extractFrameList(QByteArray rawData)
+{
+ QList resultList;
+ if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$") == true)
+ {
+ QByteArray ba;
+ for (int i = 0; i < rawData.size() - 1; i++)
+ {
+ if (rawData.at(i) != '\r')
+ {
+ ba.append(rawData.at(i));
+ } else
+ {
+ if (rawData.at(i + 1) == '\n')
+ {
+ ba.append("\r\n");
+ resultList.append(ba);
+ ba.clear();
+ i++;
+ } else
+ {
+ ba.append(rawData.at(i));
+ }
+ }
+ }
+ }
+
+ return resultList;
+}
+
+int TimeSwitcherProtocolBM::checkFrame(QByteArray rawData)
+{
+ // 帧尾不是\r\n
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+
+ // 帧头不是$GL
+ if (TIME_SWITCHER_INTERFACE_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_INTERFACE_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME;
+ }
+ } else if (TIME_SWITCHER_STATUS_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_STATUS_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME;
+ }
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+}
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
new file mode 100644
index 0000000..39436d9
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
@@ -0,0 +1,37 @@
+#ifndef TIMESWITCHERPROTOCOLBM_H
+#define TIMESWITCHERPROTOCOLBM_H
+
+#include
+#include
+
+#include "protocol/DeviceStatusProtocolBase.h"
+#include "protocol/dto/TimeSwitcherInterfaceDto.h"
+#include "protocol/dto/TimeSwitcherStatusDto.h"
+
+class TimeSwitcherProtocolBM : public QObject
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcherProtocolBM(QObject *parent = nullptr);
+ ~TimeSwitcherProtocolBM();
+
+ // 解析数据
+ static bool parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType);
+ static DeviceFrameBaseDto * frameFactory(int frameType);
+
+ //
+ static QList extractFrameList(QByteArray rawData);
+
+ // 检测帧格式,帧头帧尾
+ static int checkFrame(QByteArray rawData);
+
+ enum TIME_SWITCHER_FRAME_TYPE
+ {
+ UNKNOW_FRAME = 0,
+ INTERFACE_FRAME = 1,
+ STATUS_FRAME = 2,
+ NETWORK_FRAME = 3
+ };
+};
+
+#endif // TIMESWITCHERPROTOCOLBM_H
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
new file mode 100644
index 0000000..668ddfc
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
@@ -0,0 +1,6 @@
+#include "DeviceFrameBaseDto.h"
+
+DeviceFrameBaseDto::DeviceFrameBaseDto(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
index 1519872..7cdd61a 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
@@ -4,48 +4,12 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
-static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
-static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
-static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
-static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;
-
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
-static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
-
class SignalGeneratorProtocolBM : public QObject
{
public:
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
new file mode 100644
index 0000000..2046ba2
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
@@ -0,0 +1,156 @@
+#include "TimeSwitcherProtocolBM.h"
+
+TimeSwitcherProtocolBM::TimeSwitcherProtocolBM(QObject *parent) : QObject(parent)
+{
+
+}
+
+TimeSwitcherProtocolBM::~TimeSwitcherProtocolBM()
+{
+
+}
+
+DeviceFrameBaseDto * TimeSwitcherProtocolBM::frameFactory(int frameType)
+{
+ DeviceFrameBaseDto * frameData = 0;
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+ frameData = new TimeSwitcherInterfaceDto();
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+ frameData = new TimeSwitcherStatusDto();
+ break;
+
+ default:
+ frameData = nullptr;
+ break;
+ }
+
+ return frameData;
+}
+
+bool TimeSwitcherProtocolBM::parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType)
+{
+ // get the raw data between ',' and '*'
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
+
+ QByteArray content = rawData.mid(start + 1, end - start - 1);
+ QString contentStr = QString(content);
+ QStringList subList = contentStr.split(",");
+
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+
+ ((TimeSwitcherInterfaceDto *)frameData)->ctrlStatus = subList.at(0);
+ ((TimeSwitcherInterfaceDto *)frameData)->frameType = TIME_SWITCHER_INTERFACE_FRAME_TYPE;
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+
+ ((TimeSwitcherStatusDto *)frameData)->devStatus = subList.at(0);
+ ((TimeSwitcherStatusDto *)frameData)->refSelectType = subList.at(1);
+ ((TimeSwitcherStatusDto *)frameData)->refTmSrc = subList.at(2);
+ ((TimeSwitcherStatusDto *)frameData)->oppsPhaseAccOut = subList.at(13).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->bacRatio = subList.at(14).toInt();
+ ((TimeSwitcherStatusDto *)frameData)->bacRange = subList.at(15).toFloat();
+ for (int i = 0; i < 5; i++)
+ {
+ //
+ QString tmSrcStatus = subList.at(i + 3);
+ ((TimeSwitcherStatusDto *)frameData)->tmSrcStatusList.append(tmSrcStatus);
+
+ //
+ double localTmDiff = subList.at(i + 8).toDouble();
+ ((TimeSwitcherStatusDto *)frameData)->localTmDiffList.append(localTmDiff);
+
+ //
+ qlonglong delayComp = subList.at(i + 16).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->delayCompensList.append(delayComp);
+
+ //
+ QString oppsOutStatus = subList.at(21).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->oppsOutStatusList.append(oppsOutStatus);
+
+ //
+ QString bdcOutStatus = subList.at(22).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bdcOutStatusList.append(bdcOutStatus);
+
+ //
+ QString bacOutStatus = subList.at(23).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bacOutStatusList.append(bacOutStatus);
+ }
+
+ ((TimeSwitcherStatusDto *)frameData)->frameType = TIME_SWITCHER_STATUS_FRAME_TYPE;
+ break;
+
+ }
+
+ return true;
+}
+
+QList TimeSwitcherProtocolBM::extractFrameList(QByteArray rawData)
+{
+ QList resultList;
+ if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$") == true)
+ {
+ QByteArray ba;
+ for (int i = 0; i < rawData.size() - 1; i++)
+ {
+ if (rawData.at(i) != '\r')
+ {
+ ba.append(rawData.at(i));
+ } else
+ {
+ if (rawData.at(i + 1) == '\n')
+ {
+ ba.append("\r\n");
+ resultList.append(ba);
+ ba.clear();
+ i++;
+ } else
+ {
+ ba.append(rawData.at(i));
+ }
+ }
+ }
+ }
+
+ return resultList;
+}
+
+int TimeSwitcherProtocolBM::checkFrame(QByteArray rawData)
+{
+ // 帧尾不是\r\n
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+
+ // 帧头不是$GL
+ if (TIME_SWITCHER_INTERFACE_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_INTERFACE_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME;
+ }
+ } else if (TIME_SWITCHER_STATUS_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_STATUS_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME;
+ }
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+}
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
new file mode 100644
index 0000000..39436d9
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
@@ -0,0 +1,37 @@
+#ifndef TIMESWITCHERPROTOCOLBM_H
+#define TIMESWITCHERPROTOCOLBM_H
+
+#include
+#include
+
+#include "protocol/DeviceStatusProtocolBase.h"
+#include "protocol/dto/TimeSwitcherInterfaceDto.h"
+#include "protocol/dto/TimeSwitcherStatusDto.h"
+
+class TimeSwitcherProtocolBM : public QObject
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcherProtocolBM(QObject *parent = nullptr);
+ ~TimeSwitcherProtocolBM();
+
+ // 解析数据
+ static bool parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType);
+ static DeviceFrameBaseDto * frameFactory(int frameType);
+
+ //
+ static QList extractFrameList(QByteArray rawData);
+
+ // 检测帧格式,帧头帧尾
+ static int checkFrame(QByteArray rawData);
+
+ enum TIME_SWITCHER_FRAME_TYPE
+ {
+ UNKNOW_FRAME = 0,
+ INTERFACE_FRAME = 1,
+ STATUS_FRAME = 2,
+ NETWORK_FRAME = 3
+ };
+};
+
+#endif // TIMESWITCHERPROTOCOLBM_H
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
new file mode 100644
index 0000000..668ddfc
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
@@ -0,0 +1,6 @@
+#include "DeviceFrameBaseDto.h"
+
+DeviceFrameBaseDto::DeviceFrameBaseDto(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
new file mode 100644
index 0000000..05d8280
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
@@ -0,0 +1,28 @@
+#ifndef DEVICEFRAMEBASEDTO_H
+#define DEVICEFRAMEBASEDTO_H
+
+#include
+#include
+#include
+#include
+
+class DeviceFrameBaseDto : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceFrameBaseDto(QObject *parent = nullptr);
+
+ QByteArray rawFrame; // 原始帧字节数组
+
+ QString timestamp; // 时间戳字符串
+ qlonglong milisecond; // 毫秒计数
+ QString devCode;
+ QString frameType; // 帧类型
+
+ virtual QJsonObject toJSON() = 0;
+
+signals:
+
+};
+
+#endif // DEVICEFRAMEBASEDTO_H
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
index 1519872..7cdd61a 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
@@ -4,48 +4,12 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
-static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
-static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
-static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
-static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;
-
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
-static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
-
class SignalGeneratorProtocolBM : public QObject
{
public:
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
new file mode 100644
index 0000000..2046ba2
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
@@ -0,0 +1,156 @@
+#include "TimeSwitcherProtocolBM.h"
+
+TimeSwitcherProtocolBM::TimeSwitcherProtocolBM(QObject *parent) : QObject(parent)
+{
+
+}
+
+TimeSwitcherProtocolBM::~TimeSwitcherProtocolBM()
+{
+
+}
+
+DeviceFrameBaseDto * TimeSwitcherProtocolBM::frameFactory(int frameType)
+{
+ DeviceFrameBaseDto * frameData = 0;
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+ frameData = new TimeSwitcherInterfaceDto();
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+ frameData = new TimeSwitcherStatusDto();
+ break;
+
+ default:
+ frameData = nullptr;
+ break;
+ }
+
+ return frameData;
+}
+
+bool TimeSwitcherProtocolBM::parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType)
+{
+ // get the raw data between ',' and '*'
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
+
+ QByteArray content = rawData.mid(start + 1, end - start - 1);
+ QString contentStr = QString(content);
+ QStringList subList = contentStr.split(",");
+
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+
+ ((TimeSwitcherInterfaceDto *)frameData)->ctrlStatus = subList.at(0);
+ ((TimeSwitcherInterfaceDto *)frameData)->frameType = TIME_SWITCHER_INTERFACE_FRAME_TYPE;
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+
+ ((TimeSwitcherStatusDto *)frameData)->devStatus = subList.at(0);
+ ((TimeSwitcherStatusDto *)frameData)->refSelectType = subList.at(1);
+ ((TimeSwitcherStatusDto *)frameData)->refTmSrc = subList.at(2);
+ ((TimeSwitcherStatusDto *)frameData)->oppsPhaseAccOut = subList.at(13).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->bacRatio = subList.at(14).toInt();
+ ((TimeSwitcherStatusDto *)frameData)->bacRange = subList.at(15).toFloat();
+ for (int i = 0; i < 5; i++)
+ {
+ //
+ QString tmSrcStatus = subList.at(i + 3);
+ ((TimeSwitcherStatusDto *)frameData)->tmSrcStatusList.append(tmSrcStatus);
+
+ //
+ double localTmDiff = subList.at(i + 8).toDouble();
+ ((TimeSwitcherStatusDto *)frameData)->localTmDiffList.append(localTmDiff);
+
+ //
+ qlonglong delayComp = subList.at(i + 16).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->delayCompensList.append(delayComp);
+
+ //
+ QString oppsOutStatus = subList.at(21).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->oppsOutStatusList.append(oppsOutStatus);
+
+ //
+ QString bdcOutStatus = subList.at(22).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bdcOutStatusList.append(bdcOutStatus);
+
+ //
+ QString bacOutStatus = subList.at(23).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bacOutStatusList.append(bacOutStatus);
+ }
+
+ ((TimeSwitcherStatusDto *)frameData)->frameType = TIME_SWITCHER_STATUS_FRAME_TYPE;
+ break;
+
+ }
+
+ return true;
+}
+
+QList TimeSwitcherProtocolBM::extractFrameList(QByteArray rawData)
+{
+ QList resultList;
+ if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$") == true)
+ {
+ QByteArray ba;
+ for (int i = 0; i < rawData.size() - 1; i++)
+ {
+ if (rawData.at(i) != '\r')
+ {
+ ba.append(rawData.at(i));
+ } else
+ {
+ if (rawData.at(i + 1) == '\n')
+ {
+ ba.append("\r\n");
+ resultList.append(ba);
+ ba.clear();
+ i++;
+ } else
+ {
+ ba.append(rawData.at(i));
+ }
+ }
+ }
+ }
+
+ return resultList;
+}
+
+int TimeSwitcherProtocolBM::checkFrame(QByteArray rawData)
+{
+ // 帧尾不是\r\n
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+
+ // 帧头不是$GL
+ if (TIME_SWITCHER_INTERFACE_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_INTERFACE_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME;
+ }
+ } else if (TIME_SWITCHER_STATUS_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_STATUS_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME;
+ }
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+}
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
new file mode 100644
index 0000000..39436d9
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
@@ -0,0 +1,37 @@
+#ifndef TIMESWITCHERPROTOCOLBM_H
+#define TIMESWITCHERPROTOCOLBM_H
+
+#include
+#include
+
+#include "protocol/DeviceStatusProtocolBase.h"
+#include "protocol/dto/TimeSwitcherInterfaceDto.h"
+#include "protocol/dto/TimeSwitcherStatusDto.h"
+
+class TimeSwitcherProtocolBM : public QObject
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcherProtocolBM(QObject *parent = nullptr);
+ ~TimeSwitcherProtocolBM();
+
+ // 解析数据
+ static bool parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType);
+ static DeviceFrameBaseDto * frameFactory(int frameType);
+
+ //
+ static QList extractFrameList(QByteArray rawData);
+
+ // 检测帧格式,帧头帧尾
+ static int checkFrame(QByteArray rawData);
+
+ enum TIME_SWITCHER_FRAME_TYPE
+ {
+ UNKNOW_FRAME = 0,
+ INTERFACE_FRAME = 1,
+ STATUS_FRAME = 2,
+ NETWORK_FRAME = 3
+ };
+};
+
+#endif // TIMESWITCHERPROTOCOLBM_H
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
new file mode 100644
index 0000000..668ddfc
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
@@ -0,0 +1,6 @@
+#include "DeviceFrameBaseDto.h"
+
+DeviceFrameBaseDto::DeviceFrameBaseDto(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
new file mode 100644
index 0000000..05d8280
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
@@ -0,0 +1,28 @@
+#ifndef DEVICEFRAMEBASEDTO_H
+#define DEVICEFRAMEBASEDTO_H
+
+#include
+#include
+#include
+#include
+
+class DeviceFrameBaseDto : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceFrameBaseDto(QObject *parent = nullptr);
+
+ QByteArray rawFrame; // 原始帧字节数组
+
+ QString timestamp; // 时间戳字符串
+ qlonglong milisecond; // 毫秒计数
+ QString devCode;
+ QString frameType; // 帧类型
+
+ virtual QJsonObject toJSON() = 0;
+
+signals:
+
+};
+
+#endif // DEVICEFRAMEBASEDTO_H
diff --git a/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.cpp b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.cpp
new file mode 100644
index 0000000..b9b2894
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.cpp
@@ -0,0 +1,20 @@
+#include "TimeSwitcherInterfaceDto.h"
+
+TimeSwitcherInterfaceDto::TimeSwitcherInterfaceDto(QObject *parent) : DeviceFrameBaseDto(parent)
+{
+
+}
+
+QJsonObject TimeSwitcherInterfaceDto::toJSON()
+{
+ QJsonObject jsonObj;
+
+ QJsonObject dataObj;
+ dataObj.insert("ctrlStatus", ctrlStatus);
+
+ jsonObj.insert("ts", this->milisecond);
+ jsonObj.insert("frameType", this->frameType);
+ jsonObj.insert("data", dataObj);
+
+ return jsonObj;
+}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
index 1519872..7cdd61a 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
@@ -4,48 +4,12 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
-static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
-static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
-static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
-static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;
-
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
-static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
-
class SignalGeneratorProtocolBM : public QObject
{
public:
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
new file mode 100644
index 0000000..2046ba2
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
@@ -0,0 +1,156 @@
+#include "TimeSwitcherProtocolBM.h"
+
+TimeSwitcherProtocolBM::TimeSwitcherProtocolBM(QObject *parent) : QObject(parent)
+{
+
+}
+
+TimeSwitcherProtocolBM::~TimeSwitcherProtocolBM()
+{
+
+}
+
+DeviceFrameBaseDto * TimeSwitcherProtocolBM::frameFactory(int frameType)
+{
+ DeviceFrameBaseDto * frameData = 0;
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+ frameData = new TimeSwitcherInterfaceDto();
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+ frameData = new TimeSwitcherStatusDto();
+ break;
+
+ default:
+ frameData = nullptr;
+ break;
+ }
+
+ return frameData;
+}
+
+bool TimeSwitcherProtocolBM::parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType)
+{
+ // get the raw data between ',' and '*'
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
+
+ QByteArray content = rawData.mid(start + 1, end - start - 1);
+ QString contentStr = QString(content);
+ QStringList subList = contentStr.split(",");
+
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+
+ ((TimeSwitcherInterfaceDto *)frameData)->ctrlStatus = subList.at(0);
+ ((TimeSwitcherInterfaceDto *)frameData)->frameType = TIME_SWITCHER_INTERFACE_FRAME_TYPE;
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+
+ ((TimeSwitcherStatusDto *)frameData)->devStatus = subList.at(0);
+ ((TimeSwitcherStatusDto *)frameData)->refSelectType = subList.at(1);
+ ((TimeSwitcherStatusDto *)frameData)->refTmSrc = subList.at(2);
+ ((TimeSwitcherStatusDto *)frameData)->oppsPhaseAccOut = subList.at(13).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->bacRatio = subList.at(14).toInt();
+ ((TimeSwitcherStatusDto *)frameData)->bacRange = subList.at(15).toFloat();
+ for (int i = 0; i < 5; i++)
+ {
+ //
+ QString tmSrcStatus = subList.at(i + 3);
+ ((TimeSwitcherStatusDto *)frameData)->tmSrcStatusList.append(tmSrcStatus);
+
+ //
+ double localTmDiff = subList.at(i + 8).toDouble();
+ ((TimeSwitcherStatusDto *)frameData)->localTmDiffList.append(localTmDiff);
+
+ //
+ qlonglong delayComp = subList.at(i + 16).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->delayCompensList.append(delayComp);
+
+ //
+ QString oppsOutStatus = subList.at(21).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->oppsOutStatusList.append(oppsOutStatus);
+
+ //
+ QString bdcOutStatus = subList.at(22).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bdcOutStatusList.append(bdcOutStatus);
+
+ //
+ QString bacOutStatus = subList.at(23).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bacOutStatusList.append(bacOutStatus);
+ }
+
+ ((TimeSwitcherStatusDto *)frameData)->frameType = TIME_SWITCHER_STATUS_FRAME_TYPE;
+ break;
+
+ }
+
+ return true;
+}
+
+QList TimeSwitcherProtocolBM::extractFrameList(QByteArray rawData)
+{
+ QList resultList;
+ if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$") == true)
+ {
+ QByteArray ba;
+ for (int i = 0; i < rawData.size() - 1; i++)
+ {
+ if (rawData.at(i) != '\r')
+ {
+ ba.append(rawData.at(i));
+ } else
+ {
+ if (rawData.at(i + 1) == '\n')
+ {
+ ba.append("\r\n");
+ resultList.append(ba);
+ ba.clear();
+ i++;
+ } else
+ {
+ ba.append(rawData.at(i));
+ }
+ }
+ }
+ }
+
+ return resultList;
+}
+
+int TimeSwitcherProtocolBM::checkFrame(QByteArray rawData)
+{
+ // 帧尾不是\r\n
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+
+ // 帧头不是$GL
+ if (TIME_SWITCHER_INTERFACE_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_INTERFACE_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME;
+ }
+ } else if (TIME_SWITCHER_STATUS_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_STATUS_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME;
+ }
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+}
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
new file mode 100644
index 0000000..39436d9
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
@@ -0,0 +1,37 @@
+#ifndef TIMESWITCHERPROTOCOLBM_H
+#define TIMESWITCHERPROTOCOLBM_H
+
+#include
+#include
+
+#include "protocol/DeviceStatusProtocolBase.h"
+#include "protocol/dto/TimeSwitcherInterfaceDto.h"
+#include "protocol/dto/TimeSwitcherStatusDto.h"
+
+class TimeSwitcherProtocolBM : public QObject
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcherProtocolBM(QObject *parent = nullptr);
+ ~TimeSwitcherProtocolBM();
+
+ // 解析数据
+ static bool parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType);
+ static DeviceFrameBaseDto * frameFactory(int frameType);
+
+ //
+ static QList extractFrameList(QByteArray rawData);
+
+ // 检测帧格式,帧头帧尾
+ static int checkFrame(QByteArray rawData);
+
+ enum TIME_SWITCHER_FRAME_TYPE
+ {
+ UNKNOW_FRAME = 0,
+ INTERFACE_FRAME = 1,
+ STATUS_FRAME = 2,
+ NETWORK_FRAME = 3
+ };
+};
+
+#endif // TIMESWITCHERPROTOCOLBM_H
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
new file mode 100644
index 0000000..668ddfc
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
@@ -0,0 +1,6 @@
+#include "DeviceFrameBaseDto.h"
+
+DeviceFrameBaseDto::DeviceFrameBaseDto(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
new file mode 100644
index 0000000..05d8280
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
@@ -0,0 +1,28 @@
+#ifndef DEVICEFRAMEBASEDTO_H
+#define DEVICEFRAMEBASEDTO_H
+
+#include
+#include
+#include
+#include
+
+class DeviceFrameBaseDto : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceFrameBaseDto(QObject *parent = nullptr);
+
+ QByteArray rawFrame; // 原始帧字节数组
+
+ QString timestamp; // 时间戳字符串
+ qlonglong milisecond; // 毫秒计数
+ QString devCode;
+ QString frameType; // 帧类型
+
+ virtual QJsonObject toJSON() = 0;
+
+signals:
+
+};
+
+#endif // DEVICEFRAMEBASEDTO_H
diff --git a/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.cpp b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.cpp
new file mode 100644
index 0000000..b9b2894
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.cpp
@@ -0,0 +1,20 @@
+#include "TimeSwitcherInterfaceDto.h"
+
+TimeSwitcherInterfaceDto::TimeSwitcherInterfaceDto(QObject *parent) : DeviceFrameBaseDto(parent)
+{
+
+}
+
+QJsonObject TimeSwitcherInterfaceDto::toJSON()
+{
+ QJsonObject jsonObj;
+
+ QJsonObject dataObj;
+ dataObj.insert("ctrlStatus", ctrlStatus);
+
+ jsonObj.insert("ts", this->milisecond);
+ jsonObj.insert("frameType", this->frameType);
+ jsonObj.insert("data", dataObj);
+
+ return jsonObj;
+}
diff --git a/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.h b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.h
new file mode 100644
index 0000000..11e4b53
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.h
@@ -0,0 +1,19 @@
+#ifndef TIMESWITCHERINTERFACEDTO_H
+#define TIMESWITCHERINTERFACEDTO_H
+
+#include
+
+#include "protocol/dto/DeviceFrameBaseDto.h"
+
+class TimeSwitcherInterfaceDto : public DeviceFrameBaseDto
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcherInterfaceDto(QObject *parent = nullptr);
+
+ QString ctrlStatus; // <1>
+
+ QJsonObject toJSON();
+};
+
+#endif // TIMESWITCHERINTERFACEDTO_H
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
index 1519872..7cdd61a 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
@@ -4,48 +4,12 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
-static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
-static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
-static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
-static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;
-
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
-static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
-
class SignalGeneratorProtocolBM : public QObject
{
public:
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
new file mode 100644
index 0000000..2046ba2
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
@@ -0,0 +1,156 @@
+#include "TimeSwitcherProtocolBM.h"
+
+TimeSwitcherProtocolBM::TimeSwitcherProtocolBM(QObject *parent) : QObject(parent)
+{
+
+}
+
+TimeSwitcherProtocolBM::~TimeSwitcherProtocolBM()
+{
+
+}
+
+DeviceFrameBaseDto * TimeSwitcherProtocolBM::frameFactory(int frameType)
+{
+ DeviceFrameBaseDto * frameData = 0;
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+ frameData = new TimeSwitcherInterfaceDto();
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+ frameData = new TimeSwitcherStatusDto();
+ break;
+
+ default:
+ frameData = nullptr;
+ break;
+ }
+
+ return frameData;
+}
+
+bool TimeSwitcherProtocolBM::parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType)
+{
+ // get the raw data between ',' and '*'
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
+
+ QByteArray content = rawData.mid(start + 1, end - start - 1);
+ QString contentStr = QString(content);
+ QStringList subList = contentStr.split(",");
+
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+
+ ((TimeSwitcherInterfaceDto *)frameData)->ctrlStatus = subList.at(0);
+ ((TimeSwitcherInterfaceDto *)frameData)->frameType = TIME_SWITCHER_INTERFACE_FRAME_TYPE;
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+
+ ((TimeSwitcherStatusDto *)frameData)->devStatus = subList.at(0);
+ ((TimeSwitcherStatusDto *)frameData)->refSelectType = subList.at(1);
+ ((TimeSwitcherStatusDto *)frameData)->refTmSrc = subList.at(2);
+ ((TimeSwitcherStatusDto *)frameData)->oppsPhaseAccOut = subList.at(13).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->bacRatio = subList.at(14).toInt();
+ ((TimeSwitcherStatusDto *)frameData)->bacRange = subList.at(15).toFloat();
+ for (int i = 0; i < 5; i++)
+ {
+ //
+ QString tmSrcStatus = subList.at(i + 3);
+ ((TimeSwitcherStatusDto *)frameData)->tmSrcStatusList.append(tmSrcStatus);
+
+ //
+ double localTmDiff = subList.at(i + 8).toDouble();
+ ((TimeSwitcherStatusDto *)frameData)->localTmDiffList.append(localTmDiff);
+
+ //
+ qlonglong delayComp = subList.at(i + 16).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->delayCompensList.append(delayComp);
+
+ //
+ QString oppsOutStatus = subList.at(21).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->oppsOutStatusList.append(oppsOutStatus);
+
+ //
+ QString bdcOutStatus = subList.at(22).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bdcOutStatusList.append(bdcOutStatus);
+
+ //
+ QString bacOutStatus = subList.at(23).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bacOutStatusList.append(bacOutStatus);
+ }
+
+ ((TimeSwitcherStatusDto *)frameData)->frameType = TIME_SWITCHER_STATUS_FRAME_TYPE;
+ break;
+
+ }
+
+ return true;
+}
+
+QList TimeSwitcherProtocolBM::extractFrameList(QByteArray rawData)
+{
+ QList resultList;
+ if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$") == true)
+ {
+ QByteArray ba;
+ for (int i = 0; i < rawData.size() - 1; i++)
+ {
+ if (rawData.at(i) != '\r')
+ {
+ ba.append(rawData.at(i));
+ } else
+ {
+ if (rawData.at(i + 1) == '\n')
+ {
+ ba.append("\r\n");
+ resultList.append(ba);
+ ba.clear();
+ i++;
+ } else
+ {
+ ba.append(rawData.at(i));
+ }
+ }
+ }
+ }
+
+ return resultList;
+}
+
+int TimeSwitcherProtocolBM::checkFrame(QByteArray rawData)
+{
+ // 帧尾不是\r\n
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+
+ // 帧头不是$GL
+ if (TIME_SWITCHER_INTERFACE_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_INTERFACE_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME;
+ }
+ } else if (TIME_SWITCHER_STATUS_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_STATUS_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME;
+ }
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+}
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
new file mode 100644
index 0000000..39436d9
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
@@ -0,0 +1,37 @@
+#ifndef TIMESWITCHERPROTOCOLBM_H
+#define TIMESWITCHERPROTOCOLBM_H
+
+#include
+#include
+
+#include "protocol/DeviceStatusProtocolBase.h"
+#include "protocol/dto/TimeSwitcherInterfaceDto.h"
+#include "protocol/dto/TimeSwitcherStatusDto.h"
+
+class TimeSwitcherProtocolBM : public QObject
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcherProtocolBM(QObject *parent = nullptr);
+ ~TimeSwitcherProtocolBM();
+
+ // 解析数据
+ static bool parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType);
+ static DeviceFrameBaseDto * frameFactory(int frameType);
+
+ //
+ static QList extractFrameList(QByteArray rawData);
+
+ // 检测帧格式,帧头帧尾
+ static int checkFrame(QByteArray rawData);
+
+ enum TIME_SWITCHER_FRAME_TYPE
+ {
+ UNKNOW_FRAME = 0,
+ INTERFACE_FRAME = 1,
+ STATUS_FRAME = 2,
+ NETWORK_FRAME = 3
+ };
+};
+
+#endif // TIMESWITCHERPROTOCOLBM_H
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
new file mode 100644
index 0000000..668ddfc
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
@@ -0,0 +1,6 @@
+#include "DeviceFrameBaseDto.h"
+
+DeviceFrameBaseDto::DeviceFrameBaseDto(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
new file mode 100644
index 0000000..05d8280
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
@@ -0,0 +1,28 @@
+#ifndef DEVICEFRAMEBASEDTO_H
+#define DEVICEFRAMEBASEDTO_H
+
+#include
+#include
+#include
+#include
+
+class DeviceFrameBaseDto : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceFrameBaseDto(QObject *parent = nullptr);
+
+ QByteArray rawFrame; // 原始帧字节数组
+
+ QString timestamp; // 时间戳字符串
+ qlonglong milisecond; // 毫秒计数
+ QString devCode;
+ QString frameType; // 帧类型
+
+ virtual QJsonObject toJSON() = 0;
+
+signals:
+
+};
+
+#endif // DEVICEFRAMEBASEDTO_H
diff --git a/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.cpp b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.cpp
new file mode 100644
index 0000000..b9b2894
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.cpp
@@ -0,0 +1,20 @@
+#include "TimeSwitcherInterfaceDto.h"
+
+TimeSwitcherInterfaceDto::TimeSwitcherInterfaceDto(QObject *parent) : DeviceFrameBaseDto(parent)
+{
+
+}
+
+QJsonObject TimeSwitcherInterfaceDto::toJSON()
+{
+ QJsonObject jsonObj;
+
+ QJsonObject dataObj;
+ dataObj.insert("ctrlStatus", ctrlStatus);
+
+ jsonObj.insert("ts", this->milisecond);
+ jsonObj.insert("frameType", this->frameType);
+ jsonObj.insert("data", dataObj);
+
+ return jsonObj;
+}
diff --git a/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.h b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.h
new file mode 100644
index 0000000..11e4b53
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/TimeSwitcherInterfaceDto.h
@@ -0,0 +1,19 @@
+#ifndef TIMESWITCHERINTERFACEDTO_H
+#define TIMESWITCHERINTERFACEDTO_H
+
+#include
+
+#include "protocol/dto/DeviceFrameBaseDto.h"
+
+class TimeSwitcherInterfaceDto : public DeviceFrameBaseDto
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcherInterfaceDto(QObject *parent = nullptr);
+
+ QString ctrlStatus; // <1>
+
+ QJsonObject toJSON();
+};
+
+#endif // TIMESWITCHERINTERFACEDTO_H
diff --git a/DevStatusAcq/protocol/dto/TimeSwitcherStatusDto.cpp b/DevStatusAcq/protocol/dto/TimeSwitcherStatusDto.cpp
new file mode 100644
index 0000000..1cad164
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/TimeSwitcherStatusDto.cpp
@@ -0,0 +1,65 @@
+#include "TimeSwitcherStatusDto.h"
+
+TimeSwitcherStatusDto::TimeSwitcherStatusDto(QObject *parent) : DeviceFrameBaseDto(parent)
+{
+
+}
+
+QJsonObject TimeSwitcherStatusDto::toJSON()
+{
+ QJsonObject jsonObj;
+
+ QJsonObject dataObj;
+ dataObj.insert("devStatus", devStatus);
+ dataObj.insert("refSelectType", refSelectType);
+ dataObj.insert("refTmSrc", refTmSrc);
+ dataObj.insert("oppsPhaseAccOut", oppsPhaseAccOut);
+ dataObj.insert("bacRatio", bacRatio);
+ dataObj.insert("bacRange", bacRange);
+
+ QJsonArray tmSrcStatusArray;
+ QJsonArray tmSrcStatusStrArray;
+ QJsonArray localTmDiffArray;
+ QJsonArray delayCompensArray;
+ QJsonArray oppsOutStatusArray;
+ QJsonArray bdcOutStatusArray;
+ QJsonArray bacOutStatusArray;
+ for (int i = 0; i < 5; i++)
+ {
+ tmSrcStatusArray.append(tmSrcStatusList.at(i));
+ QString tmSrcStatus = tmSrcStatusList.at(i);
+ if (tmSrcStatus.length() == 3)
+ {
+ QString tmSrcStatusStr = "";
+ for (int j = 0; j < 3; j++)
+ {
+ if (tmSrcStatus.mid(j, 1) == '1')
+ {
+ tmSrcStatusStr += tmSrcStr[j] + ",";
+ }
+ }
+ tmSrcStatusStrArray.append(tmSrcStatusStr.mid(0, tmSrcStatusStr.length() - 1));
+ } else
+ {
+ tmSrcStatusStrArray.append("");
+ }
+ localTmDiffArray.append(localTmDiffList.at(i));
+ delayCompensArray.append(delayCompensList.at(i));
+ oppsOutStatusArray.append(oppsOutStatusList.at(i));
+ bdcOutStatusArray.append(bdcOutStatusList.at(i));
+ bacOutStatusArray.append(bacOutStatusList.at(i));
+ }
+ dataObj.insert("tmSrcStatusArray", tmSrcStatusArray);
+ dataObj.insert("tmSrcStatusStrArray", tmSrcStatusStrArray);
+ dataObj.insert("localTmDiffArray", localTmDiffArray);
+ dataObj.insert("delayCompensArray", delayCompensArray);
+ dataObj.insert("oppsOutStatusArray", oppsOutStatusArray);
+ dataObj.insert("bdcOutStatusArray", bdcOutStatusArray);
+ dataObj.insert("bacOutStatusArray", bacOutStatusArray);
+
+ jsonObj.insert("ts", this->milisecond);
+ jsonObj.insert("frameType", this->frameType);
+ jsonObj.insert("data", dataObj);
+
+ return jsonObj;
+}
diff --git a/DevStatusAcq/DevStatusWindow.cpp b/DevStatusAcq/DevStatusWindow.cpp
index 4cec73e..91558e7 100644
--- a/DevStatusAcq/DevStatusWindow.cpp
+++ b/DevStatusAcq/DevStatusWindow.cpp
@@ -6,19 +6,20 @@
{
ui->setupUi(this);
-// SignalGenerator * device = new SignalGenerator(this);
- FrequencyTuning * device = new FrequencyTuning(this);
+ sigGenDevice = new SignalGenerator(this);
+ freqTunDevice = new FrequencyTuning(this);
+ timeSwitDevice = new TimeSwitcher(this);
//
// connect(device, &SignalGenerator::sendDataToDraw,
// this, &DevStatusWindow::drawCounterDataOnPage);
- device->setComName("COM1");
- device->setBaudRate(9600);
+// device->setComName("COM1");
+// device->setBaudRate(9600);
- device->setDevCode("5001");
+// device->setDevCode("5001");
- device->initSerialPort();
+// device->initSerialPort();
}
DevStatusWindow::~DevStatusWindow()
@@ -26,3 +27,27 @@
delete ui;
}
+
+void DevStatusWindow::on_sigGenButt_clicked()
+{
+ sigGenDevice->setComName("SignalGenerator");
+ sigGenDevice->setDevCode("3001");
+
+ sigGenDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_freqTunButt_clicked()
+{
+ freqTunDevice->setComName("FrequencyTuning");
+ freqTunDevice->setDevCode("4001");
+
+ freqTunDevice->initSerialPort();
+}
+
+void DevStatusWindow::on_tmSwiButt_clicked()
+{
+ timeSwitDevice->setComName("TimeSwitcher");
+ timeSwitDevice->setDevCode("5001");
+
+ timeSwitDevice->initSerialPort();
+}
diff --git a/DevStatusAcq/DevStatusWindow.h b/DevStatusAcq/DevStatusWindow.h
index 1a440c0..292e730 100644
--- a/DevStatusAcq/DevStatusWindow.h
+++ b/DevStatusAcq/DevStatusWindow.h
@@ -5,6 +5,7 @@
#include "device/SignalGenerator.h"
#include "device/FrequencyTuning.h"
+#include "device/TimeSwitcher.h"
QT_BEGIN_NAMESPACE
namespace Ui { class DevStatusWindow; }
@@ -18,7 +19,18 @@
DevStatusWindow(QWidget *parent = nullptr);
~DevStatusWindow();
+private slots:
+ void on_sigGenButt_clicked();
+
+ void on_freqTunButt_clicked();
+
+ void on_tmSwiButt_clicked();
+
private:
Ui::DevStatusWindow *ui;
+
+ SignalGenerator * sigGenDevice;
+ FrequencyTuning * freqTunDevice;
+ TimeSwitcher * timeSwitDevice;
};
#endif // DEVSTATUSWINDOW_H
diff --git a/DevStatusAcq/DevStatusWindow.ui b/DevStatusAcq/DevStatusWindow.ui
index 1de0a2c..4059230 100644
--- a/DevStatusAcq/DevStatusWindow.ui
+++ b/DevStatusAcq/DevStatusWindow.ui
@@ -13,6 +13,97 @@
DevStatusWindow
+
+
+
+ 50
+ 50
+ 180
+ 40
+
+
+
+ Mock SignalGenerator
+
+
+
+
+
+ 270
+ 50
+ 180
+ 40
+
+
+
+ Mock FrequencyTuning
+
+
+
+
+
+ 490
+ 50
+ 180
+ 40
+
+
+
+ Mock BCodeTerminal
+
+
+
+
+
+ 50
+ 120
+ 180
+ 40
+
+
+
+ Mock TimeSwitcher
+
+
+
+
+
+ 270
+ 120
+ 180
+ 40
+
+
+
+ Mock FreqSwitcher
+
+
+
+
+
+ 50
+ 190
+ 180
+ 40
+
+
+
+ Mock TimeReplicator
+
+
+
+
+
+ 270
+ 190
+ 180
+ 40
+
+
+
+ Mock FreqReplicator
+
+
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.cpp b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
index becf473..1af9dc0 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.cpp
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.cpp
@@ -28,11 +28,14 @@
this, &QSerialPortUtil::readData);
// mock data received per second
- QTimer * timer = new QTimer(this);
- connect(timer, &QTimer::timeout,
- this, &QSerialPortUtil::mockReceivData);
- timer->start(1000 * 10);
+// QTimer * timer = new QTimer(this);
+// connect(timer, &QTimer::timeout,
+// this, &QSerialPortUtil::mockReceivData);
+// timer->start(1000 * 10);
// }
+
+ this->mockReceivData(portName);
+
}
void QSerialPortUtil::sendData(QByteArray data)
@@ -56,23 +59,34 @@
return this->open;
}
-void QSerialPortUtil::mockReceivData()
+void QSerialPortUtil::mockReceivData(QString portName)
{
QByteArray buffer;
- /*
- // signal generator
- buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
- buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
- buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
- buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
- buffer.append("$GLC,0,0*48").append("\r\n");
- */
+ if (portName == "SignalGenerator")
+ {
- // frequency tuning
- buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
- buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
- buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ // signal generator
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ buffer.append("$GLF,1,0,20210929,1,1,1,-0.01,20000,0,2,50,1*48").append("\r\n");
+ buffer.append("$GPZDA,192157.00,01,01,2000,0,01*5C").append("\r\n");
+ buffer.append("$GPMJD,192157.00,51544,0,01*73").append("\r\n");
+ buffer.append("$GLC,0,0*48").append("\r\n");
+
+ } else if (portName == "FrequencyTuning")
+ {
+ // frequency tuning
+ buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n");
+ buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1*4C").append("\r\n");
+ buffer.append("$GLP,0,0,0,0,20000*45").append("\r\n");
+ } else if (portName == "TimeSwitcher")
+ {
+ // time swifter
+ buffer.append("$GPZDA,211219.00,01,01,2000,0,01*5D").append("\r\n");
+ buffer.append("$GLC,0*54").append("\r\n");
+ buffer.append("$GLF,1,1,1,010,100,100,000,000,0,-235136964.75,-235136959.89,0,0,0,5,50,-16390,-16710,-15660,-16700,-17300,11111,11111,11111*51").append("\r\n");
+ buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,3000,2000,2001*75").append("\r\n");
+ }
emit dataRecieved(buffer);
}
diff --git a/DevStatusAcq/common/utils/QSerialPortUtil.h b/DevStatusAcq/common/utils/QSerialPortUtil.h
index accf403..d018557 100644
--- a/DevStatusAcq/common/utils/QSerialPortUtil.h
+++ b/DevStatusAcq/common/utils/QSerialPortUtil.h
@@ -21,7 +21,7 @@
bool open;
- void mockReceivData();
+ void mockReceivData(QString portName);
signals:
void dataRecieved(QByteArray data); // 收到数据的信号
diff --git a/DevStatusAcq/device/DeviceBase.cpp b/DevStatusAcq/device/DeviceBase.cpp
new file mode 100644
index 0000000..97a7f25
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.cpp
@@ -0,0 +1,33 @@
+#include "DeviceBase.h"
+
+DeviceBase::DeviceBase(QObject *parent) : QObject(parent)
+{
+
+}
+
+void DeviceBase::setComName(QString comName)
+{
+ this->comName = comName;
+}
+void DeviceBase::setBaudRate(int baudRate)
+{
+ this->baudRate = baudRate;
+}
+QString DeviceBase::getDevCode()
+{
+ return this->devCode;
+}
+void DeviceBase::setDevCode(QString devCode)
+{
+ this->devCode = devCode;
+}
+
+bool DeviceBase::isSerialOpen()
+{
+ return this->serialUtil.isOpen();
+}
+
+void DeviceBase::initSerialPort()
+{
+ this->serialUtil.openSerialPort(this->comName, this->baudRate);
+}
diff --git a/DevStatusAcq/device/DeviceBase.h b/DevStatusAcq/device/DeviceBase.h
new file mode 100644
index 0000000..3073fad
--- /dev/null
+++ b/DevStatusAcq/device/DeviceBase.h
@@ -0,0 +1,37 @@
+#ifndef DEVICEBASE_H
+#define DEVICEBASE_H
+
+#include
+#include "common/utils/QSerialPortUtil.h"
+#include "common/utils/QKafkaUtil.h"
+#include "common/utils/QByteUtil.h"
+#include "common/utils/QLogUtil.h"
+#include "common/utils/SettingConfig.h"
+
+class DeviceBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceBase(QObject *parent = nullptr);
+
+ void setComName(QString comName);
+ void setBaudRate(int baudRate);
+ QString getDevCode();
+ void setDevCode(QString devCode);
+
+ void initSerialPort();
+ bool isSerialOpen();
+
+protected:
+ QString devCode;
+ QString comName;
+ int baudRate;
+
+ QSerialPortUtil serialUtil;
+ QKafkaUtil kafkaUtil;
+ QByteArray dataBuff;
+signals:
+
+};
+
+#endif // DEVICEBASE_H
diff --git a/DevStatusAcq/device/FrequencyTuning.cpp b/DevStatusAcq/device/FrequencyTuning.cpp
index 291a089..d80d17e 100644
--- a/DevStatusAcq/device/FrequencyTuning.cpp
+++ b/DevStatusAcq/device/FrequencyTuning.cpp
@@ -2,7 +2,7 @@
#include
#include
-FrequencyTuning::FrequencyTuning(QObject *parent) : QObject(parent)
+FrequencyTuning::FrequencyTuning(QObject *parent) : DeviceBase(parent)
{
connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
this, &FrequencyTuning::dataReceivedHandler);
@@ -18,32 +18,7 @@
this, &FrequencyTuning::dataReceivedHandler);
}
-void FrequencyTuning::setComName(QString comName)
-{
- this->comName = comName;
-}
-void FrequencyTuning::setBaudRate(int baudRate)
-{
- this->baudRate = baudRate;
-}
-QString FrequencyTuning::getDevCode()
-{
- return this->devCode;
-}
-void FrequencyTuning::setDevCode(QString devCode)
-{
- this->devCode = devCode;
-}
-bool FrequencyTuning::isSerialOpen()
-{
- return this->serialUtil.isOpen();
-}
-
-void FrequencyTuning::initSerialPort()
-{
- this->serialUtil.openSerialPort(this->comName, this->baudRate);
-}
void FrequencyTuning::dataReceivedHandler(QByteArray data)
{
diff --git a/DevStatusAcq/device/FrequencyTuning.h b/DevStatusAcq/device/FrequencyTuning.h
index ffc702f..f49dfed 100644
--- a/DevStatusAcq/device/FrequencyTuning.h
+++ b/DevStatusAcq/device/FrequencyTuning.h
@@ -2,42 +2,20 @@
#define FREQUENCYTUNING_H
#include
-#include "common/utils/QSerialPortUtil.h"
-#include "common/utils/QKafkaUtil.h"
-#include "common/utils/QByteUtil.h"
-#include "common/utils/QLogUtil.h"
-#include "common/utils/SettingConfig.h"
+#include "device/DeviceBase.h"
#include "protocol/dto/FrequencyTuningStatusDto.h"
#include "protocol/FrequencyTuningProtocolBM.h"
-class FrequencyTuning : public QObject
+class FrequencyTuning : public DeviceBase
{
Q_OBJECT
public:
explicit FrequencyTuning(QObject *parent = nullptr);
~FrequencyTuning();
- void initSerialPort();
-
void afterFramePhase(FrequencyTuningStatusDto * frameDto);
- void setComName(QString comName);
- void setBaudRate(int baudRate);
- QString getDevCode();
- void setDevCode(QString devCode);
-
- bool isSerialOpen();
-
-private:
- QString devCode;
- QString comName;
- int baudRate;
-
- QSerialPortUtil serialUtil;
- QKafkaUtil kafkaUtil;
- QByteArray dataBuff;
-
signals:
void sendDataToDraw(FrequencyTuningStatusDto * frameData);
diff --git a/DevStatusAcq/device/TimeSwitcher.cpp b/DevStatusAcq/device/TimeSwitcher.cpp
new file mode 100644
index 0000000..67fd1a3
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.cpp
@@ -0,0 +1,76 @@
+#include "TimeSwitcher.h"
+
+#include
+#include
+
+TimeSwitcher::TimeSwitcher(QObject *parent) : DeviceBase(parent)
+{
+ connect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+
+ kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS);
+ kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC);
+ kafkaUtil.createProducer();
+}
+
+TimeSwitcher::~TimeSwitcher()
+{
+ disconnect(&this->serialUtil, &QSerialPortUtil::dataRecieved,
+ this, &TimeSwitcher::dataReceivedHandler);
+}
+
+void TimeSwitcher::dataReceivedHandler(QByteArray data)
+{
+ this->dataBuff.append(data);
+
+ std::cout << dataBuff.toStdString() << std::endl;
+
+ QList frameList = TimeSwitcherProtocolBM::extractFrameList(this->dataBuff);
+
+ if (frameList.size() > 0)
+ {
+ for (int i = 0; i < frameList.size(); i++)
+ {
+ QByteArray frameByte = frameList.at(i);
+
+ int frameType = TimeSwitcherProtocolBM::checkFrame(frameByte);
+ DeviceFrameBaseDto * tsFrameDto = TimeSwitcherProtocolBM::frameFactory(frameType);
+ if (tsFrameDto != nullptr)
+ {
+ // ★解析成数据对象
+ bool parse = TimeSwitcherProtocolBM::parseTimeSwitcherData(frameByte, tsFrameDto, frameType);
+
+ // 解析成功
+ if (parse == true)
+ {
+ QDateTime now = QDateTime::currentDateTime();
+ tsFrameDto->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz");
+ tsFrameDto->milisecond = now.toMSecsSinceEpoch();
+ tsFrameDto->rawFrame = frameByte;
+
+ this->afterFramePhase(tsFrameDto);
+ }
+
+ // 在此处释放内存,不影响后续显示
+ // 不在此处释放内存则会导致内存持续增加
+ // 具体原因不明
+ delete tsFrameDto;
+ }
+ }
+ }
+}
+
+void TimeSwitcher::afterFramePhase(DeviceFrameBaseDto * frameDto)
+{
+ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl;
+ std::cout << frameDto->rawFrame.toStdString() << std::endl;
+
+ // 3. 输出到中间件,执行后续处理过程
+ if (SettingConfig::getInstance().NEED_KAFKA == 1)
+ {
+ QJsonObject jsonObj = frameDto->toJSON();
+ jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID);
+ jsonObj.insert("deviceId", devCode);
+ kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact)));
+ }
+}
diff --git a/DevStatusAcq/device/TimeSwitcher.h b/DevStatusAcq/device/TimeSwitcher.h
new file mode 100644
index 0000000..02306d1
--- /dev/null
+++ b/DevStatusAcq/device/TimeSwitcher.h
@@ -0,0 +1,27 @@
+#ifndef TIMESWITCHER_H
+#define TIMESWITCHER_H
+
+#include
+
+#include "device/DeviceBase.h"
+#include "protocol/dto/DeviceFrameBaseDto.h"
+#include "protocol/TimeSwitcherProtocolBM.h"
+
+class TimeSwitcher : public DeviceBase
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcher(QObject *parent = nullptr);
+ ~TimeSwitcher();
+
+ void afterFramePhase(DeviceFrameBaseDto * frameDto);
+
+signals:
+ void sendDataToDraw(DeviceFrameBaseDto * frameData);
+
+public slots:
+ void dataReceivedHandler(QByteArray data);
+
+};
+
+#endif // TIMESWITCHER_H
diff --git a/DevStatusAcq/device/device.pri b/DevStatusAcq/device/device.pri
index 794ec5e..a0be651 100644
--- a/DevStatusAcq/device/device.pri
+++ b/DevStatusAcq/device/device.pri
@@ -1,6 +1,10 @@
+HEADERS += $$PWD/DeviceBase.h
HEADERS += $$PWD/SignalGenerator.h
HEADERS += $$PWD/FrequencyTuning.h
+HEADERS += $$PWD/TimeSwitcher.h
+SOURCES += $$PWD/DeviceBase.cpp
SOURCES += $$PWD/SignalGenerator.cpp
SOURCES += $$PWD/FrequencyTuning.cpp
+SOURCES += $$PWD/TimeSwitcher.cpp
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
new file mode 100644
index 0000000..05a0253
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.cpp
@@ -0,0 +1,6 @@
+#include "DeviceStatusProtocolBase.h"
+
+DeviceStatusProtocolBase::DeviceStatusProtocolBase(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/DeviceStatusProtocolBase.h b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
new file mode 100644
index 0000000..8482a48
--- /dev/null
+++ b/DevStatusAcq/protocol/DeviceStatusProtocolBase.h
@@ -0,0 +1,86 @@
+#ifndef DEVICESTATUSPROTOCOLBASE_H
+#define DEVICESTATUSPROTOCOLBASE_H
+
+#include
+
+static const QString FRAME_TAIL = "\r\n"; // 帧尾
+static const QString FRAME_CONTENT_SEP = ","; // 帧内分隔符
+static const QString FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
+static const int FRAME_SUM_LENGTH = 2;
+static const int FRAME_SUB_MIN_SIZE = 2;
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
+static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
+
+static const QString TIME_SWITCHER_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
+static const QString TIME_SWITCHER_STATUS_FRAME_HEAD = "$GLF"; // 帧头
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
+static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
+static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT = 1;
+static const int TIME_SWITCHER_STATUS_FRAME_SUB_COUNT = 24;
+
+
+static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+static const int TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH = TIME_SWITCHER_INTERFACE_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_INTERFACE_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+static const int TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH = TIME_SWITCHER_STATUS_FRAME_HEAD.length() +
+ FRAME_TAIL.length() + 1 + FRAME_SUB_MIN_SIZE +
+ TIME_SWITCHER_STATUS_FRAME_SUB_COUNT * FRAME_SUB_MIN_SIZE;
+
+
+static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
+static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
+
+static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
+static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
+static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
+static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
+
+static const QString TIME_SWITCHER_STATUS_FRAME_TYPE = "0501";
+static const QString TIME_SWITCHER_INTERFACE_FRAME_TYPE = "0502";
+
+
+class DeviceStatusProtocolBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DeviceStatusProtocolBase(QObject *parent = nullptr);
+
+signals:
+
+};
+
+#endif // DEVICESTATUSPROTOCOLBASE_H
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
index 5883aca..0bf0379 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.cpp
@@ -33,8 +33,8 @@
bool FrequencyTuningProtocolBM::parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(FREQUENCY_TUNING_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(FREQUENCY_TUNING_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -98,7 +98,7 @@
int FrequencyTuningProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (FREQUENCY_TUNING_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FREQUENCY_TUNING_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return FREQUENCY_TUNING_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
index 2cc3545..96e7ea4 100644
--- a/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
+++ b/DevStatusAcq/protocol/FrequencyTuningProtocolBM.h
@@ -4,32 +4,10 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"
-static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
-static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
-static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
-static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
-static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
-static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;
-
-static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
- FREQUENCY_TUNING_FRAME_TAIL.length() +
- FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
- 1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
-
-static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
-static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";
-
class FrequencyTuningProtocolBM : public QObject
{
Q_OBJECT
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
index 6d8efc1..0797d34 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.cpp
@@ -42,8 +42,8 @@
bool SignalGeneratorProtocolBM::parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType)
{
// get the raw data between ',' and '*'
- int start = rawData.indexOf(SIGNAL_GENERATOR_FRAME_CONTENT_SEP);
- int end = rawData.indexOf(SIGNAL_GENERATOR_FRAME_SUM_SEP);
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
QByteArray content = rawData.mid(start + 1, end - start - 1);
QString contentStr = QString(content);
@@ -131,7 +131,7 @@
int SignalGeneratorProtocolBM::checkFrame(QByteArray rawData)
{
// 帧尾不是\r\n
- if (SIGNAL_GENERATOR_FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - SIGNAL_GENERATOR_FRAME_TAIL.size()))
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
{
return SIGNAL_GENERATOR_FRAME_TYPE::UNKNOW_FRAME;
}
diff --git a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
index 1519872..7cdd61a 100644
--- a/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
+++ b/DevStatusAcq/protocol/SignalGeneratorProtocolBM.h
@@ -4,48 +4,12 @@
#include
#include
+#include "protocol/DeviceStatusProtocolBase.h"
#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
-static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
-static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
-static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
-static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符
-
-static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
-static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
-static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;
-
-static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
- SIGNAL_GENERATOR_FRAME_TAIL.length() +
- SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
- 1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
-
-static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
-static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
-static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
-static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";
-
class SignalGeneratorProtocolBM : public QObject
{
public:
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
new file mode 100644
index 0000000..2046ba2
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.cpp
@@ -0,0 +1,156 @@
+#include "TimeSwitcherProtocolBM.h"
+
+TimeSwitcherProtocolBM::TimeSwitcherProtocolBM(QObject *parent) : QObject(parent)
+{
+
+}
+
+TimeSwitcherProtocolBM::~TimeSwitcherProtocolBM()
+{
+
+}
+
+DeviceFrameBaseDto * TimeSwitcherProtocolBM::frameFactory(int frameType)
+{
+ DeviceFrameBaseDto * frameData = 0;
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+ frameData = new TimeSwitcherInterfaceDto();
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+ frameData = new TimeSwitcherStatusDto();
+ break;
+
+ default:
+ frameData = nullptr;
+ break;
+ }
+
+ return frameData;
+}
+
+bool TimeSwitcherProtocolBM::parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType)
+{
+ // get the raw data between ',' and '*'
+ int start = rawData.indexOf(FRAME_CONTENT_SEP);
+ int end = rawData.indexOf(FRAME_SUM_SEP);
+
+ QByteArray content = rawData.mid(start + 1, end - start - 1);
+ QString contentStr = QString(content);
+ QStringList subList = contentStr.split(",");
+
+ switch (frameType) {
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME :
+
+ ((TimeSwitcherInterfaceDto *)frameData)->ctrlStatus = subList.at(0);
+ ((TimeSwitcherInterfaceDto *)frameData)->frameType = TIME_SWITCHER_INTERFACE_FRAME_TYPE;
+ break;
+
+ case TimeSwitcherProtocolBM::TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME :
+
+ ((TimeSwitcherStatusDto *)frameData)->devStatus = subList.at(0);
+ ((TimeSwitcherStatusDto *)frameData)->refSelectType = subList.at(1);
+ ((TimeSwitcherStatusDto *)frameData)->refTmSrc = subList.at(2);
+ ((TimeSwitcherStatusDto *)frameData)->oppsPhaseAccOut = subList.at(13).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->bacRatio = subList.at(14).toInt();
+ ((TimeSwitcherStatusDto *)frameData)->bacRange = subList.at(15).toFloat();
+ for (int i = 0; i < 5; i++)
+ {
+ //
+ QString tmSrcStatus = subList.at(i + 3);
+ ((TimeSwitcherStatusDto *)frameData)->tmSrcStatusList.append(tmSrcStatus);
+
+ //
+ double localTmDiff = subList.at(i + 8).toDouble();
+ ((TimeSwitcherStatusDto *)frameData)->localTmDiffList.append(localTmDiff);
+
+ //
+ qlonglong delayComp = subList.at(i + 16).toLongLong();
+ ((TimeSwitcherStatusDto *)frameData)->delayCompensList.append(delayComp);
+
+ //
+ QString oppsOutStatus = subList.at(21).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->oppsOutStatusList.append(oppsOutStatus);
+
+ //
+ QString bdcOutStatus = subList.at(22).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bdcOutStatusList.append(bdcOutStatus);
+
+ //
+ QString bacOutStatus = subList.at(23).mid(i, 1);
+ ((TimeSwitcherStatusDto *)frameData)->bacOutStatusList.append(bacOutStatus);
+ }
+
+ ((TimeSwitcherStatusDto *)frameData)->frameType = TIME_SWITCHER_STATUS_FRAME_TYPE;
+ break;
+
+ }
+
+ return true;
+}
+
+QList TimeSwitcherProtocolBM::extractFrameList(QByteArray rawData)
+{
+ QList resultList;
+ if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$") == true)
+ {
+ QByteArray ba;
+ for (int i = 0; i < rawData.size() - 1; i++)
+ {
+ if (rawData.at(i) != '\r')
+ {
+ ba.append(rawData.at(i));
+ } else
+ {
+ if (rawData.at(i + 1) == '\n')
+ {
+ ba.append("\r\n");
+ resultList.append(ba);
+ ba.clear();
+ i++;
+ } else
+ {
+ ba.append(rawData.at(i));
+ }
+ }
+ }
+ }
+
+ return resultList;
+}
+
+int TimeSwitcherProtocolBM::checkFrame(QByteArray rawData)
+{
+ // 帧尾不是\r\n
+ if (FRAME_TAIL.toLocal8Bit() != rawData.mid(rawData.size() - FRAME_TAIL.size()))
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+
+ // 帧头不是$GL
+ if (TIME_SWITCHER_INTERFACE_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_INTERFACE_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_INTERFACE_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::INTERFACE_FRAME;
+ }
+ } else if (TIME_SWITCHER_STATUS_FRAME_HEAD.toLocal8Bit() == rawData.mid(0, TIME_SWITCHER_STATUS_FRAME_HEAD.size()))
+ {
+ // 帧长度小于最小的长度
+ if (rawData.size() < TIME_SWITCHER_STATUS_FRAME_MIN_LENGTH)
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::STATUS_FRAME;
+ }
+ } else
+ {
+ return TIME_SWITCHER_FRAME_TYPE::UNKNOW_FRAME;
+ }
+}
diff --git a/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
new file mode 100644
index 0000000..39436d9
--- /dev/null
+++ b/DevStatusAcq/protocol/TimeSwitcherProtocolBM.h
@@ -0,0 +1,37 @@
+#ifndef TIMESWITCHERPROTOCOLBM_H
+#define TIMESWITCHERPROTOCOLBM_H
+
+#include
+#include
+
+#include "protocol/DeviceStatusProtocolBase.h"
+#include "protocol/dto/TimeSwitcherInterfaceDto.h"
+#include "protocol/dto/TimeSwitcherStatusDto.h"
+
+class TimeSwitcherProtocolBM : public QObject
+{
+ Q_OBJECT
+public:
+ explicit TimeSwitcherProtocolBM(QObject *parent = nullptr);
+ ~TimeSwitcherProtocolBM();
+
+ // 解析数据
+ static bool parseTimeSwitcherData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType);
+ static DeviceFrameBaseDto * frameFactory(int frameType);
+
+ //
+ static QList extractFrameList(QByteArray rawData);
+
+ // 检测帧格式,帧头帧尾
+ static int checkFrame(QByteArray rawData);
+
+ enum TIME_SWITCHER_FRAME_TYPE
+ {
+ UNKNOW_FRAME = 0,
+ INTERFACE_FRAME = 1,
+ STATUS_FRAME = 2,
+ NETWORK_FRAME = 3
+ };
+};
+
+#endif // TIMESWITCHERPROTOCOLBM_H
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
new file mode 100644
index 0000000..668ddfc
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.cpp
@@ -0,0 +1,6 @@
+#include "DeviceFrameBaseDto.h"
+
+DeviceFrameBaseDto::DeviceFrameBaseDto(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
new file mode 100644
index 0000000..05d8280
--- /dev/null
+++ b/DevStatusAcq/protocol/dto/DeviceFrameBaseDto.h
@@ -0,0 +1,28 @@
+#ifndef DEVICEFRAMEBASEDTO_H
+#define DEVICEFRAMEBASEDTO_H
+
+#include
+#include
+#include
+#include