Reimplemented fixing current

This commit is contained in:
TraYali 2024-03-20 14:56:19 +01:00
parent 2c27810dfe
commit 3c37cfd65f

View file

@ -1,8 +1,8 @@
#include <vector>
#include <string>
#include <iostream>
#include <cmath>
#include <algorithm> #include <algorithm>
#include <cmath>
#include <iostream>
#include <string>
#include <vector>
#include "modbus.h" #include "modbus.h"
@ -56,8 +56,8 @@ std::pair<std::shared_ptr<PortParameter>, bool> Port::getParameterByName(std::st
result.second = false; result.second = false;
std::vector<std::shared_ptr<PortParameter>>::iterator parametersIterator = this->parameters.begin(); std::vector<std::shared_ptr<PortParameter>>::iterator parametersIterator = this->parameters.begin();
while(parametersIterator != this->parameters.end() && !result.second) { while (parametersIterator != this->parameters.end() && !result.second) {
if(parametersIterator->get()->name == name) { if (parametersIterator->get()->name == name) {
result.first = *parametersIterator; result.first = *parametersIterator;
result.second = true; result.second = true;
} }
@ -68,29 +68,33 @@ std::pair<std::shared_ptr<PortParameter>, bool> Port::getParameterByName(std::st
} }
void Port::fixCurrent() { void Port::fixCurrent() {
if(this->currentFixed) { if (this->currentFixed) {
return; return;
} }
if(this->parameters.size() < 8) {
if (!this->getParameterByName("pvCurrentMI").second != !this->getParameterByName("pvCurrentHM").second) {
this->currentFixed = true;
return; return;
} }
if(this->parameters.at(7).get()->getValue().first.f == 0) {
return; if (this->getParameterByName("pvVoltage").second && this->getParameterByName("pvPower").second) {
} if (this->getParameterByName("pvCurrentMI").second && this->getParameterByName("pvCurrentHM").second) {
if(this->parameters.at(2).get()->getValue().first.f * this->parameters.at(4).get()->getValue().first.f < this->parameters.at(7).get()->getValue().first.f) { if(this->getParameterByName("pvPower").first->getValue().first.f > this->getParameterByName("pvVoltage").first->getValue().first.f * this->getParameterByName("pvCurrentMI").first->getValue().first.f) {
this->parameters.erase(this->parameters.begin() + 4); this->parameters.erase(std::find(this->parameters.begin(), this->parameters.end(), this->getParameterByName("pvCurrentHM").first));
} }
else { else {
this->parameters.erase(this->parameters.begin() + 3); this->parameters.erase(std::find(this->parameters.begin(), this->parameters.end(), this->getParameterByName("pvCurrentM").first));
} }
this->currentFixed = true; this->currentFixed = true;
}
}
} }
void Port::updateParameters(std::vector<std::string> &parametersToGet, bool allParameters) { void Port::updateParameters(std::vector<std::string> &parametersToGet, bool allParameters) {
if(allParameters && parametersToGet.size() < this->parameters.size()) { if (allParameters && parametersToGet.size() < this->parameters.size()) {
std::vector<std::shared_ptr<PortParameter>>::iterator parametersIterator = this->parameters.begin(); std::vector<std::shared_ptr<PortParameter>>::iterator parametersIterator = this->parameters.begin();
while(parametersIterator != this->parameters.end()) { while (parametersIterator != this->parameters.end()) {
if(std::find(parametersToGet.begin(), parametersToGet.end(), parametersIterator->get()->name) == parametersToGet.end()) { if (std::find(parametersToGet.begin(), parametersToGet.end(), parametersIterator->get()->name) == parametersToGet.end()) {
parametersToGet.push_back(parametersIterator->get()->name); parametersToGet.push_back(parametersIterator->get()->name);
} }
parametersIterator++; parametersIterator++;
@ -98,22 +102,25 @@ void Port::updateParameters(std::vector<std::string> &parametersToGet, bool allP
} }
std::vector<std::string>::iterator parametersToGetIterator = parametersToGet.begin(); std::vector<std::string>::iterator parametersToGetIterator = parametersToGet.begin();
while(parametersToGetIterator != parametersToGet.end()) { while (parametersToGetIterator != parametersToGet.end()) {
std::pair<std::shared_ptr<PortParameter>, bool> parameterPair; std::pair<std::shared_ptr<PortParameter>, bool> parameterPair;
parameterPair = this->getParameterByName(*parametersToGetIterator); parameterPair = this->getParameterByName(*parametersToGetIterator);
if(parameterPair.second) { if (parameterPair.second) {
parameterPair.first->updateValue(this->modbus, this->portStartAddress); parameterPair.first->updateValue(this->modbus, this->portStartAddress);
} }
this->fixCurrent();
parametersToGetIterator++; parametersToGetIterator++;
} }
} }
void Port::printParameters(std::vector<std::string> &parametersToGet, bool allParameters) { void Port::printParameters(std::vector<std::string> &parametersToGet, bool allParameters) {
if(allParameters && parametersToGet.size() < this->parameters.size()) { if (allParameters && parametersToGet.size() < this->parameters.size()) {
std::vector<std::shared_ptr<PortParameter>>::iterator parametersIterator = this->parameters.begin(); std::vector<std::shared_ptr<PortParameter>>::iterator parametersIterator = this->parameters.begin();
while(parametersIterator != this->parameters.end()) { while (parametersIterator != this->parameters.end()) {
if(std::find(parametersToGet.begin(), parametersToGet.end(), parametersIterator->get()->name) != parametersToGet.end()) { if (std::find(parametersToGet.begin(), parametersToGet.end(), parametersIterator->get()->name) != parametersToGet.end()) {
parametersToGet.push_back(parametersIterator->get()->name); parametersToGet.push_back(parametersIterator->get()->name);
} }
parametersIterator++; parametersIterator++;
@ -121,18 +128,17 @@ void Port::printParameters(std::vector<std::string> &parametersToGet, bool allPa
} }
std::vector<std::string>::iterator parametersToGetIterator = parametersToGet.begin(); std::vector<std::string>::iterator parametersToGetIterator = parametersToGet.begin();
if(parametersToGetIterator != parametersToGet.end()) { if (parametersToGetIterator != parametersToGet.end()) {
std::cout << "|"; std::cout << "|";
} }
while(parametersToGetIterator != parametersToGet.end()) { while (parametersToGetIterator != parametersToGet.end()) {
std::pair<std::shared_ptr<PortParameter>, bool> parameterPair; std::pair<std::shared_ptr<PortParameter>, bool> parameterPair;
parameterPair = this->getParameterByName(*parametersToGetIterator); parameterPair = this->getParameterByName(*parametersToGetIterator);
if(parameterPair.second) { if (parameterPair.second) {
std::cout << " " << parameterPair.first->name << ": " << parameterPair.first->getOutputValue() << " |"; std::cout << " " << parameterPair.first->name << ": " << parameterPair.first->getOutputValue() << " |";
} }
parametersToGetIterator++; parametersToGetIterator++;
} }
} }