2025-03-09 11:53:05 +08:00
|
|
|
#include "seismic_monitor.h"
|
|
|
|
#include "ui_seismic_monitor.h"
|
|
|
|
#include <QDebug>
|
|
|
|
#include <QJsonDocument>
|
|
|
|
#include <QJsonArray>
|
|
|
|
#include <QJsonObject>
|
|
|
|
#include <QFile>
|
2025-03-11 16:42:00 +08:00
|
|
|
#include <QListView>
|
2025-03-09 11:53:05 +08:00
|
|
|
#include "acceleration.h"
|
|
|
|
#include "velocity.h"
|
|
|
|
#include "radial_vibration.h"
|
|
|
|
|
|
|
|
Seismic_monitor::Seismic_monitor(int slot,QWidget *parent) :
|
|
|
|
QWidget(parent),
|
|
|
|
ui(new Ui::Seismic_monitor)
|
|
|
|
{
|
|
|
|
ui->setupUi(this);
|
2025-03-11 16:42:00 +08:00
|
|
|
ui->widget_body->setProperty("flag", "body");
|
|
|
|
ui->comboBox_chan_type_1->setView(new QListView());
|
2025-03-09 11:53:05 +08:00
|
|
|
slot_no = slot;
|
|
|
|
QString slot_no_ = QString("%1").arg(slot_no);
|
|
|
|
ui->label_slot_no->setText(slot_no_);
|
|
|
|
|
|
|
|
QString filePath = QCoreApplication::applicationDirPath() + QString("\\config\\seismic_monitor_slot_%1.json").arg(slot_no);
|
|
|
|
readJsonFile(filePath);
|
|
|
|
Init();
|
|
|
|
}
|
|
|
|
|
|
|
|
Seismic_monitor::~Seismic_monitor()
|
|
|
|
{
|
|
|
|
delete ui;
|
|
|
|
}
|
|
|
|
void Seismic_monitor::readJsonFile(const QString &filePath)
|
|
|
|
{
|
|
|
|
// 创建文件对象
|
|
|
|
QFile file(filePath);
|
|
|
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
|
|
qDebug() << "Cannot open file for reading:" << filePath;
|
|
|
|
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();
|
|
|
|
card_type = json_obj["card_type"].toInt();
|
|
|
|
QJsonArray chan_array = json_obj["chan"].toArray();
|
|
|
|
|
|
|
|
for(int i = 0; i < chan_array.size(); i++){
|
|
|
|
QJsonObject temp_obj = chan_array[i].toObject();
|
|
|
|
seismic_monitor[i].id = temp_obj["id"].toInt();
|
|
|
|
seismic_monitor[i].channel_name = temp_obj["channle_name"].toString();
|
|
|
|
seismic_monitor[i].standby = temp_obj["standby"].toBool();
|
|
|
|
seismic_monitor[i].active = temp_obj["active"].toBool();
|
|
|
|
seismic_monitor[i].rack_type = temp_obj["rack_type"].toString();
|
|
|
|
seismic_monitor[i].tmr_group = temp_obj["tmr_group"].toString();
|
|
|
|
seismic_monitor[i].channel_type = temp_obj["channel_type"].toString();
|
|
|
|
seismic_monitor[i].transducer_name = temp_obj["transducer_name"].toString();
|
|
|
|
seismic_monitor[i].scale_factor = temp_obj["scale_factor"].toString();
|
|
|
|
seismic_monitor[i].sample_rate = temp_obj["sample_rate"].toString();
|
|
|
|
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_high = voltage_range_array[1].toDouble();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void Seismic_monitor::Init()
|
|
|
|
{
|
|
|
|
for (int i = 0; i < CHANNLE_COUNT; i++) {
|
|
|
|
if(seismic_monitor[i].id == 1){
|
|
|
|
if(seismic_monitor[i].channel_type == "acceleration"){
|
|
|
|
ui->comboBox_chan_type_1->setCurrentText("加速度");
|
|
|
|
}else if(seismic_monitor[i].channel_type == "velocity"){
|
|
|
|
ui->comboBox_chan_type_1->setCurrentText("速度");
|
|
|
|
}else if(seismic_monitor[i].channel_type == "proximeter"){
|
|
|
|
ui->comboBox_chan_type_1->setCurrentText("径向位移");
|
|
|
|
}
|
|
|
|
ui->lineEdit_transducer_name_1->setText(seismic_monitor[i].transducer_name);
|
|
|
|
ui->doubleSpinBox_scale_factor_1->setValue(seismic_monitor[i].scale_factor.toDouble());
|
|
|
|
ui->checkBox_enable_1->setCheckable(seismic_monitor[i].active);
|
|
|
|
ui->doubleSpinBox_low_1->setValue(seismic_monitor[i].normal_voltage_low);
|
|
|
|
ui->doubleSpinBox_high_1->setValue(seismic_monitor[i].normal_voltage_high);
|
|
|
|
if(seismic_monitor[i].sample_rate == "32000"){
|
|
|
|
ui->comboBox_sample_rate_1->setCurrentText("32k");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(seismic_monitor[i].id == 2){
|
|
|
|
if(seismic_monitor[i].channel_type == "acceleration"){
|
|
|
|
ui->comboBox_chan_type_2->setCurrentText("加速度");
|
|
|
|
}else if(seismic_monitor[i].channel_type == "velocity"){
|
|
|
|
ui->comboBox_chan_type_2->setCurrentText("速度");
|
|
|
|
}else if(seismic_monitor[i].channel_type == "proximeter"){
|
|
|
|
ui->comboBox_chan_type_2->setCurrentText("径向位移");
|
|
|
|
}
|
|
|
|
ui->lineEdit_transducer_name_2->setText(seismic_monitor[i].transducer_name);
|
|
|
|
ui->doubleSpinBox_scale_factor_2->setValue(seismic_monitor[i].scale_factor.toDouble());
|
|
|
|
ui->checkBox_enable_2->setCheckable(seismic_monitor[i].active);
|
|
|
|
ui->doubleSpinBox_low_2->setValue(seismic_monitor[i].normal_voltage_low);
|
|
|
|
ui->doubleSpinBox_high_2->setValue(seismic_monitor[i].normal_voltage_high);
|
|
|
|
if(seismic_monitor[i].sample_rate == "32000"){
|
|
|
|
ui->comboBox_sample_rate_2->setCurrentText("32k");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(seismic_monitor[i].id == 3){
|
|
|
|
if(seismic_monitor[i].channel_type == "acceleration"){
|
|
|
|
ui->comboBox_chan_type_3->setCurrentText("加速度");
|
|
|
|
}else if(seismic_monitor[i].channel_type == "velocity"){
|
|
|
|
ui->comboBox_chan_type_3->setCurrentText("速度");
|
|
|
|
}else if(seismic_monitor[i].channel_type == "proximeter"){
|
|
|
|
ui->comboBox_chan_type_3->setCurrentText("径向位移");
|
|
|
|
}
|
|
|
|
ui->lineEdit_transducer_name_3->setText(seismic_monitor[i].transducer_name);
|
|
|
|
ui->doubleSpinBox_scale_factor_3->setValue(seismic_monitor[i].scale_factor.toDouble());
|
|
|
|
ui->checkBox_enable_3->setCheckable(seismic_monitor[i].active);
|
|
|
|
ui->doubleSpinBox_low_3->setValue(seismic_monitor[i].normal_voltage_low);
|
|
|
|
ui->doubleSpinBox_high_3->setValue(seismic_monitor[i].normal_voltage_high);
|
|
|
|
if(seismic_monitor[i].sample_rate == "32000"){
|
|
|
|
ui->comboBox_sample_rate_3->setCurrentText("32k");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(seismic_monitor[i].id == 4){
|
|
|
|
if(seismic_monitor[i].channel_type == "acceleration"){
|
|
|
|
ui->comboBox_chan_type_4->setCurrentText("加速度");
|
|
|
|
}else if(seismic_monitor[i].channel_type == "velocity"){
|
|
|
|
ui->comboBox_chan_type_4->setCurrentText("速度");
|
|
|
|
}else if(seismic_monitor[i].channel_type == "proximeter"){
|
|
|
|
ui->comboBox_chan_type_4->setCurrentText("径向位移");
|
|
|
|
}
|
|
|
|
ui->lineEdit_transducer_name_4->setText(seismic_monitor[i].transducer_name);
|
|
|
|
ui->doubleSpinBox_scale_factor_4->setValue(seismic_monitor[i].scale_factor.toDouble());
|
|
|
|
ui->checkBox_enable_4->setCheckable(seismic_monitor[i].active);
|
|
|
|
ui->doubleSpinBox_low_4->setValue(seismic_monitor[i].normal_voltage_low);
|
|
|
|
ui->doubleSpinBox_high_4->setValue(seismic_monitor[i].normal_voltage_high);
|
|
|
|
if(seismic_monitor[i].sample_rate == "32000"){
|
|
|
|
ui->comboBox_sample_rate_4->setCurrentText("32k");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void Seismic_monitor::on_pushButton_confirm_clicked()
|
|
|
|
{
|
|
|
|
for (int var = 0; var < CHANNLE_COUNT; ++var){
|
|
|
|
if(seismic_monitor[var].id == 1){
|
|
|
|
seismic_monitor[var].transducer_name = ui->lineEdit_transducer_name_1->text();
|
|
|
|
seismic_monitor[var].scale_factor = QString::number(ui->doubleSpinBox_scale_factor_1->value());
|
|
|
|
seismic_monitor[var].active = ui->checkBox_enable_1->isChecked();
|
|
|
|
seismic_monitor[var].sample_rate = ui->comboBox_sample_rate_1->currentText();
|
|
|
|
seismic_monitor[var].normal_voltage_low = ui->doubleSpinBox_low_1->value();
|
|
|
|
seismic_monitor[var].normal_voltage_high = ui->doubleSpinBox_high_1->value();
|
|
|
|
}else if(seismic_monitor[var].id == 2){
|
|
|
|
seismic_monitor[var].transducer_name = ui->lineEdit_transducer_name_2->text();
|
|
|
|
seismic_monitor[var].scale_factor = QString::number(ui->doubleSpinBox_scale_factor_2->value());
|
|
|
|
seismic_monitor[var].active = ui->checkBox_enable_2->isChecked();
|
|
|
|
seismic_monitor[var].sample_rate = ui->comboBox_sample_rate_2->currentText();
|
|
|
|
seismic_monitor[var].normal_voltage_low = ui->doubleSpinBox_low_2->value();
|
|
|
|
seismic_monitor[var].normal_voltage_high = ui->doubleSpinBox_high_2->value();
|
|
|
|
}else if(seismic_monitor[var].id == 3){
|
|
|
|
seismic_monitor[var].transducer_name = ui->lineEdit_transducer_name_3->text();
|
|
|
|
seismic_monitor[var].scale_factor = QString::number(ui->doubleSpinBox_scale_factor_3->value());
|
|
|
|
seismic_monitor[var].active = ui->checkBox_enable_3->isChecked();
|
|
|
|
seismic_monitor[var].sample_rate = ui->comboBox_sample_rate_3->currentText();
|
|
|
|
seismic_monitor[var].normal_voltage_low = ui->doubleSpinBox_low_3->value();
|
|
|
|
seismic_monitor[var].normal_voltage_high = ui->doubleSpinBox_high_3->value();
|
|
|
|
}else if(seismic_monitor[var].id == 4){
|
|
|
|
seismic_monitor[var].transducer_name = ui->lineEdit_transducer_name_4->text();
|
|
|
|
seismic_monitor[var].scale_factor = QString::number(ui->doubleSpinBox_scale_factor_4->value());
|
|
|
|
seismic_monitor[var].active = ui->checkBox_enable_4->isChecked();
|
|
|
|
seismic_monitor[var].sample_rate = ui->comboBox_sample_rate_4->currentText();
|
|
|
|
seismic_monitor[var].normal_voltage_low = ui->doubleSpinBox_low_4->value();
|
|
|
|
seismic_monitor[var].normal_voltage_high = ui->doubleSpinBox_high_4->value();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
QJsonObject monitor_obj,item_obj;
|
|
|
|
QJsonArray chan_array;
|
|
|
|
for(int i = 0; i < CHANNLE_COUNT;i++){
|
|
|
|
item_obj["id"] = seismic_monitor[i].id;
|
|
|
|
item_obj["channel_name"] = seismic_monitor[i].channel_name;
|
|
|
|
item_obj["standby"] = seismic_monitor[i].standby;
|
|
|
|
item_obj["active"] = seismic_monitor[i].active;
|
|
|
|
item_obj["rack_type"] = seismic_monitor[i].rack_type;
|
|
|
|
item_obj["tmr_group"] = seismic_monitor[i].tmr_group;
|
|
|
|
item_obj["channel_type"] = seismic_monitor[i].channel_type;
|
|
|
|
item_obj["transducer_name"] = seismic_monitor[i].transducer_name;
|
|
|
|
item_obj["scale_factor"] = seismic_monitor[i].scale_factor;
|
|
|
|
item_obj["sample_rate"] = seismic_monitor[i].sample_rate;
|
|
|
|
QJsonArray normal_voltage_array;
|
|
|
|
normal_voltage_array.append(seismic_monitor[i].normal_voltage_low);
|
|
|
|
normal_voltage_array.append(seismic_monitor[i].normal_voltage_high);
|
|
|
|
item_obj["normal_voltage_range"] = normal_voltage_array;
|
|
|
|
chan_array.append(item_obj);
|
|
|
|
}
|
|
|
|
monitor_obj["chan"] = chan_array;
|
|
|
|
monitor_obj["slot"] = slot_no;
|
|
|
|
monitor_obj["version"] = 1;
|
|
|
|
monitor_obj["card_type"] = 1;
|
|
|
|
QJsonDocument jsonDoc;
|
|
|
|
jsonDoc.setObject(monitor_obj);
|
|
|
|
QString file_name = QString("\\config\\seismic_monitor_slot_%1.json").arg(slot_no);
|
|
|
|
QFile file(QCoreApplication::applicationDirPath() + file_name);
|
|
|
|
file.open(QIODevice::WriteOnly);
|
|
|
|
file.write(jsonDoc.toJson());
|
|
|
|
file.close();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Seismic_monitor::on_pushButton_set_default_clicked()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Seismic_monitor::on_pushButton_config_1_clicked()
|
|
|
|
{
|
|
|
|
for (int i = 0 ;i < CHANNLE_COUNT ; i++) {
|
|
|
|
if(seismic_monitor[i].id == 1){
|
|
|
|
if(seismic_monitor[i].channel_type == "acceleration"){
|
|
|
|
channel = 1;
|
|
|
|
Acceleration *acceleration = new Acceleration(slot_no,channel,seismic_monitor[i].active);
|
|
|
|
acceleration->setWindowModality(Qt::ApplicationModal);
|
|
|
|
acceleration->show();
|
2025-03-11 16:42:00 +08:00
|
|
|
}else if(seismic_monitor[i].channel_type == "proximeter"){
|
|
|
|
channel = 1;
|
|
|
|
Radial_vibration *radial_vibration = new Radial_vibration();
|
|
|
|
radial_vibration->setWindowModality(Qt::ApplicationModal);
|
|
|
|
radial_vibration->show();
|
|
|
|
}else if(seismic_monitor[i].channel_type == "velocity"){
|
|
|
|
channel = 1;
|
|
|
|
Velocity *velocity = new Velocity();
|
|
|
|
velocity->setWindowModality(Qt::ApplicationModal);
|
|
|
|
velocity->show();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Seismic_monitor::on_pushButton_config_3_clicked()
|
|
|
|
{
|
|
|
|
for (int i = 0 ;i < CHANNLE_COUNT ; i++) {
|
|
|
|
if(seismic_monitor[i].id == 3){
|
|
|
|
if(seismic_monitor[i].channel_type == "acceleration"){
|
|
|
|
channel = 3;
|
|
|
|
Acceleration *acceleration = new Acceleration(slot_no,channel,seismic_monitor[i].active);
|
|
|
|
acceleration->setWindowModality(Qt::ApplicationModal);
|
|
|
|
acceleration->show();
|
|
|
|
}else if(seismic_monitor[i].channel_type == "proximeter"){
|
|
|
|
channel = 3;
|
|
|
|
Radial_vibration *radial_vibration = new Radial_vibration();
|
|
|
|
radial_vibration->setWindowModality(Qt::ApplicationModal);
|
|
|
|
radial_vibration->show();
|
|
|
|
}else if(seismic_monitor[i].channel_type == "velocity"){
|
|
|
|
channel = 3;
|
|
|
|
Velocity *velocity = new Velocity();
|
|
|
|
velocity->setWindowModality(Qt::ApplicationModal);
|
|
|
|
velocity->show();
|
2025-03-09 11:53:05 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|