Files
StandBatteryView/BatteryController.cpp
2025-07-03 21:13:16 +09:00

287 lines
5.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "BatteryController.h"
#include <QDateTime>
#include <QDebug>
#include <bitset>
BatteryController::BatteryController(
QObject *parent)
: QObject{parent}
{}
BatteryController::~BatteryController()
{
}
int BatteryController::batteryIndex() const
{
return batteryIndex_;
}
void BatteryController::setBatteryIndex(int index)
{
if (batteryIndex_ == index)
return;
batteryIndex_ = index;
emit batteryIndexChanged();
}
int BatteryController::chargeType() const
{
return chargeType_;
}
void BatteryController::setChargeType(int type)
{
if (chargeType_ == type)
return;
chargeType_ = type;
emit chargeTypeChanged();
}
int BatteryController::workingMode() const
{
return workingMode_;
}
void BatteryController::setWorkingMode(int mode)
{
if (workingMode_ == mode)
return;
workingMode_ = mode;
emit workingModeChanged();
}
QVariant BatteryController::controlVoltage() const
{
return controlVoltage_;
}
void BatteryController::setControlVoltage(const QVariant& value)
{
if (controlVoltage_ == value)
return;
controlVoltage_ = value;
emit controlVoltageChanged();
}
QVariant BatteryController::controlCurrent() const
{
return controlCurrent_;
}
void BatteryController::setControlCurrent(const QVariant& value)
{
if (controlCurrent_ == value)
return;
controlCurrent_ = value;
emit controlCurrentChanged();
}
QVariant BatteryController::controlTemperature() const
{
return controlTemperature_;
}
void BatteryController::setControlTemperature(const QVariant& value)
{
if (controlTemperature_ == value)
return;
controlTemperature_ = value;
emit controlTemperatureChanged();
}
QVariant BatteryController::controlCapacity() const
{
return controlCapacity_;
}
void BatteryController::setControlCapacity(const QVariant& value)
{
if (controlCapacity_ == value)
return;
controlCapacity_ = value;
emit controlCapacityChanged();
}
QVariant BatteryController::measuredVoltage() const
{
return measuredVoltage_;
}
void BatteryController::setMeasuredVoltage(const QVariant& value)
{
if (measuredVoltage_ == value)
return;
measuredVoltage_ = value;
emit measuredVoltageChanged();
}
QVariant BatteryController::measuredCurrent() const
{
return measuredCurrent_;
}
void BatteryController::setMeasuredCurrent(const QVariant& value)
{
if (measuredCurrent_ == value)
return;
measuredCurrent_ = value;
emit measuredCurrentChanged();
}
QVariant BatteryController::measuredTemperature() const
{
return measuredTemperature_;
}
void BatteryController::setMeasuredTemperature(const QVariant& value)
{
if (measuredTemperature_ == value)
return;
measuredTemperature_ = value;
emit measuredTemperatureChanged();
}
QVariant BatteryController::measuredCapacity() const
{
return measuredCapacity_;
}
void BatteryController::setMeasuredCapacity(const QVariant& value)
{
if (measuredCapacity_ == value)
return;
measuredCapacity_ = value;
emit measuredCapacityChanged();
}
QVariantList BatteryController::statuses() const
{
return statuses_;
}
void BatteryController::setStatuses(const QVariantList& statuses)
{
if (statuses_ == statuses)
return;
statuses_ = statuses;
emit statusesChanged();
}
void BatteryController::addStatus(const quint16 status)
{
// QString description;
// auto appendDescription = [&description](const QString& subStatus)
// {
// if (!description.isEmpty())
// {
// description += ", ";
// }
// description += subStatus;
// };
QStringList descriptionList;
auto appendDescription = [&descriptionList](const QString& subStatus)
{
descriptionList.append(subStatus);
};
std::bitset<16> descriptionBitset(status);
if (descriptionBitset.test(0))
{
appendDescription("Ошибка Т датчика КП");
}
if (descriptionBitset.test(1))
{
appendDescription("Низкий разряд АКБ");
}
if (descriptionBitset.test(2))
{
appendDescription("Заряд завершен");
}
if (descriptionBitset.test(3))
{
appendDescription("Ошибка Т датчика УКПБ");
}
if (descriptionBitset.test(4))
{
appendDescription("Ток долго не снижается");
}
if (descriptionBitset.test(5))
{
appendDescription("Ошибка БПС3000");
}
if (descriptionBitset.test(6))
{
appendDescription("U менее 61.25 В");
}
if (descriptionBitset.test(7))
{
appendDescription("U выше нормы по КП");
}
if (descriptionBitset.test(8))
{
appendDescription("Останов первого заряда");
}
if (descriptionBitset.test(9))
{
appendDescription("Останов разряда");
}
if (descriptionBitset.test(10))
{
appendDescription("Останов второго заряда");
}
if (descriptionBitset.test(11))
{
appendDescription("Более 45 гр. С");
}
if (descriptionBitset.test(12))
{
appendDescription("Разночтение в токах");
}
if (descriptionList.isEmpty())
{
appendDescription("Штатный режим");
}
statuses_.clear();
for (const auto& description: descriptionList)
{
QVariantMap statusMap;
statusMap.insert("time", QDateTime::currentDateTime().toString("hh:mm:ss dd-MM-yyyy"));
statusMap.insert("status", "0x" + QString::number(status, 16).toUpper().rightJustified(2, '0'));
statusMap.insert("description", description);
statuses_.append(statusMap);
}
emit statusesChanged();
// if (statuses_.isEmpty() || statuses_.first().toMap()["status"] != statusMap["status"])
// {
// qDebug() << "Status:" << statusMap["status"].toString() << statusMap["description"].toString();
// statuses_.prepend(statusMap);
// emit statusesChanged();
// }
}