Lydia - Printhead
ModbusBridge.h
Go to the documentation of this file.
1 #include "config.h"
2 
3 #ifdef MODBUS_BRIDGE
4 
5 #ifndef MODBUS_BRIDGE_H
6 #define MODBUS_BRIDGE_H
7 
8 #include <Component.h>
9 #include <Mudbus.h>
10 #include "enums.h"
11 #include "config_adv.h"
12 #include "./PHApp.h"
13 
14 #define MBB_HAS_PRINT
15 
16 class Modbus;
17 
18 class Query
19 {
20 public:
21  short slave;
22  long addr;
23  short value;
24  short state;
25  short fn;
26  int id;
27  int prio;
28  short owner;
29  millis_t ts;
30 
31  void printNumber(int number)
32  {
33  Serial.print(" ");
34  int spaces = 0;
35  if (number < 1000)
36  {
37  spaces = 1;
38  }
39  if (number < 100)
40  {
41  spaces = 2;
42  }
43  if (number < 10)
44  {
45  spaces = 3;
46  }
47  for (int i = 0; i < spaces; i++)
48  {
49  Serial.print(" ");
50  }
51  Serial.print(number);
52  return 0;
53  }
54 
55  void print()
56  {
57  Serial.print("SLAVE: ");
58  Serial.print(slave);
59  Serial.print(" \t | Address: ");
60  // Serial.print(addr, HEX);
62  Serial.print(" \t | VALUE: ");
64  Serial.print(" \t | STATE ");
65  if (state == DONE)
66  {
67  Serial.print("Done ");
68  }
69  if (state == PROCESSING)
70  {
71  Serial.print("Processsing");
72  }
73  if (state == QUEUED)
74  {
75  Serial.print("Queued ");
76  }
77  Serial.print(" \t | FN: ");
78  Serial.print(fn);
79  Serial.print(" \t | PRIO: ");
80  Serial.print(prio);
81  Serial.print(" | ");
82 
83  Serial.print(" \t | OWNER: ");
84  Serial.print(owner);
85  Serial.print(" | ");
86  Serial.print(" \t | DT: ");
87  Serial.print(millis() - ts);
88  Serial.print(" | ");
89  }
91  {
92  reset();
93  }
94  void reset()
95  {
96  state = DONE;
97  fn = 0;
98  ts = 0;
99  value = 0;
100  slave = 0;
101  addr = 0;
102  prio = 0;
103  owner = 0;
104  }
105 };
106 
107 class ModbusBridge : public Component
108 {
109 
110 public:
111  enum FLAGS
112  {
115  };
116 
117  ModbusBridge(App *owner) : Component("ModbusBridge", 1000, Component::COMPONENT_DEFAULT, (Component *)owner),
118  mb(new Mudbus()),
119  app(owner)
120  {
121  setFlag(OBJECT_RUN_FLAGS::E_OF_DEBUG);
122  debug_flags = 1 << DEBUG_RECEIVE;
123  nextWaitingTime = 100;
124  ownerId = -1;
125  owner = NULL;
126  responseFn = NULL;
127  onError = NULL;
128  onMessage = NULL;
129  }
130 
131  uint16_t ModbusSlaveRegisters[8];
132 
133  // Component implementation
134  short debug();
135  short info();
136  short setup();
137  short loop();
138  short loop_test();
139  short loopPoll();
140 
141  // current query
142  short cSlave;
143  short cFN;
144  short cAddr;
145  int cNB;
146 
148 
149  short queryState();
150  short query(int slave, short function, long start, int coils, Component *_owner, ComponentFnPtr _responseFn);
151  short query(int slave, short function, long start, int coils, int _ownerId);
152  short qstate();
153 
155 
156  // 0x3-6 callback
157  ComponentFnPtr responseFn;
158  // on Error
159  ComponentFnPtr onError;
160  // on RawMessage
161  ComponentRxFn onMessage;
162  // callback owner
163  Component *rOwner;
164  int ownerId;
166  Mudbus *mb;
167  Mudbus *getMudbus()
168  {
169  return mb;
170  }
171 
172  // Modbus query / commands
173  Query *nextQueryByState(uchar state = DONE, int owner = -1);
174  Query *nextQueryByOwner(uchar state = DONE, int owner = -1);
175  Query *nextByPrio(uchar state, int prio);
176  Query *nextSame(uchar state, short slave, int addr, short fn, int value);
177  bool skipRead(int slave, int fn, int addr, int num, int prio);
178  int numSame(uchar state, short slave, int addr, short fn, int value);
179  int numSameOwner(uchar state, short slave, int addr, short fn, int value, int owner);
180  int numByState(int state = DONE);
181  void print();
182 
183  Query *nextQueryByState2(uchar state, int owner);
184  void clearQueue();
185 
187  millis_t startTS;
188  Modbus *modbus();
189  void setDebugSend(bool debug);
190 };
191 
192 #endif
193 #endif
Query::value
short value
Definition: ModbusBridge.h:23
ModbusBridge::skipRead
bool skipRead(int slave, int fn, int addr, int num, int prio)
Definition: ModbusBridge.cpp:96
ModbusBridge::queryState
short queryState()
ModbusBridge::DEBUG_SEND
@ DEBUG_SEND
Definition: ModbusBridge.h:114
Query::printNumber
void printNumber(int number)
Definition: ModbusBridge.h:31
ModbusBridge::ownerId
int ownerId
Definition: ModbusBridge.h:164
ModbusBridge::onMessage
ComponentRxFn onMessage
Definition: ModbusBridge.h:161
ModbusBridge::onError
ComponentFnPtr onError
Definition: ModbusBridge.h:159
ModbusBridge::nextWaitingTime
int nextWaitingTime
Definition: ModbusBridge.h:165
ModbusBridge::info
short info()
Definition: ModbusBridge.cpp:535
PROCESSING
@ PROCESSING
Definition: enums.h:91
ModbusBridge::DEBUG_RECEIVE
@ DEBUG_RECEIVE
Definition: ModbusBridge.h:113
Query::id
int id
Definition: ModbusBridge.h:26
ModbusBridge::nextByPrio
Query * nextByPrio(uchar state, int prio)
Definition: ModbusBridge.cpp:60
config_adv.h
ModbusBridge
Definition: ModbusBridge.h:107
ModbusBridge::numByState
int numByState(int state=DONE)
Definition: ModbusBridge.cpp:261
ModbusBridge::query
short query(int slave, short function, long start, int coils, Component *_owner, ComponentFnPtr _responseFn)
Definition: ModbusBridge.cpp:316
ModbusBridge::print
void print()
Definition: ModbusBridge.cpp:273
Query::ts
millis_t ts
Definition: ModbusBridge.h:29
ModbusBridge::ModbusSlaveRegisters
uint16_t ModbusSlaveRegisters[8]
Definition: ModbusBridge.h:131
ModbusBridge::ModbusBridge
ModbusBridge(App *owner)
Definition: ModbusBridge.h:117
ModbusBridge::queries
Query queries[MAX_QUERY_BUFFER]
Definition: ModbusBridge.h:186
ModbusBridge::loop
short loop()
Definition: ModbusBridge.cpp:309
PHApp
Definition: PHApp.h:34
ModbusBridge::debug
short debug()
Definition: ModbusBridge.cpp:531
ModbusBridge::nextSame
Query * nextSame(uchar state, short slave, int addr, short fn, int value)
Definition: ModbusBridge.cpp:206
ModbusBridge::app
PHApp * app
Definition: ModbusBridge.h:154
ModbusBridge::mb
Mudbus * mb
Definition: ModbusBridge.h:166
ModbusBridge::cAddr
short cAddr
Definition: ModbusBridge.h:144
ModbusBridge::nextQueryByState
Query * nextQueryByState(uchar state=DONE, int owner=-1)
Definition: ModbusBridge.cpp:138
ModbusBridge::setDebugSend
void setDebugSend(bool debug)
Definition: ModbusBridge.cpp:31
ModbusBridge::rOwner
Component * rOwner
Definition: ModbusBridge.h:163
ModbusBridge::getMudbus
Mudbus * getMudbus()
Definition: ModbusBridge.h:167
ModbusBridge::startTS
millis_t startTS
Definition: ModbusBridge.h:187
ModbusBridge::modbus
Modbus * modbus()
Definition: ModbusBridge.cpp:35
Query::reset
void reset()
Definition: ModbusBridge.h:94
Query::print
void print()
Definition: ModbusBridge.h:55
ModbusBridge::numSameOwner
int numSameOwner(uchar state, short slave, int addr, short fn, int value, int owner)
Definition: ModbusBridge.cpp:245
Query::addr
long addr
Definition: ModbusBridge.h:22
ModbusBridge::numSame
int numSame(uchar state, short slave, int addr, short fn, int value)
Definition: ModbusBridge.cpp:229
ModbusBridge::clearQueue
void clearQueue()
Definition: ModbusBridge.cpp:119
ModbusBridge::loop_test
short loop_test()
Definition: ModbusBridge.cpp:466
ModbusBridge::cNB
int cNB
Definition: ModbusBridge.h:145
DONE
@ DONE
Definition: enums.h:94
ModbusBridge::nextQueryByState2
Query * nextQueryByState2(uchar state, int owner)
Definition: ModbusBridge.cpp:76
QUEUED
@ QUEUED
Definition: enums.h:90
Query::prio
int prio
Definition: ModbusBridge.h:27
ModbusBridge::FLAGS
FLAGS
Definition: ModbusBridge.h:111
Query::state
short state
Definition: ModbusBridge.h:24
ModbusBridge::cFN
short cFN
Definition: ModbusBridge.h:143
enums.h
ModbusBridge::loopPoll
short loopPoll()
Definition: ModbusBridge.cpp:393
MAX_QUERY_BUFFER
#define MAX_QUERY_BUFFER
Definition: config_adv.h:14
ModbusBridge::cSlave
short cSlave
Definition: ModbusBridge.h:142
config.h
ModbusBridge::nextQueryByOwner
Query * nextQueryByOwner(uchar state=DONE, int owner=-1)
Definition: ModbusBridge.cpp:173
Query
Definition: ModbusBridge.h:18
PHApp.h
ModbusBridge::setup
short setup()
Definition: ModbusBridge.cpp:39
Query::owner
short owner
Definition: ModbusBridge.h:28
ModbusBridge::responseFn
ComponentFnPtr responseFn
Definition: ModbusBridge.h:157
ModbusBridge::debug_flags
long debug_flags
Definition: ModbusBridge.h:147
Query::fn
short fn
Definition: ModbusBridge.h:25
ModbusBridge::qstate
short qstate()
Definition: ModbusBridge.cpp:304
Query::Query
Query()
Definition: ModbusBridge.h:90
Modbus
Arduino class library for communicating with Modbus devices over USB/RS232/485 (via RTU protocol).
Definition: ModbusRtu.h:152
Query::slave
short slave
Definition: ModbusBridge.h:21