Lydia - Printhead
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
OmronPID.h
Go to the documentation of this file.
1 #ifndef OMRON_PID_H
2 #define OMRON_PID_H
3 
4 #include <macros.h>
5 #include <Vector.h>
6 #include <Component.h>
7 #include <SRegister.h>
8 #include <ModbusValue.h>
9 
10 #include "./config.h"
11 #include "./OmronE5.h"
13 #include "ModbusBridge.h"
14 #include "enums.h"
15 
16 
17 #define E_PID_MB_QUEUE_STATUS 1
18 #define E_PID_MB_QUEUE_USER_1 2
19 #define E_PID_MB_QUEUE_USER_2 3
20 #define E_PID_MB_QUEUE_LENGTH 1
21 
22 #define E_PID_MB_M_QUEUE_PID_0 OMRON_PID_SLAVE_START
23 #define E_PID_MB_M_QUEUE_PID_1 OMRON_PID_SLAVE_START + 1
24 #define E_PID_MB_M_QUEUE_LENGTH NB_OMRON_PIDS
25 
27 {
28 public:
29  enum FLAGS
30  {
31  DIRTY = 1,
32  UPDATING = 2,
33  UPDATED = 3
34  };
35  short statusHigh;
36  short statusLow;
37  short pv;
38  short sp;
39  short flags;
40  short slaveID;
41  short idx;
42  short lastDT;
43 
44  millis_t lastUpdated;
45  millis_t lastWritten;
46 
47  short state;
48  ShiftRegister<uchar, E_PID_MB_QUEUE_LENGTH> queue;
49 
51  statusLow(-1),
52  pv(-1),
53  sp(-1),
54  flags(DIRTY),
55  lastDT(0),
56  lastUpdated(millis()),
57  lastWritten(millis()),
59  /*E_PID_MB_QUEUE_USER_1,
60  E_PID_MB_QUEUE_USER_2*/
61  })
62  {
63  }
64 
65  bool isRunning()
66  {
68  }
69  bool isHeating()
70  {
72  }
73  bool isCooling()
74  {
76  }
77 
78  bool isAutoTuning()
79  {
81  }
82 
83  void print()
84  {
85  Serial.print("PID - ");
86  Serial.print(idx);
87  Serial.print(" : Slave Addr : ");
88  Serial.print(slaveID);
89  Serial.print(" | PV : ");
90  Serial.print(pv);
91  Serial.print(" | SP : ");
92  Serial.print(sp);
93  Serial.print(" | LastUpdate : ");
94  Serial.print(millis() - lastUpdated);
95  Serial.print(" | DT : ");
96  Serial.print(lastDT);
97  Serial.print(" | Flags : ");
98  Serial.print(flags, HEX);
99  Serial.print(" | Status Low : ");
100  Serial.print(statusLow);
101  Serial.print(" | Status High : ");
102  Serial.print(statusHigh);
103  Serial.print("\n");
104  }
105 };
106 
107 // Addon to deal with multiple Omron PID controllers
108 class OmronPID : public Component, public ModbusValue<int[]>
109 {
110 public:
112  short _slaveStart) : Component("OmronPID", COMPONENT_KEY_PID_0, Component::COMPONENT_DEFAULT, NULL),
113  modbus(_bridge),
114  slaveStart(_slaveStart),
117  ModbusValue<int[]>(_slaveStart)
118  {
119  // setFlag(OBJECT_RUN_FLAGS::E_OF_DEBUG);
120  SBI(nFlags, OBJECT_NET_CAPS::E_NCAPS_MODBUS);
121  d0TS = startTS = millis();
122  lastError = E_OK;
124  setFunctionCode(MB_FC::MB_FC_READ_REGISTERS);
125  setAddress(MB_REGISTER_OFFSET_TC);
126  setNumberAddresses(MB_REGISTER_OFFSET_TC_RANGE * NB_OMRON_PIDS);
127  setRegisterMode(MB_REGISTER_MODE::E_MB_REGISTER_MODE_READ);
128  }
129 
130  virtual short loop();
131  virtual short setup();
132 
133  short debug();
134  short info();
135 
136  short onRegisterMethods(Bridge *bridge);
137 
138  // PID access
141 
142  // Modbus callbacks
143  short responseFn(short error);
144 
145  short onResponse(short error);
146  short queryResponse(short error);
147  short onError(short error);
148  short onRawResponse(short size, uint8_t rxBuffer[]);
149 
150  short modbusLoop();
151 
152  // PID programming
153  void stopAll();
154  void runAll();
155  void setAllSP(int sp);
156 
157  bool isHeatingUp();
158  bool isRunning();
159  // StatusLight statusLight;
160 
162  // Modbus
163 
164  Vector<Query> queries;
165  void testPIDs();
166  void printStates();
167 
168 private:
169  // actual PID states
172 
173  short slaveStart;
174  short lastError;
175 
176  // Modbus query / commands
177  int eachPID(short fn, int addr, int value);
178  int eachPIDW(int addr, int value);
179  int singlePID(int slave, short fn, int addr, int value);
180  int singlePIDW(int slave, int addr, int value);
181  OmronState *pidBySlave(int slave);
182  short read10_16(int slaveAddress, int addr, int prio);
183  void updateState();
184 
185  void updateTCP();
186  short fromTCP();
187  void print();
188  void resetStates();
189 
190  millis_t readInterval;
191  millis_t startTS;
192  millis_t d0TS;
193 
194 
195  ShiftRegister<uchar, E_PID_MB_M_QUEUE_LENGTH> queue;
196 
197 protected:
198  // initialize PID states
199  void initPIDS();
200  // for debugging and testing
201 };
202 
203 #endif
OmronPID::onRegisterMethods
short onRegisterMethods(Bridge *bridge)
Definition: OmronPID.cpp:23
OmronPID::eachPID
int eachPID(short fn, int addr, int value)
Definition: OmronPID.cpp:119
OmronState::DIRTY
@ DIRTY
Definition: OmronPID.h:31
OmronPID::print
void print()
Definition: OmronPID.cpp:61
OmronState
Definition: OmronPID.h:26
OmronState::statusLow
short statusLow
Definition: OmronPID.h:36
OmronState::flags
short flags
Definition: OmronPID.h:39
MB_REGISTER_OFFSET_TC
#define MB_REGISTER_OFFSET_TC
Definition: enums.h:182
OmronState::sp
short sp
Definition: OmronPID.h:38
E_PID_MB_QUEUE_STATUS
#define E_PID_MB_QUEUE_STATUS
Definition: OmronPID.h:17
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
OmronState::UPDATING
@ UPDATING
Definition: OmronPID.h:32
OmronState::isAutoTuning
bool isAutoTuning()
Definition: OmronPID.h:78
OmronPID
Definition: OmronPID.h:108
OmronPID::queryResponse
short queryResponse(short error)
Definition: OmronPIDModbus.cpp:326
ModbusBridge
Definition: ModbusBridge.h:107
OmronPID::initPIDS
void initPIDS()
Definition: OmronPID.cpp:50
OmronPID::queries
Vector< Query > queries
Definition: OmronPID.h:164
OmronPID::nextToUpdate2
OmronState * nextToUpdate2()
Definition: OmronPIDModbus.cpp:26
OmronPID::updateState
void updateState()
Definition: OmronPIDModbus.cpp:55
OmronState::pv
short pv
Definition: OmronPID.h:37
OmronPID::fromTCP
short fromTCP()
Definition: OmronPIDModbus.cpp:271
StatusLight.h
OmronPID::onRawResponse
short onRawResponse(short size, uint8_t rxBuffer[])
Definition: OmronPIDModbus.cpp:138
OmronPID::debug
short debug()
Definition: OmronPID.cpp:39
OmronPID::readInterval
millis_t readInterval
Definition: OmronPID.h:190
OmronPID::lastError
short lastError
Definition: OmronPID.h:174
OmronState::slaveID
short slaveID
Definition: OmronPID.h:40
OR_E5_S1_Control_OutputOpenOutput
@ OR_E5_S1_Control_OutputOpenOutput
Definition: OmronE5.h:24
OR_E5_S1_RunStop
@ OR_E5_S1_RunStop
Definition: OmronE5.h:43
OmronPID::setup
virtual short setup()
Definition: OmronPID.cpp:152
OmronPID::pidBySlave
OmronState * pidBySlave(int slave)
Definition: OmronPIDModbus.cpp:335
OmronPID::queue
ShiftRegister< uchar, E_PID_MB_M_QUEUE_LENGTH > queue
Definition: OmronPID.h:195
OmronState::isCooling
bool isCooling()
Definition: OmronPID.h:73
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
OmronE5.h
NB_OMRON_PIDS
#define NB_OMRON_PIDS
Definition: config.h:97
ModbusBridge.h
OR_E5_STATUS_BIT
#define OR_E5_STATUS_BIT(H, L, B)
Definition: OmronE5.h:9
OmronPID::responseFn
short responseFn(short error)
OmronPID::singlePIDW
int singlePIDW(int slave, int addr, int value)
Definition: OmronPID.cpp:65
OmronPID::isRunning
bool isRunning()
Definition: OmronPID.cpp:177
OmronState::queue
ShiftRegister< uchar, E_PID_MB_QUEUE_LENGTH > queue
Definition: OmronPID.h:48
OmronState::lastDT
short lastDT
Definition: OmronPID.h:42
OmronState::state
short state
Definition: OmronPID.h:47
OmronState::print
void print()
Definition: OmronPID.h:83
OmronPID::nextToUpdate
OmronState * nextToUpdate()
Definition: OmronPIDModbus.cpp:29
OMRON_PID_UPDATE_INTERVAL
#define OMRON_PID_UPDATE_INTERVAL
Definition: config.h:99
OmronPID::onError
short onError(short error)
Definition: OmronPIDModbus.cpp:238
OmronPID::OmronPID
OmronPID(ModbusBridge *_bridge, short _slaveStart)
Definition: OmronPID.h:111
OmronPID::info
short info()
Definition: OmronPID.cpp:46
OR_E5_S1_Control_OutputCloseOutput
@ OR_E5_S1_Control_OutputCloseOutput
Definition: OmronE5.h:25
OmronPID::read10_16
short read10_16(int slaveAddress, int addr, int prio)
Definition: OmronPIDModbus.cpp:116
OmronPID::d0TS
millis_t d0TS
Definition: OmronPID.h:192
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
MB_REGISTER_OFFSET_TC_RANGE
#define MB_REGISTER_OFFSET_TC_RANGE
Definition: enums.h:183
enums.h
OmronState::idx
short idx
Definition: OmronPID.h:41
OR_E5_S1_ATExcecute
@ OR_E5_S1_ATExcecute
Definition: OmronE5.h:42
OmronPID::printStates
void printStates()
Definition: OmronPID.cpp:189
E_PID_MB_M_QUEUE_PID_0
#define E_PID_MB_M_QUEUE_PID_0
Definition: OmronPID.h:22
OmronPID::startTS
millis_t startTS
Definition: OmronPID.h:191
OmronState::isRunning
bool isRunning()
Definition: OmronPID.h:65
OmronPID::updateTCP
void updateTCP()
Definition: OmronPIDModbus.cpp:317
config.h
OmronState::OmronState
OmronState()
Definition: OmronPID.h:50
OmronState::FLAGS
FLAGS
Definition: OmronPID.h:29
OmronPID::onResponse
short onResponse(short error)
Definition: OmronPIDModbus.cpp:189
OmronState::UPDATED
@ UPDATED
Definition: OmronPID.h:33
OmronState::statusHigh
short statusHigh
Definition: OmronPID.h:35
OmronState::isHeating
bool isHeating()
Definition: OmronPID.h:69
OmronPID::loop
virtual short loop()
Definition: OmronPID.cpp:34
E_PID_MB_M_QUEUE_PID_1
#define E_PID_MB_M_QUEUE_PID_1
Definition: OmronPID.h:23
OmronPID::states
OmronState states[NB_OMRON_PIDS]
Definition: OmronPID.h:170
COMPONENT_KEY_PID_0
@ COMPONENT_KEY_PID_0
Definition: enums.h:52
OmronPID::isHeatingUp
bool isHeatingUp()
Definition: OmronPID.cpp:165
OmronState::lastWritten
millis_t lastWritten
Definition: OmronPID.h:45