Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h
Go to the documentation of this file.
1 
27 #pragma once
28 
29 #include "../Device.h"
30 
32 {
33 const size_t channelCount{7};
34 using TempData = int16_t[channelCount];
35 
36 class Device : public Modbus::Device
37 {
38 public:
39  class Factory : public FactoryTemplate<Device>
40  {
41  public:
42  const FlashString& deviceClass() const override
43  {
44  return FS("nt18b07");
45  }
46  };
47 
48  static const Factory factory;
49 
53  struct Config {
55  /* Compensate channel: Tout = a * Tin + b */
56  struct Comp {
57  int8_t a{10};
58  int8_t b{0};
59  };
62  };
63 
65 
66  ErrorCode init(const Config& config);
67  ErrorCode init(JsonObjectConst config) override;
68 
69  IO::Request* createRequest() override;
70 
71  int16_t getRawValue(uint8_t channel) const
72  {
73  return (channel < channelCount) ? values[channel] : 0;
74  }
75 
79  int16_t getIntValue(uint8_t channel) const;
80 
81  float getValue(uint8_t channel) const
82  {
83  return getIntValue(channel) / 10.0;
84  }
85 
86  void getRawValues(JsonArray json) const;
87  void getValues(TempData& data) const;
88  void getValues(JsonArray json) const;
89 
90  uint16_t maxNodes() const override
91  {
92  return channelCount;
93  }
94 
95  void updateValues(const void* values, size_t count)
96  {
97  memcpy(this->values, values, std::min(count, channelCount) * sizeof(int16_t));
98  }
99 
100 private:
101  void parseJson(JsonObjectConst json, Config& cfg);
102 
103  TempData values{-111, -222, -333, -444, -555, -666, -777};
104  Config::CompArray comp;
105 };
106 
107 } // namespace IO::Modbus::NT18B07
ErrorCode init(const Config &config)
A virtual device, represents a modbus slave device.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:38
describes a counted string stored in flash memory
Definition: String.hpp:173
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
int8_t b
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:58
int16_t[channelCount] TempData
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:34
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:79
int8_t a
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:57
static const Factory factory
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:48
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:56
void updateValues(const void *values, size_t count)
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:95
#define FS(str)
Define an inline FSTR::String and return it as a copy.
Definition: String.hpp:56
Inherited classes expand this definition as required.
Definition: Libraries/IOControl/include/IO/Device.h:80
IO::Request * createRequest() override
Create a request object for this device.
CompArray comp
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:61
int16_t getIntValue(uint8_t channel) const
Get temperature value in 0.1C increments (avoids floating point)
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:31
Json json
void getValues(TempData &data) const
int16_t getRawValue(uint8_t channel) const
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:71
uint16_t maxNodes() const override
Determine maximum number of nodes supported by the device.
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:90
const size_t channelCount
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:33
void getRawValues(JsonArray json) const
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:36
Modbus::Device::Config modbus
Basic modbus configuration.
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:54
Comp[channelCount] CompArray
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:60
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:39
const FlashString & deviceClass() const override
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:42
NT18B07 device configuration.
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:53
float getValue(uint8_t channel) const
Definition: Libraries/IOControl/include/IO/Modbus/NT18B07/Device.h:81
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:80