add codes.
This commit is contained in:
parent
50901aefed
commit
576fe1ffd1
@ -11,7 +11,9 @@ CONFIG += c++11
|
|||||||
SOURCES += \
|
SOURCES += \
|
||||||
MyTcpClient.cpp \
|
MyTcpClient.cpp \
|
||||||
acceleration.cpp \
|
acceleration.cpp \
|
||||||
|
cardbase.cpp \
|
||||||
common.cpp \
|
common.cpp \
|
||||||
|
config_mgr.cpp \
|
||||||
keyphase.cpp \
|
keyphase.cpp \
|
||||||
main.cpp \
|
main.cpp \
|
||||||
mainwindow.cpp \
|
mainwindow.cpp \
|
||||||
@ -21,13 +23,16 @@ SOURCES += \
|
|||||||
setpoint.cpp \
|
setpoint.cpp \
|
||||||
singlerelay.cpp \
|
singlerelay.cpp \
|
||||||
tachometer.cpp \
|
tachometer.cpp \
|
||||||
velocity.cpp
|
velocity.cpp \
|
||||||
|
vibrationdata.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
MyTcpClient.h \
|
MyTcpClient.h \
|
||||||
acceleration.h \
|
acceleration.h \
|
||||||
acceleration_ds.h \
|
acceleration_ds.h \
|
||||||
|
cardbase.h \
|
||||||
common.h \
|
common.h \
|
||||||
|
config_mgr.h \
|
||||||
data_config.h \
|
data_config.h \
|
||||||
displacement_ds.h \
|
displacement_ds.h \
|
||||||
keyphase.h \
|
keyphase.h \
|
||||||
@ -39,7 +44,8 @@ HEADERS += \
|
|||||||
singlerelay.h \
|
singlerelay.h \
|
||||||
tachometer.h \
|
tachometer.h \
|
||||||
velocity.h \
|
velocity.h \
|
||||||
velocity_ds.h
|
velocity_ds.h \
|
||||||
|
vibrationdata.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
acceleration.ui \
|
acceleration.ui \
|
||||||
|
6
cardbase.cpp
Normal file
6
cardbase.cpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "cardbase.h"
|
||||||
|
|
||||||
|
CardBase::CardBase()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
67
cardbase.h
Normal file
67
cardbase.h
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
#ifndef CARDBASE_H
|
||||||
|
#define CARDBASE_H
|
||||||
|
|
||||||
|
#include "data_config.h"
|
||||||
|
#ifdef NAME
|
||||||
|
#undef NAME
|
||||||
|
#endif
|
||||||
|
#define NAME(x) (x, #x)
|
||||||
|
|
||||||
|
class CardBase {
|
||||||
|
public:
|
||||||
|
CardBase() {}
|
||||||
|
~CardBase() {}
|
||||||
|
void FromJson(const Json::Value &cfg) {
|
||||||
|
version_ = cfg["version"].asInt();
|
||||||
|
slot_ = cfg["slot"].asInt();
|
||||||
|
card_type_ = static_cast<CardType>(cfg["type"].asInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
Json::Value ToJson() {
|
||||||
|
Json::Value ch;
|
||||||
|
ch[NAME(version)] = version_;
|
||||||
|
ch[NAME(slot)] = slot_;
|
||||||
|
ch[NAME(type)] = card_type_;
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int version_;
|
||||||
|
int slot_; // 从1~15
|
||||||
|
CardType card_type_;
|
||||||
|
};
|
||||||
|
|
||||||
|
class VariableBase {
|
||||||
|
public:
|
||||||
|
VariableBase() {}
|
||||||
|
~VariableBase() {}
|
||||||
|
// TODO: fromjson, tojson
|
||||||
|
int id_;
|
||||||
|
VibChannelType type_;
|
||||||
|
Delay delay_;
|
||||||
|
DirectImpl direct_;
|
||||||
|
XImpl x1_;
|
||||||
|
XImpl x2_;
|
||||||
|
RecorderOut recorder_out_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 位移
|
||||||
|
class RadialVariable : public VariableBase {
|
||||||
|
public:
|
||||||
|
bool alert_latching_;
|
||||||
|
bool danger_latching_;
|
||||||
|
RadialImpl not1x_;
|
||||||
|
RadialImpl smax_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 加速度与速度
|
||||||
|
class AccVelVariable : public VariableBase {
|
||||||
|
public:
|
||||||
|
bool alert_latching_;
|
||||||
|
bool danger_latching_;
|
||||||
|
bool timed_ok_;
|
||||||
|
bool rms_active_;
|
||||||
|
bool integrate_active_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CARDBASE_H
|
102
config_mgr.cpp
Normal file
102
config_mgr.cpp
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
#include "config_mgr.h"
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QJsonArray>
|
||||||
|
#include <QJsonObject>
|
||||||
|
|
||||||
|
#include "data_config.h"
|
||||||
|
#include "vibrationdata.h"
|
||||||
|
|
||||||
|
ConfigMgr *ConfigMgr::instance = nullptr;
|
||||||
|
|
||||||
|
ConfigMgr::~ConfigMgr() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigMgr::Save() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigMgr::Load(QString filename) {
|
||||||
|
QFile file(filename);
|
||||||
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
|
qDebug() << "Cannot open file for reading:" << filename;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QString content = file.readAll();
|
||||||
|
file.close();
|
||||||
|
QByteArray jsonData = content.toUtf8();
|
||||||
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
|
||||||
|
if (jsonDoc.isNull()) {
|
||||||
|
qDebug() << "Cannot parse JSON document";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!jsonDoc.isObject() && !jsonDoc.isArray()) {
|
||||||
|
qDebug() << "JSON document is not an object or an array";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QJsonObject json_obj = jsonDoc.object();
|
||||||
|
// parse card_type
|
||||||
|
QJsonArray card_type = json_obj["card_type"].toArray();
|
||||||
|
int slot = 0;
|
||||||
|
QJsonObject temp_obj;
|
||||||
|
for (int i = 0; i < card_type.size(); ++i) {
|
||||||
|
temp_obj = card_type[i].toObject();
|
||||||
|
slot = temp_obj["slot"].toInt();
|
||||||
|
card_type_[slot - 1] = static_cast<CardType>(temp_obj["type"].toInt());
|
||||||
|
}
|
||||||
|
// parse each slot
|
||||||
|
QJsonObject channel;
|
||||||
|
for (int i = 0; i < SLOT_NUM; ++i) {
|
||||||
|
if (card_type_[i] == kCardNone) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
slot = i + 1;
|
||||||
|
if (json_obj[QString::number(slot)].isNull()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
temp_obj = json_obj[QString::number(slot)].toObject();
|
||||||
|
if (card_type_[i] == kCardVibSingle) {
|
||||||
|
std::shared_ptr<VibrationData> vib_data = std::make_shared<VibrationData>();
|
||||||
|
for (int j = 0; j < CHANNEL_COUNT; ++j) {
|
||||||
|
channel = temp_obj[QString::number(j + 1)].toObject();
|
||||||
|
// base info
|
||||||
|
vib_data->base_config_[j].standby = channel["standby"].toBool();
|
||||||
|
vib_data->base_config_[j].active = channel["active"].toBool();
|
||||||
|
vib_data->base_config_[j].rack_type = channel["rack_type"].toInt();
|
||||||
|
// vib_data->base_config_[j].tmr_group = channel["tmr_group"].toString();
|
||||||
|
vib_data->base_config_[j].channel_type = channel["channel_type"].toInt();
|
||||||
|
memset(vib_data->base_config_[j].transducer_name, 0, 32);
|
||||||
|
memcpy(vib_data->base_config_[j].transducer_name, channel["transducer_name"].toString().toStdString().c_str(), channel["transducer_name"].toString().length());
|
||||||
|
vib_data->base_config_[j].scale_factor = channel["scale_factor"].toDouble();
|
||||||
|
vib_data->base_config_[j].sampling_rate = channel["sampling_rate"].toInt();
|
||||||
|
QJsonArray voltage_range_array = channel["normal_voltage_range"].toArray();
|
||||||
|
vib_data->base_config_[j].normal_voltage_low = voltage_range_array[0].toDouble();
|
||||||
|
vib_data->base_config_[j].normal_voltage_high = voltage_range_array[1].toDouble();
|
||||||
|
// filter
|
||||||
|
QJsonArray filter_array = channel["filter"].toArray();
|
||||||
|
for (int k = 0; k < filter_array.size(); k++) {
|
||||||
|
QJsonObject filter_ele = filter_array[i].toObject();
|
||||||
|
vib_data->filter_[j].filter[k].low = filter_ele["low"].toInt();
|
||||||
|
vib_data->filter_[j].filter[k].high = filter_ele["high"].toInt();
|
||||||
|
vib_data->filter_[j].filter[k].checked = filter_ele["checked"].toBool();
|
||||||
|
}
|
||||||
|
// variables
|
||||||
|
QJsonObject tmp_variable = channel["variable"].toObject();
|
||||||
|
switch (vib_data->base_config_[j].channel_type) {
|
||||||
|
case kVibRadial: {
|
||||||
|
std::shared_ptr<RadialVariable> radial_variable = std::make_shared<RadialVariable>();
|
||||||
|
radial_variable->id_ = j + 1;
|
||||||
|
vib_data->variables_.push_back(radial_variable);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case kVibVelocity:
|
||||||
|
case kVibAcc: {
|
||||||
|
std::shared_ptr<AccVelVariable> acc_vel_variable = std::make_shared<AccVelVariable>();
|
||||||
|
vib_data->variables_.push_back(acc_vel_variable);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cards_.push_back(vib_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
30
config_mgr.h
Normal file
30
config_mgr.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef CONFIG_MGR_H
|
||||||
|
#define CONFIG_MGR_H
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
#include "cardbase.h"
|
||||||
|
|
||||||
|
class ConfigMgr {
|
||||||
|
private:
|
||||||
|
static ConfigMgr *instance;
|
||||||
|
ConfigMgr() {
|
||||||
|
for (int i = 0; i < SLOT_NUM; ++i) {
|
||||||
|
card_type_[i] = kCardNone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public:
|
||||||
|
static ConfigMgr *Instance() {
|
||||||
|
if (instance == nullptr) {
|
||||||
|
instance = new ConfigMgr();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
~ConfigMgr();
|
||||||
|
void Save();
|
||||||
|
void Load(QString filename);
|
||||||
|
private:
|
||||||
|
int card_type_[15];
|
||||||
|
std::vector<std::shared_ptr<CardBase>> cards_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CONFIG_MGR_H
|
@ -10,7 +10,34 @@ typedef unsigned short uint16_t;
|
|||||||
|
|
||||||
extern QString g_strServerIp; // 服务端IP
|
extern QString g_strServerIp; // 服务端IP
|
||||||
|
|
||||||
#define CHANNLE_COUNT 4
|
#define SLOT_NUM 15
|
||||||
|
#define CHANNEL_COUNT 4
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
kCardNone = 0,
|
||||||
|
kCardCpu = 1,
|
||||||
|
|
||||||
|
kCardVibSingle = 10,
|
||||||
|
kCardVibTMRPrimary = 11,
|
||||||
|
kCardVibTMRBackup = 12,
|
||||||
|
|
||||||
|
kCardSpeedSingle = 20,
|
||||||
|
kCardSpeedTMRPrimary = 21,
|
||||||
|
kCardSpeedTMRBackup = 22,
|
||||||
|
|
||||||
|
kCardKeyphase = 30,
|
||||||
|
kCardRelaySingle = 31,
|
||||||
|
kCardRelayTMRPrimary = 32,
|
||||||
|
kCardRelayTMRBackup = 33,
|
||||||
|
} CardType;
|
||||||
|
|
||||||
|
// 振动板通道类型
|
||||||
|
typedef enum {
|
||||||
|
kVibRadial = 0, // 径向位移
|
||||||
|
kVibAcc = 1, // 加速度
|
||||||
|
kVibVelocity = 2 // 速度
|
||||||
|
} VibChannelType;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int slot;
|
int slot;
|
||||||
QString slot_type;
|
QString slot_type;
|
||||||
@ -30,13 +57,6 @@ enum CMTCommand {
|
|||||||
kUpgradeProgress = 7
|
kUpgradeProgress = 7
|
||||||
};
|
};
|
||||||
|
|
||||||
// 振动板通道类型
|
|
||||||
typedef enum {
|
|
||||||
kVibRadial = 0, // 径向位移
|
|
||||||
kVibAcc = 1, // 加速度
|
|
||||||
kVibVelocity = 2 // 速度
|
|
||||||
} VibChannelType;
|
|
||||||
|
|
||||||
// 振动板采样率
|
// 振动板采样率
|
||||||
typedef enum {
|
typedef enum {
|
||||||
kVibSR16K = 0, // 16k
|
kVibSR16K = 0, // 16k
|
||||||
@ -53,26 +73,35 @@ typedef enum {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int id;
|
int id;
|
||||||
QString channel_name;
|
// QString channel_name;
|
||||||
bool standby;
|
bool standby;
|
||||||
bool active;
|
bool active;
|
||||||
int rack_type; // VibRackType
|
int rack_type; // VibRackType
|
||||||
QString tmr_group;
|
char tmr_group[32];
|
||||||
int channel_type; // VibChannelType
|
int channel_type; // VibChannelType
|
||||||
QString transducer_name;
|
char transducer_name[32];
|
||||||
float scale_factor;
|
float scale_factor;
|
||||||
int sampling_rate; // VibSamplingRate
|
int sampling_rate; // VibSamplingRate
|
||||||
float normal_voltage_low;
|
float normal_voltage_low;
|
||||||
float normal_voltage_high;
|
float normal_voltage_high;
|
||||||
} SeismicMonitor;
|
} SeismicMonitor;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
kFilterTypeLowPass = 0,
|
||||||
|
kFilterTypeHighPass = 1,
|
||||||
|
kFilterTypeBandPass = 2,
|
||||||
|
} FilterType;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
QString type;
|
|
||||||
int low;
|
int low;
|
||||||
int high;
|
int high;
|
||||||
bool checked;
|
bool checked;
|
||||||
} Filter;
|
} Filter;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
Filter filter[3]; // 0: kFilterTypeLowPass, 1: kFilterTypeHighPass, 2: kFilterTypeBandPass
|
||||||
|
} AllFilter;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
QString type;
|
QString type;
|
||||||
int full_sacle_range;
|
int full_sacle_range;
|
||||||
@ -83,11 +112,33 @@ typedef struct {
|
|||||||
float custom;
|
float custom;
|
||||||
} Variables;
|
} Variables;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int full_sacle_range;
|
||||||
|
float clamp_value;
|
||||||
|
float custom;
|
||||||
|
} DirectImpl;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
bool checked;
|
||||||
|
int full_sacle_range;
|
||||||
|
float clamp_value;
|
||||||
|
float custom;
|
||||||
|
int phase_lag;
|
||||||
|
} XImpl;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
bool checked;
|
||||||
|
int full_sacle_range;
|
||||||
|
float clamp_value;
|
||||||
|
float custom;
|
||||||
|
} RadialImpl;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int alert;
|
int alert;
|
||||||
float danger;
|
float danger;
|
||||||
bool active_100ms;
|
bool active_100ms;
|
||||||
} Dealy;
|
} Delay;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool rms_active;
|
bool rms_active;
|
||||||
bool integrate_active;
|
bool integrate_active;
|
||||||
@ -101,6 +152,14 @@ typedef struct {
|
|||||||
int comparision_percentage;
|
int comparision_percentage;
|
||||||
} Alert_Variables;
|
} Alert_Variables;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int recorder_output;
|
||||||
|
bool two_ma_clamp;
|
||||||
|
float trip_multiply;
|
||||||
|
QString comparision;
|
||||||
|
int comparision_percentage;
|
||||||
|
} RecorderOut;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int id;
|
int id;
|
||||||
bool active;
|
bool active;
|
||||||
|
368
mainwindow.cpp
368
mainwindow.cpp
@ -24,10 +24,9 @@ QString g_strServerIp;
|
|||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
: QMainWindow(parent)
|
: QMainWindow(parent)
|
||||||
, ui(new Ui::MainWindow)
|
, ui(new Ui::MainWindow) {
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
QMenuBar* menuBar = this->menuBar();
|
QMenuBar *menuBar = this->menuBar();
|
||||||
this->setMenuBar(menuBar); //添加到对象树
|
this->setMenuBar(menuBar); //添加到对象树
|
||||||
menuBar->addMenu(ui->menu_tool);
|
menuBar->addMenu(ui->menu_tool);
|
||||||
ui->widget_body->setProperty("flag", "title");
|
ui->widget_body->setProperty("flag", "title");
|
||||||
@ -35,19 +34,15 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
//关联事件过滤器用于双击放大
|
//关联事件过滤器用于双击放大
|
||||||
ui->widget_body->installEventFilter(this);
|
ui->widget_body->installEventFilter(this);
|
||||||
ui->widget_body->setProperty("flag", "body");
|
ui->widget_body->setProperty("flag", "body");
|
||||||
ui->statusBar->setProperty("flag","status");
|
ui->statusBar->setProperty("flag", "status");
|
||||||
|
|
||||||
// 创建进度条
|
// 创建进度条
|
||||||
progressBar = new QProgressBar(this);
|
progressBar = new QProgressBar(this);
|
||||||
|
|
||||||
// 设置进度条的范围(0到100)
|
// 设置进度条的范围(0到100)
|
||||||
progressBar->setRange(0, 100);
|
progressBar->setRange(0, 100);
|
||||||
|
|
||||||
// 将进度条添加到状态栏
|
// 将进度条添加到状态栏
|
||||||
statusBar()->addWidget(progressBar);
|
statusBar()->addWidget(progressBar);
|
||||||
progressBar->setVisible(false); // 初始隐藏
|
progressBar->setVisible(false); // 初始隐藏
|
||||||
progressBar->setFixedWidth(300);
|
progressBar->setFixedWidth(300);
|
||||||
|
|
||||||
//this->initStyle();
|
//this->initStyle();
|
||||||
//添加信号槽
|
//添加信号槽
|
||||||
QObject::connect(ui->action_realy, &QAction::triggered, this, &MainWindow::onMenuAction_relay);
|
QObject::connect(ui->action_realy, &QAction::triggered, this, &MainWindow::onMenuAction_relay);
|
||||||
@ -69,7 +64,6 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
btnGroup_slot->addButton(ui->pushButton_slot13);
|
btnGroup_slot->addButton(ui->pushButton_slot13);
|
||||||
btnGroup_slot->addButton(ui->pushButton_slot14);
|
btnGroup_slot->addButton(ui->pushButton_slot14);
|
||||||
btnGroup_slot->addButton(ui->pushButton_slot15);
|
btnGroup_slot->addButton(ui->pushButton_slot15);
|
||||||
|
|
||||||
list_label.reserve(16);
|
list_label.reserve(16);
|
||||||
list_label.push_back(ui->label_18);
|
list_label.push_back(ui->label_18);
|
||||||
list_label.push_back(ui->label_1);
|
list_label.push_back(ui->label_1);
|
||||||
@ -87,51 +81,42 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
list_label.push_back(ui->label_13);
|
list_label.push_back(ui->label_13);
|
||||||
list_label.push_back(ui->label_14);
|
list_label.push_back(ui->label_14);
|
||||||
list_label.push_back(ui->label_15);
|
list_label.push_back(ui->label_15);
|
||||||
|
|
||||||
|
|
||||||
ui->pushButton_slot->setChecked(true);
|
ui->pushButton_slot->setChecked(true);
|
||||||
readJsonFile(QCoreApplication::applicationDirPath() + "\\config\\main.json");
|
readJsonFile(QCoreApplication::applicationDirPath() + "\\config\\main.json");
|
||||||
createMenu();
|
createMenu();
|
||||||
|
|
||||||
connect(btnGroup_slot, SIGNAL(buttonClicked(QAbstractButton *)), this, SLOT(OnButtonGroup(QAbstractButton *)));
|
connect(btnGroup_slot, SIGNAL(buttonClicked(QAbstractButton *)), this, SLOT(OnButtonGroup(QAbstractButton *)));
|
||||||
QSettings settingsread(QCoreApplication::applicationDirPath() + "\\config\\config.ini",QSettings::IniFormat);
|
QSettings settingsread(QCoreApplication::applicationDirPath() + "\\config\\config.ini", QSettings::IniFormat);
|
||||||
|
|
||||||
g_strServerIp = settingsread.value("Server/IP").toString();
|
g_strServerIp = settingsread.value("Server/IP").toString();
|
||||||
//connectServer();
|
//connectServer();
|
||||||
// 设置自定义日志处理函数
|
// 设置自定义日志处理函数
|
||||||
#ifndef QT_DEBUG
|
#ifndef QT_DEBUG
|
||||||
qInstallMessageHandler(messageHandler);
|
qInstallMessageHandler(messageHandler);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow() {
|
||||||
{
|
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
void MainWindow::onDisConnected()
|
|
||||||
{
|
void MainWindow::onDisConnected() {
|
||||||
statusBar()->showMessage("连接失败!正在重连……", 3000); // 显示3秒
|
statusBar()->showMessage("连接失败!正在重连……", 3000); // 显示3秒
|
||||||
}
|
}
|
||||||
void MainWindow::onConnected()
|
|
||||||
{
|
void MainWindow::onConnected() {
|
||||||
statusBar()->showMessage("连接成功!", 3000); // 显示3秒
|
statusBar()->showMessage("连接成功!", 3000); // 显示3秒
|
||||||
}
|
}
|
||||||
void MainWindow::connectServer()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
void MainWindow::connectServer() {
|
||||||
m_tcpClient = MyTcpClient::instance();
|
m_tcpClient = MyTcpClient::instance();
|
||||||
// 监听信号
|
// 监听信号
|
||||||
connect(m_tcpClient, SIGNAL(dataReceived(const QByteArray&)), this, SLOT(readData(const QByteArray&)));
|
connect(m_tcpClient, SIGNAL(dataReceived(const QByteArray &)), this, SLOT(readData(const QByteArray &)));
|
||||||
connect(m_tcpClient, SIGNAL(disconnected()), this, SLOT(onDisConnected()));
|
connect(m_tcpClient, SIGNAL(disconnected()), this, SLOT(onDisConnected()));
|
||||||
connect(m_tcpClient, SIGNAL(connected()), this, SLOT(onConnected()));
|
connect(m_tcpClient, SIGNAL(connected()), this, SLOT(onConnected()));
|
||||||
// 连接服务器
|
// 连接服务器
|
||||||
m_tcpClient->connectToServer(g_strServerIp, 10000);
|
m_tcpClient->connectToServer(g_strServerIp, 10000);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::initStyle()
|
void MainWindow::initStyle() {
|
||||||
{
|
|
||||||
//加载样式表
|
//加载样式表
|
||||||
QString qss;
|
QString qss;
|
||||||
QFile file(":/qss/soft.css");
|
QFile file(":/qss/soft.css");
|
||||||
@ -143,8 +128,8 @@ void MainWindow::initStyle()
|
|||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void MainWindow::readJsonFile(const QString &filePath)
|
|
||||||
{
|
void MainWindow::readJsonFile(const QString &filePath) {
|
||||||
// 创建文件对象
|
// 创建文件对象
|
||||||
QFile file(filePath);
|
QFile file(filePath);
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
@ -153,9 +138,7 @@ void MainWindow::readJsonFile(const QString &filePath)
|
|||||||
}
|
}
|
||||||
QString content = file.readAll();
|
QString content = file.readAll();
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
QByteArray jsonData = content.toUtf8();
|
QByteArray jsonData = content.toUtf8();
|
||||||
|
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
|
||||||
if (jsonDoc.isNull()) {
|
if (jsonDoc.isNull()) {
|
||||||
qDebug() << "Cannot parse JSON document";
|
qDebug() << "Cannot parse JSON document";
|
||||||
@ -175,56 +158,47 @@ void MainWindow::readJsonFile(const QString &filePath)
|
|||||||
slot_config.slot_type = obj["slot_type"].toString();
|
slot_config.slot_type = obj["slot_type"].toString();
|
||||||
slot_config.chan_display = obj["chan_display"].toString();
|
slot_config.chan_display = obj["chan_display"].toString();
|
||||||
slot_config.rack_type = obj["rack_type"].toString();
|
slot_config.rack_type = obj["rack_type"].toString();
|
||||||
map_slot_config.insert(slot_id,slot_config);
|
map_slot_config.insert(slot_id, slot_config);
|
||||||
slot_id ++;
|
slot_id ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void MainWindow::createMenu()
|
|
||||||
{
|
void MainWindow::createMenu() {
|
||||||
QList<QAbstractButton*> buttonList = btnGroup_slot->buttons();
|
QList<QAbstractButton *> buttonList = btnGroup_slot->buttons();
|
||||||
for (int i = 0; i < buttonList.count(); i++){
|
for (int i = 0; i < buttonList.count(); i++) {
|
||||||
buttonList[i]->setText(map_slot_config[i].chan_display);
|
buttonList[i]->setText(map_slot_config[i].chan_display);
|
||||||
createMenu(QString("%1").arg(i + 1), (QPushButton*)buttonList[i]);
|
createMenu(QString("%1").arg(i + 1), (QPushButton *)buttonList[i]);
|
||||||
map_slot_config[i].slot_btn = (QPushButton*)buttonList[i];
|
map_slot_config[i].slot_btn = (QPushButton *)buttonList[i];
|
||||||
map_slot_config[i].slot_label = list_label[i];
|
map_slot_config[i].slot_label = list_label[i];
|
||||||
// else
|
// else
|
||||||
// createMenuSet(QString("%1").arg(i + 1), (QPushButton*)buttonList[i]);
|
// createMenuSet(QString("%1").arg(i + 1), (QPushButton*)buttonList[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void MainWindow::createMenu(const QString& rootTitle, QPushButton* parent )
|
|
||||||
{
|
void MainWindow::createMenu(const QString &rootTitle, QPushButton *parent) {
|
||||||
// 创建主菜单
|
// 创建主菜单
|
||||||
QMenu *mainMenu = new QMenu(rootTitle, parent);
|
QMenu *mainMenu = new QMenu(rootTitle, parent);
|
||||||
|
|
||||||
// 创建第一层子菜单
|
// 创建第一层子菜单
|
||||||
QMenu *monitors = new QMenu("监视器", mainMenu);
|
QMenu *monitors = new QMenu("监视器", mainMenu);
|
||||||
QMenu *relays = new QMenu("/DOM810 继电器模块", mainMenu);
|
QMenu *relays = new QMenu("/DOM810 继电器模块", mainMenu);
|
||||||
QMenu *keyphasor = new QMenu("/KPM834 键相模块", mainMenu);
|
QMenu *keyphasor = new QMenu("/KPM834 键相模块", mainMenu);
|
||||||
|
|
||||||
// 创建第二层子菜单:/HAM824 振动板卡
|
// 创建第二层子菜单:/HAM824 振动板卡
|
||||||
QMenu *proximitor_menu = new QMenu("/HAM824 振动板卡", monitors);
|
QMenu *proximitor_menu = new QMenu("/HAM824 振动板卡", monitors);
|
||||||
QMenu *rpm_menu = new QMenu("/OPM844 转速板卡", monitors);
|
QMenu *rpm_menu = new QMenu("/OPM844 转速板卡", monitors);
|
||||||
|
|
||||||
// 创建第三层子菜单:/HAM824 单板卡、三冗余板卡
|
// 创建第三层子菜单:/HAM824 单板卡、三冗余板卡
|
||||||
QAction *proximitor_1 = proximitor_menu->addAction("/HAM824 单板卡");
|
QAction *proximitor_1 = proximitor_menu->addAction("/HAM824 单板卡");
|
||||||
QAction *proximitor_2 = proximitor_menu->addAction("/HAM824 三冗余板卡");
|
QAction *proximitor_2 = proximitor_menu->addAction("/HAM824 三冗余板卡");
|
||||||
|
|
||||||
QAction *rpm_1 = rpm_menu->addAction("/OPM844 单板卡");
|
QAction *rpm_1 = rpm_menu->addAction("/OPM844 单板卡");
|
||||||
|
|
||||||
|
|
||||||
// 创建第二层子菜单:/KPM834 键相模块
|
// 创建第二层子菜单:/KPM834 键相模块
|
||||||
QAction *keyphasor_1 = keyphasor->addAction("/KPM834 单板卡");
|
QAction *keyphasor_1 = keyphasor->addAction("/KPM834 单板卡");
|
||||||
QAction *keyphasor_2 = keyphasor->addAction("/KPM834 两板卡");
|
QAction *keyphasor_2 = keyphasor->addAction("/KPM834 两板卡");
|
||||||
|
|
||||||
// 创建第二层子菜单:/DOM810 继电器模块
|
// 创建第二层子菜单:/DOM810 继电器模块
|
||||||
QAction *relays_1 = relays->addAction("/DOM810 单板卡");
|
QAction *relays_1 = relays->addAction("/DOM810 单板卡");
|
||||||
QAction *relays_2 = relays->addAction("/DOM810 三冗余板卡");
|
QAction *relays_2 = relays->addAction("/DOM810 三冗余板卡");
|
||||||
|
|
||||||
// 将子菜单加入上一级菜单
|
// 将子菜单加入上一级菜单
|
||||||
monitors->addMenu(proximitor_menu); // 将第二层加入第一层
|
monitors->addMenu(proximitor_menu); // 将第二层加入第一层
|
||||||
monitors->addMenu(rpm_menu); // 第二层另一个子菜单
|
monitors->addMenu(rpm_menu); // 第二层另一个子菜单
|
||||||
|
|
||||||
mainMenu->addMenu(monitors); // 将第一层加入主菜单
|
mainMenu->addMenu(monitors); // 将第一层加入主菜单
|
||||||
mainMenu->addMenu(relays);
|
mainMenu->addMenu(relays);
|
||||||
mainMenu->addMenu(keyphasor);
|
mainMenu->addMenu(keyphasor);
|
||||||
@ -234,100 +208,89 @@ void MainWindow::createMenu(const QString& rootTitle, QPushButton* parent )
|
|||||||
// 绑定 **鼠标事件过滤器**,确保只响应右键
|
// 绑定 **鼠标事件过滤器**,确保只响应右键
|
||||||
// 设置右键菜单策略
|
// 设置右键菜单策略
|
||||||
parent->setContextMenuPolicy(Qt::CustomContextMenu);
|
parent->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
|
||||||
// 使用 `customContextMenuRequested` 事件,确保只有右键点击时弹出菜单
|
// 使用 `customContextMenuRequested` 事件,确保只有右键点击时弹出菜单
|
||||||
connect(parent, &QPushButton::customContextMenuRequested, this, [=](const QPoint &pos)
|
connect(parent, &QPushButton::customContextMenuRequested, this, [ = ](const QPoint &pos) {
|
||||||
{
|
|
||||||
qDebug() << "右键菜单触发1:" << pos;
|
qDebug() << "右键菜单触发1:" << pos;
|
||||||
|
|
||||||
// 弹出菜单并捕获右键点击
|
// 弹出菜单并捕获右键点击
|
||||||
mainMenu->exec(QCursor::pos());
|
mainMenu->exec(QCursor::pos());
|
||||||
|
|
||||||
mainMenu->close();
|
mainMenu->close();
|
||||||
});
|
});
|
||||||
// 连接所有菜单项
|
// 连接所有菜单项
|
||||||
QObject::connect(proximitor_1, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(proximitor_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
QObject::connect(proximitor_2, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(proximitor_2, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
QObject::connect(rpm_1, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(rpm_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
QObject::connect(relays_1, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(relays_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
QObject::connect(relays_2, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(relays_2, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
QObject::connect(keyphasor_1, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(keyphasor_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
QObject::connect(keyphasor_2, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(keyphasor_2, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
QObject::connect(reset, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(reset, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
QObject::connect(upgrade, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(upgrade, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
QObject::connect(version, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
QObject::connect(version, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::createMenuSet(const QString& rootTitle, QPushButton* parent )
|
void MainWindow::createMenuSet(const QString &rootTitle, QPushButton *parent) {
|
||||||
{
|
|
||||||
// 创建主菜单
|
// 创建主菜单
|
||||||
qDebug() << "createMenu" << parent->objectName() ;
|
qDebug() << "createMenu" << parent->objectName() ;
|
||||||
QMenu *mainMenu = new QMenu(rootTitle, parent);
|
QMenu *mainMenu = new QMenu(rootTitle, parent);
|
||||||
|
|
||||||
QAction *option = mainMenu->addAction("通道配置…");
|
QAction *option = mainMenu->addAction("通道配置…");
|
||||||
QAction *set_points = mainMenu->addAction("触发配置…");
|
QAction *set_points = mainMenu->addAction("触发配置…");
|
||||||
QAction *point_names = mainMenu->addAction("测点名称");
|
QAction *point_names = mainMenu->addAction("测点名称");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 清除菜单中所有动作的属性
|
// 清除菜单中所有动作的属性
|
||||||
void MainWindow::clearMenuProperties(QMenu* menu)
|
void MainWindow::clearMenuProperties(QMenu *menu) {
|
||||||
{
|
|
||||||
// 遍历菜单的所有动作
|
// 遍历菜单的所有动作
|
||||||
if (!menu) {
|
if (!menu) {
|
||||||
qWarning() << "菜单为空,无法清除属性!";
|
qWarning() << "菜单为空,无法清除属性!";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 遍历菜单的所有动作
|
||||||
// 遍历菜单的所有动作
|
for (QAction *action : menu->actions()) {
|
||||||
for (QAction* action : menu->actions()) {
|
if (!action) {
|
||||||
if (!action) continue;
|
continue;
|
||||||
|
}
|
||||||
// 检查是否有子菜单
|
// 检查是否有子菜单
|
||||||
if (QMenu* subMenu = action->menu()) {
|
if (QMenu *subMenu = action->menu()) {
|
||||||
clearMenuProperties(subMenu); // 递归处理子菜单
|
clearMenuProperties(subMenu); // 递归处理子菜单
|
||||||
}
|
}
|
||||||
|
// 清除动作的属性
|
||||||
// 清除动作的属性
|
action->setProperty("customProperty", QVariant());
|
||||||
action->setProperty("customProperty", QVariant());
|
qDebug() << "清除了属性,动作:" << action->text();
|
||||||
qDebug() << "清除了属性,动作:" << action->text();
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuActionTriggered()
|
void MainWindow::onMenuActionTriggered() {
|
||||||
{
|
|
||||||
qDebug() << "onMenuActionTriggered()" ;
|
qDebug() << "onMenuActionTriggered()" ;
|
||||||
QAction *action = qobject_cast<QAction*>(sender());
|
QAction *action = qobject_cast<QAction *>(sender());
|
||||||
if (action) {
|
if (action) {
|
||||||
// 获取触发动作的父菜单
|
// 获取触发动作的父菜单
|
||||||
QMenu *menu = qobject_cast<QMenu*>(action->parent());
|
QMenu *menu = qobject_cast<QMenu *>(action->parent());
|
||||||
// 遍历所有父菜单,直到找到按钮
|
// 遍历所有父菜单,直到找到按钮
|
||||||
while (menu) {
|
while (menu) {
|
||||||
QPushButton *button = qobject_cast<QPushButton*>(menu->parent());
|
QPushButton *button = qobject_cast<QPushButton *>(menu->parent());
|
||||||
if (button) {
|
if (button) {
|
||||||
qDebug() << "子菜单项被点击,所属按钮:" << button->objectName() << action->text();
|
qDebug() << "子菜单项被点击,所属按钮:" << button->objectName() << action->text();
|
||||||
QString slot_type = action->text().mid(1,6);
|
QString slot_type = action->text().mid(1, 6);
|
||||||
QString rack_type = action->text().right(action->text().length()-8);
|
QString rack_type = action->text().right(action->text().length() - 8);
|
||||||
int button_id = button->objectName().right(button->objectName().length()-15).toInt();
|
int button_id = button->objectName().right(button->objectName().length() - 15).toInt();
|
||||||
qDebug() << slot_type << rack_type << button_id << map_slot_config[button_id + 1].slot_type << map_slot_config[button_id + 2].slot_type ;
|
qDebug() << slot_type << rack_type << button_id << map_slot_config[button_id + 1].slot_type << map_slot_config[button_id + 2].slot_type ;
|
||||||
map_slot_config[button_id].slot_label->setStyleSheet("QLabel { color :#2980b9; font: bold 16px}");
|
map_slot_config[button_id].slot_label->setStyleSheet("QLabel { color :#2980b9; font: bold 16px}");
|
||||||
QString chan_display = "";
|
QString chan_display = "";
|
||||||
if(slot_type == "DOM810")
|
if (slot_type == "DOM810") {
|
||||||
chan_display = "继电器";
|
chan_display = "继电器";
|
||||||
else if(slot_type == "KPM834")
|
} else if (slot_type == "KPM834") {
|
||||||
chan_display = "键相";
|
chan_display = "键相";
|
||||||
else if(slot_type == "HAM824")
|
} else if (slot_type == "HAM824") {
|
||||||
chan_display = "振动";
|
chan_display = "振动";
|
||||||
else if(slot_type == "OPM844")
|
} else if (slot_type == "OPM844") {
|
||||||
chan_display = "转速";
|
chan_display = "转速";
|
||||||
if(rack_type == "三冗余板卡" && (map_slot_config[button_id].slot_type != "" || map_slot_config[button_id + 1].slot_type != "" \
|
}
|
||||||
|| map_slot_config[button_id + 2].slot_type != "")){
|
if (rack_type == "三冗余板卡" && (map_slot_config[button_id].slot_type != "" || map_slot_config[button_id + 1].slot_type != "" \
|
||||||
|
|| map_slot_config[button_id + 2].slot_type != "")) {
|
||||||
QMessageBox::information(this, QStringLiteral("提示"), "不要重叠三冗余板卡配置,请在创建新配置之前移除现有的配置!");
|
QMessageBox::information(this, QStringLiteral("提示"), "不要重叠三冗余板卡配置,请在创建新配置之前移除现有的配置!");
|
||||||
return;
|
return;
|
||||||
}else if(rack_type == "三冗余板卡" && map_slot_config[button_id + 1].slot_type == "" \
|
} else if (rack_type == "三冗余板卡" && map_slot_config[button_id + 1].slot_type == "" \
|
||||||
&& map_slot_config[button_id + 2].slot_type == ""){
|
&& map_slot_config[button_id + 2].slot_type == "") {
|
||||||
|
|
||||||
|
|
||||||
map_slot_config[button_id].slot_type = slot_type;
|
map_slot_config[button_id].slot_type = slot_type;
|
||||||
map_slot_config[button_id].rack_type = "TMR1";
|
map_slot_config[button_id].rack_type = "TMR1";
|
||||||
map_slot_config[button_id].slot_btn->setText(chan_display);
|
map_slot_config[button_id].slot_btn->setText(chan_display);
|
||||||
@ -341,10 +304,10 @@ void MainWindow::onMenuActionTriggered()
|
|||||||
map_slot_config[button_id + 2].slot_btn->setText(chan_display);
|
map_slot_config[button_id + 2].slot_btn->setText(chan_display);
|
||||||
map_slot_config[button_id + 2].chan_display = chan_display;
|
map_slot_config[button_id + 2].chan_display = chan_display;
|
||||||
}
|
}
|
||||||
if(rack_type == "两板卡" && (map_slot_config[button_id].slot_type != "" || map_slot_config[button_id + 1].slot_type != "" )){
|
if (rack_type == "两板卡" && (map_slot_config[button_id].slot_type != "" || map_slot_config[button_id + 1].slot_type != "")) {
|
||||||
QMessageBox::information(this, QStringLiteral("提示"), "不要重叠两板卡配置,请在创建新配置之前移除现有的配置!");
|
QMessageBox::information(this, QStringLiteral("提示"), "不要重叠两板卡配置,请在创建新配置之前移除现有的配置!");
|
||||||
return;
|
return;
|
||||||
}else if(rack_type == "两板卡" && map_slot_config[button_id + 1].slot_type == ""){
|
} else if (rack_type == "两板卡" && map_slot_config[button_id + 1].slot_type == "") {
|
||||||
map_slot_config[button_id].slot_type = slot_type;
|
map_slot_config[button_id].slot_type = slot_type;
|
||||||
map_slot_config[button_id].rack_type = "Double1";
|
map_slot_config[button_id].rack_type = "Double1";
|
||||||
map_slot_config[button_id].slot_btn->setText(chan_display);
|
map_slot_config[button_id].slot_btn->setText(chan_display);
|
||||||
@ -354,18 +317,17 @@ void MainWindow::onMenuActionTriggered()
|
|||||||
map_slot_config[button_id + 1].slot_btn->setText(chan_display);
|
map_slot_config[button_id + 1].slot_btn->setText(chan_display);
|
||||||
map_slot_config[button_id + 1].chan_display = chan_display;
|
map_slot_config[button_id + 1].chan_display = chan_display;
|
||||||
}
|
}
|
||||||
if(rack_type == "单板卡" && map_slot_config[button_id].slot_type != ""){
|
if (rack_type == "单板卡" && map_slot_config[button_id].slot_type != "") {
|
||||||
QMessageBox::information(this, QStringLiteral("提示"), "不要重叠单板卡配置,请在创建新配置之前移除现有的配置!");
|
QMessageBox::information(this, QStringLiteral("提示"), "不要重叠单板卡配置,请在创建新配置之前移除现有的配置!");
|
||||||
return;
|
return;
|
||||||
}else if(rack_type == "单板卡" && map_slot_config[button_id].slot_type == "") {
|
} else if (rack_type == "单板卡" && map_slot_config[button_id].slot_type == "") {
|
||||||
map_slot_config[button_id].slot_type = slot_type;
|
map_slot_config[button_id].slot_type = slot_type;
|
||||||
map_slot_config[button_id].rack_type = "Single";
|
map_slot_config[button_id].rack_type = "Single";
|
||||||
map_slot_config[button_id].chan_display = chan_display;
|
map_slot_config[button_id].chan_display = chan_display;
|
||||||
button->setText(chan_display);
|
button->setText(chan_display);
|
||||||
}
|
}
|
||||||
|
if (action->text() == "重置模块") {
|
||||||
if(action->text() == "重置模块"){
|
if (map_slot_config[button_id].rack_type == "TMR1") {
|
||||||
if(map_slot_config[button_id].rack_type == "TMR1"){
|
|
||||||
map_slot_config[button_id].slot_type = "";
|
map_slot_config[button_id].slot_type = "";
|
||||||
map_slot_config[button_id].rack_type = "0";
|
map_slot_config[button_id].rack_type = "0";
|
||||||
map_slot_config[button_id].slot_btn->setText("");
|
map_slot_config[button_id].slot_btn->setText("");
|
||||||
@ -378,7 +340,7 @@ void MainWindow::onMenuActionTriggered()
|
|||||||
map_slot_config[button_id + 2].rack_type = "0";
|
map_slot_config[button_id + 2].rack_type = "0";
|
||||||
map_slot_config[button_id + 2].slot_btn->setText("");
|
map_slot_config[button_id + 2].slot_btn->setText("");
|
||||||
map_slot_config[button_id + 2].chan_display = "";
|
map_slot_config[button_id + 2].chan_display = "";
|
||||||
}else if(map_slot_config[button_id].rack_type == "TMR2"){
|
} else if (map_slot_config[button_id].rack_type == "TMR2") {
|
||||||
map_slot_config[button_id - 1].slot_type = "";
|
map_slot_config[button_id - 1].slot_type = "";
|
||||||
map_slot_config[button_id - 1].rack_type = "0";
|
map_slot_config[button_id - 1].rack_type = "0";
|
||||||
map_slot_config[button_id - 1].slot_btn->setText("");
|
map_slot_config[button_id - 1].slot_btn->setText("");
|
||||||
@ -391,7 +353,7 @@ void MainWindow::onMenuActionTriggered()
|
|||||||
map_slot_config[button_id + 1].rack_type = "0";
|
map_slot_config[button_id + 1].rack_type = "0";
|
||||||
map_slot_config[button_id + 1].slot_btn->setText("");
|
map_slot_config[button_id + 1].slot_btn->setText("");
|
||||||
map_slot_config[button_id + 1].chan_display = "";
|
map_slot_config[button_id + 1].chan_display = "";
|
||||||
}else if(map_slot_config[button_id].rack_type == "TMR3"){
|
} else if (map_slot_config[button_id].rack_type == "TMR3") {
|
||||||
map_slot_config[button_id - 2].slot_type = "";
|
map_slot_config[button_id - 2].slot_type = "";
|
||||||
map_slot_config[button_id - 2].rack_type = "0";
|
map_slot_config[button_id - 2].rack_type = "0";
|
||||||
map_slot_config[button_id - 2].slot_btn->setText("");
|
map_slot_config[button_id - 2].slot_btn->setText("");
|
||||||
@ -405,8 +367,7 @@ void MainWindow::onMenuActionTriggered()
|
|||||||
map_slot_config[button_id].slot_btn->setText("");
|
map_slot_config[button_id].slot_btn->setText("");
|
||||||
map_slot_config[button_id].chan_display = "";
|
map_slot_config[button_id].chan_display = "";
|
||||||
}
|
}
|
||||||
|
if (map_slot_config[button_id].rack_type == "Double1") {
|
||||||
if(map_slot_config[button_id].rack_type == "Double1"){
|
|
||||||
map_slot_config[button_id].slot_type = "";
|
map_slot_config[button_id].slot_type = "";
|
||||||
map_slot_config[button_id].rack_type = "0";
|
map_slot_config[button_id].rack_type = "0";
|
||||||
map_slot_config[button_id].slot_btn->setText("");
|
map_slot_config[button_id].slot_btn->setText("");
|
||||||
@ -415,8 +376,7 @@ void MainWindow::onMenuActionTriggered()
|
|||||||
map_slot_config[button_id + 1].rack_type = "0";
|
map_slot_config[button_id + 1].rack_type = "0";
|
||||||
map_slot_config[button_id + 1].slot_btn->setText("");
|
map_slot_config[button_id + 1].slot_btn->setText("");
|
||||||
map_slot_config[button_id + 1].chan_display = "";
|
map_slot_config[button_id + 1].chan_display = "";
|
||||||
|
} else if (map_slot_config[button_id].rack_type == "Double2") {
|
||||||
}else if(map_slot_config[button_id].rack_type == "Double2"){
|
|
||||||
map_slot_config[button_id - 1].slot_type = "";
|
map_slot_config[button_id - 1].slot_type = "";
|
||||||
map_slot_config[button_id - 1].rack_type = "0";
|
map_slot_config[button_id - 1].rack_type = "0";
|
||||||
map_slot_config[button_id - 1].slot_btn->setText("");
|
map_slot_config[button_id - 1].slot_btn->setText("");
|
||||||
@ -426,55 +386,51 @@ void MainWindow::onMenuActionTriggered()
|
|||||||
map_slot_config[button_id].slot_btn->setText("");
|
map_slot_config[button_id].slot_btn->setText("");
|
||||||
map_slot_config[button_id].chan_display = "";
|
map_slot_config[button_id].chan_display = "";
|
||||||
}
|
}
|
||||||
if(map_slot_config[button_id].rack_type == "Single"){
|
if (map_slot_config[button_id].rack_type == "Single") {
|
||||||
map_slot_config[button_id].slot_type = "";
|
map_slot_config[button_id].slot_type = "";
|
||||||
map_slot_config[button_id].rack_type = "0";
|
map_slot_config[button_id].rack_type = "0";
|
||||||
map_slot_config[button_id].slot_btn->setText("");
|
map_slot_config[button_id].slot_btn->setText("");
|
||||||
map_slot_config[button_id].chan_display = "";
|
map_slot_config[button_id].chan_display = "";
|
||||||
}
|
}
|
||||||
|
} else if (action->text() == "升级固件") {
|
||||||
}else if(action->text() == "升级固件"){
|
|
||||||
sendUpgradePackage(button_id);
|
sendUpgradePackage(button_id);
|
||||||
}else if(action->text() == "查看版本"){
|
} else if (action->text() == "查看版本") {
|
||||||
getVersion(button_id);
|
getVersion(button_id);
|
||||||
}
|
}
|
||||||
break; // 找到按钮后,跳出循环
|
break; // 找到按钮后,跳出循环
|
||||||
}
|
}
|
||||||
// 如果没有找到按钮,继续向上查找
|
// 如果没有找到按钮,继续向上查找
|
||||||
menu = qobject_cast<QMenu*>(menu->parent());
|
menu = qobject_cast<QMenu *>(menu->parent());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::OnButtonGroup(QAbstractButton * slot_btn)
|
void MainWindow::OnButtonGroup(QAbstractButton *slot_btn) {
|
||||||
{
|
if (slot_btn != NULL && ui->pushButton_chan->isChecked()) {
|
||||||
if(slot_btn != NULL && ui->pushButton_chan->isChecked())
|
|
||||||
{
|
|
||||||
QString object_name = slot_btn->objectName();
|
QString object_name = slot_btn->objectName();
|
||||||
qDebug() << object_name ;
|
qDebug() << object_name ;
|
||||||
int button_id = object_name.right(object_name.length()-15).toInt();
|
int button_id = object_name.right(object_name.length() - 15).toInt();
|
||||||
SlotConfig slot_config = map_slot_config[button_id];
|
SlotConfig slot_config = map_slot_config[button_id];
|
||||||
map_slot_config[button_id].slot_label->setStyleSheet("QLabel { color :#2980b9; font: bold 16px}");
|
map_slot_config[button_id].slot_label->setStyleSheet("QLabel { color :#2980b9; font: bold 16px}");
|
||||||
if (slot_config.slot_type == "KPM834"){// 键相模块
|
if (slot_config.slot_type == "KPM834") { // 键相模块
|
||||||
KeyPhase *key_phase = new KeyPhase(button_id);
|
KeyPhase *key_phase = new KeyPhase(button_id);
|
||||||
key_phase->setWindowModality(Qt::ApplicationModal);
|
key_phase->setWindowModality(Qt::ApplicationModal);
|
||||||
key_phase->show();
|
key_phase->show();
|
||||||
}else if (slot_config.slot_type == "DOM810"){// 继电器模块
|
} else if (slot_config.slot_type == "DOM810") { // 继电器模块
|
||||||
SingleRelay *single_relay = new SingleRelay();
|
SingleRelay *single_relay = new SingleRelay();
|
||||||
single_relay->setWindowModality(Qt::ApplicationModal);
|
single_relay->setWindowModality(Qt::ApplicationModal);
|
||||||
single_relay->show();
|
single_relay->show();
|
||||||
}else if (slot_config.slot_type == "HAM824"){// 振动模块
|
} else if (slot_config.slot_type == "HAM824") { // 振动模块
|
||||||
Seismic_monitor *seismic_monitor = new Seismic_monitor(button_id);
|
Seismic_monitor *seismic_monitor = new Seismic_monitor(button_id);
|
||||||
seismic_monitor->setWindowModality(Qt::ApplicationModal);
|
seismic_monitor->setWindowModality(Qt::ApplicationModal);
|
||||||
seismic_monitor->show();
|
seismic_monitor->show();
|
||||||
}else if (slot_config.slot_type == "OPM844"){// 转速模块
|
} else if (slot_config.slot_type == "OPM844") { // 转速模块
|
||||||
Tachometer *tachometer = new Tachometer(button_id);
|
Tachometer *tachometer = new Tachometer(button_id);
|
||||||
tachometer->setWindowModality(Qt::ApplicationModal);
|
tachometer->setWindowModality(Qt::ApplicationModal);
|
||||||
tachometer->show();
|
tachometer->show();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(slot_btn != NULL && ui->pushButton_alarm->isChecked()){
|
if (slot_btn != NULL && ui->pushButton_alarm->isChecked()) {
|
||||||
QString object_name = slot_btn->objectName();
|
QString object_name = slot_btn->objectName();
|
||||||
qDebug() << object_name ;
|
qDebug() << object_name ;
|
||||||
Setpoint *setpoint = new Setpoint();
|
Setpoint *setpoint = new Setpoint();
|
||||||
@ -483,66 +439,69 @@ void MainWindow::OnButtonGroup(QAbstractButton * slot_btn)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_pushButton_slot_clicked()
|
void MainWindow::on_pushButton_slot_clicked() {
|
||||||
{
|
if (ui->pushButton_chan->isChecked()) {
|
||||||
if(ui->pushButton_chan->isChecked())
|
|
||||||
ui->pushButton_chan->setChecked(false);
|
ui->pushButton_chan->setChecked(false);
|
||||||
if(ui->pushButton_alarm->isChecked())
|
}
|
||||||
|
if (ui->pushButton_alarm->isChecked()) {
|
||||||
ui->pushButton_alarm->setChecked(false);
|
ui->pushButton_alarm->setChecked(false);
|
||||||
if(ui->pushButton_point_name->isChecked())
|
}
|
||||||
|
if (ui->pushButton_point_name->isChecked()) {
|
||||||
ui->pushButton_point_name->setChecked(false);
|
ui->pushButton_point_name->setChecked(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_pushButton_chan_clicked() {
|
||||||
void MainWindow::on_pushButton_chan_clicked()
|
if (ui->pushButton_slot->isChecked()) {
|
||||||
{
|
|
||||||
if(ui->pushButton_slot->isChecked())
|
|
||||||
ui->pushButton_slot->setChecked(false);
|
ui->pushButton_slot->setChecked(false);
|
||||||
if(ui->pushButton_alarm->isChecked())
|
}
|
||||||
|
if (ui->pushButton_alarm->isChecked()) {
|
||||||
ui->pushButton_alarm->setChecked(false);
|
ui->pushButton_alarm->setChecked(false);
|
||||||
if(ui->pushButton_point_name->isChecked())
|
}
|
||||||
|
if (ui->pushButton_point_name->isChecked()) {
|
||||||
ui->pushButton_point_name->setChecked(false);
|
ui->pushButton_point_name->setChecked(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_pushButton_alarm_clicked() {
|
||||||
void MainWindow::on_pushButton_alarm_clicked()
|
if (ui->pushButton_slot->isChecked()) {
|
||||||
{
|
|
||||||
if(ui->pushButton_slot->isChecked())
|
|
||||||
ui->pushButton_slot->setChecked(false);
|
ui->pushButton_slot->setChecked(false);
|
||||||
if(ui->pushButton_chan->isChecked())
|
}
|
||||||
|
if (ui->pushButton_chan->isChecked()) {
|
||||||
ui->pushButton_chan->setChecked(false);
|
ui->pushButton_chan->setChecked(false);
|
||||||
if(ui->pushButton_point_name->isChecked())
|
}
|
||||||
|
if (ui->pushButton_point_name->isChecked()) {
|
||||||
ui->pushButton_point_name->setChecked(false);
|
ui->pushButton_point_name->setChecked(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_pushButton_point_name_clicked() {
|
||||||
void MainWindow::on_pushButton_point_name_clicked()
|
if (ui->pushButton_slot->isChecked()) {
|
||||||
{
|
|
||||||
if(ui->pushButton_slot->isChecked())
|
|
||||||
ui->pushButton_slot->setChecked(false);
|
ui->pushButton_slot->setChecked(false);
|
||||||
if(ui->pushButton_chan->isChecked())
|
}
|
||||||
|
if (ui->pushButton_chan->isChecked()) {
|
||||||
ui->pushButton_chan->setChecked(false);
|
ui->pushButton_chan->setChecked(false);
|
||||||
if(ui->pushButton_alarm->isChecked())
|
}
|
||||||
|
if (ui->pushButton_alarm->isChecked()) {
|
||||||
ui->pushButton_alarm->setChecked(false);
|
ui->pushButton_alarm->setChecked(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuAction_relay()
|
void MainWindow::onMenuAction_relay() {
|
||||||
{
|
|
||||||
qDebug() << " onMenuAction_relay " ;
|
qDebug() << " onMenuAction_relay " ;
|
||||||
RelaySetting *relay_setting = new RelaySetting();
|
RelaySetting *relay_setting = new RelaySetting();
|
||||||
relay_setting->setWindowModality(Qt::ApplicationModal);
|
relay_setting->setWindowModality(Qt::ApplicationModal);
|
||||||
relay_setting->show();
|
relay_setting->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_pushButton_save_clicked()
|
void MainWindow::on_pushButton_save_clicked() {
|
||||||
{
|
|
||||||
QJsonObject itemObj;
|
QJsonObject itemObj;
|
||||||
QJsonArray slotArray;
|
QJsonArray slotArray;
|
||||||
for(int i = 0; i < map_slot_config.size();i++){
|
for (int i = 0; i < map_slot_config.size(); i++) {
|
||||||
itemObj["slot"] = map_slot_config[i+1].slot;
|
itemObj["slot"] = map_slot_config[i + 1].slot;
|
||||||
itemObj["slot_type"] = map_slot_config[i+1].slot_type;
|
itemObj["slot_type"] = map_slot_config[i + 1].slot_type;
|
||||||
itemObj["chan_display"] = map_slot_config[i+1].chan_display;
|
itemObj["chan_display"] = map_slot_config[i + 1].chan_display;
|
||||||
itemObj["rack_type"] = map_slot_config[i+1].rack_type;
|
itemObj["rack_type"] = map_slot_config[i + 1].rack_type;
|
||||||
slotArray.append(itemObj);
|
slotArray.append(itemObj);
|
||||||
}
|
}
|
||||||
QJsonDocument jsonDoc;
|
QJsonDocument jsonDoc;
|
||||||
@ -553,46 +512,43 @@ void MainWindow::on_pushButton_save_clicked()
|
|||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_pushButton_open_clicked() {
|
||||||
void MainWindow::on_pushButton_open_clicked()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
uint8_t calculate_crc(uint8_t c,const QByteArray &data) {
|
|
||||||
|
uint8_t calculate_crc(uint8_t c, const QByteArray &data) {
|
||||||
uint8_t crc = c;
|
uint8_t crc = c;
|
||||||
for (int i = 0; i < data.size(); ++i) {
|
for (int i = 0; i < data.size(); ++i) {
|
||||||
crc += static_cast<uint8_t>(data[i]); // 累加每个字节
|
crc += static_cast<uint8_t>(data[i]); // 累加每个字节
|
||||||
}
|
}
|
||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t myHtonl(uint32_t value) {
|
uint32_t myHtonl(uint32_t value) {
|
||||||
return ((value >> 24) & 0x000000FF) | // 提取最高的8位
|
return ((value >> 24) & 0x000000FF) | // 提取最高的8位
|
||||||
((value >> 8) & 0x0000FF00) | // 提取中间的8位
|
((value >> 8) & 0x0000FF00) | // 提取中间的8位
|
||||||
((value << 8) & 0x00FF0000) | // 提取次高的8位
|
((value << 8) & 0x00FF0000) | // 提取次高的8位
|
||||||
((value << 24) & 0xFF000000); // 提取最低的8位
|
((value << 24) & 0xFF000000); // 提取最低的8位
|
||||||
}
|
}
|
||||||
void MainWindow::sendUpgradePackage(int slot)
|
|
||||||
{
|
void MainWindow::sendUpgradePackage(int slot) {
|
||||||
QString filepath = QFileDialog::getOpenFileName(this, tr("选择文件"), tr(""), tr("*"));
|
QString filepath = QFileDialog::getOpenFileName(this, tr("选择文件"), tr(""), tr("*"));
|
||||||
qDebug() << filepath << slot ;
|
qDebug() << filepath << slot ;
|
||||||
QFileInfo fileinfo;
|
QFileInfo fileinfo;
|
||||||
fileinfo = QFileInfo(filepath);
|
fileinfo = QFileInfo(filepath);
|
||||||
QString file_suffix = fileinfo.suffix();
|
QString file_suffix = fileinfo.suffix();
|
||||||
QString FileName = fileinfo.fileName();
|
QString FileName = fileinfo.fileName();
|
||||||
if(FileName.isEmpty())
|
if (FileName.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
QFile file(filepath);
|
QFile file(filepath);
|
||||||
if (!file.open(QIODevice::ReadOnly)) {
|
if (!file.open(QIODevice::ReadOnly)) {
|
||||||
qWarning() << "Failed to open update file.";
|
qWarning() << "Failed to open update file.";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 读取文件内容
|
// 读取文件内容
|
||||||
QByteArray fileData = file.readAll();
|
QByteArray fileData = file.readAll();
|
||||||
int fileSize = fileData.size();
|
int fileSize = fileData.size();
|
||||||
if(fileSize > 10 * 1024 * 1024)
|
if (fileSize > 10 * 1024 * 1024) {
|
||||||
{
|
|
||||||
QMessageBox::information(this, QStringLiteral("提示"), "文件大小超过10M,请重新选择!");
|
QMessageBox::information(this, QStringLiteral("提示"), "文件大小超过10M,请重新选择!");
|
||||||
file.close();
|
file.close();
|
||||||
return;
|
return;
|
||||||
@ -605,39 +561,34 @@ void MainWindow::sendUpgradePackage(int slot)
|
|||||||
}
|
}
|
||||||
qDebug() << "fileSize" << fileSize ;
|
qDebug() << "fileSize" << fileSize ;
|
||||||
// 创建 PackageHead 结构体
|
// 创建 PackageHead 结构体
|
||||||
PackageHead header = { {0xAA, 0x55, 0xAA}, 3, fileSize,0,{} };
|
PackageHead header = { {0xAA, 0x55, 0xAA}, 3, fileSize, 0, {} };
|
||||||
// 计算文件的 CRC 校验和
|
// 计算文件的 CRC 校验和
|
||||||
|
|
||||||
qDebug() << "filheader.slot" << slot ;
|
qDebug() << "filheader.slot" << slot ;
|
||||||
UpgradeCardReq upgrade_car_req;
|
UpgradeCardReq upgrade_car_req;
|
||||||
if(slot == 0)
|
if (slot == 0) {
|
||||||
upgrade_car_req.card_id = 0xFF;
|
upgrade_car_req.card_id = 0xFF;
|
||||||
else
|
} else {
|
||||||
upgrade_car_req.card_id = slot & 0xFF;
|
upgrade_car_req.card_id = slot & 0xFF;
|
||||||
|
}
|
||||||
header.crc = calculate_crc(upgrade_car_req.card_id,fileData);
|
header.crc = calculate_crc(upgrade_car_req.card_id, fileData);
|
||||||
header.len = fileSize + sizeof(UpgradeCardReq);
|
header.len = fileSize + sizeof(UpgradeCardReq);
|
||||||
qDebug() << "filheader.crc" << header.crc << "card_id" << upgrade_car_req.card_id << "header len" << header.len;
|
qDebug() << "filheader.crc" << header.crc << "card_id" << upgrade_car_req.card_id << "header len" << header.len;
|
||||||
|
|
||||||
char *send_buf = NULL;
|
char *send_buf = NULL;
|
||||||
send_buf = (char *)malloc(sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1);
|
send_buf = (char *)malloc(sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1);
|
||||||
memset(send_buf,0,sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1);
|
memset(send_buf, 0, sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1);
|
||||||
memcpy(send_buf, &header, sizeof(PackageHead));
|
memcpy(send_buf, &header, sizeof(PackageHead));
|
||||||
memcpy(send_buf + sizeof(PackageHead), &upgrade_car_req, sizeof(UpgradeCardReq));
|
memcpy(send_buf + sizeof(PackageHead), &upgrade_car_req, sizeof(UpgradeCardReq));
|
||||||
memcpy(send_buf + sizeof(PackageHead) + sizeof(UpgradeCardReq), fileData.data(), fileData.size());
|
memcpy(send_buf + sizeof(PackageHead) + sizeof(UpgradeCardReq), fileData.data(), fileData.size());
|
||||||
int length = sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size();
|
int length = sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size();
|
||||||
|
|
||||||
const int MAX_CHUNK_SIZE = 50 * 1024; // 64 KB
|
const int MAX_CHUNK_SIZE = 50 * 1024; // 64 KB
|
||||||
qint64 bytesSent = 0;
|
qint64 bytesSent = 0;
|
||||||
qint64 totalBytes = length;
|
qint64 totalBytes = length;
|
||||||
qDebug() << "totalBytes" << totalBytes ;
|
qDebug() << "totalBytes" << totalBytes ;
|
||||||
|
|
||||||
while (bytesSent < totalBytes) {
|
while (bytesSent < totalBytes) {
|
||||||
qint64 chunkSize = 0;
|
qint64 chunkSize = 0;
|
||||||
if(MAX_CHUNK_SIZE < totalBytes - bytesSent){
|
if (MAX_CHUNK_SIZE < totalBytes - bytesSent) {
|
||||||
chunkSize = MAX_CHUNK_SIZE;
|
chunkSize = MAX_CHUNK_SIZE;
|
||||||
|
} else {
|
||||||
}else{
|
|
||||||
chunkSize = totalBytes - bytesSent;
|
chunkSize = totalBytes - bytesSent;
|
||||||
}
|
}
|
||||||
qint64 bytesWritten = m_tcpClient->sendData(send_buf + bytesSent, chunkSize);
|
qint64 bytesWritten = m_tcpClient->sendData(send_buf + bytesSent, chunkSize);
|
||||||
@ -655,39 +606,40 @@ void MainWindow::sendUpgradePackage(int slot)
|
|||||||
progressBar->setTextVisible(true);
|
progressBar->setTextVisible(true);
|
||||||
progressBar->setFormat(upgrade_text);
|
progressBar->setFormat(upgrade_text);
|
||||||
file.close();
|
file.close();
|
||||||
if(send_buf != NULL)
|
if (send_buf != NULL) {
|
||||||
free(send_buf);
|
free(send_buf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void MainWindow::getVersion(int slot)
|
|
||||||
{
|
void MainWindow::getVersion(int slot) {
|
||||||
slot_no = slot;
|
slot_no = slot;
|
||||||
PackageHead header = { {0xAA, 0x55, 0xAA}, kGetVersionInfo, 1,0,{} };
|
PackageHead header = { {0xAA, 0x55, 0xAA}, kGetVersionInfo, 1, 0, {} };
|
||||||
qDebug() << "slot" << slot ;
|
qDebug() << "slot" << slot ;
|
||||||
GetVersionReq get_version_req;
|
GetVersionReq get_version_req;
|
||||||
if(slot == 0)
|
if (slot == 0) {
|
||||||
get_version_req.card_id = 0xFF;
|
get_version_req.card_id = 0xFF;
|
||||||
else
|
} else {
|
||||||
get_version_req.card_id = slot & 0xFF;
|
get_version_req.card_id = slot & 0xFF;
|
||||||
char send_buf[20] ={0};
|
}
|
||||||
memcpy(send_buf, (char*)&header, sizeof(PackageHead));
|
char send_buf[20] = {0};
|
||||||
memcpy(send_buf + sizeof(PackageHead), (char*)&get_version_req, sizeof(GetVersionReq));
|
memcpy(send_buf, (char *)&header, sizeof(PackageHead));
|
||||||
|
memcpy(send_buf + sizeof(PackageHead), (char *)&get_version_req, sizeof(GetVersionReq));
|
||||||
int length = sizeof(PackageHead) + sizeof(GetVersionReq);
|
int length = sizeof(PackageHead) + sizeof(GetVersionReq);
|
||||||
qint64 bytesWritten = m_tcpClient->sendData(send_buf, length);
|
qint64 bytesWritten = m_tcpClient->sendData(send_buf, length);
|
||||||
m_tcpClient->waitForRead();
|
m_tcpClient->waitForRead();
|
||||||
qDebug() << "bytesWritten: " << bytesWritten;
|
qDebug() << "bytesWritten: " << bytesWritten;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::readData(const QByteArray& data)
|
void MainWindow::readData(const QByteArray &data) {
|
||||||
{
|
|
||||||
qDebug() << "Received from server:" << data;
|
qDebug() << "Received from server:" << data;
|
||||||
PackageHead header;
|
PackageHead header;
|
||||||
memcpy(&header,data.data(),sizeof(PackageHead));
|
memcpy(&header, data.data(), sizeof(PackageHead));
|
||||||
if(header.cmd == kGetVersionInfo){
|
if (header.cmd == kGetVersionInfo) {
|
||||||
VersionRsp version_rsp;
|
VersionRsp version_rsp;
|
||||||
memcpy(&version_rsp,data.data() + sizeof(PackageHead),sizeof(VersionRsp));
|
memcpy(&version_rsp, data.data() + sizeof(PackageHead), sizeof(VersionRsp));
|
||||||
QString strVerion = QString("第 %1 板卡\nFPGA 版本:%2\n软件版本:%3\nFPGA版本日期:%4").arg(slot_no).arg(version_rsp.fpga).arg(version_rsp.sw).arg(version_rsp.fpga_data);
|
QString strVerion = QString("第 %1 板卡\nFPGA 版本:%2\n软件版本:%3\nFPGA版本日期:%4").arg(slot_no).arg(version_rsp.fpga).arg(version_rsp.sw).arg(version_rsp.fpga_data);
|
||||||
QMessageBox::information(this, QStringLiteral("提示"), strVerion);
|
QMessageBox::information(this, QStringLiteral("提示"), strVerion);
|
||||||
}else if(header.cmd == kUpgradeCard){
|
} else if (header.cmd == kUpgradeCard) {
|
||||||
UpgradeRsp resp;
|
UpgradeRsp resp;
|
||||||
QByteArray byteArray = data.mid(sizeof(PackageHead));
|
QByteArray byteArray = data.mid(sizeof(PackageHead));
|
||||||
QDataStream stream(&byteArray, QIODevice::ReadOnly);
|
QDataStream stream(&byteArray, QIODevice::ReadOnly);
|
||||||
@ -695,13 +647,13 @@ void MainWindow::readData(const QByteArray& data)
|
|||||||
// if(resp.code == 1){
|
// if(resp.code == 1){
|
||||||
// QMessageBox::information(this, QStringLiteral("提示"), "上传成功!");
|
// QMessageBox::information(this, QStringLiteral("提示"), "上传成功!");
|
||||||
// }
|
// }
|
||||||
}else if(header.cmd == kUpgradeProgress){
|
} else if (header.cmd == kUpgradeProgress) {
|
||||||
QByteArray byteArray = data.mid(sizeof(PackageHead));
|
QByteArray byteArray = data.mid(sizeof(PackageHead));
|
||||||
UpgradeRsp upgrade_resp;
|
UpgradeRsp upgrade_resp;
|
||||||
QDataStream stream(&byteArray, QIODevice::ReadOnly);
|
QDataStream stream(&byteArray, QIODevice::ReadOnly);
|
||||||
stream >> upgrade_resp.code ;
|
stream >> upgrade_resp.code ;
|
||||||
progressBar->setValue(upgrade_resp.code);
|
progressBar->setValue(upgrade_resp.code);
|
||||||
if(upgrade_resp.code == 100){
|
if (upgrade_resp.code == 100) {
|
||||||
progressBar->setVisible(false);
|
progressBar->setVisible(false);
|
||||||
statusBar()->showMessage("升级完成!", 3000); // 显示3秒
|
statusBar()->showMessage("升级完成!", 3000); // 显示3秒
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ void Seismic_monitor::readJsonFile(const QString &filePath) {
|
|||||||
for (int i = 0; i < chan_array.size(); i++) {
|
for (int i = 0; i < chan_array.size(); i++) {
|
||||||
QJsonObject temp_obj = chan_array[i].toObject();
|
QJsonObject temp_obj = chan_array[i].toObject();
|
||||||
seismic_monitor[i].id = temp_obj["id"].toInt();
|
seismic_monitor[i].id = temp_obj["id"].toInt();
|
||||||
seismic_monitor[i].channel_name = temp_obj["channle_name"].toString();
|
// seismic_monitor[i].channel_name = temp_obj["channle_name"].toString();
|
||||||
seismic_monitor[i].standby = temp_obj["standby"].toBool();
|
seismic_monitor[i].standby = temp_obj["standby"].toBool();
|
||||||
seismic_monitor[i].active = temp_obj["active"].toBool();
|
seismic_monitor[i].active = temp_obj["active"].toBool();
|
||||||
seismic_monitor[i].rack_type = temp_obj["rack_type"].toInt();
|
seismic_monitor[i].rack_type = temp_obj["rack_type"].toInt();
|
||||||
@ -71,7 +71,7 @@ void Seismic_monitor::readJsonFile(const QString &filePath) {
|
|||||||
seismic_monitor[i].channel_type = temp_obj["channel_type"].toInt();
|
seismic_monitor[i].channel_type = temp_obj["channel_type"].toInt();
|
||||||
seismic_monitor[i].transducer_name = temp_obj["transducer_name"].toString();
|
seismic_monitor[i].transducer_name = temp_obj["transducer_name"].toString();
|
||||||
seismic_monitor[i].scale_factor = temp_obj["scale_factor"].toDouble();
|
seismic_monitor[i].scale_factor = temp_obj["scale_factor"].toDouble();
|
||||||
seismic_monitor[i].sampling_rate = temp_obj["sample_rate"].toInt();
|
seismic_monitor[i].sampling_rate = temp_obj["sampling_rate"].toInt();
|
||||||
QJsonArray voltage_range_array = temp_obj["normal_voltage_range"].toArray();
|
QJsonArray voltage_range_array = temp_obj["normal_voltage_range"].toArray();
|
||||||
seismic_monitor[i].normal_voltage_low = voltage_range_array[0].toDouble();
|
seismic_monitor[i].normal_voltage_low = voltage_range_array[0].toDouble();
|
||||||
seismic_monitor[i].normal_voltage_high = voltage_range_array[1].toDouble();
|
seismic_monitor[i].normal_voltage_high = voltage_range_array[1].toDouble();
|
||||||
@ -245,7 +245,7 @@ void Seismic_monitor::on_pushButton_confirm_clicked() {
|
|||||||
item_obj["channel_type"] = seismic_monitor[i].channel_type;
|
item_obj["channel_type"] = seismic_monitor[i].channel_type;
|
||||||
item_obj["transducer_name"] = seismic_monitor[i].transducer_name;
|
item_obj["transducer_name"] = seismic_monitor[i].transducer_name;
|
||||||
item_obj["scale_factor"] = seismic_monitor[i].scale_factor;
|
item_obj["scale_factor"] = seismic_monitor[i].scale_factor;
|
||||||
item_obj["sample_rate"] = seismic_monitor[i].sampling_rate;
|
item_obj["sampling_rate"] = seismic_monitor[i].sampling_rate;
|
||||||
QJsonArray normal_voltage_array;
|
QJsonArray normal_voltage_array;
|
||||||
normal_voltage_array.append(seismic_monitor[i].normal_voltage_low);
|
normal_voltage_array.append(seismic_monitor[i].normal_voltage_low);
|
||||||
normal_voltage_array.append(seismic_monitor[i].normal_voltage_high);
|
normal_voltage_array.append(seismic_monitor[i].normal_voltage_high);
|
||||||
@ -255,7 +255,7 @@ void Seismic_monitor::on_pushButton_confirm_clicked() {
|
|||||||
monitor_obj["chan"] = chan_array;
|
monitor_obj["chan"] = chan_array;
|
||||||
monitor_obj["slot"] = slot_no;
|
monitor_obj["slot"] = slot_no;
|
||||||
monitor_obj["version"] = 1;
|
monitor_obj["version"] = 1;
|
||||||
monitor_obj["card_type"] = 1;
|
monitor_obj["card_type"] = kCardVibSingle;
|
||||||
QJsonDocument jsonDoc;
|
QJsonDocument jsonDoc;
|
||||||
jsonDoc.setObject(monitor_obj);
|
jsonDoc.setObject(monitor_obj);
|
||||||
QString file_name = QString("\\config\\%1\\seismic_monitor_slot.json").arg(slot_no);
|
QString file_name = QString("\\config\\%1\\seismic_monitor_slot.json").arg(slot_no);
|
||||||
|
15
velocity.ui
15
velocity.ui
@ -905,7 +905,7 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>460</x>
|
<x>460</x>
|
||||||
<y>80</y>
|
<y>60</y>
|
||||||
<width>181</width>
|
<width>181</width>
|
||||||
<height>16</height>
|
<height>16</height>
|
||||||
</rect>
|
</rect>
|
||||||
@ -914,19 +914,6 @@
|
|||||||
<string> Timed OK channel Defeat</string>
|
<string> Timed OK channel Defeat</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QCheckBox" name="checkBox_not_ok">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>460</x>
|
|
||||||
<y>60</y>
|
|
||||||
<width>131</width>
|
|
||||||
<height>16</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string> 非正常锁定</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QLabel" name="label_85">
|
<widget class="QLabel" name="label_85">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
|
6
vibrationdata.cpp
Normal file
6
vibrationdata.cpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "vibrationdata.h"
|
||||||
|
|
||||||
|
VibrationData::VibrationData()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
30
vibrationdata.h
Normal file
30
vibrationdata.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef VIBRATIONDATA_H
|
||||||
|
#define VIBRATIONDATA_H
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
#include "cardbase.h"
|
||||||
|
|
||||||
|
|
||||||
|
class VibrationData : public CardBase {
|
||||||
|
public:
|
||||||
|
VibrationData();
|
||||||
|
void FromJson(const Json::Value &cfg) {
|
||||||
|
version_ = cfg["version"].asInt();
|
||||||
|
slot_ = cfg["slot"].asInt();
|
||||||
|
card_type_ = static_cast<CardType>(cfg["type"].asInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
Json::Value ToJson() {
|
||||||
|
Json::Value ch;
|
||||||
|
ch[NAME(version)] = version_;
|
||||||
|
ch[NAME(slot)] = slot_;
|
||||||
|
ch[NAME(type)] = card_type_;
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
// private:
|
||||||
|
SeismicMonitor base_config_[CHANNEL_COUNT];
|
||||||
|
AllFilter filter_[CHANNEL_COUNT];
|
||||||
|
std::vector<std::shared_ptr<VariableBase>> variables_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // VIBRATIONDATA_H
|
Loading…
x
Reference in New Issue
Block a user