From 2c42a9eaa7930ddc3e0e1993eb7aee23b17cef82 Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Wed, 23 Apr 2025 14:44:58 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BB=91=E5=AE=9A=E9=80=9A?= =?UTF-8?q?=E9=81=93=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config_mgr.cpp | 2 + data_config.h | 1 + mainwindow.cpp | 7 +- seismic_monitor.cpp | 4 + setpoint.cpp | 377 +++++++++++++++++++--------------------- setpoint.h | 1 + singlerelay.cpp | 2 +- tmrrelayassociation.cpp | 79 ++++++--- tmrrelayassociation.h | 77 +++++--- tmrrelayassociation.ui | 34 +--- 10 files changed, 303 insertions(+), 281 deletions(-) diff --git a/config_mgr.cpp b/config_mgr.cpp index 893dc07..5607fe2 100644 --- a/config_mgr.cpp +++ b/config_mgr.cpp @@ -66,6 +66,7 @@ void ConfigMgr::Save(QString & file_path) { channel_item["sampling_rate"] = ptr->base_config_[cid].sampling_rate; channel_item["power"] = ptr->base_config_[cid].power; channel_item["point_name"] = ptr->base_config_[cid].point_name; + channel_item["chan_id"] = ptr->base_config_[cid].chan_id; QJsonArray voltage_range; voltage_range.append(ptr->base_config_[cid].normal_voltage_low); voltage_range.append(ptr->base_config_[cid].normal_voltage_high); @@ -395,6 +396,7 @@ void ConfigMgr::Load(QString filename) { vib_data->base_config_[j].normal_voltage_high = voltage_range_array[1].toDouble(); vib_data->base_config_[j].power = channel["power"].toBool(); vib_data->base_config_[j].point_name = channel["point_name"].toString(); + vib_data->base_config_[j].chan_id = channel["chan_id"].toString(); //setpoint QJsonObject setpoint_data = channel["setpoint"].toObject(); vib_data->alert_danger[j].direct_upper = setpoint_data["direct_upper"].toDouble(); diff --git a/data_config.h b/data_config.h index 57af675..c6c268e 100644 --- a/data_config.h +++ b/data_config.h @@ -105,6 +105,7 @@ typedef enum { typedef struct { int id; QString point_name; + QString chan_id; bool standby; bool active; int rack_type; // VibRackType diff --git a/mainwindow.cpp b/mainwindow.cpp index e0c1d97..9802525 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -176,8 +176,8 @@ void MainWindow::createMenu(const QString &rootTitle, QPushButton *parent) { // 创建第三层子菜单:/HAM824 单板卡、三冗余板卡 QAction *proximitor_1 = proximitor_menu->addAction("/HAM824 单板卡"); proximitor_1->setData(kCardVibSingle); - QAction *proximitor_2 = proximitor_menu->addAction("/HAM824 三冗余板卡"); - proximitor_2->setData(kCardVibTMRPrimary); + //QAction *proximitor_2 = proximitor_menu->addAction("/HAM824 三冗余板卡"); + //proximitor_2->setData(kCardVibTMRPrimary); QAction *rpm_1 = rpm_menu->addAction("/OPM844 单板卡"); rpm_1->setData(kCardSpeedSingle); // 创建第二层子菜单:/KPM834 键相模块 @@ -213,7 +213,7 @@ void MainWindow::createMenu(const QString &rootTitle, QPushButton *parent) { }); // 连接所有菜单项 QObject::connect(proximitor_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); - QObject::connect(proximitor_2, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); + //QObject::connect(proximitor_2, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); QObject::connect(rpm_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); QObject::connect(relays_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); QObject::connect(relays_2, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); @@ -566,6 +566,7 @@ void MainWindow::on_pushButton_save_clicked() { return; QString file_name = filepath + "\\tsi_config_file.json"; ConfigMgr::Instance()->Save(file_name); + return; // 读取文件内容 QFile file(file_name); if (!file.open(QIODevice::ReadOnly)) { diff --git a/seismic_monitor.cpp b/seismic_monitor.cpp index acfefb7..16ba123 100644 --- a/seismic_monitor.cpp +++ b/seismic_monitor.cpp @@ -117,6 +117,7 @@ void Seismic_monitor::UpdateData(std::shared_ptr vib_data) { vib_data->base_config_[var].normal_voltage_low = ui->doubleSpinBox_low_1->value(); vib_data->base_config_[var].normal_voltage_high = ui->doubleSpinBox_high_1->value(); vib_data->base_config_[var].power = ui->checkBox_power_1->isChecked(); + vib_data->base_config_[var].chan_id = QString("S%1C%2").arg(QString::number(slot_no, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); } else if (var + 1 == 2) { vib_data->base_config_[var].standby = ui->checkBox_standby_1->isChecked(); vib_data->base_config_[var].active = ui->checkBox_enable_2->isChecked(); @@ -128,6 +129,7 @@ void Seismic_monitor::UpdateData(std::shared_ptr vib_data) { vib_data->base_config_[var].normal_voltage_low = ui->doubleSpinBox_low_2->value(); vib_data->base_config_[var].normal_voltage_high = ui->doubleSpinBox_high_2->value(); vib_data->base_config_[var].power = ui->checkBox_power_2->isChecked(); + vib_data->base_config_[var].chan_id = QString("S%1C%2").arg(QString::number(slot_no, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); } else if (var + 1 == 3) { vib_data->base_config_[var].standby = ui->checkBox_standby_2->isChecked(); vib_data->base_config_[var].active = ui->checkBox_enable_3->isChecked(); @@ -139,6 +141,7 @@ void Seismic_monitor::UpdateData(std::shared_ptr vib_data) { vib_data->base_config_[var].normal_voltage_low = ui->doubleSpinBox_low_3->value(); vib_data->base_config_[var].normal_voltage_high = ui->doubleSpinBox_high_3->value(); vib_data->base_config_[var].power = ui->checkBox_power_3->isChecked(); + vib_data->base_config_[var].chan_id = QString("S%1C%2").arg(QString::number(slot_no, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); } else if (var + 1 == 4) { vib_data->base_config_[var].standby = ui->checkBox_standby_2->isChecked(); vib_data->base_config_[var].active = ui->checkBox_enable_4->isChecked(); @@ -150,6 +153,7 @@ void Seismic_monitor::UpdateData(std::shared_ptr vib_data) { vib_data->base_config_[var].normal_voltage_low = ui->doubleSpinBox_low_4->value(); vib_data->base_config_[var].normal_voltage_high = ui->doubleSpinBox_high_4->value(); vib_data->base_config_[var].power = ui->checkBox_power_4->isChecked(); + vib_data->base_config_[var].chan_id = QString("S%1C%2").arg(QString::number(slot_no, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); } } } diff --git a/setpoint.cpp b/setpoint.cpp index 21aebe9..04f03d6 100644 --- a/setpoint.cpp +++ b/setpoint.cpp @@ -56,185 +56,9 @@ void Setpoint::Init(){ switch (car_type) { case kCardVibSingle:{ - slider_direct->setRange(0,20); slider_1x_ampl->setRange(0,20); slider_2x_ampl->setRange(0,20); - - int chan = ui->comboBox_chan->currentIndex(); - std::shared_ptr setpoint_data = std::dynamic_pointer_cast(base_ptr); - std::vector> variable_ = setpoint_data->variables_; - if(setpoint_data->base_config_[chan].channel_type == kVibRadial){ - for (int var = 0; var < variable_.size(); ++var) { - if(variable_[var]->direct_.full_scale_range == 0){ - slider_direct->setRange(0,100); - slider_danger->setRange(0,100); - }else if(variable_[var]->direct_.full_scale_range == 1){ - slider_direct->setRange(0,150); - slider_danger->setRange(0,150); - }else if(variable_[var]->direct_.full_scale_range == 2){ - slider_direct->setRange(0,200); - slider_danger->setRange(0,200); - }else if(variable_[var]->direct_.full_scale_range == 3){ - slider_direct->setRange(0,400); - slider_danger->setRange(0,400); - }else if(variable_[var]->direct_.full_scale_range == 4){ - slider_direct->setRange(0,500); - slider_danger->setRange(0,500); - } - ui->label_direct->setText("um"); - ui->label_danger->setText("um"); - } - } - if(setpoint_data->base_config_[chan].channel_type == kVibAcc){ - std::shared_ptr base_channel_ptr = setpoint_data->GetChannelPtr(chan + 1); - std::shared_ptr av_ptr = std::dynamic_pointer_cast(base_channel_ptr); - for (int var = 0; var < variable_.size(); ++ var) { - if(variable_[var]->direct_.full_scale_range == 0){ - slider_direct->setRange(0,20); - slider_danger->setRange(0,20); - }else if(variable_[var]->direct_.full_scale_range == 1){ - slider_direct->setRange(0,50); - slider_danger->setRange(0,50); - }else if(variable_[var]->direct_.full_scale_range == 2){ - slider_direct->setRange(0,100); - slider_danger->setRange(0,100); - }else if(variable_[var]->direct_.full_scale_range == 3){ - slider_direct->setRange(0,200); - slider_danger->setRange(0,200); - }else if(variable_[var]->direct_.full_scale_range == 4){ - slider_direct->setRange(0,250); - slider_danger->setRange(0,250); - }else if(variable_[var]->direct_.full_scale_range == 5){ - slider_direct->setRange(0,400); - slider_danger->setRange(0,400); - } - ui->label_direct->setText("m/s^2 pk"); - ui->label_danger->setText("m/s^2 pk"); - } - if(av_ptr->rms_active_){ - for (int var = 0; var < variable_.size(); ++ var) { - if(variable_[var]->direct_.full_scale_range == 0){ - slider_direct->setRange(0,20); - slider_danger->setRange(0,20); - }else if(variable_[var]->direct_.full_scale_range == 1){ - slider_direct->setRange(0,50); - slider_danger->setRange(0,50); - }else if(variable_[var]->direct_.full_scale_range == 2){ - slider_direct->setRange(0,100); - slider_danger->setRange(0,100); - }else if(variable_[var]->direct_.full_scale_range == 3){ - slider_direct->setRange(0,200); - slider_danger->setRange(0,200); - } - ui->label_direct->setText("m/s^2 rms"); - ui->label_danger->setText("m/s^2 rms"); - } - } - if(av_ptr->integrate_active_){ - for (int var = 0; var < variable_.size(); ++ var) { - if(variable_[var]->direct_.full_scale_range == 0){ - slider_direct->setRange(0,25); - slider_danger->setRange(0,25); - }else if(variable_[var]->direct_.full_scale_range == 1){ - slider_direct->setRange(0,50); - slider_danger->setRange(0,50); - }else if(variable_[var]->direct_.full_scale_range == 2){ - slider_direct->setRange(0,100); - slider_danger->setRange(0,100); - } - ui->label_direct->setText("mm/s pk"); - ui->label_danger->setText("mm/s pk"); - } - } - if(av_ptr->rms_active_ && av_ptr->integrate_active_){ - for (int var = 0; var < variable_.size(); ++ var) { - if(variable_[var]->direct_.full_scale_range == 0){ - slider_direct->setRange(0,25); - slider_danger->setRange(0,25); - }else if(variable_[var]->direct_.full_scale_range == 1){ - slider_direct->setRange(0,50); - slider_danger->setRange(0,50); - } - ui->label_direct->setText("mm/s rms"); - ui->label_danger->setText("mm/s rms"); - } - } - } - if(setpoint_data->base_config_[chan].channel_type == kVibVelocity){ - std::shared_ptr base_channel_ptr = setpoint_data->GetChannelPtr(chan + 1); - std::shared_ptr av_ptr = std::dynamic_pointer_cast(base_channel_ptr); - for (int var = 0; var < variable_.size(); ++ var) { - if(variable_[var]->direct_.full_scale_range == 0){ - slider_direct->setRange(0,10); - slider_danger->setRange(0,10); - }else if(variable_[var]->direct_.full_scale_range == 1){ - slider_direct->setRange(0,20); - slider_danger->setRange(0,20); - }else if(variable_[var]->direct_.full_scale_range == 2){ - slider_direct->setRange(0,50); - slider_danger->setRange(0,50); - } - ui->label_direct->setText("mm/s pk"); - ui->label_danger->setText("mm/s pk"); - } - if(av_ptr->rms_active_){ - for (int var = 0; var < variable_.size(); ++ var) { - if(variable_[var]->direct_.full_scale_range == 0){ - slider_direct->setRange(0,10); - slider_danger->setRange(0,10); - }else if(variable_[var]->direct_.full_scale_range == 1){ - slider_direct->setRange(0,20); - slider_danger->setRange(0,20); - }else if(variable_[var]->direct_.full_scale_range == 2){ - slider_direct->setRange(0,50); - slider_danger->setRange(0,50); - } - ui->label_direct->setText("mm/s rms"); - ui->label_danger->setText("mm/s rms"); - } - } - if(av_ptr->integrate_active_){ - for (int var = 0; var < variable_.size(); ++ var) { - if(variable_[var]->direct_.full_scale_range == 0){ - slider_direct->setRange(0,100); - slider_danger->setRange(0,100); - }else if(variable_[var]->direct_.full_scale_range == 1){ - slider_direct->setRange(0,200); - slider_danger->setRange(0,200); - }else if(variable_[var]->direct_.full_scale_range == 2){ - slider_direct->setRange(0,500); - slider_danger->setRange(0,500); - } - ui->label_direct->setText("um pp"); - ui->label_danger->setText("um pp"); - } - } - } - ui->lineEdit_direct_upper->setText(QString::number(setpoint_data->alert_danger[chan].direct_upper)); - ui->checkBox_direct->setChecked(setpoint_data->alert_danger[chan].direct_enable); - if(setpoint_data->alert_danger[chan].direct_upper > 0){ - slider_direct->m_upper = setpoint_data->alert_danger[chan].direct_upper; - } - ui->lineEdit_1x_ampl_upper->setText(QString::number(setpoint_data->alert_danger[chan].x1_ampl_upper)); - ui->lineEdit_1x_ampl_lower->setText(QString::number(setpoint_data->alert_danger[chan].x1_ampl_lower)); - ui->checkBox_1x_ampl->setChecked(setpoint_data->alert_danger[chan].x1_ampl_enable); - if(setpoint_data->alert_danger[chan].x1_ampl_upper > 0 && setpoint_data->alert_danger[chan].x1_ampl_lower > 0){ - slider_1x_ampl->m_upper = setpoint_data->alert_danger[chan].x1_ampl_upper; - slider_1x_ampl->m_lower = setpoint_data->alert_danger[chan].x1_ampl_lower; - } - ui->lineEdit_2x_ampl_upper->setText(QString::number(setpoint_data->alert_danger[chan].x2_ampl_upper)); - ui->lineEdit_2x_ampl_lower->setText(QString::number(setpoint_data->alert_danger[chan].x2_ampl_lower)); - ui->checkBox_2x_ampl->setChecked(setpoint_data->alert_danger[chan].x2_ampl_enable); - if(setpoint_data->alert_danger[chan].x2_ampl_upper > 0 && setpoint_data->alert_danger[chan].x2_ampl_lower > 0){ - slider_2x_ampl->m_upper = setpoint_data->alert_danger[chan].x2_ampl_upper; - slider_2x_ampl->m_lower = setpoint_data->alert_danger[chan].x2_ampl_lower; - } - ui->lineEdit_danger_upper->setText(QString::number(setpoint_data->alert_danger[chan].danger_upper)); - ui->checkBox_danger->setChecked(setpoint_data->alert_danger[chan].danger_enable); - if(setpoint_data->alert_danger[chan].danger_upper > 0){ - slider_danger->m_upper = setpoint_data->alert_danger[chan].danger_upper; - slider_danger->m_lower = 0; - } + update(); }break; } QObject::connect(ui->lineEdit_direct_upper, &QLineEdit::editingFinished, [&]() { @@ -321,29 +145,184 @@ void Setpoint::onComboBoxIndexChanged(int index){ vib_alert_ptr->alert_danger[current_index].danger_enable = ui->checkBox_danger->checkState(); current_index = index; - - ui->lineEdit_direct_upper->setText(QString::number(vib_alert_ptr->alert_danger[index].direct_upper)); - ui->checkBox_direct->setChecked(vib_alert_ptr->alert_danger[index].direct_enable); - if(vib_alert_ptr->alert_danger[index].direct_upper > 0) - slider_direct->m_upper = vib_alert_ptr->alert_danger[index].direct_upper; - ui->lineEdit_1x_ampl_upper->setText(QString::number(vib_alert_ptr->alert_danger[index].x1_ampl_upper)); - ui->lineEdit_1x_ampl_lower->setText(QString::number(vib_alert_ptr->alert_danger[index].x1_ampl_lower)); - ui->checkBox_1x_ampl->setChecked(vib_alert_ptr->alert_danger[index].x1_ampl_enable); - if(vib_alert_ptr->alert_danger[index].x1_ampl_upper > 0 && vib_alert_ptr->alert_danger[index].x1_ampl_lower > 0){ - slider_1x_ampl->m_upper = vib_alert_ptr->alert_danger[index].x1_ampl_upper; - slider_1x_ampl->m_lower = vib_alert_ptr->alert_danger[index].x1_ampl_lower; + update(); +} +void Setpoint::update() +{ + int chan = ui->comboBox_chan->currentIndex(); + std::shared_ptr base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no); + std::shared_ptr setpoint_data = std::dynamic_pointer_cast(base_ptr); + std::vector> variable_ = setpoint_data->variables_; + if(setpoint_data->base_config_[chan].channel_type == kVibRadial){ + for (int var = 0; var < variable_.size(); ++var) { + if(variable_[var]->direct_.full_scale_range == 0){ + slider_direct->setRange(0,100); + slider_danger->setRange(0,100); + }else if(variable_[var]->direct_.full_scale_range == 1){ + slider_direct->setRange(0,150); + slider_danger->setRange(0,150); + }else if(variable_[var]->direct_.full_scale_range == 2){ + slider_direct->setRange(0,200); + slider_danger->setRange(0,200); + }else if(variable_[var]->direct_.full_scale_range == 3){ + slider_direct->setRange(0,400); + slider_danger->setRange(0,400); + }else if(variable_[var]->direct_.full_scale_range == 4){ + slider_direct->setRange(0,500); + slider_danger->setRange(0,500); + } + ui->label_direct->setText("um"); + ui->label_danger->setText("um"); + } } - ui->lineEdit_2x_ampl_upper->setText(QString::number(vib_alert_ptr->alert_danger[index].x2_ampl_upper)); - ui->lineEdit_2x_ampl_lower->setText(QString::number(vib_alert_ptr->alert_danger[index].x2_ampl_lower)); - ui->checkBox_2x_ampl->setChecked(vib_alert_ptr->alert_danger[index].x2_ampl_enable); - if(vib_alert_ptr->alert_danger[index].x2_ampl_upper > 0 && vib_alert_ptr->alert_danger[index].x2_ampl_lower > 0){ - slider_2x_ampl->m_upper = vib_alert_ptr->alert_danger[index].x2_ampl_upper; - slider_2x_ampl->m_lower = vib_alert_ptr->alert_danger[index].x2_ampl_lower; + if(setpoint_data->base_config_[chan].channel_type == kVibAcc){ + std::shared_ptr base_channel_ptr = setpoint_data->GetChannelPtr(chan + 1); + std::shared_ptr av_ptr = std::dynamic_pointer_cast(base_channel_ptr); + for (int var = 0; var < variable_.size(); ++ var) { + if(variable_[var]->direct_.full_scale_range == 0){ + slider_direct->setRange(0,20); + slider_danger->setRange(0,20); + }else if(variable_[var]->direct_.full_scale_range == 1){ + slider_direct->setRange(0,50); + slider_danger->setRange(0,50); + }else if(variable_[var]->direct_.full_scale_range == 2){ + slider_direct->setRange(0,100); + slider_danger->setRange(0,100); + }else if(variable_[var]->direct_.full_scale_range == 3){ + slider_direct->setRange(0,200); + slider_danger->setRange(0,200); + }else if(variable_[var]->direct_.full_scale_range == 4){ + slider_direct->setRange(0,250); + slider_danger->setRange(0,250); + }else if(variable_[var]->direct_.full_scale_range == 5){ + slider_direct->setRange(0,400); + slider_danger->setRange(0,400); + } + ui->label_direct->setText("m/s^2 pk"); + ui->label_danger->setText("m/s^2 pk"); + } + if(av_ptr->rms_active_){ + for (int var = 0; var < variable_.size(); ++ var) { + if(variable_[var]->direct_.full_scale_range == 0){ + slider_direct->setRange(0,20); + slider_danger->setRange(0,20); + }else if(variable_[var]->direct_.full_scale_range == 1){ + slider_direct->setRange(0,50); + slider_danger->setRange(0,50); + }else if(variable_[var]->direct_.full_scale_range == 2){ + slider_direct->setRange(0,100); + slider_danger->setRange(0,100); + }else if(variable_[var]->direct_.full_scale_range == 3){ + slider_direct->setRange(0,200); + slider_danger->setRange(0,200); + } + ui->label_direct->setText("m/s^2 rms"); + ui->label_danger->setText("m/s^2 rms"); + } + } + if(av_ptr->integrate_active_){ + for (int var = 0; var < variable_.size(); ++ var) { + if(variable_[var]->direct_.full_scale_range == 0){ + slider_direct->setRange(0,25); + slider_danger->setRange(0,25); + }else if(variable_[var]->direct_.full_scale_range == 1){ + slider_direct->setRange(0,50); + slider_danger->setRange(0,50); + }else if(variable_[var]->direct_.full_scale_range == 2){ + slider_direct->setRange(0,100); + slider_danger->setRange(0,100); + } + ui->label_direct->setText("mm/s pk"); + ui->label_danger->setText("mm/s pk"); + } + } + if(av_ptr->rms_active_ && av_ptr->integrate_active_){ + for (int var = 0; var < variable_.size(); ++ var) { + if(variable_[var]->direct_.full_scale_range == 0){ + slider_direct->setRange(0,25); + slider_danger->setRange(0,25); + }else if(variable_[var]->direct_.full_scale_range == 1){ + slider_direct->setRange(0,50); + slider_danger->setRange(0,50); + } + ui->label_direct->setText("mm/s rms"); + ui->label_danger->setText("mm/s rms"); + } + } } - ui->lineEdit_danger_upper->setText(QString::number(vib_alert_ptr->alert_danger[index].danger_upper)); - ui->checkBox_danger->setChecked(vib_alert_ptr->alert_danger[index].danger_enable); - if(vib_alert_ptr->alert_danger[index].danger_upper > 0){ - slider_danger->m_upper = vib_alert_ptr->alert_danger[index].danger_upper; + if(setpoint_data->base_config_[chan].channel_type == kVibVelocity){ + std::shared_ptr base_channel_ptr = setpoint_data->GetChannelPtr(chan + 1); + std::shared_ptr av_ptr = std::dynamic_pointer_cast(base_channel_ptr); + for (int var = 0; var < variable_.size(); ++ var) { + if(variable_[var]->direct_.full_scale_range == 0){ + slider_direct->setRange(0,10); + slider_danger->setRange(0,10); + }else if(variable_[var]->direct_.full_scale_range == 1){ + slider_direct->setRange(0,20); + slider_danger->setRange(0,20); + }else if(variable_[var]->direct_.full_scale_range == 2){ + slider_direct->setRange(0,50); + slider_danger->setRange(0,50); + } + ui->label_direct->setText("mm/s pk"); + ui->label_danger->setText("mm/s pk"); + } + if(av_ptr->rms_active_){ + for (int var = 0; var < variable_.size(); ++ var) { + if(variable_[var]->direct_.full_scale_range == 0){ + slider_direct->setRange(0,10); + slider_danger->setRange(0,10); + }else if(variable_[var]->direct_.full_scale_range == 1){ + slider_direct->setRange(0,20); + slider_danger->setRange(0,20); + }else if(variable_[var]->direct_.full_scale_range == 2){ + slider_direct->setRange(0,50); + slider_danger->setRange(0,50); + } + ui->label_direct->setText("mm/s rms"); + ui->label_danger->setText("mm/s rms"); + } + } + if(av_ptr->integrate_active_){ + for (int var = 0; var < variable_.size(); ++ var) { + if(variable_[var]->direct_.full_scale_range == 0){ + slider_direct->setRange(0,100); + slider_danger->setRange(0,100); + }else if(variable_[var]->direct_.full_scale_range == 1){ + slider_direct->setRange(0,200); + slider_danger->setRange(0,200); + }else if(variable_[var]->direct_.full_scale_range == 2){ + slider_direct->setRange(0,500); + slider_danger->setRange(0,500); + } + ui->label_direct->setText("um pp"); + ui->label_danger->setText("um pp"); + } + } + } + ui->lineEdit_direct_upper->setText(QString::number(setpoint_data->alert_danger[chan].direct_upper)); + ui->checkBox_direct->setChecked(setpoint_data->alert_danger[chan].direct_enable); + if(setpoint_data->alert_danger[chan].direct_upper > 0){ + slider_direct->m_upper = setpoint_data->alert_danger[chan].direct_upper; + } + ui->lineEdit_1x_ampl_upper->setText(QString::number(setpoint_data->alert_danger[chan].x1_ampl_upper)); + ui->lineEdit_1x_ampl_lower->setText(QString::number(setpoint_data->alert_danger[chan].x1_ampl_lower)); + ui->checkBox_1x_ampl->setChecked(setpoint_data->alert_danger[chan].x1_ampl_enable); + if(setpoint_data->alert_danger[chan].x1_ampl_upper > 0 && setpoint_data->alert_danger[chan].x1_ampl_lower > 0){ + slider_1x_ampl->m_upper = setpoint_data->alert_danger[chan].x1_ampl_upper; + slider_1x_ampl->m_lower = setpoint_data->alert_danger[chan].x1_ampl_lower; + } + ui->lineEdit_2x_ampl_upper->setText(QString::number(setpoint_data->alert_danger[chan].x2_ampl_upper)); + ui->lineEdit_2x_ampl_lower->setText(QString::number(setpoint_data->alert_danger[chan].x2_ampl_lower)); + ui->checkBox_2x_ampl->setChecked(setpoint_data->alert_danger[chan].x2_ampl_enable); + if(setpoint_data->alert_danger[chan].x2_ampl_upper > 0 && setpoint_data->alert_danger[chan].x2_ampl_lower > 0){ + slider_2x_ampl->m_upper = setpoint_data->alert_danger[chan].x2_ampl_upper; + slider_2x_ampl->m_lower = setpoint_data->alert_danger[chan].x2_ampl_lower; + } + ui->lineEdit_danger_upper->setText(QString::number(setpoint_data->alert_danger[chan].danger_upper)); + ui->checkBox_danger->setChecked(setpoint_data->alert_danger[chan].danger_enable); + if(setpoint_data->alert_danger[chan].danger_upper > 0){ + slider_danger->m_upper = setpoint_data->alert_danger[chan].danger_upper; + slider_danger->m_lower = 0; } } - diff --git a/setpoint.h b/setpoint.h index 2bf629d..3a9a6ff 100644 --- a/setpoint.h +++ b/setpoint.h @@ -37,6 +37,7 @@ private: std::shared_ptr vib_alert_ptr = nullptr; int current_index; void Init(); + void update(); }; #endif // SETPOINT_H diff --git a/singlerelay.cpp b/singlerelay.cpp index 8902f83..ac823e0 100644 --- a/singlerelay.cpp +++ b/singlerelay.cpp @@ -105,7 +105,7 @@ void SingleRelay::OnButtonGroup(QAbstractButton *slot_btn) { std::shared_ptr vib_data = std::dynamic_pointer_cast(base_ptr); if((vib_data->base_config_[var].standby && vib_data->base_config_[var + 1].standby && !(var % 2))) continue; - QString item_str = QString("S%1C%2P##NO (Slot %3 Channel %4 Not OK)").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')).arg(button_id).arg(var+1); + QString item_str = QString("%1 (Slot %2 Channel %3 Not OK)").arg(vib_data->base_config_[var].point_name).arg(button_id).arg(var+1); QListWidgetItem *item = new QListWidgetItem(item_str); QString item_data = QString("S%1C%2P##NO").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); item->setData(Qt::UserRole, item_data); diff --git a/tmrrelayassociation.cpp b/tmrrelayassociation.cpp index 6c185e3..16cac0d 100644 --- a/tmrrelayassociation.cpp +++ b/tmrrelayassociation.cpp @@ -17,7 +17,7 @@ TMRRelayAssociation::TMRRelayAssociation(int slot,int cardtype,QWidget *parent) } ui->label_slot_no->setText(QString::number(slot_no)); QVBoxLayout *layout_available = new QVBoxLayout(ui->widget_available); - list_widget_available = new DraggableListWidget; + list_widget_available = new QListWidget(); layout_available->addWidget(list_widget_available); list_widget_available->setDragEnabled(true); @@ -57,7 +57,7 @@ TMRRelayAssociation::TMRRelayAssociation(int slot,int cardtype,QWidget *parent) connect(treeView_relay,&QTreeView::customContextMenuRequested,this,&TMRRelayAssociation::on_treeView_Relay_customContextMenuRequested); current_index = ui->comboBox_relay_ch->currentIndex(); Init(); - + onComboBoxIndexChanged(current_index); // QString expr = "((S01C01A1 + S01C02A1 + (S02C01A1 * S02C01A2)) * (S02C01A2 + S02C01A1 + (S02C01A1 + S02C01A2)) * (S02C01A1 * S02C01A2))"; // setExpressionToTreeView(treeView_relay, expr); } @@ -116,10 +116,37 @@ void TMRRelayAssociation::Init(){ return; } relay_data = std::dynamic_pointer_cast(base_ptr); - qDebug() << "logic" <tmr_relay[current_index].logic_expression; - ui->checkBox_sgcc->setChecked(relay_data->sgcc_enable); - setExpressionToTreeView(treeView_relay, relay_data->tmr_relay[current_index].logic_expression); + qDebug() << "logic" <tmr_relay[current_index].logic_expression; + for(int i = 0 ; i < SLOT_NUM ; i++){ + std::shared_ptr cardbase_ptr = ConfigMgr::Instance()->GetSlotPtr(i + 1); + if(cardbase_ptr != nullptr && + cardbase_ptr->card_type_ == kCardVibSingle){ + qDebug() << "i" << i; + std::shared_ptr ptr = std::dynamic_pointer_cast(cardbase_ptr); + for (int var = 0; var < CHANNEL_COUNT; ++var) { + QString item_data,item_str; + if(ptr->alert_danger[var].direct_enable || + ptr->alert_danger[var].x1_ampl_enable || + ptr->alert_danger[var].x2_ampl_enable){ + item_str = QString("%1 (槽位 %2 通道 %3 警报)").arg(ptr->base_config_[var].point_name).arg(ptr->base_config_[var].chan_id.mid(1,2)).arg(ptr->base_config_[var].chan_id.mid(4,2)); + item_data = QString("%1A1").arg(ptr->base_config_[var].chan_id); + } + if(ptr->alert_danger[var].danger_enable){ + item_str = QString("%1 (槽位 %2 通道 %3 危险)").arg(ptr->base_config_[var].point_name).arg(ptr->base_config_[var].chan_id.mid(1,2)).arg(ptr->base_config_[var].chan_id.mid(4,2)); + item_data = QString("%1A2").arg(ptr->base_config_[var].chan_id); + } + channelNameMap[item_data] = item_str; + } + }else if(cardbase_ptr != nullptr && + (cardbase_ptr->card_type_ == kCardSpeedSingle)){ + + } + } + ui->checkBox_sgcc->setChecked(relay_data->sgcc_enable); + if(!relay_data->tmr_relay[current_index].logic_expression.isEmpty()){ + setExpressionToTreeView(treeView_relay, relay_data->tmr_relay[current_index].logic_expression); + } } ExprNode* TMRRelayAssociation::parseExpression(const QString& expr, int& pos) { auto skipSpaces = [&]() { @@ -174,7 +201,14 @@ ExprNode* TMRRelayAssociation::parseExpression(const QString& expr, int& pos) { } QStandardItem* TMRRelayAssociation::buildItemTree(ExprNode* node) { if (!node) return nullptr; - QStandardItem* item = new QStandardItem(node->value); + QString displayText; + if (node->value == "+" || node->value == "*") { + displayText = (node->value == "+") ? "OR" : "AND"; // 运算符显示 + } else { + displayText = channelNameMap.value(node->value, node->value); // 显示名 + } + QStandardItem* item = new QStandardItem(displayText); + item->setData(node->value, Qt::UserRole); // 原始表达式key for (ExprNode* child : node->children) { item->appendRow(buildItemTree(child)); } @@ -193,7 +227,8 @@ QString TMRRelayAssociation::buildLogicExpression(QStandardItem *item) { if (!item) return ""; int childCount = item->rowCount(); - QString text = item->text().trimmed(); + QVariant userData = item->data(Qt::UserRole); + QString text = userData.toString().trimmed(); if (childCount == 0) { // 叶子节点,直接返回表达式,比如 S01C01A1 @@ -360,31 +395,31 @@ void TMRRelayAssociation::OnButtonGroup(QAbstractButton *slot_btn) { int button_id = object_name.right(object_name.length() - 15).toInt(); std::shared_ptr base_ptr = ConfigMgr::Instance()->GetSlotPtr(button_id); std::shared_ptr ptr = std::dynamic_pointer_cast(base_ptr); - QString item_str = QString("*"); - QListWidgetItem *item_or = new QListWidgetItem("*"); - item_or->setData(Qt::UserRole, "*"); - list_widget_available->addItem(item_or); - - QListWidgetItem *item_and = new QListWidgetItem("+"); - item_and->setData(Qt::UserRole, "+"); + QListWidgetItem *item_and = new QListWidgetItem("AND"); + item_and->setData(Qt::UserRole, "*"); list_widget_available->addItem(item_and); + + QListWidgetItem *item_or = new QListWidgetItem("OR"); + item_or->setData(Qt::UserRole, "+"); + list_widget_available->addItem(item_or); for(int var = 0; var < CHANNEL_COUNT ; ++var){ + QString item_data; if(ptr->alert_danger[var].direct_enable || ptr->alert_danger[var].x1_ampl_enable || ptr->alert_danger[var].x2_ampl_enable){ - QString item_str = QString("S%1C%2A1 (槽位 %3 通道 %4 警报)").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')).arg(button_id).arg(var+1); + QString item_str = QString("%1 (槽位 %3 通道 %4 警报)").arg(ptr->base_config_[var].point_name).arg(button_id).arg(var+1); QListWidgetItem *item = new QListWidgetItem(item_str); - QString item_data = QString("S%1C%2A1").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + item_data = QString("S%1C%2A1").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); item->setData(Qt::UserRole, item_data); list_widget_available->addItem(item); } if(ptr->alert_danger[var].danger_enable){ - QString item_str = QString("S%1C%2A2 (槽位 %3 通道 %4 危险)").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')).arg(button_id).arg(var+1); + QString item_str = QString("%1 (槽位 %3 通道 %4 危险)").arg(ptr->base_config_[var].point_name).arg(button_id).arg(var+1); QListWidgetItem *item = new QListWidgetItem(item_str); - QString item_data = QString("S%1C%2A2").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + item_data = QString("S%1C%2A2").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); item->setData(Qt::UserRole, item_data); list_widget_available->addItem(item); - } + } } } } @@ -404,9 +439,6 @@ void TMRRelayAssociation::on_pushButton_confirm_clicked() for (int i = 0; i < root->rowCount(); ++i) { QStandardItem *topItem = root->child(i); QString expr = buildLogicExpression(topItem); -// if (!finalExpr.isEmpty()) { -// finalExpr += " OR "; -// } finalExpr += expr; } ExprValidationResult result = validateLogicExpression(finalExpr); @@ -429,9 +461,6 @@ void TMRRelayAssociation::onComboBoxIndexChanged(int index){ for (int i = 0; i < root->rowCount(); ++i) { QStandardItem *topItem = root->child(i); QString expr = buildLogicExpression(topItem); -// if (!finalExpr.isEmpty()) { -// finalExpr += " OR "; -// } finalExpr += expr; } ExprValidationResult result = validateLogicExpression(finalExpr); diff --git a/tmrrelayassociation.h b/tmrrelayassociation.h index 878c29d..3986a66 100644 --- a/tmrrelayassociation.h +++ b/tmrrelayassociation.h @@ -27,34 +27,64 @@ public: using QStandardItemModel::QStandardItemModel; QStringList mimeTypes() const override { - return { "application/x-custom" }; + // 支持自定义类型和 QListWidget 默认类型 + return { "application/x-custom", "application/x-qabstractitemmodeldatalist" }; } bool dropMimeData(const QMimeData *data, Qt::DropAction action, - int row, int column, const QModelIndex &parent) override { - if (!data->hasFormat("application/x-custom")) + int row, int column, const QModelIndex &parent) override { + QStandardItem *parentItem = this->itemFromIndex(parent); + if (!parentItem) + parentItem = this->invisibleRootItem(); + + if (data->hasFormat("application/x-custom")) { + QByteArray rawData = data->data("application/x-custom"); + QString customText = QString::fromUtf8(rawData); + + QStandardItem *newItem = new QStandardItem(customText); + newItem->setData(customText, Qt::UserRole); // 假设 data 也就是内容 + newItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | + Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled); + + if (row < 0) + parentItem->appendRow(newItem); + else + parentItem->insertRow(row, newItem); + + return true; + } + + if (data->hasFormat("application/x-qabstractitemmodeldatalist")) { + QByteArray encoded = data->data("application/x-qabstractitemmodeldatalist"); + QDataStream stream(&encoded, QIODevice::ReadOnly); + + while (!stream.atEnd()) { + int r, c; + QMap roleDataMap; + stream >> r >> c >> roleDataMap; + + QString text = roleDataMap.value(Qt::DisplayRole).toString(); + QVariant userData = roleDataMap.value(Qt::UserRole); + + QStandardItem *newItem = new QStandardItem(text); + newItem->setData(userData, Qt::UserRole); // 保留附加数据 + newItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | + Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled); + + if (row < 0) + parentItem->appendRow(newItem); + else + parentItem->insertRow(row, newItem); + } + + return true; + } + return false; - - QByteArray rawData = data->data("application/x-custom"); - QString customText = QString::fromUtf8(rawData); - - QStandardItem *newItem = new QStandardItem(customText); - newItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | - Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled); - - QStandardItem *parentItem = this->itemFromIndex(parent); - if (!parentItem) parentItem = this->invisibleRootItem(); - - if (row < 0) - parentItem->appendRow(newItem); - else - parentItem->insertRow(row, newItem); - - return true; - } + } Qt::DropActions supportedDropActions() const override { - return Qt::CopyAction; + return Qt::CopyAction | Qt::MoveAction; } }; @@ -90,11 +120,12 @@ private slots: private: Ui::TMRRelayAssociation *ui; QButtonGroup * btnGroup_slot = nullptr; - DraggableListWidget *list_widget_available = nullptr; + QListWidget *list_widget_available = nullptr; int current_index; QTreeView *treeView_relay; QStandardItemModel *model_Relay; std::shared_ptr relay_data = nullptr; + QMap channelNameMap; void Init(); void buildTreeFromExpression(QTreeView *treeView, const QString &expr); diff --git a/tmrrelayassociation.ui b/tmrrelayassociation.ui index 9922478..9192415 100644 --- a/tmrrelayassociation.ui +++ b/tmrrelayassociation.ui @@ -6,7 +6,7 @@ 0 0 - 821 + 892 634 @@ -186,7 +186,7 @@ 110 538 - 691 + 751 40 @@ -980,38 +980,12 @@ TextLabel - - - - 540 - 380 - 51 - 41 - - - - 与(+) - - - - - - 540 - 440 - 51 - 41 - - - - 或(*) - - 230 360 - 301 + 361 161 @@ -1021,7 +995,7 @@ 610 80 - 191 + 251 421