585 lines
20 KiB
C++
585 lines
20 KiB
C++
/*
|
|
Original copyright 2018 Benjamin Vedder benjamin@vedder.se and the VESC Tool project ( https://github.com/vedderb/vesc_tool )
|
|
|
|
Forked to:
|
|
Copyright 2018 Danny Bokma github@diebie.nl (https://github.com/DieBieEngineering/DieBieMS-Tool)
|
|
|
|
Now forked to:
|
|
Copyright 2019 - 2020 Kevin Dionne kevin.dionne@ennoid.me (https://github.com/EnnoidMe/ENNOID-BMS-Tool)
|
|
|
|
This file is part of ENNOID-BMS Tool.
|
|
|
|
ENNOID-BMS Tool is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
ENNOID-BMS Tool is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "pagertdata.h"
|
|
|
|
PageRtData::PageRtData(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::PageRtData)
|
|
{
|
|
ui->setupUi(this);
|
|
// remove disabled widgets
|
|
for (;;)
|
|
{
|
|
int i;
|
|
for(i=0; i!=ui->tabWidget->count(); ++i)
|
|
if ( ! ui->tabWidget->widget(i)->isEnabled() )
|
|
break;
|
|
if ( i==ui->tabWidget->count() ) // nothing was found
|
|
break; // exit
|
|
ui->tabWidget->removeTab(i);
|
|
}
|
|
|
|
layout()->setContentsMargins(0, 0, 0, 0);
|
|
mDieBieMS = 0;
|
|
|
|
mTimer = new QTimer(this);
|
|
mTimer->start(20);
|
|
|
|
mSecondCounter = 0.0;
|
|
mLastUpdateTime = 0;
|
|
|
|
mUpdateValPlot = false;
|
|
|
|
ui->ivLCGraph->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
|
|
ui->cellGraph->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
|
|
ui->cellLimitsGraph->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
|
|
ui->tempGraph->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
|
|
|
|
// LC IVGraph
|
|
int graphIndex = 0;
|
|
ui->ivLCGraph->addGraph();
|
|
ui->ivLCGraph->graph(graphIndex)->setPen(QPen(Qt::red));
|
|
ui->ivLCGraph->graph(graphIndex)->setName("Pack Voltage");
|
|
graphIndex++;
|
|
|
|
ui->ivLCGraph->addGraph();
|
|
ui->ivLCGraph->graph(graphIndex)->setPen(QPen(Qt::darkGreen));
|
|
ui->ivLCGraph->graph(graphIndex)->setName("Load Voltage");
|
|
graphIndex++;
|
|
|
|
ui->ivLCGraph->addGraph(ui->ivLCGraph->xAxis, ui->ivLCGraph->yAxis2);
|
|
ui->ivLCGraph->graph(graphIndex)->setPen(QPen(Qt::green));
|
|
ui->ivLCGraph->graph(graphIndex)->setName("Current");
|
|
graphIndex++;
|
|
|
|
/* HC IVGraph
|
|
graphIndex = 0;
|
|
ui->ivHCGraph->addGraph();
|
|
ui->ivHCGraph->graph(graphIndex)->setPen(QPen(Qt::blue));
|
|
ui->ivHCGraph->graph(graphIndex)->setName("HC Voltage");
|
|
graphIndex++;
|
|
|
|
ui->ivHCGraph->addGraph(ui->ivHCGraph->xAxis, ui->ivHCGraph->yAxis2);
|
|
ui->ivHCGraph->graph(graphIndex)->setPen(QPen(Qt::magenta));
|
|
ui->ivHCGraph->graph(graphIndex)->setName("HC Current");
|
|
graphIndex++;
|
|
*/
|
|
// Cell voltage graph
|
|
#if 0
|
|
graphIndex = 0;
|
|
ui->cellGraph->addGraph();
|
|
ui->cellGraph->graph(graphIndex)->setPen(QPen(Qt::green));
|
|
ui->cellGraph->graph(graphIndex)->setName("Cell high");
|
|
graphIndex++;
|
|
|
|
ui->cellGraph->addGraph();
|
|
ui->cellGraph->graph(graphIndex)->setPen(QPen(Qt::blue));
|
|
ui->cellGraph->graph(graphIndex)->setName("Cell average");
|
|
graphIndex++;
|
|
|
|
ui->cellGraph->addGraph();
|
|
ui->cellGraph->graph(graphIndex)->setPen(QPen(Qt::red));
|
|
ui->cellGraph->graph(graphIndex)->setName("Cell low");
|
|
graphIndex++;
|
|
#endif
|
|
// For cellGraph use configuration similar to
|
|
// ui->cellBarGraph, i.e. hard coded 12 cells & 2.5-4.5volts
|
|
const enum Qt::GlobalColor colors[12]={
|
|
Qt::black, Qt::blue, Qt::red, Qt::green, Qt::cyan, Qt::magenta,
|
|
Qt::darkGray, Qt::darkBlue, Qt::darkRed, Qt::darkGreen, Qt::darkCyan, Qt::darkMagenta
|
|
};
|
|
for(int i=0; i!=12; ++i)
|
|
{
|
|
QCPGraph *const pg = ui->cellGraph->addGraph();
|
|
pg->setPen(QPen( colors[i] ));
|
|
pg->setName(QString(tr("Cell ")+QString::number(i)));
|
|
}
|
|
|
|
// Temperature graph
|
|
graphIndex = 0;
|
|
ui->tempGraph->addGraph();
|
|
ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::blue));
|
|
ui->tempGraph->graph(graphIndex)->setName("BMS high");
|
|
graphIndex++;
|
|
|
|
ui->tempGraph->addGraph();
|
|
ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::darkBlue));
|
|
ui->tempGraph->graph(graphIndex)->setName("BMS Average");
|
|
graphIndex++;
|
|
|
|
ui->tempGraph->addGraph();
|
|
ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::darkYellow));
|
|
ui->tempGraph->graph(graphIndex)->setName("BMS Low");
|
|
graphIndex++;
|
|
|
|
ui->tempGraph->addGraph();
|
|
ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::green));
|
|
ui->tempGraph->graph(graphIndex)->setName("Battery high");
|
|
graphIndex++;
|
|
|
|
ui->tempGraph->addGraph();
|
|
ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::darkGreen));
|
|
ui->tempGraph->graph(graphIndex)->setName("Battery Average");
|
|
graphIndex++;
|
|
|
|
ui->tempGraph->addGraph();
|
|
ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::darkRed));
|
|
ui->tempGraph->graph(graphIndex)->setName("Battery Low");
|
|
graphIndex++;
|
|
|
|
QFont legendFont = font();
|
|
legendFont.setPointSize(9);
|
|
|
|
//LC Graph
|
|
ui->ivLCGraph->legend->setVisible(true);
|
|
ui->ivLCGraph->legend->setFont(legendFont);
|
|
ui->ivLCGraph->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignRight|Qt::AlignBottom);
|
|
ui->ivLCGraph->legend->setBrush(QBrush(QColor(255,255,255,230)));
|
|
ui->ivLCGraph->xAxis->setLabel("Seconds (s)");
|
|
ui->ivLCGraph->yAxis->setLabel("Voltage (V)");
|
|
ui->ivLCGraph->yAxis2->setLabel("Current (A)");
|
|
ui->ivLCGraph->yAxis->setRange(0, 60);
|
|
ui->ivLCGraph->yAxis2->setRange(-5, 5);
|
|
ui->ivLCGraph->yAxis2->setVisible(true);
|
|
|
|
|
|
//Cell voltage Graph
|
|
ui->cellGraph->legend->setVisible(true);
|
|
ui->cellGraph->legend->setFont(legendFont);
|
|
ui->cellGraph->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignRight|Qt::AlignBottom);
|
|
ui->cellGraph->legend->setBrush(QBrush(QColor(255,255,255,230)));
|
|
ui->cellGraph->xAxis->setLabel("Seconds (s)");
|
|
ui->cellGraph->yAxis->setLabel("Voltage (V)");
|
|
ui->cellGraph->yAxis->setRange(0, 4.2);
|
|
|
|
//Temperature Graph
|
|
ui->tempGraph->legend->setVisible(true);
|
|
ui->tempGraph->legend->setFont(legendFont);
|
|
ui->tempGraph->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignRight|Qt::AlignBottom);
|
|
ui->tempGraph->legend->setBrush(QBrush(QColor(255,255,255,230)));
|
|
ui->tempGraph->xAxis->setLabel("Seconds (s)");
|
|
ui->tempGraph->yAxis->setLabel("Temperature (\u00B0C)");
|
|
ui->tempGraph->yAxis->setRange(0, 60);
|
|
|
|
// Cell bar graph
|
|
group = new QCPBarsGroup(ui->cellBarGraph);
|
|
barsNormal = new QCPBars(ui->cellBarGraph->xAxis, ui->cellBarGraph->yAxis);
|
|
barsBalance = new QCPBars(ui->cellBarGraph->xAxis, ui->cellBarGraph->yAxis);
|
|
|
|
barsNormal->setBrush(QColor(0, 255, 0, 50));
|
|
barsNormal->setPen(QColor(0, 211, 56));
|
|
barsNormal->setWidth(0.9);
|
|
barsNormal->setBarsGroup(group);
|
|
|
|
barsBalance->setBrush(QColor(0, 0, 255, 50));
|
|
barsBalance->setPen(QColor(0, 211, 56));
|
|
barsBalance->setWidth(0.9);
|
|
barsBalance->setBarsGroup(group);
|
|
|
|
barsBalance->moveAbove(barsNormal);
|
|
|
|
ui->cellBarGraph->xAxis->setRange(1, 12);
|
|
ui->cellBarGraph->yAxis->setRange(2.5, 4.15);
|
|
ui->cellBarGraph->yAxis->setLabel("Voltage (V)");
|
|
ui->cellBarGraph->xAxis->setTickLabelRotation(85);
|
|
ui->cellBarGraph->xAxis->setSubTicks(false);
|
|
ui->cellBarGraph->xAxis->setTickLength(0, 5);
|
|
|
|
// Aux bar graph
|
|
group2 = new QCPBarsGroup(ui->auxBarGraph);
|
|
barsTemperature = new QCPBars(ui->auxBarGraph->xAxis, ui->auxBarGraph->yAxis);
|
|
|
|
barsTemperature->setBrush(QColor(0, 255, 0, 50));
|
|
barsTemperature->setPen(QColor(0, 211, 56));
|
|
barsTemperature->setWidth(0.9);
|
|
barsTemperature->setBarsGroup(group2);
|
|
|
|
ui->auxBarGraph->xAxis->setRange(1, 9);
|
|
ui->auxBarGraph->yAxis->setRange(-40, 75);
|
|
ui->auxBarGraph->yAxis->setLabel("Temperature (°C)");
|
|
ui->auxBarGraph->xAxis->setTickLabelRotation(85);
|
|
ui->auxBarGraph->xAxis->setSubTicks(false);
|
|
ui->auxBarGraph->xAxis->setTickLength(0, 5);
|
|
|
|
// Expansion bar graph
|
|
group3 = new QCPBarsGroup(ui->expBarGraph);
|
|
ExpBarsTemperature = new QCPBars(ui->expBarGraph->xAxis, ui->expBarGraph->yAxis);
|
|
|
|
ExpBarsTemperature->setBrush(QColor(0, 255, 0, 50));
|
|
ExpBarsTemperature->setPen(QColor(0, 211, 56));
|
|
ExpBarsTemperature->setWidth(0.9);
|
|
ExpBarsTemperature->setBarsGroup(group3);
|
|
|
|
ui->expBarGraph->xAxis->setRange(1, 8);
|
|
ui->expBarGraph->yAxis->setRange(-40, 75);
|
|
ui->expBarGraph->yAxis->setLabel("Temperature (°C)");
|
|
ui->expBarGraph->xAxis->setTickLabelRotation(85);
|
|
ui->expBarGraph->xAxis->setSubTicks(false);
|
|
ui->expBarGraph->xAxis->setTickLength(0, 5);
|
|
|
|
// cell limits graph
|
|
{
|
|
auto *widget = ui->cellLimitsGraph;
|
|
|
|
widget->legend->setVisible(true);
|
|
widget->legend->setFont(legendFont);
|
|
widget->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignRight|Qt::AlignBottom);
|
|
widget->legend->setBrush(QBrush(QColor(255,255,255,230)));
|
|
widget->xAxis->setLabel("Seconds (s)");
|
|
widget->yAxis->setLabel("Voltage (V)");
|
|
widget->yAxis->setRange(0, 5.0);
|
|
|
|
widget->addGraph();
|
|
widget->graph(0)->setPen(QPen(Qt::green));
|
|
widget->graph(0)->setName("Cell high");
|
|
|
|
widget->addGraph();
|
|
widget->graph(1)->setPen(QPen(Qt::blue));
|
|
widget->graph(1)->setName("Cell average");
|
|
|
|
widget->addGraph();
|
|
widget->graph(2)->setPen(QPen(Qt::red));
|
|
widget->graph(2)->setName("Cell low");
|
|
}
|
|
|
|
connect(mTimer, SIGNAL(timeout()),this, SLOT(timerSlot()));
|
|
}
|
|
|
|
PageRtData::~PageRtData()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
BMSInterface *PageRtData::bms() const
|
|
{
|
|
return mDieBieMS;
|
|
}
|
|
|
|
void PageRtData::setDieBieMS(BMSInterface *dieBieMS)
|
|
{
|
|
mDieBieMS = dieBieMS;
|
|
|
|
if (mDieBieMS) {
|
|
connect(mDieBieMS->commands(), SIGNAL(valuesReceived(BMS_VALUES)),this, SLOT(valuesReceived(BMS_VALUES)));
|
|
connect(mDieBieMS->commands(), SIGNAL(cellsReceived(int,QVector<double>)),this, SLOT(cellsReceived(int,QVector<double>)));
|
|
connect(mDieBieMS->commands(), SIGNAL(auxReceived(int,QVector<double>)),this, SLOT(auxReceived(int,QVector<double>)));
|
|
connect(mDieBieMS->commands(), SIGNAL(expTempReceived(int,QVector<double>)),this, SLOT(expTempReceived(int,QVector<double>)));
|
|
}
|
|
}
|
|
|
|
void PageRtData::timerSlot()
|
|
{
|
|
if (mUpdateValPlot) {
|
|
int dataSize = mPackVoltage.size();
|
|
|
|
QVector<double> xAxis(dataSize);
|
|
for (int i = 0;i < mSeconds.size();i++) {
|
|
xAxis[i] = mSeconds[i];
|
|
}
|
|
|
|
// Current and duty-plot
|
|
int graphIndex = 0;
|
|
ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mPackVoltage);
|
|
ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mLCLoadVoltage);
|
|
ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mLCLoadCurrent);
|
|
|
|
#if 0
|
|
graphIndex = 0;
|
|
ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVHigh);
|
|
ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVAverage);
|
|
ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVLow);
|
|
#endif
|
|
graphIndex = 0;
|
|
ui->cellLimitsGraph->graph(graphIndex++)->setData(xAxis, mCellVHigh);
|
|
ui->cellLimitsGraph->graph(graphIndex++)->setData(xAxis, mCellVAverage);
|
|
ui->cellLimitsGraph->graph(graphIndex++)->setData(xAxis, mCellVLow);
|
|
|
|
graphIndex = 0;
|
|
ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSHigh);
|
|
ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSAverage);
|
|
ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSLow);
|
|
ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattHigh);
|
|
ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattAverage);
|
|
ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattLow);
|
|
|
|
if (ui->autoscaleButton->isChecked()) {
|
|
ui->ivLCGraph->rescaleAxes();
|
|
#if 0 // do not autoscale since we're displaying cell voltages
|
|
ui->cellGraph->rescaleAxes();
|
|
#endif
|
|
// only scale X axis
|
|
ui->cellGraph->xAxis->rescale();
|
|
ui->cellLimitsGraph->xAxis->rescale();
|
|
ui->tempGraph->rescaleAxes();
|
|
}
|
|
|
|
ui->ivLCGraph->replot();
|
|
ui->cellGraph->replot();
|
|
ui->cellLimitsGraph->replot();
|
|
ui->tempGraph->replot();
|
|
ui->cellBarGraph->replot();
|
|
ui->auxBarGraph->replot();
|
|
ui->expBarGraph->replot();
|
|
|
|
mUpdateValPlot = false;
|
|
}
|
|
}
|
|
|
|
void PageRtData::valuesReceived(BMS_VALUES values)
|
|
{
|
|
ui->rtText->setValues(values);
|
|
|
|
const int maxS = 500;
|
|
|
|
appendDoubleAndTrunc(&mPackVoltage, values.packVoltage, maxS);
|
|
appendDoubleAndTrunc(&mLCLoadVoltage, values.loadLCVoltage, maxS);
|
|
appendDoubleAndTrunc(&mLCLoadCurrent, values.loadLCCurrent, maxS);
|
|
appendDoubleAndTrunc(&mHCLoadVoltage, values.loadHCVoltage, maxS);
|
|
appendDoubleAndTrunc(&mHCLoadCurrent, values.loadHCCurrent, maxS);
|
|
appendDoubleAndTrunc(&mChargerVoltage, values.chargerVoltage, maxS);
|
|
appendDoubleAndTrunc(&mAuxVoltage, values.auxVoltage, maxS);
|
|
appendDoubleAndTrunc(&mAuxCurrent, values.auxCurrent, maxS);
|
|
|
|
appendDoubleAndTrunc(&mCellVHigh, values.cVHigh, maxS);
|
|
appendDoubleAndTrunc(&mCellVAverage, values.cVAverage, maxS);
|
|
appendDoubleAndTrunc(&mCellVLow, values.cVLow, maxS);
|
|
|
|
appendDoubleAndTrunc(&mTempBMSHigh, values.tempBMSHigh, maxS);
|
|
appendDoubleAndTrunc(&mTempBMSAverage, values.tempBMSAverage, maxS);
|
|
appendDoubleAndTrunc(&mTempBMSLow, values.tempBMSLow, maxS);
|
|
appendDoubleAndTrunc(&mTempBattHigh, values.tempBattHigh, maxS);
|
|
appendDoubleAndTrunc(&mTempBattAverage, values.tempBattAverage, maxS);
|
|
appendDoubleAndTrunc(&mTempBattLow, values.tempBattLow, maxS);
|
|
appendDoubleAndTrunc(&mHumidity, values.humidity, maxS);
|
|
|
|
|
|
qint64 tNow = QDateTime::currentMSecsSinceEpoch();
|
|
|
|
double elapsed = (double)(tNow - mLastUpdateTime) / 1000.0;
|
|
if (elapsed > 1.0) {
|
|
elapsed = 1.0;
|
|
}
|
|
|
|
mSecondCounter += elapsed;
|
|
|
|
appendDoubleAndTrunc(&mSeconds, mSecondCounter, maxS);
|
|
|
|
mLastUpdateTime = tNow;
|
|
|
|
mUpdateValPlot = true;
|
|
}
|
|
|
|
void PageRtData::cellsReceived(int cellCount, QVector<double> cellVoltageArray){
|
|
QVector<double> dataxNew;
|
|
dataxNew.clear();
|
|
QVector<double> datayNormal;
|
|
datayNormal.clear();
|
|
QVector<double> datayBalance;
|
|
datayBalance.clear();
|
|
QVector<QString> labels;
|
|
int indexPointer;
|
|
|
|
double cellHardUnder = mDieBieMS->bmsConfig()->getParamDouble("cellHardUnderVoltage");
|
|
double cellHardOver = mDieBieMS->bmsConfig()->getParamDouble("cellHardOverVoltage");
|
|
|
|
for(indexPointer = 0; indexPointer < cellCount; indexPointer++){
|
|
dataxNew.append(indexPointer + 1);
|
|
|
|
if(cellVoltageArray[indexPointer] < 0.0){
|
|
datayNormal.append(0.0);
|
|
datayBalance.append(fabs(cellVoltageArray[indexPointer]));
|
|
}else{
|
|
datayNormal.append(fabs(cellVoltageArray[indexPointer]));
|
|
datayBalance.append(0.0);
|
|
}
|
|
|
|
QString voltageString = QStringLiteral("%1V (C").arg(fabs(cellVoltageArray[indexPointer]), 0, 'f',3);
|
|
labels.append(voltageString + QString::number(indexPointer+1) + ")");
|
|
}
|
|
|
|
QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
|
|
textTicker->addTicks(dataxNew, labels);
|
|
|
|
int idx = 0;
|
|
double plotx = mSeconds.empty() ? 0 : mSeconds.last();
|
|
for(auto v : cellVoltageArray)
|
|
{
|
|
if ( auto *pg = ui->cellGraph->graph(idx) )
|
|
{
|
|
auto ploty = fabs(v);
|
|
pg->addData(plotx, ploty);
|
|
}
|
|
++idx;
|
|
}
|
|
|
|
ui->cellBarGraph->xAxis->setTicker(textTicker);
|
|
ui->cellBarGraph->xAxis->setRange(0.5, indexPointer + 0.5);
|
|
ui->cellBarGraph->yAxis->setRange(cellHardUnder, cellHardOver);
|
|
barsNormal->setData(dataxNew, datayNormal);
|
|
barsBalance->setData(dataxNew, datayBalance);
|
|
}
|
|
|
|
void PageRtData::auxReceived(int auxCount, QVector<double> auxVoltageArray){
|
|
QVector<double> dataxNew;
|
|
dataxNew.clear();
|
|
QVector<double> datayNormal;
|
|
datayNormal.clear();
|
|
QVector<QString> labels;
|
|
int indexPointer;
|
|
|
|
for(indexPointer = 0; indexPointer < auxCount; indexPointer++){
|
|
dataxNew.append(indexPointer + 1);
|
|
|
|
if(auxVoltageArray[indexPointer] < -50.0){
|
|
datayNormal.append(0.0);
|
|
}else{
|
|
datayNormal.append(auxVoltageArray[indexPointer]);
|
|
}
|
|
|
|
QString voltageString = QStringLiteral("%1°C (TH").arg(auxVoltageArray[indexPointer], 0, 'f',3);
|
|
labels.append(voltageString + QString::number(indexPointer+1) + ")");
|
|
}
|
|
|
|
QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
|
|
textTicker->addTicks(dataxNew, labels);
|
|
|
|
ui->auxBarGraph->xAxis->setTicker(textTicker);
|
|
ui->auxBarGraph->xAxis->setRange(0.5, indexPointer + 0.5);
|
|
ui->auxBarGraph->yAxis->setRange(-40, 75);
|
|
barsTemperature->setData(dataxNew, datayNormal);
|
|
}
|
|
|
|
void PageRtData::expTempReceived(int expTempCount, QVector<double> expTempVoltageArray){
|
|
QVector<double> dataxNew;
|
|
dataxNew.clear();
|
|
QVector<double> datayNormal;
|
|
datayNormal.clear();
|
|
QVector<QString> labels;
|
|
int indexPointer;
|
|
|
|
for(indexPointer = 0; indexPointer < expTempCount; indexPointer++){
|
|
dataxNew.append(indexPointer + 1);
|
|
|
|
if(expTempVoltageArray[indexPointer] < -50.0){
|
|
datayNormal.append(0.0);
|
|
}else{
|
|
datayNormal.append(expTempVoltageArray[indexPointer]);
|
|
}
|
|
|
|
QString voltageString = QStringLiteral("%1°C (T").arg(expTempVoltageArray[indexPointer], 0, 'f',3);
|
|
labels.append(voltageString + QString::number(indexPointer) + ")");
|
|
}
|
|
|
|
QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
|
|
textTicker->addTicks(dataxNew, labels);
|
|
|
|
ui->expBarGraph->xAxis->setTicker(textTicker);
|
|
ui->expBarGraph->xAxis->setRange(0.5, indexPointer + 0.5);
|
|
ui->expBarGraph->yAxis->setRange(-40, 75);
|
|
ExpBarsTemperature->setData(dataxNew, datayNormal);
|
|
}
|
|
|
|
void PageRtData::appendDoubleAndTrunc(QVector<double> *vec, double num, int maxSize)
|
|
{
|
|
vec->append(num);
|
|
|
|
if(vec->size() > maxSize) {
|
|
vec->remove(0, vec->size() - maxSize);
|
|
}
|
|
}
|
|
|
|
void PageRtData::updateZoom()
|
|
{
|
|
Qt::Orientations plotOrientations = (Qt::Orientations)
|
|
((ui->zoomHButton->isChecked() ? Qt::Horizontal : 0) |
|
|
(ui->zoomVButton->isChecked() ? Qt::Vertical : 0));
|
|
|
|
ui->ivLCGraph->axisRect()->setRangeZoom(plotOrientations);
|
|
ui->cellGraph->axisRect()->setRangeZoom(plotOrientations);
|
|
ui->cellLimitsGraph->axisRect()->setRangeZoom(plotOrientations);
|
|
ui->tempGraph->axisRect()->setRangeZoom(plotOrientations);
|
|
}
|
|
|
|
void PageRtData::on_zoomHButton_toggled(bool checked)
|
|
{
|
|
(void)checked;
|
|
updateZoom();
|
|
}
|
|
|
|
void PageRtData::on_zoomVButton_toggled(bool checked)
|
|
{
|
|
(void)checked;
|
|
updateZoom();
|
|
}
|
|
|
|
void PageRtData::on_rescaleButton_clicked()
|
|
{
|
|
ui->ivLCGraph->rescaleAxes();
|
|
ui->cellGraph->rescaleAxes();
|
|
ui->cellLimitsGraph->rescaleAxes();
|
|
ui->tempGraph->rescaleAxes();
|
|
|
|
ui->ivLCGraph->replot();
|
|
ui->cellGraph->replot();
|
|
ui->cellLimitsGraph->replot();
|
|
ui->tempGraph->replot();
|
|
}
|
|
|
|
void PageRtData::on_tempShowBMSBox_toggled(bool checked)
|
|
{
|
|
ui->tempGraph->graph(0)->setVisible(checked);
|
|
ui->tempGraph->graph(1)->setVisible(checked);
|
|
}
|
|
|
|
void PageRtData::on_tempShowBatteryBox_toggled(bool checked)
|
|
{
|
|
ui->tempGraph->graph(2)->setVisible(checked);
|
|
ui->tempGraph->graph(3)->setVisible(checked);
|
|
}
|
|
/*
|
|
void PageRtData::on_csvChooseDirButton_clicked()
|
|
{
|
|
ui->csvFileEdit->setText(QFileDialog::getExistingDirectory(this,
|
|
"Choose CSV output directory"));
|
|
}
|
|
|
|
void PageRtData::on_csvEnableLogBox_clicked(bool checked)
|
|
{
|
|
if (checked) {
|
|
if (mDieBieMS) {
|
|
mDieBieMS->openRtLogFile(ui->csvFileEdit->text());
|
|
}
|
|
} else {
|
|
mDieBieMS->closeRtLogFile();
|
|
}
|
|
}
|
|
|
|
void PageRtData::on_csvHelpButton_clicked()
|
|
{
|
|
HelpDialog::showHelp(this, mDieBieMS->infoConfig(), "help_rt_logging");
|
|
}
|
|
*/
|