Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion NERODesign/src/import_qml_components_plugins.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ Q_IMPORT_QML_PLUGIN(QtQuick_Studio_MultiTextPlugin)
Q_IMPORT_QML_PLUGIN(QtQuick_Studio_EventSimulatorPlugin)
Q_IMPORT_QML_PLUGIN(QtQuick_Studio_EventSystemPlugin)

#endif
#endif
2 changes: 1 addition & 1 deletion NERODesign/src/import_qml_plugins.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
#include <QtQml/qqmlextensionplugin.h>

Q_IMPORT_QML_PLUGIN(contentPlugin)
Q_IMPORT_QML_PLUGIN(NEROPlugin)
Q_IMPORT_QML_PLUGIN(NEROPlugin)
2 changes: 1 addition & 1 deletion NERODevelopment/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -111,4 +111,4 @@ install(TARGETS NEROApp
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
)
5 changes: 3 additions & 2 deletions NERODevelopment/content/EfficiencyScreen.qml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Item {
anchors.fill: parent
property int torqueLimit: efficiencyController.currentMaxTorque
property int numRegen: efficiencyController.currentRegenStrength
property double numRegenPercentage: efficiencyController.currentRegenPercentage
property int hvSOC: efficiencyController.stateOfCharge
property int lvSOC: efficiencyController.lowVoltageStateOfCharge
property int motorTemp: efficiencyController.motorTemp
Expand Down Expand Up @@ -84,14 +85,14 @@ Item {
ThermometerValueComponent {
id: regen
regen: true
thermometerValue: efficiency.numRegen
thermometerValue: showPercentage ? efficiency.numRegenPercentage : efficiency.numRegen
title: "REGEN"
Layout.fillWidth: true
Layout.fillHeight: true
radius: efficiency.borderRadii
valueFontSize: efficiency.valueFontSize
labelFontSize: efficiency.labelFontSize
unitFontSize: efficiency.labelFontSize / 2
unitFontSize: efficiency.valueFontSize / 1.5
}
}

Expand Down
5 changes: 3 additions & 2 deletions NERODevelopment/content/SpeedMode.qml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Item {
property int maxDraw: speedController.maxCurrent
property int dcl: speedController.currentDischarge
property double regen: speedController.regen
property double regenPercentage: speedController.regenPercentage

property int xMargin: width / 20
property int yMargin: height / 20
Expand Down Expand Up @@ -89,8 +90,8 @@ Item {
spacing: parent.height / 20

ThermometerValueComponent {
thermometerValue: speedMode.regen
title: "Regen"
thermometerValue: showPercentage ? speedMode.regenPercentage : speedMode.regen
title: "REGEN"
Layout.fillHeight: true
Layout.fillWidth: true
Layout.preferredHeight: 1
Expand Down
2 changes: 1 addition & 1 deletion NERODevelopment/content/ThermometerValueComponent.qml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@ Item {
valueFontSize: thermometerComponent.valueFontSize
labelFontSize: thermometerComponent.labelFontSize
unitFontSize: thermometerComponent.unitFontSize
unitAnchorBottom: regen ? true : false
unitAnchorBottom: showPercentage ? false : true
}
}
95 changes: 60 additions & 35 deletions NERODevelopment/src/controllers/efficiencycontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

EfficiencyController::EfficiencyController(Model *model, QObject *parent)
: ButtonController{model, 4, parent}, m_updateTimer(new QTimer(this)),
m_timerRunning(false) {
connect(m_model, &Model::onCurrentDataChange, this,
&EfficiencyController::currentDataDidChange);
connect(m_updateTimer, &QTimer::timeout, this,
&EfficiencyController::updateCurrentTime);
m_updateTimer->setInterval(1);
m_timerRunning(false) {
connect(m_model, &Model::onCurrentDataChange, this,
&EfficiencyController::currentDataDidChange);
connect(m_updateTimer, &QTimer::timeout, this,
&EfficiencyController::updateCurrentTime);
m_updateTimer->setInterval(1);
currentDataDidChange();
}

int EfficiencyController::currentMaxTorque() const {
Expand All @@ -23,10 +24,30 @@ void EfficiencyController::setCurrentMaxTorque(int torque) {
int EfficiencyController::currentRegenStrength() const {
return m_currentRegenStrength;
}

float EfficiencyController::currentRegenPercentage() const {
if (m_maxRegenCapacity > 0) {
return (abs(m_currentRegenStrength) / abs(m_maxRegenCapacity)) * 100.0f;
}
return 0.0f;
}

float EfficiencyController::maxRegenCapacity() const {
return m_maxRegenCapacity;
}

void EfficiencyController::setMaxRegenCapacity(float capacity) {
if (capacity != m_maxRegenCapacity) {
m_maxRegenCapacity = capacity;
emit maxRegenCapacityChanged(capacity);
emit currentRegenPercentageChanged(currentRegenPercentage());
}
}
void EfficiencyController::setCurrentRegenStrength(int strength) {
if (strength != m_currentRegenStrength) {
m_currentRegenStrength = strength;
emit currentRegenStrengthChanged(strength);
emit currentRegenPercentageChanged(currentRegenPercentage());
}
}

Expand Down Expand Up @@ -73,35 +94,39 @@ void EfficiencyController::setSpeed(int speed) {
}

void EfficiencyController::currentDataDidChange() {
std::optional<float> torque = m_model->getTorquePower();
std::optional<float> regen = m_model->getRegenPower();
std::optional<float> soc = m_model->getStateOfCharge();
std::optional<float> motorTemp = m_model->getMotorTemp();
std::optional<float> packTemp = m_model->getPackTemp();
std::optional<float> lowVoltageSoc = m_model->getLowVoltageStateOfCharge();
std::optional<float> speed = m_model->getMph();

if (torque) {
setCurrentMaxTorque(*torque);
}
if (regen) {
setCurrentRegenStrength(*regen);
}
if (soc) {
setStateOfCharge(*soc);
}
if (motorTemp) {
setMotorTemp(*motorTemp);
}
if (packTemp) {
setPackTemp(*packTemp);
}
if (lowVoltageSoc) {
setLowVoltageStateOfCharge(*lowVoltageSoc);
}
if (speed) {
setSpeed(*speed);
}
std::optional<float> torque = m_model->getTorquePower();
std::optional<float> regen = m_model->getRegenPower();
std::optional<float> soc = m_model->getStateOfCharge();
std::optional<float> motorTemp = m_model->getMotorTemp();
std::optional<float> packTemp = m_model->getPackTemp();
std::optional<float> lowVoltageSoc = m_model->getLowVoltageStateOfCharge();
std::optional<float> speed = m_model->getMph();
std::optional<float> maxRegenCapacity = m_model->getMaxRegenCapacity();

if (torque) {
setCurrentMaxTorque(*torque);
}
if (regen) {
setCurrentRegenStrength(*regen);
}
if (soc) {
setStateOfCharge(*soc);
}
if (motorTemp) {
setMotorTemp(*motorTemp);
}
if (packTemp) {
setPackTemp(*packTemp);
}
if (lowVoltageSoc) {
setLowVoltageStateOfCharge(*lowVoltageSoc);
}
if (speed) {
setSpeed(*speed);
}
if (maxRegenCapacity) {
setMaxRegenCapacity(*maxRegenCapacity);
}
}

int EfficiencyController::currentTime() const { return m_currentTime; }
Expand Down
10 changes: 9 additions & 1 deletion NERODevelopment/src/controllers/efficiencycontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ class EfficiencyController : public ButtonController {
fastestTimeChanged)
Q_PROPERTY(
int lastTime READ lastTime WRITE setLastTime NOTIFY lastTimeChanged)
Q_PROPERTY(float currentRegenPercentage READ currentRegenPercentage NOTIFY currentRegenPercentageChanged)
Q_PROPERTY(float maxRegenCapacity READ maxRegenCapacity WRITE setMaxRegenCapacity NOTIFY maxRegenCapacityChanged)

public:
explicit EfficiencyController(Model *model, QObject *parent = nullptr);
Expand All @@ -46,6 +48,8 @@ class EfficiencyController : public ButtonController {
int currentTime() const;
int fastestTime() const;
int lastTime() const;
float currentRegenPercentage() const;
float maxRegenCapacity() const;

signals:
void currentMaxTorqueChanged(int);
Expand All @@ -58,6 +62,8 @@ class EfficiencyController : public ButtonController {
void currentTimeChanged(int);
void fastestTimeChanged(int);
void lastTimeChanged(int);
void currentRegenPercentageChanged(float);
void maxRegenCapacityChanged(float);

public slots:
void setCurrentMaxTorque(int);
Expand All @@ -71,13 +77,15 @@ public slots:
void setCurrentTime(int);
void setFastestTime(int);
void setLastTime(int);
void setMaxRegenCapacity(float);

void enterButtonPressed() override;
void updateCurrentTime();

private:
private:
int m_currentMaxTorque = 0; // torque percentage [0,100]
int m_currentRegenStrength = 0; // regen strength [1,3]
float m_maxRegenCapacity = 10.0f; // Changed from 10.0f to 0 - will be set from model
int m_stateOfCharge = 0; // charge percentage [0,100]
int m_motorTemp = 0; // Celsius
int m_packTemp = 0; // Celsius
Expand Down
51 changes: 37 additions & 14 deletions NERODevelopment/src/controllers/speedcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@

SpeedController::SpeedController(Model *model, QObject *parent)
: ButtonController{model, 3, parent}, m_updateTimer(new QTimer(this)) {
connect(m_model, &Model::onCurrentDataChange, this, &SpeedController::update);
connect(m_updateTimer, &QTimer::timeout, this,
&SpeedController::updateCurrentTime);
m_updateTimer->setInterval(1);
connect(m_model, &Model::onCurrentDataChange, this, &SpeedController::update);
connect(m_updateTimer, &QTimer::timeout, this,
&SpeedController::updateCurrentTime);
m_updateTimer->setInterval(1);
update();
}

bool SpeedController::tractionControl() const { return m_tractionControl; }
Expand All @@ -23,9 +24,30 @@ void SpeedController::setRegen(float regen) {
if (regen != m_regen) {
m_regen = regen;
emit regenChanged(regen);
emit regenPercentageChanged(regenPercentage());
}
}

float SpeedController::regenPercentage() const {
if (m_maxRegenCapacity > 0) {
float result = (abs(m_regen) / abs(m_maxRegenCapacity)) * 100.0f;
return result;
}
return 0.0f;
}

float SpeedController::maxRegenCapacity() const {
return m_maxRegenCapacity;
}

void SpeedController::setMaxRegenCapacity(float capacity) {
if (capacity != m_maxRegenCapacity) {
m_maxRegenCapacity = capacity;
emit maxRegenCapacityChanged(capacity);
emit regenPercentageChanged(regenPercentage());
}
}

float SpeedController::packTemp() const { return m_packTemp; }
void SpeedController::setPackTemp(float packTemp) {
if (packTemp != m_packTemp) {
Expand Down Expand Up @@ -144,14 +166,15 @@ void SpeedController::updateCurrentTime() {
}

void SpeedController::update() {
setTractionControl(*m_model->getTractionControl());
setPackTemp(*m_model->getPackTemp());
setMotorTemp(*m_model->getMotorTemp());
setChargeState(*m_model->getStateOfCharge());
setCurrentSpeed(*m_model->getMph());
setMaxSpeed(m_model->getMaxSpeed());
setCurrent(*m_model->getCurrent());
setMaxCurrent(m_model->getMaxDraw());
setCurrentDischarge(*m_model->getDcl());
setRegen(*m_model->getRegenPower());
setTractionControl(*m_model->getTractionControl());
setPackTemp(*m_model->getPackTemp());
setMotorTemp(*m_model->getMotorTemp());
setChargeState(*m_model->getStateOfCharge());
setCurrentSpeed(*m_model->getMph());
setMaxSpeed(m_model->getMaxSpeed());
setCurrent(*m_model->getCurrent());
setMaxCurrent(m_model->getMaxDraw());
setCurrentDischarge(*m_model->getDcl());
setRegen(*m_model->getRegenPower());
setMaxRegenCapacity(*m_model->getMaxRegenCapacity());
}
9 changes: 8 additions & 1 deletion NERODevelopment/src/controllers/speedcontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ class SpeedController : public ButtonController {
setCurrentDischarge NOTIFY currentDischargeChanged)
Q_PROPERTY(float maxCurrentDischarge READ maxCurrentDischarge WRITE
setMaxCurrentDischarge NOTIFY maxCurrentDischargeChanged)
Q_PROPERTY(float regenPercentage READ regenPercentage NOTIFY regenPercentageChanged)
Q_PROPERTY(float maxRegenCapacity READ maxRegenCapacity WRITE setMaxRegenCapacity NOTIFY maxRegenCapacityChanged)

public:
explicit SpeedController(Model *model, QObject *parent = nullptr);
Expand All @@ -53,6 +55,8 @@ class SpeedController : public ButtonController {
float currentDischarge() const;
float maxCurrentDischarge() const;
float regen() const;
float regenPercentage() const;
float maxRegenCapacity() const;

signals:
void tractionControlChanged(bool);
Expand All @@ -69,6 +73,8 @@ class SpeedController : public ButtonController {
void currentDischargeChanged(float);
void maxCurrentDischargeChanged(float);
void regenChanged(float);
void regenPercentageChanged(float);
void maxRegenCapacityChanged(float);

public slots:
void setTractionControl(bool);
Expand All @@ -85,6 +91,7 @@ public slots:
void setCurrentDischarge(float);
void setMaxCurrentDischarge(float);
void setRegen(float);
void setMaxRegenCapacity(float);

void enterButtonPressed() override;
void updateCurrentTime();
Expand All @@ -106,7 +113,7 @@ public slots:
float m_currentDischarge = 0;
float m_maxCurrentDischarge = 0;
float m_regen = 0;

float m_maxRegenCapacity = 0;
bool m_timerRunning = false;
QElapsedTimer m_timer;
QTimer *m_updateTimer;
Expand Down
2 changes: 1 addition & 1 deletion NERODevelopment/src/import_qml_components_plugins.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ Q_IMPORT_QML_PLUGIN(QtQuick_Studio_MultiTextPlugin)
Q_IMPORT_QML_PLUGIN(QtQuick_Studio_EventSimulatorPlugin)
Q_IMPORT_QML_PLUGIN(QtQuick_Studio_EventSystemPlugin)

#endif
#endif
2 changes: 1 addition & 1 deletion NERODevelopment/src/import_qml_plugins.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
#include <QtQml/qqmlextensionplugin.h>

Q_IMPORT_QML_PLUGIN(contentPlugin)
Q_IMPORT_QML_PLUGIN(NEROPlugin)
Q_IMPORT_QML_PLUGIN(NEROPlugin)
2 changes: 1 addition & 1 deletion NERODevelopment/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,4 @@ int main(int argc, char *argv[]) {
engine.loadFromModule("content", "App");

return app.exec();
}
}
1 change: 1 addition & 0 deletions NERODevelopment/src/models/model.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class Model : public QObject {
virtual std::optional<float> getDir() = 0;
virtual std::optional<float> getPackTemp() = 0;
virtual std::optional<float> getMotorTemp() = 0;
virtual std::optional<float> getMaxRegenCapacity() = 0;
virtual std::optional<float> getStateOfCharge() = 0;
virtual std::optional<float> getCurrent() = 0;
virtual std::optional<float> getBalancingCells() = 0;
Expand Down
2 changes: 1 addition & 1 deletion NERODevelopment/src/models/mqtt_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,4 +109,4 @@ void MqttClient::sendMessage(const QString topic, const float value) {
serverData.setTimeUs(timeUs);
QByteArray data = serverData.serialize(&this->m_serializer);
m_client->publish("NERO/" + topic, data);
}
}
2 changes: 1 addition & 1 deletion NERODevelopment/src/models/mqtt_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,4 @@ private slots:
QProtobufSerializer m_serializer;
QList<QString> m_topics = {};
};
#endif // MQTTCLIENT_H
#endif // MQTTCLIENT_H
Loading