diff options
author | Joshua Drake <joshua.ellis.drake@gmail.com> | 2022-11-21 02:03:46 -0600 |
---|---|---|
committer | Joshua Drake <joshua.ellis.drake@gmail.com> | 2022-11-21 02:03:46 -0600 |
commit | 341e61f7a6f9deebf086a2b8147e252be6d45f33 (patch) | |
tree | f406b1947fb8791b1ee0820823499880d9989490 | |
parent | 1321168cb22a76df96d747194fcb91863e4e0659 (diff) |
Added new UI elements and brushed up calculations.
-rw-r--r-- | .gitignore | 73 | ||||
-rw-r--r-- | EVPC.pro.user | 5 | ||||
-rw-r--r-- | battery.cpp | 26 | ||||
-rw-r--r-- | battery.h | 26 | ||||
-rw-r--r-- | mainwindow.cpp | 21 | ||||
-rw-r--r-- | mainwindow.h | 2 | ||||
-rw-r--r-- | mainwindow.ui | 197 | ||||
-rw-r--r-- | wire.cpp | 6 | ||||
-rw-r--r-- | wire.h | 1 |
9 files changed, 260 insertions, 97 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fab7372 --- /dev/null +++ b/.gitignore @@ -0,0 +1,73 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + diff --git a/EVPC.pro.user b/EVPC.pro.user index 2dc6b5d..9d7d6d3 100644 --- a/EVPC.pro.user +++ b/EVPC.pro.user @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> -<!-- Written by QtCreator 5.0.2, 2022-11-19T04:03:22. --> +<!-- Written by QtCreator 5.0.2, 2022-11-21T02:03:09. --> <qtcreator> <data> <variable>EnvironmentId</variable> @@ -85,6 +85,9 @@ <valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/> <value type="bool" key="ClangTools.UseGlobalSettings">true</value> </valuemap> + <valuemap type="QVariantMap" key="CppEditor.QuickFix"> + <value type="bool" key="UseGlobalSettings">true</value> + </valuemap> </valuemap> </data> <data> diff --git a/battery.cpp b/battery.cpp index b38a0ac..e0b7c26 100644 --- a/battery.cpp +++ b/battery.cpp @@ -2,8 +2,6 @@ Battery::Battery() : activeBattery(batteries[LiionPhosphate]), - seriesCells(0), - parallelCells(0), systemVoltage(0), peakPower(0), packDischargeRate(0), @@ -31,7 +29,29 @@ void Battery::setPeakSystemPower(double power) void Battery::calculate() { - seriesCells = ceil(systemVoltage/activeBattery.nominalVoltage); + emit calculation(); +} + +int Battery::seriesCells(void) +{ + return ceil(systemVoltage/activeBattery.nominalVoltage); +} +int Battery::parallelCells(void) +{ + //return ceil(peakPower); +} +float Battery::minimumPackVoltage(void) +{ + return seriesCells()*activeBattery.minimumVoltage; +} + +float Battery::maximumPackVoltage(void) +{ + return seriesCells()*activeBattery.maximumVoltage; +} +double Battery::peakCurrent() +{ + return peakPower/minimumPackVoltage(); } @@ -7,18 +7,20 @@ typedef struct batteryData { QString name; double nominalVoltage; + double minimumVoltage; + double maximumVoltage; double specificEnergy; // Wh/Kg - float cellDischargeRate; - float cellChargeRate; + double cellDischargeRate; + double cellChargeRate; }batteryData_t; static const batteryData_t batteries[] { - {.name = "Li-ion Phosphate", .nominalVoltage = 3.3, .specificEnergy = 105.0, .cellDischargeRate = 30, .cellChargeRate = 10}, - {.name = "Li-ion Manganese", .nominalVoltage = 3.7, .specificEnergy = 125.0, .cellDischargeRate = 30, .cellChargeRate = 10}, - {.name = "Li-ion Cobalt", .nominalVoltage = 3.6, .specificEnergy = 200.0, .cellDischargeRate = 2, .cellChargeRate = 1}, - {.name = "NiMH", .nominalVoltage = 1.2, .specificEnergy = 90.0, .cellDischargeRate = 5, .cellChargeRate = 0.5}, - {.name = "NiCd", .nominalVoltage = 1.2, .specificEnergy = 60.0, .cellDischargeRate = 20, .cellChargeRate = 1}, + {.name = "Li-ion Phosphate", .nominalVoltage = 3.3, .minimumVoltage = 2.5, .maximumVoltage = 3.6, .specificEnergy = 105.0, .cellDischargeRate = 30, .cellChargeRate = 10}, + {.name = "Li-ion Manganese", .nominalVoltage = 3.7, .minimumVoltage = 2.5, .maximumVoltage = 4.2, .specificEnergy = 125.0, .cellDischargeRate = 30, .cellChargeRate = 10}, + {.name = "Li-ion Cobalt", .nominalVoltage = 3.6, .minimumVoltage = 2.5, .maximumVoltage = 4.2, .specificEnergy = 200.0, .cellDischargeRate = 2, .cellChargeRate = 1}, + {.name = "NiMH", .nominalVoltage = 1.2, .minimumVoltage = 1.0, .maximumVoltage = 1.3, .specificEnergy = 90.0, .cellDischargeRate = 5, .cellChargeRate = 0.5}, + {.name = "NiCd", .nominalVoltage = 1.2, .minimumVoltage = 1.0, .maximumVoltage = 1.3, .specificEnergy = 60.0, .cellDischargeRate = 20, .cellChargeRate = 1}, }; enum batteryNames { @@ -38,20 +40,26 @@ public: void setSystemVoltage(double voltage); void setPeakSystemPower(double power); void changeBatteryChemistry(int name); + + int seriesCells(void); + int parallelCells(void); + float minimumPackVoltage(void); + float maximumPackVoltage(void); + double peakCurrent(void); public slots: void calculate(void); private: batteryData_t activeBattery; - int seriesCells; - int parallelCells; double systemVoltage; double peakPower; float packDischargeRate; float packChargeRate; float packWeight; float packEnergy; + signals: + void calculation(void); }; diff --git a/mainwindow.cpp b/mainwindow.cpp index 44a3a2e..62702cd 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -12,7 +12,12 @@ MainWindow::MainWindow(QWidget *parent) connect(&m_wire,&Wire::calculation, [&]() { ui->lineEditWireGauge->setText(m_wire.gauge()); ui->lineEditWireWeight->setText(QString::number(m_wire.weight())); - ui->lineEditPeakCurrent->setText(QString::number(m_wire.peakCurrent())); + }); + + connect(&m_battery,&Battery::calculation, [&]() { + ui->lineEditCellCount->setText(QString::number(m_battery.seriesCells())+"S"); + ui->lineEditVoltageRange->setText(QString::number(m_battery.minimumPackVoltage())+" - "+QString::number(m_battery.maximumPackVoltage())); + ui->lineEditPeakCurrent->setText(QString::number(m_battery.peakCurrent())); }); } @@ -27,6 +32,7 @@ void MainWindow::on_spinBoxPeakSystemPower_valueChanged(double arg1) m_wire.setPeakSystemPower(arg1); m_wire.calculate(); m_battery.setPeakSystemPower(arg1); + m_battery.calculate(); } void MainWindow :: initializeGraphics() @@ -38,6 +44,7 @@ void MainWindow :: initializeGraphics() void MainWindow::on_comboBoxBatteryChemistry_currentIndexChanged(int index) { m_battery.changeBatteryChemistry(index); + m_battery.calculate(); } @@ -54,9 +61,10 @@ void MainWindow::on_comboBoxWireMaterial_currentIndexChanged(int index) void MainWindow::on_doubleSpinBoxSystemVoltage_valueChanged(double arg1) { - m_wire.setSystemVoltage(arg1); - m_wire.calculate(); + //m_wire.setSystemVoltage(arg1); + //m_wire.calculate(); m_battery.setSystemVoltage(arg1); + m_battery.calculate(); } @@ -66,3 +74,10 @@ void MainWindow::on_doubleSpinBoxEstimatedWireLength_valueChanged(double arg1) m_wire.calculate(); } + +void MainWindow::on_lineEditVoltageRange_textChanged(const QString &arg1) +{ + m_wire.setSystemVoltage((arg1.split(" -")[0]).toDouble()); + m_wire.calculate(); +} + diff --git a/mainwindow.h b/mainwindow.h index 359faf5..f7f0b00 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -33,6 +33,8 @@ private slots: void on_doubleSpinBoxEstimatedWireLength_valueChanged(double arg1); + void on_lineEditVoltageRange_textChanged(const QString &arg1); + private: Battery m_battery; Wire m_wire; diff --git a/mainwindow.ui b/mainwindow.ui index 0755bb5..5f0a180 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -71,27 +71,7 @@ <string>Outputs</string> </property> <layout class="QGridLayout" name="gridLayout_4"> - <item row="1" column="0"> - <widget class="QLabel" name="labelPeakCurrent"> - <property name="text"> - <string>Peak Current:</string> - </property> - </widget> - </item> - <item row="5" column="0"> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item row="1" column="1"> + <item row="2" column="1"> <widget class="QLineEdit" name="lineEditPeakCurrent"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> @@ -99,6 +79,15 @@ <verstretch>0</verstretch> </sizepolicy> </property> + <property name="toolTip"> + <string extracomment="Peak Current is based on the minimum voltage of the battery pack and peak system power."/> + </property> + <property name="toolTipDuration"> + <number>10000</number> + </property> + <property name="whatsThis"> + <string extracomment="Peak Current is based on the minimum voltage of the battery pack and peak system power."/> + </property> <property name="alignment"> <set>Qt::AlignCenter</set> </property> @@ -107,7 +96,7 @@ </property> </widget> </item> - <item row="2" column="1"> + <item row="3" column="1"> <widget class="QLineEdit" name="lineEditWireGauge"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> @@ -123,15 +112,35 @@ </property> </widget> </item> + <item row="7" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="labelFuelAmount"> + <property name="text"> + <string>Fuel Quantity:</string> + </property> + </widget> + </item> <item row="3" column="0"> - <widget class="QLabel" name="labelWireWeight"> + <widget class="QLabel" name="labelWireGauge"> <property name="text"> - <string>Wire Weight:</string> + <string>Wire Gauge:</string> </property> </widget> </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="lineEditCellCount"> + <item row="4" column="1"> + <widget class="QLineEdit" name="lineEditWireWeight"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -146,8 +155,35 @@ </property> </widget> </item> - <item row="3" column="1"> - <widget class="QLineEdit" name="lineEditWireWeight"> + <item row="0" column="0"> + <widget class="QLabel" name="labelBatteryPackCells"> + <property name="text"> + <string>Cell Count:</string> + </property> + </widget> + </item> + <item row="5" column="1"> + <widget class="QLineEdit" name="lineEditFuelAmount"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="labelWireWeight"> + <property name="text"> + <string>Wire Weight:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="lineEditCellCount"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -163,34 +199,39 @@ </widget> </item> <item row="2" column="0"> - <widget class="QLabel" name="labelWireGauge"> - <property name="text"> - <string>Wire Gauge:</string> + <widget class="QLabel" name="labelPeakCurrent"> + <property name="toolTip"> + <string extracomment="Peak Current is based on the minimum voltage of the battery pack and peak system power."/> + </property> + <property name="toolTipDuration"> + <number>10000</number> + </property> + <property name="whatsThis"> + <string extracomment="Peak Current is based on the minimum voltage of the battery pack and peak system power."/> </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="labelBatteryPackCells"> <property name="text"> - <string>Cell Count:</string> + <string>Peak Current:</string> </property> </widget> </item> - <item row="4" column="0"> - <widget class="QLabel" name="labelFuelAmount"> + <item row="1" column="0"> + <widget class="QLabel" name="labelVoltageRange"> <property name="text"> - <string>Fuel Quantity:</string> + <string>Voltage Range:</string> </property> </widget> </item> - <item row="4" column="1"> - <widget class="QLineEdit" name="lineEditFuelAmount"> + <item row="1" column="1"> + <widget class="QLineEdit" name="lineEditVoltageRange"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> <property name="readOnly"> <bool>true</bool> </property> @@ -201,6 +242,12 @@ </item> <item row="0" column="0"> <widget class="QGroupBox" name="groupElectricalInputs"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="title"> <string>Electrical Inputs</string> </property> @@ -230,6 +277,28 @@ </property> </widget> </item> + <item row="0" column="1"> + <widget class="QDoubleSpinBox" name="spinBoxPeakSystemPower"> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="buttonSymbols"> + <enum>QAbstractSpinBox::NoButtons</enum> + </property> + <property name="decimals"> + <number>1</number> + </property> + <property name="maximum"> + <double>100000.000000000000000</double> + </property> + <property name="stepType"> + <enum>QAbstractSpinBox::DefaultStepType</enum> + </property> + <property name="value"> + <double>0.000000000000000</double> + </property> + </widget> + </item> <item row="0" column="0"> <widget class="QLabel" name="labelPeakSystemPower"> <property name="text"> @@ -237,10 +306,10 @@ </property> </widget> </item> - <item row="3" column="0"> - <widget class="QLabel" name="labelBatteryChemistry"> + <item row="4" column="0"> + <widget class="QLabel" name="labelWireMaterial"> <property name="text"> - <string>Battery Chemistry:</string> + <string>Wire Material:</string> </property> </widget> </item> @@ -251,8 +320,8 @@ </property> </widget> </item> - <item row="0" column="1"> - <widget class="QDoubleSpinBox" name="spinBoxPeakSystemPower"> + <item row="2" column="1"> + <widget class="QDoubleSpinBox" name="doubleSpinBoxEstimatedWireLength"> <property name="alignment"> <set>Qt::AlignCenter</set> </property> @@ -263,16 +332,16 @@ <number>1</number> </property> <property name="maximum"> - <double>100000.000000000000000</double> - </property> - <property name="stepType"> - <enum>QAbstractSpinBox::DefaultStepType</enum> + <double>1000.000000000000000</double> </property> <property name="value"> <double>0.000000000000000</double> </property> </widget> </item> + <item row="4" column="1"> + <widget class="QComboBox" name="comboBoxWireMaterial"/> + </item> <item row="1" column="1"> <widget class="QDoubleSpinBox" name="doubleSpinBoxSystemVoltage"> <property name="alignment"> @@ -299,35 +368,13 @@ </property> </widget> </item> - <item row="2" column="1"> - <widget class="QDoubleSpinBox" name="doubleSpinBoxEstimatedWireLength"> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - <property name="buttonSymbols"> - <enum>QAbstractSpinBox::NoButtons</enum> - </property> - <property name="decimals"> - <number>1</number> - </property> - <property name="maximum"> - <double>1000.000000000000000</double> - </property> - <property name="value"> - <double>0.000000000000000</double> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="labelWireMaterial"> + <item row="3" column="0"> + <widget class="QLabel" name="labelBatteryChemistry"> <property name="text"> - <string>Wire Material:</string> + <string>Battery Chemistry:</string> </property> </widget> </item> - <item row="4" column="1"> - <widget class="QComboBox" name="comboBoxWireMaterial"/> - </item> </layout> </widget> </item> @@ -33,7 +33,7 @@ void Wire::calculate() { float current = peakPower/systemVoltage; int count = 0; - switch (std::distance(wireMaterials, std::find(wireMaterials,wireMaterials+sizeof(wireMaterials),activeWire))) + switch (std::distance(wireMaterials, std::find(wireMaterials,wireMaterials+sizeof(wireMaterials),activeWire))) //Decide upon Wire Gauge based on Max Current. { case Copper: { @@ -75,9 +75,5 @@ double Wire::weight() return (wireLength * activeWireData.weight)/1000.0; } -double Wire::peakCurrent() -{ - return peakPower/systemVoltage; -} @@ -89,7 +89,6 @@ public: QString gauge(void); double weight(void); - double peakCurrent(void); public slots: void calculate(void); private: |