Files
ETcontroller_PRO/lib/SENECA/S50140_Driver.h
2025-07-14 11:35:19 +02:00

82 lines
1.9 KiB
C++

#pragma once
#define DEBUGLOG_DEFAULT_LOG_LEVEL_INFO
#include <DebugLog.h>
#include <RS485_Driver.h>
namespace drivers
{
class S50140
{
private:
const uint8_t maxRetries = 5;
const uint8_t dataWords = 2;
const uint16_t minDelay = 500;
const uint16_t REG_V = 0x100C;
const uint16_t REG_A = 0x1016;
const uint16_t REG_Pact = 0x1026;
const uint16_t REG_Papp = 0x102E;
const uint16_t REG_Prea = 0x1036;
const uint16_t REG_Freq = 0x1038;
const uint16_t REG_WhTot = 0x1106;
const uint16_t REG_WhPart = 0x1400;
const uint16_t REG_Serial = 0x0500;
const uint16_t REG_Regset = 0x0538;
const uint16_t REG_PartCount = 0x0526;
typedef union
{
float_t f;
struct
{
uint16_t hi;
uint16_t lo;
} words;
} floatval_t;
public:
typedef struct
{
float_t v;
float_t a;
float_t pAct;
float_t pApp;
float_t pRea;
float_t f;
float_t whTot;
float_t whPar;
} powerinfo_t;
public:
S50140(drivers::MODBUS &bus, const uint8_t address);
~S50140();
const powerinfo_t getAll();
const float_t getV();
const float_t getA();
const float_t getPact();
const float_t getPapp();
const float_t getPrea();
const float_t getF();
const float_t getWhTot();
const float_t getWhPar();
const uint8_t getRegset();
const uint16_t getCounterStatus();
void resetPartialCounters();
private:
void delayRequest();
float_t readFloatReg(const uint16_t reg);
private:
const uint8_t m_address;
drivers::MODBUS &m_bus;
uint64_t m_lastRequest;
};
}