Lydia - Printhead
OmronPID.cpp
Go to the documentation of this file.
1 #include "OmronPID.h"
2 #include "ModbusBridge.h"
3 
4 #include "./OmronE5.h"
5 #include "./enums.h"
6 #include "./config.h"
7 #include "./utils.h"
8 
9 #include <xmath.h>
10 
11 // info <<200;2;64;testPIDs:1:0>>
12 // debug <<200;2;64;debug:1:0>>
13 
15 {
16  // setAllSP(15);
17  // runAll();
18  // stopAll();
19  // singlePIDW(2, OR_E5_SWR::OR_E5_SWR_SP, 300);
20  // singlePIDW(1, 5000, 20);
21  // singlePID(1, ku8MBWriteSingleRegister, 0, OR_E5_CMD::OR_E5_AT_EXCECUTE);
22 }
23 short OmronPID::onRegisterMethods(Bridge *bridge)
24 {
25 
26  bridge->registerMemberFunction(id, this, C_STR("testPIDs"), (ComponentFnPtr)&OmronPID::testPIDs);
27  bridge->registerMemberFunction(id, this, C_STR("debug"), (ComponentFnPtr)&OmronPID::debug);
28  /*
29  bridge->registerMemberFunction(id, this, C_STR("info"), (ComponentFnPtr)&OmronPID::info);
30  bridge->registerMemberFunction(id, this, C_STR("debug"), (ComponentFnPtr)&OmronPID::debug);
31  */
32  return E_OK;
33 }
35 {
36  modbusLoop();
37  return E_OK;
38 }
40 {
41  Log.verboseln("Omron PID :: debug %d", id);
42  modbus->print();
43  printStates();
44  return false;
45 }
47 {
48  return false;
49 }
51 {
52  for (short i = 0; i < NB_OMRON_PIDS; i++)
53  {
54  states[i].slaveID = slaveStart + i;
55  states[i].idx = i;
56  states[i].lastUpdated = millis();
57  states[i].lastWritten = millis();
58  states[i].flags = OmronState::FLAGS::DIRTY;
59  }
60 }
62 {
63  printStates();
64 }
65 int OmronPID::singlePIDW(int slave, int addr, int value)
66 {
67  singlePID(slave, ku8MBWriteSingleRegister, addr, value);
68  return E_OK;
69 }
70 int OmronPID::singlePID(int slave, short fn, int addr, int value)
71 {
72  // Query *same = modbus->nextSame(QUEUED, slave, addr, fn, value);
74  {
75  Log.verboseln("OmronPID::singlePID : failed : no buffer");
76  return false;
77  }
78  if (modbus->numSame(QUEUED, slave, addr, fn, value) > 2)
79  {
80  Log.verboseln("OmronPID::singlePID : failed : num same");
81  return false;
82  }
83 
84  OmronState *pid = pidBySlave(slave);
85  if (!pid)
86  {
87  Log.errorln("Omron-PID::singlePID : invalid PID : %d", slave);
88  return E_NO_SUCH_PID;
89  }
90 
92  if (!next)
93  {
94  Log.verboseln("OmronPID::singlePID : failed : no free query");
95  return E_OK;
96  }
97  next->fn = fn;
98  next->slave = pid->slaveID;
99  next->value = value;
100  next->addr = addr;
101  next->state = QUERY_STATE::QUEUED;
102  next->owner = id;
103  next->ts = millis();
104  pid->flags = OmronState::FLAGS::UPDATING;
105  if (fn == ku8MBWriteSingleRegister)
106  {
107  next->prio = MB_QUERY_TYPE_CMD;
108  }
109  else
110  {
112  }
113  return E_OK;
114 }
115 int OmronPID::eachPIDW(int addr, int value)
116 {
117  return eachPID(ku8MBWriteSingleRegister, addr, value);
118 }
119 int OmronPID::eachPID(short fn, int addr, int value)
120 {
121  for (short i = 0; i < NB_OMRON_PIDS; i++)
122  {
123  Query *next = modbus->nextQueryByState(DONE);
124  if (next)
125  {
126  next->fn = fn;
127  next->slave = states[i].slaveID;
128  next->value = value;
129  next->addr = addr;
130  next->state = QUERY_STATE::QUEUED;
131  next->owner = id;
132  }
133  else
134  {
135  Log.errorln("Omron-PID::eachPID : no buffer free");
136  }
137  }
138  return E_OK;
139 }
141 {
143 }
145 {
147 }
148 void OmronPID::setAllSP(int sp)
149 {
151 }
153 {
154  initPIDS();
155  return E_OK;
156 }
157 
159 {
160  for (short i = 0; i < NB_OMRON_PIDS; i++)
161  {
162  states[i].flags = OmronState::FLAGS::UPDATED;
163  }
164 }
166 {
167  bool ret = false;
168  for (short i = 0; i < NB_OMRON_PIDS; i++)
169  {
170  if (states[i].isHeating())
171  {
172  return true;
173  }
174  }
175  return ret;
176 }
178 {
179  bool ret = false;
180  for (short i = 0; i < NB_OMRON_PIDS; i++)
181  {
182  if (states[i].isRunning())
183  {
184  return true;
185  }
186  }
187  return ret;
188 }
190 {
191  for (short i = 0; i < NB_OMRON_PIDS; i++)
192  {
193  states[i].print();
194  }
195 }
OmronPID::onRegisterMethods
short onRegisterMethods(Bridge *bridge)
Definition: OmronPID.cpp:23
OmronPID::eachPID
int eachPID(short fn, int addr, int value)
Definition: OmronPID.cpp:119
Query::value
short value
Definition: ModbusBridge.h:23
ku8MBWriteSingleRegister
#define ku8MBWriteSingleRegister
Modbus function 0x06 Write Single Register.
Definition: enums.h:105
OmronPID::print
void print()
Definition: OmronPID.cpp:61
OmronState
Definition: OmronPID.h:26
OmronState::flags
short flags
Definition: OmronPID.h:39
OmronPID.h
OmronPID::setAllSP
void setAllSP(int sp)
Definition: OmronPID.cpp:148
OmronPID::modbusLoop
short modbusLoop()
Definition: OmronPIDModbus.cpp:69
OmronPID::modbus
ModbusBridge * modbus
Definition: OmronPID.h:171
OmronPID::initPIDS
void initPIDS()
Definition: OmronPID.cpp:50
ModbusBridge::numByState
int numByState(int state=DONE)
Definition: ModbusBridge.cpp:261
OR_E5_RUN
@ OR_E5_RUN
Definition: OmronE5.h:335
ModbusBridge::print
void print()
Definition: ModbusBridge.cpp:273
OR_E5_SWR_SP
@ OR_E5_SWR_SP
Definition: OmronE5.h:162
Query::ts
millis_t ts
Definition: ModbusBridge.h:29
OmronPID::debug
short debug()
Definition: OmronPID.cpp:39
OmronState::slaveID
short slaveID
Definition: OmronPID.h:40
OmronPID::setup
virtual short setup()
Definition: OmronPID.cpp:152
OmronPID::pidBySlave
OmronState * pidBySlave(int slave)
Definition: OmronPIDModbus.cpp:335
OmronPID::slaveStart
short slaveStart
Definition: OmronPID.h:173
OmronPID::stopAll
void stopAll()
Definition: OmronPID.cpp:140
OmronPID::runAll
void runAll()
Definition: OmronPID.cpp:144
OmronPID::singlePID
int singlePID(int slave, short fn, int addr, int value)
Definition: OmronPID.cpp:70
OmronState::lastUpdated
millis_t lastUpdated
Definition: OmronPID.h:44
ModbusBridge::nextQueryByState
Query * nextQueryByState(uchar state=DONE, int owner=-1)
Definition: ModbusBridge.cpp:138
utils.h
OmronE5.h
NB_OMRON_PIDS
#define NB_OMRON_PIDS
Definition: config.h:97
MB_QUERY_TYPE_STATUS_POLL
#define MB_QUERY_TYPE_STATUS_POLL
Definition: config_adv.h:17
ModbusBridge.h
OR_E5_STOP
@ OR_E5_STOP
Definition: OmronE5.h:334
OmronPID::singlePIDW
int singlePIDW(int slave, int addr, int value)
Definition: OmronPID.cpp:65
MB_QUERY_TYPE_CMD
#define MB_QUERY_TYPE_CMD
Definition: config_adv.h:21
OmronPID::isRunning
bool isRunning()
Definition: OmronPID.cpp:177
Query::addr
long addr
Definition: ModbusBridge.h:22
OmronState::print
void print()
Definition: OmronPID.h:83
ModbusBridge::numSame
int numSame(uchar state, short slave, int addr, short fn, int value)
Definition: ModbusBridge.cpp:229
OmronPID::info
short info()
Definition: OmronPID.cpp:46
DONE
@ DONE
Definition: enums.h:94
QUEUED
@ QUEUED
Definition: enums.h:90
Query::prio
int prio
Definition: ModbusBridge.h:27
E_NO_SUCH_PID
#define E_NO_SUCH_PID
Definition: enums.h:15
Query::state
short state
Definition: ModbusBridge.h:24
OmronPID::testPIDs
void testPIDs()
Definition: OmronPID.cpp:14
OmronPID::resetStates
void resetStates()
Definition: OmronPID.cpp:158
E_OK
#define E_OK
Definition: enums.h:11
OmronPID::eachPIDW
int eachPIDW(int addr, int value)
Definition: OmronPID.cpp:115
enums.h
OmronState::idx
short idx
Definition: OmronPID.h:41
OmronPID::printStates
void printStates()
Definition: OmronPID.cpp:189
config.h
Query
Definition: ModbusBridge.h:18
Query::owner
short owner
Definition: ModbusBridge.h:28
Query::fn
short fn
Definition: ModbusBridge.h:25
OmronPID::loop
virtual short loop()
Definition: OmronPID.cpp:34
OmronPID::states
OmronState states[NB_OMRON_PIDS]
Definition: OmronPID.h:170
OmronPID::isHeatingUp
bool isHeatingUp()
Definition: OmronPID.cpp:165
OmronState::lastWritten
millis_t lastWritten
Definition: OmronPID.h:45
Query::slave
short slave
Definition: ModbusBridge.h:21