647 lines
27 KiB
C++
647 lines
27 KiB
C++
#include "bmssettings.h"
|
||
#include "ui_bmssettings.h"
|
||
|
||
#include "widgets/paramtable.h"
|
||
#include "widgets/parameditdouble.h"
|
||
#include "configparamsgetter.h"
|
||
|
||
#include <QIntValidator>
|
||
#include <QDoubleValidator>
|
||
#include <QMessageBox>
|
||
#include <QFileDialog>
|
||
|
||
BmsSettings::BmsSettings(QWidget *parent) :
|
||
QFrame(parent),
|
||
ui(new Ui::BmsSettings)
|
||
{
|
||
ui->setupUi(this);
|
||
|
||
ui->pbWriteToNonVolatileBmsMemory->hide();
|
||
ui->pbWriteCurrentValuesToBms->hide();
|
||
|
||
// https://localcoder.org/set-qlineedit-to-accept-only-numbers
|
||
ui->editSerialNumber->setValidator(new QRegExpValidator(QRegExp("[1-9][0-9]*"), this)); // only numbers // leading digit must be 1 to 9 (prevents leading zeroes).
|
||
|
||
ui->editGroupsNumber->setValidator( new QIntValidator(-1000, 1000, this) );
|
||
ui->editCellsNumber->setValidator( new QIntValidator(-1000, 1000, this) );
|
||
|
||
ui->editCellsInParallelGroup->setValidator( new QIntValidator(1, 1000, this) );
|
||
ui->editBatteryCapacity->setValidator( new QIntValidator(0, 10000, this) );
|
||
|
||
ui->editMaxVoltageCharge->setValidator( new QIntValidator(-1000, 1000, this) );
|
||
ui->editMaxCircuitLoad->setValidator( new QIntValidator(-1000, 10000, this) );
|
||
ui->editMaxTemperature->setValidator( new QIntValidator(-1000, 1000, this) );
|
||
|
||
ui->editMinVoltageWhenWeTurnLoadOff->setValidator( new QDoubleValidator(-100, 100, 2, this) );
|
||
ui->editSuchVoltageWhenWeTurnLoadOn->setValidator( new QDoubleValidator(-100, 100, 2, this) );
|
||
ui->editSuchVoltageWhenWeTurnChargeOn->setValidator( new QDoubleValidator(-100, 100, 2, this) );
|
||
ui->editMaxVoltageWhenWeTurnChargeOff->setValidator( new QDoubleValidator(-100, 100, 2, this) );
|
||
|
||
ui->editVoltageBalancingStart->setValidator( new QDoubleValidator(-100, 100, 2, this) );
|
||
ui->editVoltageDifferenceThreshold->setValidator( new QDoubleValidator(-100, 100, 2, this) );
|
||
ui->editCellBalancingInterval->setValidator( new QIntValidator(-1000, 100000, this) );
|
||
|
||
//V
|
||
//ui->cboxUseToManageStorageDevice
|
||
//ui->cboxNormallyClosed
|
||
ui->editSocValueEdit->setValidator( new QDoubleValidator(-100, 100, 2, this) );
|
||
|
||
//ui->cboxTemperatureSettingsOver
|
||
ui->editTemperatureIfLessThenCloseOver->setValidator( new QIntValidator(-1000, 1000, this) );
|
||
ui->editTemperatureIfMoeeThenOpenOver->setValidator( new QIntValidator(-1000, 1000, this) );
|
||
|
||
//ui->cboxTemperatureSettingsUnder
|
||
ui->editTemperatureIfLessThenCloseUnder->setValidator( new QIntValidator(-1000, 1000, this) );
|
||
ui->editTemperatureIfMoeeThenOpenUnder->setValidator( new QIntValidator(-1000, 1000, this) );
|
||
|
||
ui->editPointZeroDetectorValue->setValidator( new QDoubleValidator(-1000, 1000, 2, this) );
|
||
|
||
// BTNS
|
||
//ui->pbCalibrateZeroPoint
|
||
//ui->pbWriteIntoNonVolatileMemoryOfBsm
|
||
//ui->pbWriteCurrentValuesIntoBsm
|
||
|
||
connect(ui->pbSaveBMSConfToXmlFile, &QPushButton::clicked, this, &BmsSettings::onSaveBMSConfToXmlFileClicked);
|
||
connect(ui->pbLoadBMSConfFromXmlFile, &QPushButton::clicked, this, &BmsSettings::onLoadBMSConfFromXmlFileClicked);
|
||
|
||
|
||
clearControlls();
|
||
}
|
||
|
||
BmsSettings::~BmsSettings()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
//
|
||
|
||
void BmsSettings::onBmsconfUpdateRequested()
|
||
{
|
||
int a = 1;
|
||
}
|
||
|
||
void BmsSettings::onBmsconfUpdateRequestDefault()
|
||
{
|
||
int a = 1;
|
||
}
|
||
|
||
void BmsSettings::onBmsconfUpdated()
|
||
{
|
||
// ^ - 8 7 | 8 8 read bms conf
|
||
// After we hav red real BMS Config params from BMS we put all of them into the GUI elements
|
||
|
||
// Load default params from Bms to GUI Elements
|
||
//-> - 7 7 | 7 8 read default 8 is defaul - that was on the start
|
||
// Загрузить настройки\nпо умолчанию
|
||
//mDieBieMS->commands()->getBMSconfDefault();
|
||
|
||
onLoadParams();
|
||
}
|
||
|
||
void BmsSettings::onBmsconfStored()
|
||
{
|
||
int a = 1;
|
||
}
|
||
|
||
|
||
void BmsSettings::clearControlls()
|
||
{
|
||
ui->editSerialNumber ->clear();
|
||
|
||
ui->editGroupsNumber ->clear();
|
||
ui->editCellsNumber ->clear();
|
||
|
||
ui->editCellsInParallelGroup ->clear();
|
||
ui->editBatteryCapacity ->clear();
|
||
|
||
ui->editMaxVoltageCharge ->clear();
|
||
ui->editMaxCircuitLoad ->clear();
|
||
ui->editMaxTemperature ->clear();
|
||
|
||
ui->editMinVoltageWhenWeTurnLoadOff ->clear();
|
||
ui->editSuchVoltageWhenWeTurnLoadOn ->clear();
|
||
ui->editSuchVoltageWhenWeTurnChargeOn ->clear();
|
||
ui->editMaxVoltageWhenWeTurnChargeOff ->clear();
|
||
|
||
|
||
ui->editVoltageBalancingStart ->clear();
|
||
ui->editVoltageDifferenceThreshold ->clear();
|
||
ui->editCellBalancingInterval ->clear();
|
||
|
||
//1
|
||
ui->cboxUseToManageStorageDevice ->setChecked(false);
|
||
//2
|
||
ui->cboxNormallyClosed ->setChecked(false);
|
||
ui->editSocValueEdit ->clear();
|
||
//3
|
||
ui->cboxTemperatureSettingsOver ->setChecked(false);
|
||
ui->editTemperatureIfLessThenCloseOver ->clear();
|
||
ui->editTemperatureIfMoeeThenOpenOver ->clear();
|
||
//4
|
||
ui->cboxTemperatureSettingsUnder ->setChecked(false);
|
||
ui->editTemperatureIfLessThenCloseUnder ->clear();
|
||
ui->editTemperatureIfMoeeThenOpenUnder ->clear();
|
||
// 0
|
||
ui->editPointZeroDetectorValue ->clear();
|
||
}
|
||
|
||
void BmsSettings::prepareSettersFromGuiControlsToSettingsFile()
|
||
{
|
||
/// Setters
|
||
#define QS QString
|
||
|
||
auto cfg = mDieBieMS->bmsConfig();
|
||
|
||
/// Серийный номер * //ui->editSerialNumber
|
||
connect(ui->editSerialNumber, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{
|
||
QS s =ui->editSerialNumber->text();
|
||
QVariant val((s.isEmpty() || s=="-") ? 0 : s.toInt());
|
||
cfg->setParamValue("notUsedCurrentThreshold", val);
|
||
});
|
||
|
||
/// Конфигурация *
|
||
connect(ui->editGroupsNumber, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editGroupsNumber->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toInt()); cfg->setParamValue("cellMonitorICCount", val); });
|
||
connect(ui->editCellsNumber, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{
|
||
QS s =ui->editCellsNumber->text();
|
||
QVariant val((s.isEmpty() || s=="-") ? 0 : s.toInt());
|
||
cfg->setParamValue("noOfCellsSeries", val);
|
||
});
|
||
// Конфигурация *
|
||
//addParamRow(ui->editGroupsNumber , mDieBieMS->bmsConfig(), "cellMonitorICCount");
|
||
//addParamRow(ui->editCellsNumber , mDieBieMS->bmsConfig(), "noOfCellsSeries");
|
||
|
||
/// SOC *
|
||
connect(ui->editCellsInParallelGroup, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editCellsInParallelGroup->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toInt()); cfg->setParamValue("noOfCellsParallel", val); });
|
||
connect(ui->editBatteryCapacity, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editBatteryCapacity->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toInt()); cfg->setParamValue("batteryCapacity", val); });
|
||
// SOC *
|
||
//addParamRow(ui->editCellsInParallelGroup , mDieBieMS->bmsConfig(), "noOfCellsParallel");
|
||
//addParamRow(ui->editBatteryCapacity , mDieBieMS->bmsConfig(), "batteryCapacity");
|
||
|
||
/// Ограничения *
|
||
connect(ui->editMaxVoltageCharge, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editMaxVoltageCharge->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toInt()); cfg->setParamValue("maxAllowedCurrent", val); });
|
||
connect(ui->editMaxCircuitLoad, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editMaxCircuitLoad->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toInt()); cfg->setParamValue("maxMismatchThreshold", val); });
|
||
connect(ui->editMaxTemperature, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editMaxTemperature->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toInt()); cfg->setParamValue("allowedTempBattChargingMax", val); });
|
||
// Ограничения *
|
||
//addParamRow(ui->editMaxVoltageCharge , mDieBieMS->bmsConfig(), "maxAllowedCurrent");
|
||
//addParamRow(ui->editMaxCircuitLoad , mDieBieMS->bmsConfig(), "maxMismatchThreshold");
|
||
//addParamRow(ui->editMaxTemperature , mDieBieMS->bmsConfig(), "allowedTempBattChargingMax");
|
||
|
||
/// Конфигурация ячеек *
|
||
connect(ui->editMinVoltageWhenWeTurnLoadOff, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editMinVoltageWhenWeTurnLoadOff->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toDouble()); cfg->setParamValue("cellHardUnderVoltage", val); });
|
||
connect(ui->editSuchVoltageWhenWeTurnLoadOn, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editSuchVoltageWhenWeTurnLoadOn->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toDouble()); cfg->setParamValue("cellHardOverVoltage", val); });
|
||
connect(ui->editSuchVoltageWhenWeTurnChargeOn, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editSuchVoltageWhenWeTurnChargeOn->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toDouble()); cfg->setParamValue("cellLCSoftUnderVoltage", val); });
|
||
connect(ui->editMaxVoltageWhenWeTurnChargeOff, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editMaxVoltageWhenWeTurnChargeOff->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toDouble()); cfg->setParamValue("cellSoftOverVoltage", val); });
|
||
// Конфигурация ячеек *
|
||
//addParamRow(ui->editMinVoltageWhenWeTurnLoadOff , mDieBieMS->bmsConfig(), "cellHardUnderVoltage");
|
||
//addParamRow(ui->editSuchVoltageWhenWeTurnLoadOn , mDieBieMS->bmsConfig(), "cellHardOverVoltage");
|
||
//addParamRow(ui->editSuchVoltageWhenWeTurnChargeOn , mDieBieMS->bmsConfig(), "cellLCSoftUnderVoltage");
|
||
//addParamRow(ui->editMaxVoltageWhenWeTurnChargeOff , mDieBieMS->bmsConfig(), "cellSoftOverVoltage");
|
||
|
||
/// Конфигурация балансировки * // ui->balancingTab
|
||
connect(ui->editVoltageBalancingStart, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editVoltageBalancingStart->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toDouble()); cfg->setParamValue("cellBalanceStart", val); });
|
||
connect(ui->editVoltageDifferenceThreshold, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editVoltageDifferenceThreshold->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toDouble()); cfg->setParamValue("cellBalanceDifferenceThreshold", val); });
|
||
connect(ui->editCellBalancingInterval, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{ QS s =ui->editCellBalancingInterval->text(); QVariant val((s.isEmpty() || s=="-") ? 0 : s.toInt()); cfg->setParamValue("cellBalanceUpdateInterval", val); });
|
||
// Конфигурация балансировки * // ui->balancingTab
|
||
//addParamRow(ui->editVoltageBalancingStart , mDieBieMS->bmsConfig(), "cellBalanceStart");
|
||
//addParamRow(ui->editVoltageDifferenceThreshold , mDieBieMS->bmsConfig(), "cellBalanceDifferenceThreshold");
|
||
//addParamRow(ui->editCellBalancingInterval , mDieBieMS->bmsConfig(), "cellBalanceUpdateInterval");
|
||
|
||
/// Калибровать Нулевую точку * // ui->signalsTab
|
||
connect(ui->editPointZeroDetectorValue, &QLineEdit::textChanged, this, [this, cfg]()
|
||
{
|
||
QS s =ui->editPointZeroDetectorValue->text();
|
||
QVariant val((s.isEmpty() || s=="-") ? 0 : s.toDouble());
|
||
cfg->setParamValue("shuntLCFactor", val);
|
||
});
|
||
// Нулевая точка * // ui->signalsTab
|
||
//addParamRow(ui->editPointZeroDetectorValue , mDieBieMS->bmsConfig(), "shuntLCFactor");
|
||
}
|
||
|
||
void BmsSettings::onLoadParams()
|
||
{
|
||
////
|
||
|
||
// Серийный номер * //ui->editSerialNumber
|
||
getSerialNumber(ui->editSerialNumber , mDieBieMS->bmsConfig(), "notUsedCurrentThreshold");
|
||
// Конфигурация *
|
||
addParamRow(ui->editGroupsNumber , mDieBieMS->bmsConfig(), "cellMonitorICCount");
|
||
addParamRow(ui->editCellsNumber , mDieBieMS->bmsConfig(), "noOfCellsSeries");
|
||
// SOC *
|
||
addParamRow(ui->editCellsInParallelGroup , mDieBieMS->bmsConfig(), "noOfCellsParallel");
|
||
addParamRow(ui->editBatteryCapacity , mDieBieMS->bmsConfig(), "batteryCapacity");
|
||
// Ограничения *
|
||
addParamRow(ui->editMaxVoltageCharge , mDieBieMS->bmsConfig(), "maxAllowedCurrent");
|
||
addParamRow(ui->editMaxCircuitLoad , mDieBieMS->bmsConfig(), "maxMismatchThreshold");
|
||
addParamRow(ui->editMaxTemperature , mDieBieMS->bmsConfig(), "allowedTempBattChargingMax");
|
||
// Конфигурация ячеек *
|
||
addParamRow(ui->editMinVoltageWhenWeTurnLoadOff , mDieBieMS->bmsConfig(), "cellHardUnderVoltage");
|
||
addParamRow(ui->editSuchVoltageWhenWeTurnLoadOn , mDieBieMS->bmsConfig(), "cellHardOverVoltage");
|
||
addParamRow(ui->editSuchVoltageWhenWeTurnChargeOn , mDieBieMS->bmsConfig(), "cellLCSoftUnderVoltage");
|
||
addParamRow(ui->editMaxVoltageWhenWeTurnChargeOff , mDieBieMS->bmsConfig(), "cellSoftOverVoltage");
|
||
// Конфигурация балансировки *
|
||
// ui->balancingTab
|
||
addParamRow(ui->editVoltageBalancingStart , mDieBieMS->bmsConfig(), "cellBalanceStart");
|
||
addParamRow(ui->editVoltageDifferenceThreshold , mDieBieMS->bmsConfig(), "cellBalanceDifferenceThreshold");
|
||
addParamRow(ui->editCellBalancingInterval , mDieBieMS->bmsConfig(), "cellBalanceUpdateInterval");
|
||
// Нулевая точка *
|
||
// ui->signalsTab
|
||
addParamRow(ui->editPointZeroDetectorValue , mDieBieMS->bmsConfig(), "shuntLCFactor");
|
||
////*/
|
||
|
||
// Turn ON Setters only AFTER we load all data from file
|
||
|
||
prepareSettersFromGuiControlsToSettingsFile();
|
||
|
||
// Turn ON Setters only AFTER we load all data from file
|
||
|
||
|
||
/*
|
||
<cellBalanceStart>
|
||
<longName>Cell balance start voltage</longName>
|
||
|
||
cellMonitorICCount ->
|
||
noOfCellsSeries ->
|
||
--
|
||
noOfCellsParallel ->
|
||
<batteryCapacity>
|
||
<longName>Battery capacity total</longName>
|
||
--
|
||
<maxMismatchThreshold>
|
||
<longName>Mismatch threshold</longName>
|
||
<maxAllowedCurrent>
|
||
<longName>Max allowed current</longName>
|
||
<allowedTempBattChargingMax>
|
||
<longName>Battery temperature charging max</longName>
|
||
--
|
||
<cellHardUnderVoltage>
|
||
<longName>Cell hard undervoltage</longName>
|
||
<cellHardOverVoltage>
|
||
<longName>Cell hard overvoltage</longName>
|
||
<cellLCSoftUnderVoltage>
|
||
<longName>Cell low current soft undervoltage</longName>
|
||
<cellSoftOverVoltage>
|
||
<longName>Cell soft overvoltage</longName>
|
||
--
|
||
*/
|
||
|
||
|
||
/*
|
||
#if 0
|
||
ConfigParam *p = mDieBieMS->infoConfig()->getParam("master_setting_description");
|
||
if (p != 0) {
|
||
ui->textEdit->setHtml(p->description);
|
||
} else {
|
||
ui->textEdit->setText("Master Setting Description not found.");
|
||
}
|
||
#endif
|
||
ConfigParams *const conf = mDieBieMS->bmsConfig();
|
||
///ParamTable *const pt = new ParamTable(this); //ui->masterStateTab;
|
||
///pt->addRowSeparator(tr("Current"));
|
||
// Нулевая точка
|
||
addParamRow(ui->editPointZeroDetectorValue , mDieBieMS->bmsConfig(), "shuntLCFactor");
|
||
//pt->addParamRow(conf, "shuntLCFactor");
|
||
////pt->addParamRow(conf, "shuntOffset");
|
||
|
||
///pt->addRowSeparator(tr("Pack configuration"));
|
||
#if 0 // disable
|
||
pt->addParamRow(conf, "cellMonitorICType");
|
||
#endif
|
||
// Конфигурация
|
||
addParamRow(ui->editGroupsNumber , mDieBieMS->bmsConfig(), "cellMonitorICCount");
|
||
addParamRow(ui->editCellsNumber , mDieBieMS->bmsConfig(), "noOfCellsSeries");
|
||
//pt->addParamRow(conf, "cellMonitorICCount");
|
||
///pt->addParamRow(conf, "noOfParallelModules");
|
||
//pt->addParamRow(conf, "noOfCellsSeries");
|
||
|
||
///pt->addRowSeparator(tr("SOC - Pack capacity"));
|
||
//pt->addParamRow(conf, "noOfCellsParallel");
|
||
//pt->addParamRow(conf, "batteryCapacity");
|
||
// SOC
|
||
addParamRow(ui->editCellsInParallelGroup , mDieBieMS->bmsConfig(), "noOfCellsParallel");
|
||
addParamRow(ui->editBatteryCapacity , mDieBieMS->bmsConfig(), "batteryCapacity");
|
||
|
||
///pt->addRowSeparator(tr("Cell specifications"));
|
||
//pt->addParamRow(conf, "cellHardUnderVoltage");
|
||
//pt->addParamRow(conf, "cellHardOverVoltage");
|
||
//pt->addParamRow(conf, "cellLCSoftUnderVoltage");
|
||
//pt->addParamRow(conf, "cellSoftOverVoltage");
|
||
// Конфигурация ячеек
|
||
addParamRow(ui->editMinVoltageWhenWeTurnLoadOff , mDieBieMS->bmsConfig(), "cellHardUnderVoltage");
|
||
addParamRow(ui->editSuchVoltageWhenWeTurnLoadOn , mDieBieMS->bmsConfig(), "cellHardOverVoltage");
|
||
addParamRow(ui->editSuchVoltageWhenWeTurnChargeOn , mDieBieMS->bmsConfig(), "cellLCSoftUnderVoltage");
|
||
addParamRow(ui->editMaxVoltageWhenWeTurnChargeOff , mDieBieMS->bmsConfig(), "cellSoftOverVoltage");
|
||
|
||
///pt->addRowSeparator(tr("Balancing configuration"));
|
||
//pt->addParamRow(conf, "cellBalanceStart");
|
||
//pt->addParamRow(conf, "cellBalanceDifferenceThreshold");
|
||
//pt->addParamRow(conf, "cellBalanceUpdateInterval");
|
||
// Конфигурация балансировки
|
||
// ui->balancingTab
|
||
addParamRow(ui->editVoltageBalancingStart , mDieBieMS->bmsConfig(), "cellBalanceStart");
|
||
addParamRow(ui->editVoltageDifferenceThreshold , mDieBieMS->bmsConfig(), "cellBalanceDifferenceThreshold");
|
||
addParamRow(ui->editCellBalancingInterval , mDieBieMS->bmsConfig(), "cellBalanceUpdateInterval");
|
||
|
||
///pt->addRowSeparator(tr("SoC general"));
|
||
#if 0 // disable
|
||
pt->addParamRow(conf, "stateOfChargeStoreInterval");
|
||
pt->addParamRow(conf, "timeoutChargeCompleted");
|
||
pt->addParamRow(conf, "timeoutChargingCompletedMinimalMismatch");
|
||
#endif
|
||
///pt->addParamRow(conf, "minimalPrechargePercentage"); // from pagemastersettings.cpp
|
||
///pt->addParamRow(conf, "timeoutLCPreCharge"); // from pagemastersettings.cpp
|
||
|
||
///pt->addRowSeparator(tr("Limits"));
|
||
//pt->addParamRow(conf, "maxMismatchThreshold");
|
||
//pt->addParamRow(conf, "maxAllowedCurrent");
|
||
// Ограничения
|
||
addParamRow(ui->editMaxVoltageCharge , mDieBieMS->bmsConfig(), "maxAllowedCurrent");
|
||
addParamRow(ui->editMaxCircuitLoad , mDieBieMS->bmsConfig(), "maxMismatchThreshold");
|
||
addParamRow(ui->editMaxTemperature , mDieBieMS->bmsConfig(), "allowedTempBattChargingMax");
|
||
|
||
#if 0
|
||
pt->addParamRow(conf, "allowedTempBattDischargingMax");
|
||
pt->addParamRow(conf, "allowedTempBattDischargingMin");
|
||
#endif
|
||
//pt->addParamRow(conf, "allowedTempBattChargingMax");
|
||
///pt->addParamRow(conf, "allowedTempBattChargingMin");
|
||
#if 0 // disable
|
||
///pt->addRowSeparator(tr("NTC specifications battery"));
|
||
pt->addParamRow(mDieBieMS->bmsConfig(), "noOfTempSensorPerModule");
|
||
pt->addParamRow(mDieBieMS->bmsConfig(), "NTCLTC25Deg");
|
||
///pt->addRowSeparator(tr("NTC specifications expansion Board"));
|
||
pt->addParamRow(mDieBieMS->bmsConfig(), "noOfExpansionBoard");
|
||
pt->addParamRow(mDieBieMS->bmsConfig(), "noOfTempSensorPerExpansionBoard");
|
||
#endif
|
||
*/
|
||
|
||
}
|
||
|
||
|
||
BMSInterface *BmsSettings::bms() const
|
||
{
|
||
return mDieBieMS;
|
||
}
|
||
|
||
void BmsSettings::setDieBieMS(BMSInterface *dieBieMS)
|
||
{ // void PageMasterSettings::setDieBieMS(BMSInterface *dieBieMS)
|
||
|
||
mDieBieMS = dieBieMS;
|
||
|
||
//pt = new ParamTable(this); //ui->masterStateTab;
|
||
|
||
//onLoadParams();
|
||
|
||
/*
|
||
if (mDieBieMS) {
|
||
#if 0
|
||
ConfigParam *p = mDieBieMS->infoConfig()->getParam("master_setting_description");
|
||
if (p != 0) {
|
||
ui->textEdit->setHtml(p->description);
|
||
} else {
|
||
ui->textEdit->setText("Master Setting Description not found.");
|
||
}
|
||
#endif
|
||
ConfigParams *const conf = mDieBieMS->bmsConfig();
|
||
ParamTable *const pt = new ParamTable(this); //ui->masterStateTab;
|
||
pt->addRowSeparator(tr("Current"));
|
||
pt->addParamRow(conf, "shuntLCFactor");
|
||
pt->addParamRow(conf, "shuntOffset");
|
||
|
||
pt->addRowSeparator(tr("Pack configuration"));
|
||
#if 0 // disable
|
||
pt->addParamRow(conf, "cellMonitorICType");
|
||
#endif
|
||
pt->addParamRow(conf, "cellMonitorICCount");
|
||
pt->addParamRow(conf, "noOfParallelModules");
|
||
pt->addParamRow(conf, "noOfCellsSeries");
|
||
|
||
pt->addRowSeparator(tr("SOC - Pack capacity"));
|
||
pt->addParamRow(conf, "noOfCellsParallel");
|
||
pt->addParamRow(conf, "batteryCapacity");
|
||
|
||
pt->addRowSeparator(tr("Cell specifications"));
|
||
pt->addParamRow(conf, "cellHardUnderVoltage");
|
||
pt->addParamRow(conf, "cellHardOverVoltage");
|
||
pt->addParamRow(conf, "cellLCSoftUnderVoltage");
|
||
pt->addParamRow(conf, "cellSoftOverVoltage");
|
||
|
||
pt->addRowSeparator(tr("Balancing configuration"));
|
||
pt->addParamRow(conf, "cellBalanceStart");
|
||
pt->addParamRow(conf, "cellBalanceDifferenceThreshold");
|
||
pt->addParamRow(conf, "cellBalanceUpdateInterval");
|
||
|
||
pt->addRowSeparator(tr("SoC general"));
|
||
#if 0 // disable
|
||
pt->addParamRow(conf, "stateOfChargeStoreInterval");
|
||
pt->addParamRow(conf, "timeoutChargeCompleted");
|
||
pt->addParamRow(conf, "timeoutChargingCompletedMinimalMismatch");
|
||
#endif
|
||
pt->addParamRow(conf, "minimalPrechargePercentage"); // from pagemastersettings.cpp
|
||
pt->addParamRow(conf, "timeoutLCPreCharge"); // from pagemastersettings.cpp
|
||
|
||
pt->addRowSeparator(tr("Limits"));
|
||
pt->addParamRow(conf, "maxMismatchThreshold");
|
||
pt->addParamRow(conf, "maxAllowedCurrent");
|
||
#if 0
|
||
pt->addParamRow(conf, "allowedTempBattDischargingMax");
|
||
pt->addParamRow(conf, "allowedTempBattDischargingMin");
|
||
#endif
|
||
pt->addParamRow(conf, "allowedTempBattChargingMax");
|
||
pt->addParamRow(conf, "allowedTempBattChargingMin");
|
||
|
||
#if 0 // disable
|
||
pt->addRowSeparator(tr("NTC specifications battery"));
|
||
pt->addParamRow(mDieBieMS->bmsConfig(), "noOfTempSensorPerModule");
|
||
pt->addParamRow(mDieBieMS->bmsConfig(), "NTCLTC25Deg");
|
||
pt->addRowSeparator(tr("NTC specifications expansion Board"));
|
||
pt->addParamRow(mDieBieMS->bmsConfig(), "noOfExpansionBoard");
|
||
pt->addParamRow(mDieBieMS->bmsConfig(), "noOfTempSensorPerExpansionBoard");
|
||
#endif
|
||
}
|
||
*/
|
||
|
||
}
|
||
|
||
|
||
/*
|
||
bool BmsSettings::addParamRow(QLineEdit* edit, ConfigParams *params, QString paramName)
|
||
{
|
||
bool res = false;
|
||
QWidget *editor = params->getEditor(paramName);
|
||
QString name = params->getLongName(paramName);
|
||
|
||
if (editor) {
|
||
//int row = rowCount();
|
||
//setRowCount(row + 1);
|
||
//QTableWidgetItem *item = new QTableWidgetItem(name);
|
||
//item->setFlags(item->flags() & ~Qt::ItemIsEditable);
|
||
//setItem(row, 0, item);
|
||
//setCellWidget(row, 1, editor);
|
||
//edit->setText(editor->);
|
||
|
||
auto vtype = editor->property("type");
|
||
auto type = vtype.toInt();
|
||
//CFG_T_UNDEFINED = 0,
|
||
if(type == 1) // CFG_T_DOUBLE,
|
||
{
|
||
auto vval = editor->property("value");
|
||
auto val = vval.toDouble();
|
||
edit->setText(QString::number(val));
|
||
}
|
||
else if(type == 2) // CFG_T_INT,
|
||
{
|
||
auto vval = editor->property("value");
|
||
auto val = vval.toInt();
|
||
edit->setText(QString::number(val));
|
||
}
|
||
else if(type == 3) // CFG_T_QSTRING,
|
||
{
|
||
auto vval = editor->property("value");
|
||
auto val = vval.toString();
|
||
edit->setText(val);
|
||
}
|
||
else if(type == 4) // CFG_T_ENUM,
|
||
{
|
||
auto vval = editor->property("value");
|
||
auto val = vval.toInt();
|
||
edit->setText(QString::number(val));
|
||
}
|
||
else if(type == 5) // CFG_T_BOOL
|
||
{
|
||
auto vval = editor->property("value");
|
||
auto val = vval.toBool();
|
||
edit->setText(val ? "true" : "false");
|
||
}
|
||
|
||
auto vsuffix = editor->property("suffix");
|
||
auto suffix = vsuffix.toString();
|
||
auto veditorDecimalsDouble = editor->property("editorDecimalsDouble");
|
||
auto editorDecimalsDouble = veditorDecimalsDouble.toDouble();
|
||
auto veditAsPercentage = editor->property("editAsPercentage");
|
||
auto editAsPercentage = veditAsPercentage.toBool();
|
||
|
||
res = true;
|
||
//resizeColumnToContents(0);
|
||
//resizeRowsToContents();
|
||
}
|
||
|
||
return res;
|
||
}
|
||
*/
|
||
|
||
|
||
void BmsSettings::on_pbCalibrateZeroPoint_clicked()
|
||
{
|
||
// setZeroCurrent to Terminal
|
||
//emit sendMessage("setZeroCurrent");
|
||
|
||
if ( mDieBieMS == nullptr ) {
|
||
return;
|
||
}
|
||
|
||
if ( !mDieBieMS->isPortConnected() ) {
|
||
QMessageBox::critical(this,
|
||
tr("Connection Error"),
|
||
tr("The ENNOID-BMS is not connected. Please connect it."));
|
||
return;
|
||
}
|
||
|
||
mDieBieMS->commands()->sendTerminalCmd("setZeroCurrent");
|
||
QTimer::singleShot(1000, [this](){
|
||
this->mDieBieMS->commands()->sendTerminalCmd("config_write");
|
||
});
|
||
|
||
}
|
||
/*
|
||
void BmsSettings::on_pbWriteIntoNonVolatileMemoryOfBsm_clicked()
|
||
{
|
||
|
||
}
|
||
|
||
void BmsSettings::on_pbWriteCurrentValuesIntoBsm_clicked()
|
||
{
|
||
}
|
||
*/
|
||
void BmsSettings::on_pbWriteToNonVolatileBmsMemory_clicked()
|
||
{
|
||
// Записать в энергонезависимую\nпамять BMS
|
||
// actionStoreBMScconf
|
||
mDieBieMS->commands()->storeBMSConfig();
|
||
}
|
||
|
||
void BmsSettings::on_pbWriteCurrentValuesToBms_clicked()
|
||
{
|
||
// Записать текущие значения в BMS
|
||
// actionWriteBMScconf
|
||
mDieBieMS->commands()->setBMSconf();
|
||
}
|
||
|
||
|
||
void BmsSettings::onSaveBMSConfToXmlFileClicked()
|
||
{
|
||
QString path;
|
||
path = QFileDialog::getSaveFileName(this,
|
||
tr("Choose where to save the motor configuration XML file"),
|
||
".",
|
||
tr("Xml files (*.xml)"));
|
||
|
||
if (path.isNull()) {
|
||
return;
|
||
}
|
||
|
||
if (!path.toLower().endsWith(".xml")) {
|
||
path += ".xml";
|
||
}
|
||
|
||
bool res = mDieBieMS->bmsConfig()->saveXml(path, "bmsConfiguration");
|
||
|
||
if (res) {
|
||
emit showStatusInfo("Saved motor configuration", true);
|
||
} else {
|
||
emit showMessageDialog(tr("Save motor configuration"),
|
||
tr("Could not save motor configuration:<BR>"
|
||
"%1").arg(mDieBieMS->bmsConfig()->xmlStatus()),
|
||
false, false);
|
||
}
|
||
}
|
||
|
||
|
||
void BmsSettings::onLoadBMSConfFromXmlFileClicked()
|
||
{
|
||
QString path;
|
||
path = QFileDialog::getOpenFileName(this,
|
||
tr("Choose motor configuration file to load"),
|
||
".",
|
||
tr("Xml files (*.xml)"));
|
||
|
||
if (path.isNull()) {
|
||
return;
|
||
}
|
||
|
||
bool res = mDieBieMS->bmsConfig()->loadXml(path, "bmsConfiguration");
|
||
|
||
if (res) {
|
||
emit showStatusInfo("Loaded motor configuration", true);
|
||
} else {
|
||
emit showMessageDialog(tr("Load motor configuration"),
|
||
tr("Could not load motor configuration:<BR>"
|
||
"%1").arg(mDieBieMS->bmsConfig()->xmlStatus()),
|
||
false, false);
|
||
}
|
||
}
|