TSI_Config/seismic_monitor.cpp

270 lines
13 KiB
C++
Raw Normal View History

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_);
2025-03-20 14:38:14 +08:00
QString filePath = QCoreApplication::applicationDirPath() + QString("\\config\\%1\\seismic_monitor_slot.json").arg(slot_no);
2025-03-09 11:53:05 +08:00
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){
2025-03-23 14:03:48 +08:00
qDebug() << seismic_monitor[i].channel_type ;
2025-03-09 11:53:05 +08:00
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"){
2025-03-23 14:03:48 +08:00
ui->comboBox_chan_type_1->setCurrentText("位移");
2025-03-09 11:53:05 +08:00
}
2025-03-14 15:47:10 +08:00
//ui->comboBox_transducer_name_1->setText(seismic_monitor[i].transducer_name);
ui->lineEdit_scale_factor_1->setText(seismic_monitor[i].scale_factor);
2025-03-09 11:53:05 +08:00
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"){
2025-03-23 14:03:48 +08:00
ui->comboBox_chan_type_2->setCurrentText("位移");
2025-03-09 11:53:05 +08:00
}
2025-03-14 15:47:10 +08:00
//ui->comboBox_transducer_name_2->setText(seismic_monitor[i].transducer_name);
ui->lineEdit_scale_factor_2->setText(seismic_monitor[i].scale_factor);
2025-03-09 11:53:05 +08:00
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"){
2025-03-23 14:03:48 +08:00
ui->comboBox_chan_type_3->setCurrentText("位移");
2025-03-09 11:53:05 +08:00
}
2025-03-14 15:47:10 +08:00
//ui->lineEdit_transducer_name_3->setText(seismic_monitor[i].transducer_name);
ui->lineEdit_scale_factor_3->setText(seismic_monitor[i].scale_factor);
2025-03-09 11:53:05 +08:00
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"){
2025-03-23 14:03:48 +08:00
ui->comboBox_chan_type_4->setCurrentText("位移");
2025-03-09 11:53:05 +08:00
}
2025-03-14 15:47:10 +08:00
//ui->lineEdit_transducer_name_4->setText(seismic_monitor[i].transducer_name);
ui->lineEdit_scale_factor_4->setText(seismic_monitor[i].scale_factor);
2025-03-09 11:53:05 +08:00
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){
2025-03-14 15:47:10 +08:00
seismic_monitor[var].transducer_name = ui->comboBox_transducer_name_1->currentText();
seismic_monitor[var].scale_factor = ui->lineEdit_scale_factor_1->text();
2025-03-09 11:53:05 +08:00
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){
2025-03-14 15:47:10 +08:00
seismic_monitor[var].transducer_name = ui->comboBox_transducer_name_2->currentText();
seismic_monitor[var].scale_factor = ui->lineEdit_scale_factor_2->text();
2025-03-09 11:53:05 +08:00
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){
2025-03-14 15:47:10 +08:00
seismic_monitor[var].transducer_name = ui->comboBox_transducer_name_3->currentText();
seismic_monitor[var].scale_factor = ui->lineEdit_scale_factor_3->text();
2025-03-09 11:53:05 +08:00
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){
2025-03-14 15:47:10 +08:00
seismic_monitor[var].transducer_name = ui->comboBox_transducer_name_4->currentText();
seismic_monitor[var].scale_factor = ui->lineEdit_scale_factor_3->text();
2025-03-09 11:53:05 +08:00
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){
2025-03-23 14:03:48 +08:00
if(ui->comboBox_chan_type_1->currentText() == "加速度"){
2025-03-09 11:53:05 +08:00
channel = 1;
Acceleration *acceleration = new Acceleration(slot_no,channel,seismic_monitor[i].active);
acceleration->setWindowModality(Qt::ApplicationModal);
acceleration->show();
2025-03-23 14:03:48 +08:00
}else if(ui->comboBox_chan_type_1->currentText() == "位移"){
2025-03-11 16:42:00 +08:00
channel = 1;
2025-03-20 14:38:14 +08:00
Radial_vibration *radial_vibration = new Radial_vibration(slot_no,channel,seismic_monitor[i].active);
2025-03-11 16:42:00 +08:00
radial_vibration->setWindowModality(Qt::ApplicationModal);
radial_vibration->show();
2025-03-23 14:03:48 +08:00
}else if(ui->comboBox_chan_type_1->currentText() == "速度"){
2025-03-11 16:42:00 +08:00
channel = 1;
2025-03-20 14:38:14 +08:00
Velocity *velocity = new Velocity(slot_no,channel,seismic_monitor[i].active);
2025-03-11 16:42:00 +08:00
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){
2025-03-23 14:03:48 +08:00
if(seismic_monitor[i].channel_type == "加速度"){
2025-03-11 16:42:00 +08:00
channel = 3;
Acceleration *acceleration = new Acceleration(slot_no,channel,seismic_monitor[i].active);
acceleration->setWindowModality(Qt::ApplicationModal);
acceleration->show();
2025-03-23 14:03:48 +08:00
}else if(seismic_monitor[i].channel_type == "位移"){
2025-03-11 16:42:00 +08:00
channel = 3;
2025-03-20 14:38:14 +08:00
Radial_vibration *radial_vibration = new Radial_vibration(slot_no,channel,seismic_monitor[i].active);
2025-03-11 16:42:00 +08:00
radial_vibration->setWindowModality(Qt::ApplicationModal);
radial_vibration->show();
2025-03-23 14:03:48 +08:00
}else if(seismic_monitor[i].channel_type == "速度"){
2025-03-11 16:42:00 +08:00
channel = 3;
2025-03-20 14:38:14 +08:00
Velocity *velocity = new Velocity(slot_no,channel,seismic_monitor[i].active);
2025-03-11 16:42:00 +08:00
velocity->setWindowModality(Qt::ApplicationModal);
velocity->show();
2025-03-09 11:53:05 +08:00
}
}
}
}