#include "seismic_monitor.h" #include "ui_seismic_monitor.h" #include #include #include #include #include #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); 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(); } } } }