TSI_Config/dc_outputs.cpp
2025-08-05 20:49:25 +08:00

387 lines
18 KiB
C++

#include "dc_outputs.h"
#include "ui_dc_outputs.h"
#include <QListView>
#include "dc_output_channel.h"
#include <QDebug>
#include "config_mgr.h"
#include "data_config.h"
#include "vibrationdata.h"
ChannelUsed ch_used[22];
DC_Outputs::DC_Outputs(int slot_no_,int cardtype,QWidget *parent) :
QWidget(parent),
ui(new Ui::DC_Outputs)
{
ui->setupUi(this);
ui->comboBox_ch_output->setView(new QListView());
slot_no = slot_no_;
car_type = static_cast<CardType>(cardtype);
unit = "";
current_index = ui->comboBox_ch_output->currentIndex();
label_ch1[0] = ui->label_ch_1;
label_ch1[1] = ui->label_ch_1_min;
label_ch1[2] = ui->label_ch_1_min_unit;
label_ch1[3] = ui->label_ch_1_max;
label_ch1[4] = ui->label_ch_1_max_unit;
label_ch2[0] = ui->label_ch_2;
label_ch2[1] = ui->label_ch_2_min;
label_ch2[2] = ui->label_ch_2_min_unit;
label_ch2[3] = ui->label_ch_2_max;
label_ch2[4] = ui->label_ch_2_max_unit;
label_ch3[0] = ui->label_ch_3;
label_ch3[1] = ui->label_ch_3_min;
label_ch3[2] = ui->label_ch_3_min_unit;
label_ch3[3] = ui->label_ch_3_max;
label_ch3[4] = ui->label_ch_3_max_unit;
label_ch4[0] = ui->label_ch_4;
label_ch4[1] = ui->label_ch_4_min;
label_ch4[2] = ui->label_ch_4_min_unit;
label_ch4[3] = ui->label_ch_4_max;
label_ch4[4] = ui->label_ch_4_max_unit;
Init();
}
DC_Outputs::~DC_Outputs()
{
delete ui;
}
void DC_Outputs::Init(){
std::shared_ptr<CardBase> base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no);
if (base_ptr == nullptr) {
qCritical() << "[DC_Outputs::Init] should not be here";
return;
}
vib_dc_output_ptr = std::dynamic_pointer_cast<VibrationData>(base_ptr);
QString unit_str = "";
if(vib_dc_output_ptr->dc_output[0].output_channel != -1){
unit_str = GetUnit(vib_dc_output_ptr->dc_output[0].output_channel);
ui->label_ch_1->setText(ui->comboBox_ch_output->itemText(vib_dc_output_ptr->dc_output[0].output_channel));
ui->label_ch_1_min->setText(QString::number(vib_dc_output_ptr->dc_output[0].minmum));
ui->label_ch_1_max->setText(QString::number(vib_dc_output_ptr->dc_output[0].maxmum));
ui->label_ch_1_min_unit->setText(unit_str);
ui->label_ch_1_max_unit->setText(unit_str);
ch_used[vib_dc_output_ptr->dc_output[0].output_channel].used[0] = true;
}
if(vib_dc_output_ptr->dc_output[1].output_channel != -1){
unit_str = GetUnit(vib_dc_output_ptr->dc_output[1].output_channel);
ui->label_ch_2->setText(ui->comboBox_ch_output->itemText(vib_dc_output_ptr->dc_output[1].output_channel));
ui->label_ch_2_min->setText(QString::number(vib_dc_output_ptr->dc_output[1].minmum));
ui->label_ch_2_max->setText(QString::number(vib_dc_output_ptr->dc_output[1].maxmum));
ui->label_ch_2_min_unit->setText(unit_str);
ui->label_ch_2_max_unit->setText(unit_str);
ch_used[vib_dc_output_ptr->dc_output[1].output_channel].used[1] = true;
}
if(vib_dc_output_ptr->dc_output[2].output_channel != -1){
unit_str = GetUnit(vib_dc_output_ptr->dc_output[2].output_channel);
ui->label_ch_3->setText(ui->comboBox_ch_output->itemText(vib_dc_output_ptr->dc_output[2].output_channel));
ui->label_ch_3_min->setText(QString::number(vib_dc_output_ptr->dc_output[2].minmum));
ui->label_ch_3_max->setText(QString::number(vib_dc_output_ptr->dc_output[2].maxmum));
ui->label_ch_3_min_unit->setText(unit_str);
ui->label_ch_3_max_unit->setText(unit_str);
ch_used[vib_dc_output_ptr->dc_output[2].output_channel].used[2] = true;
}
if(vib_dc_output_ptr->dc_output[3].output_channel != -1){
unit_str = GetUnit(vib_dc_output_ptr->dc_output[3].output_channel);
ui->label_ch_4->setText(ui->comboBox_ch_output->itemText(vib_dc_output_ptr->dc_output[3].output_channel));
ui->label_ch_4_min->setText(QString::number(vib_dc_output_ptr->dc_output[3].minmum));
ui->label_ch_4_max->setText(QString::number(vib_dc_output_ptr->dc_output[3].maxmum));
ui->label_ch_4_min_unit->setText(unit_str);
ui->label_ch_4_max_unit->setText(unit_str);
ch_used[vib_dc_output_ptr->dc_output[3].output_channel].used[3] = true;
}
}
QString DC_Outputs::GetUnit(int com_index){
int unit_num = -1,channel_num = 0;
QString unit_str = "";
channel_num = com_index;
if(com_index > 5 && com_index < 9){
channel_num = 0;
}
if(com_index > 9 && com_index < 13){
channel_num = 1;
}
if(com_index > 13 && com_index < 17){
channel_num = 2;
}
if(com_index > 17 && com_index < 21){
channel_num = 3;
}
if(com_index == 4) {
channel_num = 0;
}else if(com_index == 5){
channel_num = 2;
}
std::shared_ptr<VariableBase> variable_base = vib_dc_output_ptr->GetChannelPtr(channel_num + 1);
if (vib_dc_output_ptr->base_config_[channel_num].channel_type == kVibRadial) {
std::shared_ptr<RadialVariable> variable_ptr = std::dynamic_pointer_cast<RadialVariable>(variable_base);
unit_num = variable_ptr->general.engineering_unit;
qDebug() << "unit_num1" << unit_num ;
}
if (vib_dc_output_ptr->base_config_[channel_num].channel_type == kVibAcc) {
std::shared_ptr<AccVelVariable> variable_ptr = std::dynamic_pointer_cast<AccVelVariable>(variable_base);
unit_num = variable_ptr->general.engineering_unit;
qDebug() << "unit_num2" << unit_num ;
}
if (vib_dc_output_ptr->base_config_[channel_num].channel_type == kVibVelocity) {
std::shared_ptr<AccVelVariable> variable_ptr = std::dynamic_pointer_cast<AccVelVariable>(variable_base);
unit_num = variable_ptr->general.engineering_unit;
qDebug() << "unit_num3" << unit_num ;
}
if (vib_dc_output_ptr->base_config_[channel_num].channel_type == kVibThrust) {
std::shared_ptr<ThrustVariable> variable_ptr = std::dynamic_pointer_cast<ThrustVariable>(variable_base);
unit_num = variable_ptr->general.engineering_unit;
qDebug() << "unit_num4" << unit_num ;
}
if (vib_dc_output_ptr->base_config_[channel_num].channel_type == kVibPressurePulsation) {
std::shared_ptr<PressurePulsationVariable> variable_ptr = std::dynamic_pointer_cast<PressurePulsationVariable>(variable_base);
unit_num = variable_ptr->general.engineering_unit;
qDebug() << "unit_num5" << unit_num ;
}
switch (unit_num) {
case kUnit1:{
unit_str = "g";
break;
}
case kUnit2:{
unit_str = "m/s**2";
break;
}
case kUnit3:{
unit_str = "mm/s";
break;
}
case kUnit4:{
unit_str = "inch/s";
break;
}
case kUnit5:{
unit_str = "um";
break;
}
case kUnit6:{
unit_str = "mm";
break;
}
case kUnit7:{
unit_str = "mils";
break;
}
case kUnit8:{
unit_str = "inch/s**2";
break;
}
case kUnit9:{
unit_str = "mbar";
break;
}
case kUnit10:{
unit_str = "bar";
break;
}
case kUnit11:{
unit_str = "psi";
break;
}
case kUnit12:{
unit_str = "pa";
break;
}
}
return unit_str;
}
void DC_Outputs::on_comboBox_ch_output_activated(int index)
{
current_index = index;
QString unit_str = GetUnit(current_index);
DC_Output_Channel *dc_output_channel = new DC_Output_Channel(unit_str,current_index);
dc_output_channel->setWindowModality(Qt::ApplicationModal);
connect(dc_output_channel,SIGNAL(output_channel_data_sg(int,float,float,int)),this,SLOT(output_channel_data(int,float,float,int)));
dc_output_channel->show();
}
void DC_Outputs::output_channel_data(int channel,float minmun,float maxmum,int not_used){
qDebug() << channel << minmun << maxmum ;
QString unit_str = GetUnit(current_index);
if(channel == 1){
ui->label_ch_1->setText(ui->comboBox_ch_output->currentText());
ui->label_ch_1_min->setText(QString::number(minmun));
ui->label_ch_1_max->setText(QString::number(maxmum));
ui->label_ch_1_min_unit->setText(unit_str);
ui->label_ch_1_max_unit->setText(unit_str);
ch_used[ui->comboBox_ch_output->currentIndex()].used[0] = true;
vib_dc_output_ptr->dc_output[0].output_channel = current_index;
vib_dc_output_ptr->dc_output[0].minmum = ui->label_ch_1_min->text().toFloat();
vib_dc_output_ptr->dc_output[0].maxmum = ui->label_ch_1_max->text().toFloat();
}else if(channel == 2){
ui->label_ch_2->setText(ui->comboBox_ch_output->currentText());
ui->label_ch_2_min->setText(QString::number(minmun));
ui->label_ch_2_max->setText(QString::number(maxmum));
ui->label_ch_2_min_unit->setText(unit_str);
ui->label_ch_2_max_unit->setText(unit_str);
ch_used[ui->comboBox_ch_output->currentIndex()].used[1] = true;
vib_dc_output_ptr->dc_output[1].output_channel = current_index;
vib_dc_output_ptr->dc_output[1].minmum = ui->label_ch_2_min->text().toFloat();
vib_dc_output_ptr->dc_output[1].maxmum = ui->label_ch_2_max->text().toFloat();
}else if(channel == 3){
ui->label_ch_3->setText(ui->comboBox_ch_output->currentText());
ui->label_ch_3_min->setText(QString::number(minmun));
ui->label_ch_3_max->setText(QString::number(maxmum));
ui->label_ch_3_min_unit->setText(unit_str);
ui->label_ch_3_max_unit->setText(unit_str);
ch_used[ui->comboBox_ch_output->currentIndex()].used[2] = true;
vib_dc_output_ptr->dc_output[2].output_channel = current_index;
vib_dc_output_ptr->dc_output[2].minmum = ui->label_ch_3_min->text().toFloat();
vib_dc_output_ptr->dc_output[2].maxmum = ui->label_ch_3_max->text().toFloat();
}else if(channel == 4){
ui->label_ch_4->setText(ui->comboBox_ch_output->currentText());
ui->label_ch_4_min->setText(QString::number(minmun));
ui->label_ch_4_max->setText(QString::number(maxmum));
ui->label_ch_4_min_unit->setText(unit_str);
ui->label_ch_4_max_unit->setText(unit_str);
ch_used[ui->comboBox_ch_output->currentIndex()].used[3] = true;
vib_dc_output_ptr->dc_output[3].output_channel = current_index;
vib_dc_output_ptr->dc_output[3].minmum = ui->label_ch_4_min->text().toFloat();
vib_dc_output_ptr->dc_output[3].maxmum = ui->label_ch_4_max->text().toFloat();
}else if(channel == 5){
if(not_used == 0){
label_ch1[0]->setText("未使用");
label_ch1[1]->setText("-----");
label_ch1[2]->setText("-----");
label_ch1[3]->setText("-----");
label_ch1[4]->setText("-----");
ch_used[ui->comboBox_ch_output->currentIndex()].used[0] = false;
vib_dc_output_ptr->dc_output[0].output_channel = -1;
}else if(not_used == 1){
label_ch1[0]->setText("未使用");
label_ch1[1]->setText("-----");
label_ch1[2]->setText("-----");
label_ch1[3]->setText("-----");
label_ch1[4]->setText("-----");
ch_used[ui->comboBox_ch_output->currentIndex()].used[1] = false;
vib_dc_output_ptr->dc_output[1].output_channel = -1;
}else if(not_used == 2){
label_ch1[0]->setText("未使用");
label_ch1[1]->setText("-----");
label_ch1[2]->setText("-----");
label_ch1[3]->setText("-----");
label_ch1[4]->setText("-----");
ch_used[ui->comboBox_ch_output->currentIndex()].used[2] = false;
vib_dc_output_ptr->dc_output[2].output_channel = -1;
}else if(not_used == 3){
label_ch1[0]->setText("未使用");
label_ch1[1]->setText("-----");
label_ch1[2]->setText("-----");
label_ch1[3]->setText("-----");
label_ch1[4]->setText("-----");
ch_used[ui->comboBox_ch_output->currentIndex()].used[3] = false;
vib_dc_output_ptr->dc_output[3].output_channel = -1;
}
}
}
void DC_Outputs::on_pushButton_confirm_clicked()
{
// if(ui->label_ch_1->text() != "未使用" && current_index){
// vib_dc_output_ptr->dc_output[0].output_channel = current_index;
// vib_dc_output_ptr->dc_output[0].dc_output_channel = 1;
// vib_dc_output_ptr->dc_output[0].minmum = ui->label_ch_1_min->text().toFloat();
// vib_dc_output_ptr->dc_output[0].maxmum = ui->label_ch_1_max->text().toFloat();
// }
// if(ui->label_ch_2->text() != "未使用"){
// vib_dc_output_ptr->dc_output[1].output_channel = current_index;
// vib_dc_output_ptr->dc_output[1].dc_output_channel = 2;
// vib_dc_output_ptr->dc_output[1].minmum = ui->label_ch_2_min->text().toFloat();
// vib_dc_output_ptr->dc_output[1].maxmum = ui->label_ch_2_max->text().toFloat();
// }
// if(ui->label_ch_3->text() != "未使用"){
// vib_dc_output_ptr->dc_output[2].output_channel = current_index;
// vib_dc_output_ptr->dc_output[2].dc_output_channel = 3;
// vib_dc_output_ptr->dc_output[2].minmum = ui->label_ch_3_min->text().toFloat();
// vib_dc_output_ptr->dc_output[2].maxmum = ui->label_ch_3_max->text().toFloat();
// }
// if(ui->label_ch_4->text() != "未使用"){
// vib_dc_output_ptr->dc_output[3].output_channel = current_index;
// vib_dc_output_ptr->dc_output[3].dc_output_channel = 4;
// vib_dc_output_ptr->dc_output[3].minmum = ui->label_ch_4_min->text().toFloat();
// vib_dc_output_ptr->dc_output[3].maxmum = ui->label_ch_4_max->text().toFloat();
// }
this->close();
}
void DC_Outputs::on_pushButton_cancel_clicked()
{
this->close();
}
void DC_Outputs::on_comboBox_ch_output_currentIndexChanged(int index)
{
qDebug() << "on_comboBox_ch_output_currentIndexChanged" ;
// if(ui->label_ch_1->text() != "未使用"){
// vib_dc_output_ptr->dc_output[0].output_channel = current_index;
// vib_dc_output_ptr->dc_output[0].dc_output_channel = 1;
// vib_dc_output_ptr->dc_output[0].minmum = ui->label_ch_1_min->text().toFloat();
// vib_dc_output_ptr->dc_output[0].maxmum = ui->label_ch_1_max->text().toFloat();
// }
// if(ui->label_ch_2->text() != "未使用"){
// vib_dc_output_ptr->dc_output[1].output_channel = current_index;
// vib_dc_output_ptr->dc_output[1].dc_output_channel = 2;
// vib_dc_output_ptr->dc_output[1].minmum = ui->label_ch_2_min->text().toFloat();
// vib_dc_output_ptr->dc_output[1].maxmum = ui->label_ch_2_max->text().toFloat();
// }
// if(ui->label_ch_3->text() != "未使用"){
// vib_dc_output_ptr->dc_output[2].output_channel = current_index;
// vib_dc_output_ptr->dc_output[2].dc_output_channel = 3;
// vib_dc_output_ptr->dc_output[2].minmum = ui->label_ch_3_min->text().toFloat();
// vib_dc_output_ptr->dc_output[2].maxmum = ui->label_ch_3_max->text().toFloat();
// }
// if(ui->label_ch_4->text() != "未使用"){
// vib_dc_output_ptr->dc_output[3].output_channel = current_index;
// vib_dc_output_ptr->dc_output[3].dc_output_channel = 4;
// vib_dc_output_ptr->dc_output[3].minmum = ui->label_ch_4_min->text().toFloat();
// vib_dc_output_ptr->dc_output[3].maxmum = ui->label_ch_4_max->text().toFloat();
// }
// current_index = index;
// QString unit_str = GetUnit();
// if(vib_dc_output_ptr->dc_output[0].dc_output_channel == 1 && current_index == vib_dc_output_ptr->dc_output[0].output_channel){
// ui->label_ch_1->setText(ui->comboBox_ch_output->itemText(vib_dc_output_ptr->dc_output[0].output_channel));
// ui->label_ch_1_min->setText(QString::number(vib_dc_output_ptr->dc_output[0].minmum));
// ui->label_ch_1_max->setText(QString::number(vib_dc_output_ptr->dc_output[0].maxmum));
// ch_used[current_index].used[0] = true;
// }
// if(vib_dc_output_ptr->dc_output[1].dc_output_channel == 2 && current_index == vib_dc_output_ptr->dc_output[1].output_channel){
// ui->label_ch_2->setText(ui->comboBox_ch_output->itemText(vib_dc_output_ptr->dc_output[1].output_channel));
// ui->label_ch_2_min->setText(QString::number(vib_dc_output_ptr->dc_output[1].minmum));
// ui->label_ch_2_max->setText(QString::number(vib_dc_output_ptr->dc_output[1].maxmum));
// ch_used[current_index].used[1] = true;
// }
// if(vib_dc_output_ptr->dc_output[2].dc_output_channel == 3 && current_index == vib_dc_output_ptr->dc_output[2].output_channel){
// ui->label_ch_3->setText(ui->comboBox_ch_output->itemText(vib_dc_output_ptr->dc_output[2].output_channel));
// ui->label_ch_3_min->setText(QString::number(vib_dc_output_ptr->dc_output[2].minmum));
// ui->label_ch_3_max->setText(QString::number(vib_dc_output_ptr->dc_output[2].maxmum));
// ch_used[current_index].used[2] = true;
// }
// if(vib_dc_output_ptr->dc_output[3].dc_output_channel == 4 && current_index == vib_dc_output_ptr->dc_output[3].output_channel){
// ui->label_ch_4->setText(ui->comboBox_ch_output->itemText(vib_dc_output_ptr->dc_output[3].output_channel));
// ui->label_ch_4_min->setText(QString::number(vib_dc_output_ptr->dc_output[3].minmum));
// ui->label_ch_4_max->setText(QString::number(vib_dc_output_ptr->dc_output[3].maxmum));
// ch_used[current_index].used[3] = true;
// }
}