diff --git a/acceleration.cpp b/acceleration.cpp index 35a5b07..0b8e517 100644 --- a/acceleration.cpp +++ b/acceleration.cpp @@ -1,14 +1,273 @@ #include "acceleration.h" #include "ui_acceleration.h" +#include +#include +#include +#include +#include -Acceleration::Acceleration(QWidget *parent) : +Acceleration::Acceleration(int slot_no_,int channel_,bool active,QWidget *parent) : QWidget(parent), ui(new Ui::Acceleration) { ui->setupUi(this); + slot_no = slot_no_; + channel = channel_; + QString chan = QString("%1").arg(channel); + QString slot = QString("%1").arg(slot_no); + ui->label_channel->setText(chan); + ui->label_slot->setText(slot); + if(active) + ui->label_active->setText("(启用)"); + else + ui->label_active->setText("(停用)"); + QString filePath_filter = QCoreApplication::applicationDirPath() + QString("\\config\\filter_%1_%2.json").arg(slot_no).arg(channel); + readJsonFile(filePath_filter); + QString filePath_variables = QCoreApplication::applicationDirPath() + QString("\\config\\acceleration_variables_%1_%2.json").arg(slot_no).arg(channel); + readJsonFile(filePath_variables); + Init(); } Acceleration::~Acceleration() { delete ui; } +void Acceleration::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(); + if(filePath.contains("filter_")){ + QJsonArray filter_array = json_obj["filter"].toArray(); + for(int i = 0; i < filter_array.size(); i++){ + QJsonObject temp_obj = filter_array[i].toObject(); + filter[i].type = temp_obj["type"].toString(); + filter[i].low = temp_obj["low"].toInt(); + filter[i].high = temp_obj["high"].toInt(); + filter[i].checked = temp_obj["checked"].toBool(); + } + }else if(filePath.contains("acceleration_variables_")){ + + QJsonArray variables_array = json_obj["variables"].toArray(); + for(int i = 0; i < variables_array.size(); i++){ + QJsonObject temp_obj = variables_array[i].toObject(); + variables[i].type = temp_obj["type"].toString(); + if(variables[i].type == "direct"){ + variables[i].full_sacle_range = temp_obj["full_sacle_range"].toString(); + variables[i].clamp_value = temp_obj["clamp_value"].toDouble(); + }else if(variables[i].type == "bias_volt"){ + variables[i].clamp_value = temp_obj["clamp_value"].toDouble(); + }else if(variables[i].type == "1x_ampl"){ + variables[i].checked = temp_obj["checked"].toBool(); + variables[i].full_sacle_range = temp_obj["full_sacle_range"].toString(); + variables[i].clamp_value = temp_obj["clamp_value"].toDouble(); + }else if(variables[i].type == "1x_phase_lag"){ + variables[i].clamp_value = temp_obj["clamp_value"].toDouble(); + }else if(variables[i].type == "2x_ampl"){ + variables[i].checked = temp_obj["checked"].toBool(); + variables[i].full_sacle_range = temp_obj["full_sacle_range"].toString(); + variables[i].clamp_value = temp_obj["clamp_value"].toDouble(); + }else if(variables[i].type == "2x_phase_lag"){ + variables[i].clamp_value = temp_obj["clamp_value"].toDouble(); + } + } + QJsonObject delay_obj = json_obj["delay"].toObject(); + delay.alert = delay_obj["alert"].toInt(); + delay.danger = delay_obj["danger"].toDouble(); + delay.active_100ms = delay_obj["100ms"].toBool(); + alert_variables.rms_active = json_obj["rms_active"].toBool(); + alert_variables.integrate_active = json_obj["integrate_active"].toBool(); + alert_variables.alert_latching = json_obj["alert_latching"].toBool(); + alert_variables.danger_latching = json_obj["danger_latching"].toBool(); + alert_variables.timed_ok = json_obj["timed_ok"].toBool(); + alert_variables.recorder_output = json_obj["recorder_output"].toString(); + alert_variables.two_ma_clamp = json_obj["two_ma_clamp"].toBool(); + alert_variables.trip_mutiply = json_obj["trip_mutiply"].toDouble(); + alert_variables.comparision = json_obj["comparision"].toString(); + alert_variables.comparision_percentage = json_obj["comparision_percentage"].toInt(); + } +} +void Acceleration::Init() +{ + for (int i = 0; i < 3; i++) { + if(filter[i].checked){ + if(filter[i].type == "band_pass"){ + ui->checkBox_band_pass->setChecked(filter[i].checked); + ui->spinBox_band_pass_low->setValue(filter[i].low); + ui->spinBox_band_pass_high->setValue(filter[i].high); + }else if(filter[i].type == "low_pass"){ + ui->checkBox_low_pass->setChecked(filter[i].checked); + ui->comboBox_low_pass_low->setCurrentText(QString(filter[i].low)); + ui->comboBox_low_pass_high->setCurrentText(QString(filter[i].high)); + }else if(filter[i].type == "high_pass"){ + ui->checkBox_high_pass->setChecked(filter[i].checked); + ui->spinBox_high_pass_low->setValue(filter[i].low); + ui->spinBox_high_pass_high->setValue(filter[i].high); + } + } + } + for (int i = 0; i < 4; i++) { + if(variables[i].type == "direct"){ + ui->comboBox_direct_value_range->setCurrentText(variables[i].full_sacle_range); + ui->doubleSpinBox_direct_clamp->setValue(variables[i].clamp_value); + }else if(variables[i].type == "bias_volt"){ + ui->label_bias_voltage->setText(QString::number(variables[i].bias_voltage)); + ui->doubleSpinBox_bias_volt_clamp->setValue(variables[i].clamp_value); + }else if(variables[i].type == "1x_ampl"){ + ui->comboBox_1x_value_range->setCurrentText(variables[i].full_sacle_range); + ui->doubleSpinBox_1x_ampl_clamp->setValue(variables[i].clamp_value); + }else if(variables[i].type == "1x_phase_lag"){ + ui->doubleSpinBox_1x_phase_lag_clamp->setValue(variables[i].clamp_value); + }else if(variables[i].type == "2x_ampl"){ + ui->comboBox_2x_value_range->setCurrentText(variables[i].full_sacle_range); + ui->doubleSpinBox_2x_ampl_clamp->setValue(variables[i].clamp_value); + }else if(variables[i].type == "2x_phase_lag"){ + ui->doubleSpinBox_2x_phase_lag_clamp->setValue(variables[i].clamp_value); + } + } + ui->spinBox_alert->setValue(delay.alert); + ui->doubleSpinBox_danger->setValue(delay.danger); + ui->checkBox_100ms->setChecked(delay.active_100ms); + ui->checkBox_rms->setChecked(alert_variables.rms_active); + ui->checkBox_integrate->setChecked(alert_variables.integrate_active); + ui->checkBox_alert_latching->setChecked(alert_variables.alert_latching); + ui->checkBox_danger_latching->setChecked(alert_variables.danger_latching); + ui->checkBox_timed_ok->setChecked(alert_variables.timed_ok); + ui->comboBox_recorder_output->setCurrentText(alert_variables.recorder_output); + ui->checkBox_two_ma_clamp->setChecked(alert_variables.two_ma_clamp); + ui->doubleSpinBox_trip_mutiply->setValue(alert_variables.trip_mutiply); + ui->comboBox_comparision->setCurrentText(alert_variables.comparision); + ui->spinBox_comparision_percentage->setValue(alert_variables.comparision_percentage); +} + +void Acceleration::on_pushButton_confirm_clicked() +{ + for (int i = 0; i < 3; i++) { + if(filter[i].checked){ + if(filter[i].type == "band_pass"){ + filter[i].checked = ui->checkBox_band_pass->isChecked(); + filter[i].low = ui->spinBox_band_pass_low->value(); + filter[i].high = ui->spinBox_band_pass_high->value(); + }else if(filter[i].type == "low_pass"){ + filter[i].checked = ui->checkBox_low_pass->isChecked(); + filter[i].low = ui->comboBox_low_pass_low->currentText().toInt(); + filter[i].high = ui->comboBox_low_pass_high->currentText().toInt(); + }else if(filter[i].type == "high_pass"){ + filter[i].checked = ui->checkBox_high_pass->isChecked(); + filter[i].low = ui->spinBox_high_pass_low->value(); + filter[i].high = ui->spinBox_high_pass_high->value(); + } + } + } + for (int i = 0; i < 4; i++) { + if(variables[i].type == "direct"){ + variables[i].full_sacle_range = ui->comboBox_direct_value_range->currentText(); + variables[i].clamp_value = ui->doubleSpinBox_direct_clamp->value(); + }else if(variables[i].type == "bias_volt"){ + variables[i].clamp_value = ui->doubleSpinBox_bias_volt_clamp->value(); + }else if(variables[i].type == "1x_ampl"){ + variables[i].checked = ui->checkBox_1x_ampl->isChecked(); + variables[i].full_sacle_range = ui->comboBox_1x_value_range->currentText(); + variables[i].clamp_value = ui->doubleSpinBox_1x_ampl_clamp->value(); + }else if(variables[i].type == "1x_phase_lag"){ + variables[i].clamp_value = ui->doubleSpinBox_1x_phase_lag_clamp->value(); + }else if(variables[i].type == "2x_ampl"){ + variables[i].checked = ui->checkBox_2x_ampl->isChecked(); + variables[i].full_sacle_range = ui->comboBox_2x_value_range->currentText(); + variables[i].clamp_value = ui->doubleSpinBox_2x_ampl_clamp->value(); + }else if(variables[i].type == "2x_phase_lag"){ + variables[i].clamp_value = ui->doubleSpinBox_2x_phase_lag_clamp->value(); + } + } + delay.alert = ui->spinBox_alert->value(); + delay.danger = ui->doubleSpinBox_danger->value(); + delay.active_100ms = ui->checkBox_100ms->isChecked(); + alert_variables.rms_active = ui->checkBox_rms->isChecked(); + alert_variables.integrate_active = ui->checkBox_integrate->isChecked(); + alert_variables.alert_latching = ui->checkBox_alert_latching->isChecked(); + alert_variables.danger_latching = ui->checkBox_danger_latching->isChecked(); + alert_variables.timed_ok = ui->checkBox_timed_ok->isChecked(); + alert_variables.recorder_output = ui->comboBox_recorder_output->currentText(); + alert_variables.two_ma_clamp = ui->checkBox_two_ma_clamp->isChecked(); + alert_variables.trip_mutiply = ui->doubleSpinBox_trip_mutiply->value(); + alert_variables.comparision = ui->comboBox_comparision->currentText(); + alert_variables.comparision_percentage = ui->spinBox_comparision_percentage->value(); + + QJsonObject filter_obj,variables_obj; + QJsonArray filter_array; + for(int i = 0; i < 3; i++){ + QJsonObject temp_obj; + temp_obj.insert("type",filter[i].type); + temp_obj.insert("low",filter[i].low); + temp_obj.insert("high",filter[i].high); + temp_obj.insert("checked",filter[i].checked); + filter_array.append(temp_obj); + } + filter_obj.insert("filter",filter_array); + filter_obj.insert("slot",slot_no); + filter_obj.insert("id",channel); + QJsonArray variables_array; + for(int i = 0; i < 4; i++){ + QJsonObject temp_obj; + temp_obj.insert("type",variables[i].type); + temp_obj.insert("full_sacle_range",variables[i].full_sacle_range); + temp_obj.insert("bias_voltage",variables[i].bias_voltage); + temp_obj.insert("clamp_value",variables[i].clamp_value); + temp_obj.insert("phase_lag",variables[i].phase_lag); + temp_obj.insert("checked",variables[i].checked); + variables_array.append(temp_obj); + } + variables_obj.insert("variables",variables_array); + QJsonObject delay_obj; + delay_obj.insert("alert",delay.alert); + delay_obj.insert("danger",delay.danger); + delay_obj.insert("100ms",delay.active_100ms); + variables_obj.insert("delay",delay_obj); + variables_obj.insert("rms_active",alert_variables.rms_active); + variables_obj.insert("integrate_active",alert_variables.integrate_active); + variables_obj.insert("alert_latching",alert_variables.alert_latching); + variables_obj.insert("danger_latching",alert_variables.danger_latching); + variables_obj.insert("timed_ok",alert_variables.timed_ok); + variables_obj.insert("recorder_output",alert_variables.recorder_output); + variables_obj.insert("two_ma_clamp",alert_variables.two_ma_clamp); + variables_obj.insert("trip_mutiply",alert_variables.trip_mutiply); + variables_obj.insert("comparision",alert_variables.comparision); + variables_obj.insert("comparision_percentage",alert_variables.comparision_percentage); + variables_obj.insert("slot",slot_no); + variables_obj.insert("id",channel); + QJsonDocument jsonDoc_filter(filter_obj); + QString filePath = QCoreApplication::applicationDirPath() + QString("\\config\\filter_%1_%2.json").arg(slot_no).arg(channel); + QFile file(filePath); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + qDebug() << "Cannot open file for writing:" << filePath; + return; + } + file.write(jsonDoc_filter.toJson()); + file.close(); + QJsonDocument jsonDoc_variables(variables_obj); + filePath = QCoreApplication::applicationDirPath() + QString("\\config\\acceleration_variables_%1_%2.json").arg(slot_no).arg(channel); + file.setFileName(filePath); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + qDebug() << "Cannot open file for writing:" << filePath; + return; + } + file.write(jsonDoc_variables.toJson()); + file.close(); +} + diff --git a/acceleration.h b/acceleration.h index d9e39e0..114957a 100644 --- a/acceleration.h +++ b/acceleration.h @@ -2,6 +2,7 @@ #define ACCELERATION_H #include +#include "data_config.h" namespace Ui { class Acceleration; @@ -12,11 +13,24 @@ class Acceleration : public QWidget Q_OBJECT public: - explicit Acceleration(QWidget *parent = nullptr); + explicit Acceleration(int slot_no_,int channel_,bool active,QWidget *parent = nullptr); ~Acceleration(); + int slot_no; + int channel; + +private slots: + void on_pushButton_confirm_clicked(); private: Ui::Acceleration *ui; + + Filter filter[3]; + Dealy delay; + Variables variables[4]; + Alert_Variables alert_variables; + + void readJsonFile(const QString &filePath); + void Init(); }; #endif // ACCELERATION_H diff --git a/acceleration.ui b/acceleration.ui index c90cc19..8fda432 100644 --- a/acceleration.ui +++ b/acceleration.ui @@ -7,7 +7,7 @@ 0 0 703 - 563 + 587 @@ -22,67 +22,76 @@ 50 - + - + - - - - - 通道: - - - - - - - true - - - - - - - (启用) - - - - + + + 通道: + + - - - Qt::Horizontal + + + 1 - - - 40 - 20 - - - + - - - - - 槽位号: - - - - - - - true - - - - + + + (启用) + + + + + + Qt::Horizontal + + + + 236 + 20 + + + + + + + + + + 槽位号: + + + + + + + 8 + + + + + + + + + Qt::Horizontal + + + + 235 + 20 + + + + @@ -114,7 +123,7 @@ - + @@ -128,7 +137,7 @@ - + 60 @@ -157,7 +166,7 @@ - + 60 @@ -212,7 +221,7 @@ - + @@ -226,7 +235,7 @@ - + 60 @@ -248,7 +257,7 @@ - + 60 @@ -287,7 +296,7 @@ - + @@ -301,7 +310,7 @@ - + 60 @@ -324,7 +333,7 @@ - + 60 @@ -424,12 +433,12 @@ 偏置电压 - + 20 110 - 71 + 81 16 @@ -437,12 +446,12 @@ 1倍频幅值 - + 20 180 - 71 + 81 16 @@ -476,17 +485,23 @@ 默认值 - + 130 50 - 69 + 80 22 + + + 80 + 16777215 + + - + 260 @@ -495,8 +510,14 @@ 22 + + + 80 + 16777215 + + - + 130 @@ -506,10 +527,10 @@ - -24Vdc + -24 - + 260 @@ -522,7 +543,7 @@ 1 - + 130 @@ -532,7 +553,7 @@ - + 260 @@ -568,7 +589,7 @@ 2倍频相位 - + 260 @@ -584,7 +605,7 @@ 100.000000000000000 - + 260 @@ -594,7 +615,7 @@ - + 260 @@ -607,7 +628,7 @@ 0 - + 130 @@ -617,7 +638,7 @@ - + 20 @@ -630,12 +651,12 @@ 有效值 - + 130 250 - 71 + 61 16 @@ -681,7 +702,7 @@ 危险 - + 60 @@ -697,7 +718,7 @@ 1.000000000000000 - + 60 @@ -736,7 +757,7 @@ 1.0 - 60.0s - + 60 @@ -750,8 +771,21 @@ + + + + 190 + 80 + 53 + 15 + + + + Vdc + + - + 460 @@ -764,7 +798,7 @@ 告警锁定 - + 460 @@ -790,7 +824,7 @@ 倍增 - + 460 @@ -829,7 +863,7 @@ 记录输出 - + 460 @@ -874,7 +908,7 @@ - + 460 @@ -887,12 +921,12 @@ 2 mA 默认值 - + 460 60 - 141 + 181 16 @@ -913,7 +947,7 @@ 比较 - + 460 @@ -923,7 +957,7 @@ - + 460 @@ -999,7 +1033,7 @@ - + 100 @@ -1012,7 +1046,7 @@ - + 100 @@ -1025,7 +1059,7 @@ - + 100 @@ -1038,7 +1072,7 @@ - + 100 @@ -1051,7 +1085,7 @@ - + 100 @@ -1064,7 +1098,7 @@ - + 100 diff --git a/data_config.h b/data_config.h index 0374cbf..5da692a 100644 --- a/data_config.h +++ b/data_config.h @@ -25,7 +25,7 @@ enum SlotType{ typedef struct{ int id; - QString channle_name; + QString channel_name; bool standby; bool active; QString rack_type; @@ -37,4 +37,39 @@ typedef struct{ float normal_voltage_low; float normal_voltage_high; }SeismicMonitor; + +typedef struct{ + QString type; + int low; + int high; + bool checked; +} Filter; + +typedef struct{ + QString type; + QString full_sacle_range; + int bias_voltage; + float clamp_value; + int phase_lag; + bool checked; +} Variables; + +typedef struct{ + int alert; + float danger; + bool active_100ms; +} Dealy; +typedef struct{ + bool rms_active; + bool integrate_active; + bool alert_latching; + bool danger_latching; + bool timed_ok; + QString recorder_output; + bool two_ma_clamp; + float trip_mutiply; + QString comparision; + int comparision_percentage; +} Alert_Variables; + #endif // DATA_CONFIG_H diff --git a/radial_vibration.ui b/radial_vibration.ui index d423152..fb83a29 100644 --- a/radial_vibration.ui +++ b/radial_vibration.ui @@ -23,7 +23,7 @@ - 1 + 0