Libraries/IOControl/include/IO/Modbus/RID35/Device.h
Go to the documentation of this file.
1 
29 #pragma once
30 
31 #include "../Device.h"
32 
33 // Register name and type
34 #define RID35_STDREG_MAP(XX) \
35  XX(1, TotalActiveEnergy, KWH) \
36  XX(3, ImportActiveEnergy, KWH) \
37  XX(5, ExportActiveEnergy, KWH) \
38  XX(7, TotalReactiveEnergy, KVARH) \
39  XX(9, ImportReactiveEnergy, KVARH) \
40  XX(11, ExportReactiveEnergy, KVARH) \
41  XX(13, ApparentEnergy, KVAH) \
42  XX(15, ActivePower, KW) \
43  XX(17, ReactivePower, KVAR) \
44  XX(19, ApparentPower, KVA) \
45  XX(21, Voltage, VOLT) \
46  XX(23, Current, AMP) \
47  XX(25, PowerFactor, NONE) \
48  XX(27, Frequency, HERTZ) \
49  XX(29, MaxDemandActivePower, KW) \
50  XX(31, MaxDemandReactivePower, KVAR) \
51  XX(33, MaxDemandApparentPower, KVA)
52 
53 #define RID35_OVFREG_MAP(XX) \
54  XX(150, TotalKwh, KWH) \
55  XX(151, ImportKwh, KWH) \
56  XX(152, ExportKwh, KWH) \
57  XX(153, TotalKvarh, KVARH) \
58  XX(154, ImportKvarh, KVARH) \
59  XX(155, ExportKvarh, KVARH) \
60  XX(156, Kvah, KVAH)
61 
63 {
64 enum class Unit {
65  NONE,
66  KW,
67  KVAR,
68  KVA,
69  KWH,
70  KVARH,
71  KVAH,
72  VOLT,
73  AMP,
74  HERTZ,
75 };
76 
77 enum class Register {
78 #define XX(reg, tag, ...) tag,
80 #undef XX
81  MAX
82 };
83 
84 constexpr uint16_t stdRegBase = 0x01;
85 constexpr uint16_t ovfRegBase = 0x96;
86 constexpr size_t stdRegCount = (1 + unsigned(Register::MaxDemandApparentPower)) * 2;
87 constexpr size_t ovfRegCount = 1 + unsigned(Register::Kvah) - unsigned(Register::TotalKwh);
88 constexpr size_t registerCount = stdRegCount + ovfRegCount;
89 
90 class Device : public Modbus::Device
91 {
92 public:
93  class Factory : public FactoryTemplate<Device>
94  {
95  public:
96  const FlashString& deviceClass() const override
97  {
98  return FS("rid35");
99  }
100  };
101 
102  static const Factory factory;
103 
105 
106  IO::Request* createRequest() override;
107 
108  bool isValid() const
109  {
110  return regValid;
111  }
112 
113  uint32_t getRawValue(Register reg) const;
114  float getValue(Register reg) const;
115  String getValueString(Register reg) const;
116  void getValues(JsonObject json) const;
117 
118  // values may be unaligned (from packed structure) so this avoids compiler errors
119  bool updateRegisters(const void* values, size_t count);
120 
121 private:
122  uint16_t regValues[registerCount]{};
123  bool regValid{false};
124 };
125 
126 } // namespace IO::Modbus::RID35
127 
A virtual device, represents a modbus slave device.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:38
constexpr size_t ovfRegCount
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:87
describes a counted string stored in flash memory
Definition: String.hpp:173
The String class.
Definition: WString.h:136
Unit
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:64
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:62
bool updateRegisters(const void *values, size_t count)
Register
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:77
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:79
#define MAX(a, b)
Definition: spiffs_nucleus.h:541
constexpr uint16_t stdRegBase
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:84
String getValueString(Register reg) const
#define FS(str)
Define an inline FSTR::String and return it as a copy.
Definition: String.hpp:56
IO::Request * createRequest() override
Create a request object for this device.
void getValues(JsonObject json) const
const FlashString & deviceClass() const override
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:96
constexpr uint16_t ovfRegBase
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:85
Json json
constexpr size_t registerCount
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:88
uint32_t getRawValue(Register reg) const
float getValue(Register reg) const
constexpr size_t stdRegCount
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:86
String toString(IO::Modbus::RID35::Register reg)
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:90
static const Factory factory
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:102
bool isValid() const
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:108
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:80
#define RID35_OVFREG_MAP(XX)
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:53
Definition: Libraries/IOControl/include/IO/Modbus/RID35/Device.h:93