From e0135b6753b94a475b872e9a3aac31d8860d3c3c Mon Sep 17 00:00:00 2001 From: trabus322 Date: Tue, 19 Mar 2024 12:54:05 +0100 Subject: [PATCH] Removed multithreading for now, corrected connected --- inc/hoymiles/dtu.h | 4 ++++ src/hoymiles/dtu.cpp | 30 ++++++++++++++++++++---------- src/hoymiles/microinverter.cpp | 18 +++++++++--------- src/main.cpp | 2 +- 4 files changed, 34 insertions(+), 20 deletions(-) diff --git a/inc/hoymiles/dtu.h b/inc/hoymiles/dtu.h index 3add57a..b7819dd 100644 --- a/inc/hoymiles/dtu.h +++ b/inc/hoymiles/dtu.h @@ -17,6 +17,8 @@ class Dtu { std::vector microinverters; + bool connected; + void populateMicroinverters(); std::pair getMicroinverterBySerialNumber(long serialNumber); @@ -24,6 +26,8 @@ class Dtu { public: Dtu(const char *ip_address, int port); + bool isConnected(); + void updateMicroinverters(); void printMicroinverters(); diff --git a/src/hoymiles/dtu.cpp b/src/hoymiles/dtu.cpp index 28df702..f247df2 100644 --- a/src/hoymiles/dtu.cpp +++ b/src/hoymiles/dtu.cpp @@ -1,6 +1,6 @@ #include #include -#include +// #include #include "modbus.h" @@ -18,10 +18,19 @@ Dtu::Dtu(const char *ip_address, int port) { if (modbus_connect(*this->modbus_context.get()) == -1) { std::cerr << "conn_error"; modbus_free(*this->modbus_context.get()); - abort(); + this->connected = false; + } + else { + this->connected = true; } - this->populateMicroinverters(); + if(this->connected) { + this->populateMicroinverters(); + } +} + +bool Dtu::isConnected() { + return this->connected; } Dtu::~Dtu() { @@ -74,19 +83,20 @@ std::pair Dtu::getMicroinverterBySerialNumber(long serialN } void Dtu::updateMicroinverters() { - std::vector updateThreads; + // std::vector updateThreads; std::vector::iterator microinvertersIterator = this->microinverters.begin(); while (microinvertersIterator != this->microinverters.end()) { - updateThreads.push_back(std::thread(&Microinverter::updatePorts, microinvertersIterator)); + // updateThreads.push_back(std::thread(&Microinverter::updatePorts, microinvertersIterator)); + microinvertersIterator->updatePorts(); microinvertersIterator++; } - std::vector::iterator updateThreadsIterator = updateThreads.begin(); - while(updateThreadsIterator != updateThreads.end()) { - updateThreadsIterator->join(); updateThreadsIterator++; - } - std::cout << std::endl; + // std::vector::iterator updateThreadsIterator = updateThreads.begin(); + // while(updateThreadsIterator != updateThreads.end()) { + // updateThreadsIterator->join(); updateThreadsIterator++; + // } + // std::cout << std::endl; } void Dtu::printMicroinverters() { diff --git a/src/hoymiles/microinverter.cpp b/src/hoymiles/microinverter.cpp index 39182cd..0a92f1b 100644 --- a/src/hoymiles/microinverter.cpp +++ b/src/hoymiles/microinverter.cpp @@ -1,4 +1,4 @@ -#include +// #include #include #include @@ -18,16 +18,16 @@ Microinverter::Microinverter(std::shared_ptr modbus_context, std::mut } void Microinverter::updatePorts() { - std::vector updateThreads; + // std::vector updateThreads; for(Port port : this->ports){ - updateThreads.push_back(std::thread(&Port::updateParameters, port)); - // port.updateParameters(); - } - std::vector::iterator updateThreadsIterator = updateThreads.begin(); - while(updateThreadsIterator != updateThreads.end()) { - updateThreadsIterator->join(); - updateThreadsIterator++; + // updateThreads.push_back(std::thread(&Port::updateParameters, port)); + port.updateParameters(); } + // std::vector::iterator updateThreadsIterator = updateThreads.begin(); + // while(updateThreadsIterator != updateThreads.end()) { + // updateThreadsIterator->join(); + // updateThreadsIterator++; + // } } void Microinverter::printPorts() { diff --git a/src/main.cpp b/src/main.cpp index 032fe18..1f708f7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,7 +16,7 @@ int main(){ auto endTime = std::chrono::high_resolution_clock::now(); std::cout << "Construction time: " << std::chrono::duration_cast(endTime - startTime).count() << "ms" << std::endl; - while(true) { + while(dtu.isConnected()) { auto startTime = std::chrono::high_resolution_clock::now(); dtu.updateMicroinverters(); auto endTime = std::chrono::high_resolution_clock::now();