428 lines
20 KiB
C++
428 lines
20 KiB
C++
#include "seismic_monitor.h"
|
|
#include "ui_seismic_monitor.h"
|
|
#include <QDebug>
|
|
#include <QJsonDocument>
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
#include <QFile>
|
|
#include <QListView>
|
|
#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);
|
|
ui->widget_body->setProperty("flag", "body");
|
|
ui->comboBox_chan_type_1->setView(new QListView());
|
|
ui->comboBox_chan_type_2->setView(new QListView());
|
|
ui->comboBox_chan_type_3->setView(new QListView());
|
|
ui->comboBox_chan_type_4->setView(new QListView());
|
|
ui->comboBox_transducer_name_1->setView(new QListView());
|
|
ui->comboBox_transducer_name_2->setView(new QListView());
|
|
ui->comboBox_transducer_name_3->setView(new QListView());
|
|
ui->comboBox_transducer_name_4->setView(new QListView());
|
|
ui->comboBox_sample_rate_1->setView(new QListView());
|
|
ui->comboBox_sample_rate_2->setView(new QListView());
|
|
ui->comboBox_sample_rate_3->setView(new QListView());
|
|
ui->comboBox_sample_rate_4->setView(new QListView());
|
|
slot_no = slot;
|
|
QString slot_no_ = QString("%1").arg(slot_no);
|
|
ui->label_slot_no->setText(slot_no_);
|
|
|
|
QString filePath = QCoreApplication::applicationDirPath() + QString("\\config\\%1\\seismic_monitor_slot.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();
|
|
}
|
|
|
|
QFile file_transducer(QCoreApplication::applicationDirPath() + QString("\\config\\transducer.json"));
|
|
if (!file_transducer.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
qDebug() << "Cannot open file for reading:" << filePath;
|
|
return;
|
|
}
|
|
QString content_transducer = file_transducer.readAll();
|
|
file_transducer.close();
|
|
QByteArray jsonData2 = content_transducer.toUtf8();
|
|
QJsonDocument jsonDoc2 = QJsonDocument::fromJson(jsonData2);
|
|
if (jsonDoc2.isNull()) {
|
|
qDebug() << "Cannot parse JSON document";
|
|
return;
|
|
}
|
|
if (!jsonDoc2.isObject() && !jsonDoc2.isArray()) {
|
|
qDebug() << "JSON document is not an object or an array";
|
|
return;
|
|
}
|
|
QJsonArray json_array = jsonDoc2.array();
|
|
for (int var = 0; var < json_array.size(); ++var) {
|
|
Transducer transducer;
|
|
QJsonObject temp_obj = json_array[var].toObject();
|
|
transducer.transducer_name = temp_obj["transducer_name"].toString();
|
|
transducer.scale_factor = temp_obj["scale_factor"].toDouble();
|
|
vec_transducer.push_back(transducer);
|
|
}
|
|
}
|
|
void Seismic_monitor::Init()
|
|
{
|
|
for (int var = 0; var < vec_transducer.size(); ++var) {
|
|
ui->comboBox_transducer_name_1->addItem(vec_transducer[var].transducer_name);
|
|
ui->comboBox_transducer_name_2->addItem(vec_transducer[var].transducer_name);
|
|
ui->comboBox_transducer_name_3->addItem(vec_transducer[var].transducer_name);
|
|
ui->comboBox_transducer_name_4->addItem(vec_transducer[var].transducer_name);
|
|
}
|
|
for (int i = 0; i < CHANNLE_COUNT; i++) {
|
|
if(seismic_monitor[i].id == 1){
|
|
qDebug() << seismic_monitor[i].channel_type ;
|
|
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->comboBox_transducer_name_1->setText(seismic_monitor[i].transducer_name);
|
|
ui->lineEdit_scale_factor_1->setText(seismic_monitor[i].scale_factor);
|
|
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("32 k");
|
|
}
|
|
}
|
|
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->comboBox_transducer_name_2->setText(seismic_monitor[i].transducer_name);
|
|
ui->lineEdit_scale_factor_2->setText(seismic_monitor[i].scale_factor);
|
|
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("32 k");
|
|
}
|
|
}
|
|
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->lineEdit_scale_factor_3->setText(seismic_monitor[i].scale_factor);
|
|
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("32 k");
|
|
}
|
|
}
|
|
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->lineEdit_scale_factor_4->setText(seismic_monitor[i].scale_factor);
|
|
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("32 k");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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->comboBox_transducer_name_1->currentText();
|
|
seismic_monitor[var].scale_factor = ui->lineEdit_scale_factor_1->text();
|
|
seismic_monitor[var].active = ui->checkBox_enable_1->isChecked();
|
|
if(ui->comboBox_sample_rate_1->currentText() == "32 k")
|
|
seismic_monitor[var].sample_rate = "32000";
|
|
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->comboBox_transducer_name_2->currentText();
|
|
seismic_monitor[var].scale_factor = ui->lineEdit_scale_factor_2->text();
|
|
seismic_monitor[var].active = ui->checkBox_enable_2->isChecked();
|
|
if(ui->comboBox_sample_rate_2->currentText() == "32 k")
|
|
seismic_monitor[var].sample_rate = "32000";
|
|
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->comboBox_transducer_name_3->currentText();
|
|
seismic_monitor[var].scale_factor = ui->lineEdit_scale_factor_3->text();
|
|
seismic_monitor[var].active = ui->checkBox_enable_3->isChecked();
|
|
if(ui->comboBox_sample_rate_3->currentText() == "32 k")
|
|
seismic_monitor[var].sample_rate = "32000";
|
|
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->comboBox_transducer_name_4->currentText();
|
|
seismic_monitor[var].scale_factor = ui->lineEdit_scale_factor_3->text();
|
|
seismic_monitor[var].active = ui->checkBox_enable_4->isChecked();
|
|
if(ui->comboBox_sample_rate_4->currentText() == "32 k")
|
|
seismic_monitor[var].sample_rate = "32000";
|
|
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\\%1\\seismic_monitor_slot.json").arg(slot_no);
|
|
QFile file(QCoreApplication::applicationDirPath() + file_name);
|
|
file.open(QIODevice::WriteOnly);
|
|
file.write(jsonDoc.toJson());
|
|
file.close();
|
|
this->close();
|
|
}
|
|
|
|
|
|
void Seismic_monitor::on_pushButton_set_default_clicked()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
void Seismic_monitor::on_pushButton_config_1_clicked()
|
|
{
|
|
channel = 1;
|
|
if(ui->comboBox_chan_type_1->currentText() == "加速度"){
|
|
Acceleration *acceleration = new Acceleration(slot_no,channel,ui->checkBox_enable_1->isChecked());
|
|
acceleration->setWindowModality(Qt::ApplicationModal);
|
|
acceleration->show();
|
|
}else if(ui->comboBox_chan_type_1->currentText() == "位移"){
|
|
Radial_vibration *radial_vibration = new Radial_vibration(slot_no,channel,ui->checkBox_enable_1->isChecked());
|
|
radial_vibration->setWindowModality(Qt::ApplicationModal);
|
|
radial_vibration->show();
|
|
}else if(ui->comboBox_chan_type_1->currentText() == "速度"){
|
|
Velocity *velocity = new Velocity(slot_no,channel,ui->checkBox_enable_1->isChecked());
|
|
velocity->setWindowModality(Qt::ApplicationModal);
|
|
velocity->show();
|
|
}
|
|
}
|
|
|
|
void Seismic_monitor::on_pushButton_config_2_clicked()
|
|
{
|
|
channel = 2;
|
|
if(ui->comboBox_chan_type_2->currentText() == "加速度"){
|
|
Acceleration *acceleration = new Acceleration(slot_no,channel,ui->checkBox_enable_2->isChecked());
|
|
acceleration->setWindowModality(Qt::ApplicationModal);
|
|
acceleration->show();
|
|
}else if(ui->comboBox_chan_type_2->currentText() == "位移"){
|
|
Radial_vibration *radial_vibration = new Radial_vibration(slot_no,channel,ui->checkBox_enable_2->isChecked());
|
|
radial_vibration->setWindowModality(Qt::ApplicationModal);
|
|
radial_vibration->show();
|
|
}else if(ui->comboBox_chan_type_2->currentText() == "速度"){
|
|
|
|
Velocity *velocity = new Velocity(slot_no,channel,ui->checkBox_enable_2->isChecked());
|
|
velocity->setWindowModality(Qt::ApplicationModal);
|
|
velocity->show();
|
|
}
|
|
}
|
|
void Seismic_monitor::on_pushButton_config_3_clicked()
|
|
{
|
|
channel = 3;
|
|
if(ui->comboBox_chan_type_3->currentText() == "加速度"){
|
|
Acceleration *acceleration = new Acceleration(slot_no,channel,ui->checkBox_enable_3->isChecked());
|
|
acceleration->setWindowModality(Qt::ApplicationModal);
|
|
acceleration->show();
|
|
}else if(ui->comboBox_chan_type_3->currentText() == "位移"){
|
|
Radial_vibration *radial_vibration = new Radial_vibration(slot_no,channel,ui->checkBox_enable_3->isChecked());
|
|
radial_vibration->setWindowModality(Qt::ApplicationModal);
|
|
radial_vibration->show();
|
|
}else if(ui->comboBox_chan_type_3->currentText() == "速度"){
|
|
Velocity *velocity = new Velocity(slot_no,channel,ui->checkBox_enable_3->isChecked());
|
|
velocity->setWindowModality(Qt::ApplicationModal);
|
|
velocity->show();
|
|
}
|
|
}
|
|
|
|
void Seismic_monitor::on_pushButton_config_4_clicked()
|
|
{
|
|
channel = 4;
|
|
if(ui->comboBox_chan_type_4->currentText() == "加速度"){
|
|
Acceleration *acceleration = new Acceleration(slot_no,channel,ui->checkBox_enable_4->isChecked());
|
|
acceleration->setWindowModality(Qt::ApplicationModal);
|
|
acceleration->show();
|
|
}else if(ui->comboBox_chan_type_4->currentText() == "位移"){
|
|
Radial_vibration *radial_vibration = new Radial_vibration(slot_no,channel,ui->checkBox_enable_4->isChecked());
|
|
radial_vibration->setWindowModality(Qt::ApplicationModal);
|
|
radial_vibration->show();
|
|
}else if(ui->comboBox_chan_type_4->currentText() == "速度"){
|
|
Velocity *velocity = new Velocity(slot_no,channel,ui->checkBox_enable_4->isChecked());
|
|
velocity->setWindowModality(Qt::ApplicationModal);
|
|
velocity->show();
|
|
}
|
|
}
|
|
|
|
void Seismic_monitor::on_comboBox_chan_type_1_currentTextChanged(const QString &arg1)
|
|
{
|
|
if(ui->comboBox_chan_type_1->currentText() == "加速度"){
|
|
ui->label_unit_1->setText("mV / m/s^2");
|
|
}else if(ui->comboBox_chan_type_1->currentText() == "速度"){
|
|
ui->label_unit_1->setText("mV / mm/s");
|
|
}else if(ui->comboBox_chan_type_1->currentText() == "位移"){
|
|
ui->label_unit_1->setText("mV / mm");
|
|
}
|
|
}
|
|
|
|
|
|
void Seismic_monitor::on_comboBox_chan_type_2_currentTextChanged(const QString &arg1)
|
|
{
|
|
if(ui->comboBox_chan_type_2->currentText() == "加速度"){
|
|
ui->label_unit_2->setText("mV / m/s^2");
|
|
}else if(ui->comboBox_chan_type_2->currentText() == "速度"){
|
|
ui->label_unit_2->setText("mV / mm/s");
|
|
}else if(ui->comboBox_chan_type_2->currentText() == "位移"){
|
|
ui->label_unit_2->setText("mV / mm");
|
|
}
|
|
}
|
|
|
|
|
|
void Seismic_monitor::on_comboBox_chan_type_3_currentTextChanged(const QString &arg1)
|
|
{
|
|
if(ui->comboBox_chan_type_3->currentText() == "加速度"){
|
|
ui->label_unit_3->setText("mV / m/s^2");
|
|
}else if(ui->comboBox_chan_type_3->currentText() == "速度"){
|
|
ui->label_unit_3->setText("mV / mm/s");
|
|
}else if(ui->comboBox_chan_type_3->currentText() == "位移"){
|
|
ui->label_unit_3->setText("mV / mm");
|
|
}
|
|
}
|
|
|
|
|
|
void Seismic_monitor::on_comboBox_chan_type_4_currentTextChanged(const QString &arg1)
|
|
{
|
|
if(ui->comboBox_chan_type_4->currentText() == "加速度"){
|
|
ui->label_unit_4->setText("mV / m/s^2");
|
|
}else if(ui->comboBox_chan_type_4->currentText() == "速度"){
|
|
ui->label_unit_4->setText("mV / mm/s");
|
|
}else if(ui->comboBox_chan_type_4->currentText() == "位移"){
|
|
ui->label_unit_4->setText("mV / mm");
|
|
}
|
|
}
|
|
|
|
void Seismic_monitor::on_pushButton_cancel_clicked()
|
|
{
|
|
this->close();
|
|
}
|
|
|
|
void Seismic_monitor::on_comboBox_transducer_name_1_currentTextChanged(const QString &arg1)
|
|
{
|
|
for(int var = 0;var < vec_transducer.size();++var){
|
|
if(ui->comboBox_transducer_name_1->currentText() == vec_transducer[var].transducer_name){
|
|
ui->lineEdit_scale_factor_1->setText(QString::number(vec_transducer[var].scale_factor));
|
|
}
|
|
}
|
|
}
|
|
|
|
void Seismic_monitor::on_comboBox_transducer_name_2_currentTextChanged(const QString &arg1)
|
|
{
|
|
for(int var = 0;var < vec_transducer.size();++var){
|
|
if(ui->comboBox_transducer_name_2->currentText() == vec_transducer[var].transducer_name){
|
|
ui->lineEdit_scale_factor_2->setText(QString::number(vec_transducer[var].scale_factor));
|
|
}
|
|
}
|
|
}
|
|
|
|
void Seismic_monitor::on_comboBox_transducer_name_3_currentTextChanged(const QString &arg1)
|
|
{
|
|
for(int var = 0;var < vec_transducer.size();++var){
|
|
if(ui->comboBox_transducer_name_3->currentText() == vec_transducer[var].transducer_name){
|
|
ui->lineEdit_scale_factor_3->setText(QString::number(vec_transducer[var].scale_factor));
|
|
}
|
|
}
|
|
}
|
|
|
|
void Seismic_monitor::on_comboBox_transducer_name_4_currentTextChanged(const QString &arg1)
|
|
{
|
|
for(int var = 0;var < vec_transducer.size();++var){
|
|
if(ui->comboBox_transducer_name_4->currentText() == vec_transducer[var].transducer_name){
|
|
ui->lineEdit_scale_factor_4->setText(QString::number(vec_transducer[var].scale_factor));
|
|
}
|
|
}
|
|
}
|
|
|