Lydia - Printhead
OmronVFD.h
Go to the documentation of this file.
1 #ifndef OMRON_VFD_H
2 #define OMRON_VFD_H
3 
4 #include <Component.h>
5 #include <SRegister.h>
6 #include <xtimer.h>
7 #include <types.h>
8 #include <ModbusValue.h>
9 #include <xstatistics.h>
10 #include <macros.h>
11 #include <Vector.h>
12 
13 #include "./config.h"
14 #include "./OmronE5.h"
15 #include "./ModbusBridge.h"
16 
17 class PHApp;
18 class MotorLoad;
19 class Pos3Analog;
20 class POT;
21 
22 #define E_VFD_MB_QUEUE_STATUS 1
23 #define E_VFD_MB_QUEUE_DIR 2
24 #define E_VFD_MB_QUEUE_AMPS 3
25 #define E_VFD_MB_QUEUE_CMD 4
26 #define E_VFD_MB_QUEUE_LENGTH 1
27 
28 // actual PID, holds only values and handy functions
30 {
31 public:
32  OmronVFDState() : lastUpdated(millis()),
33  lastWritten(millis()),
35  // E_VFD_MB_QUEUE_DIR,
36  // E_VFD_MB_QUEUE_AMPS})
37  {
38  }
39 
40  struct type_errorMX2 // error structure
41  {
42  uint16_t code; // reason
43  uint16_t status; // Inverter status on shutdown
44  uint16_t noUse; // Not used
45  uint16_t fr; // IF frequency during shutdown
46  uint16_t cur; // IF current on shutdown
47  uint16_t vol; // IF voltage when disconnected
48  uint32_t time1; // Total running time in STROKE mode when disconnected
49  uint32_t time2; // Total operating time of the inverter with the power on at the time of shutdown
50  };
51  union union_errorFC // Omron Error Translation
52  {
54  uint16_t inputBuf[10];
55  };
56 
57  int8_t err; // last error
58  uint16_t numErr; // number of errors
59  uint8_t nbComErrors; // The number of communication errors when exceeding FC_NUM_READ inverter lock 485 control
60  uint16_t FC; // Inverter target frequency in 0.01 hertz
61  uint16_t power; // Read: Current inverter power in 100 watt units (3 is 300 watts)
62  uint16_t current; // Read: Current inverter current in 0.01 Amp units
63  int8_t max_current; // Read: Maximum current inverter in 0.01 Amp units, sample storage = 20 Frames
64 
65  int16_t state; // Read: State of the inverter register MX2_STATE
66  int16_t status; // Read: Status of the inverter register MX2_STATUS
67  uint8_t direction; // Read: Direction of the inverter register MX2_DIRECTION
68 
69  millis_t startTS; // compressor start time
70  union_errorFC error; // Structure for decoding the inverter error
71 
72  millis_t lastUpdated;
73  millis_t lastWritten;
74  ShiftRegister<uchar, E_VFD_MB_QUEUE_LENGTH> queue;
75 
76  void print()
77  {
78  Log.verboseln("FC:%d | State:%d | Status:%d", FC, state, status);
79  }
80 };
81 
82 // Addon to deal with multiple Omron PID controllers
83 class OmronVFD : public Component, public ModbusValue<int[]>
84 {
85 public:
86  typedef enum
87  {
92  } E_VFD_MODE;
93 
94  typedef enum
95  {
99  } E_VFD_DIR;
100 
101  typedef enum
102  {
107  } E_VFD_RUN_MODE;
108 
109  typedef enum
110  {
118 
119  typedef enum
120  {
126  } E_VFD_STATE;
127 
129  ModbusBridge *_bridge,
130  short _slaveId,
131  Component *_owner) : ModbusValue<int[]>(MB_W_VFD_RUN, MB_FC::MB_FC_READ_REGISTERS),
132  Component("VFD", COMPONENT_KEY_VFD, Component::COMPONENT_DEFAULT, _owner),
133  modbus(_bridge),
134  mode(NULL),
135  dir(NULL),
136  speed(NULL),
137  slaveAddress(_slaveId)
138  {
139  // setFlag(OBJECT_RUN_FLAGS::E_OF_DEBUG);
140  SBI(nFlags, OBJECT_NET_CAPS::E_NCAPS_MODBUS);
141  readStateTS = bootTS = last = mbTS = millis();
143  runMode = E_VFD_RUN_MODE::E_VFD_RUN_MODE_NONE;
145  direction = E_VFD_DIR::E_VFD_DIR_FORWARD;
146  setNumberAddresses(4);
147  setFunctionCode(MB_FC::MB_FC_READ_REGISTERS);
148  setRegisterMode(MB_REGISTER_MODE::E_MB_REGISTER_MODE_READ);
149  }
150 
152  // Component implementation
153  short loop();
154  short setup();
155  short debug();
156  short info();
157  short onRegisterMethods(Bridge *bridge);
158 
160  // Modbus
161  short readSingle_16(int addr, int prio = 0);
162  short read_16(int addr, int num, int prio = 0);
163  uint16_t read_coil_single(uint16_t addr);
164  uint16_t write_Single(uint16_t cmd, unsigned int data);
165  uint16_t write_Bit(uint16_t addr, int on);
166  // Modbus callbacks
167  short onResponse(short error);
168  short onError(short error);
169  short onRawResponse(short size, uint8_t rxBuffer[]);
170  bool skipRead(int slave, int fn, int addr, int num, int prio);
172  // VFD control
173  uint16_t setTargetFreq(uint16_t freq);
174  uint16_t stop();
175  uint16_t run();
176  uint16_t reverse();
177  uint16_t forward();
178  short onStart();
179  short onStop();
180 
182  // Basics
183 
184  uint16_t configure();
185  uint16_t updateState();
186  millis_t last;
187  millis_t readStateTS;
188  millis_t mbTS;
189  millis_t debugTS;
190  millis_t bootTS;
191 
193  // Options
194 
199  Statistic currentStats;
202  {
203  return &states[0];
204  }
205 
206  short directDirection();
208 
209 private:
213 
214  short ping();
215  void updateTCP();
216  short fromTCP();
217  short modbusLoop();
218 
219  short lastError;
220  millis_t readInterval;
221  millis_t mbInterval;
222  millis_t stopTS;
223  millis_t runTS;
224  millis_t reverseStartTS;
225 
228 
229 
231  uint16_t lastWriteValue;
232 };
233 
234 #endif
OmronVFD::write_Single
uint16_t write_Single(uint16_t cmd, unsigned int data)
Definition: OmronVFDModbus.cpp:305
E_VFD_MB_QUEUE_STATUS
#define E_VFD_MB_QUEUE_STATUS
Definition: OmronVFD.h:22
OmronVFD::E_VFD_RUN_MODE
E_VFD_RUN_MODE
Definition: OmronVFD.h:101
OmronVFD::updateTCP
void updateTCP()
Definition: OmronVFDModbus.cpp:220
OmronVFD::directDirection
short directDirection()
Definition: OmronVFD.cpp:107
OmronVFDState::current
uint16_t current
Definition: OmronVFD.h:62
OmronVFD::runMode
E_VFD_RUN_MODE runMode
Definition: OmronVFD.h:226
OmronVFD::readInterval
millis_t readInterval
Definition: OmronVFD.h:220
OmronVFD::mbInterval
millis_t mbInterval
Definition: OmronVFD.h:221
OmronVFD::E_VFD_RUN_MODE_STOP_RETRACT
@ E_VFD_RUN_MODE_STOP_RETRACT
Definition: OmronVFD.h:106
OmronVFD::configure
uint16_t configure()
Definition: OmronVFD.cpp:65
OmronVFD::skipRead
bool skipRead(int slave, int fn, int addr, int num, int prio)
Definition: OmronVFDModbus.cpp:408
Pos3Analog
Definition: 3PosAnalog.h:13
OmronVFDState::type_errorMX2::fr
uint16_t fr
Definition: OmronVFD.h:45
MB_W_VFD_RUN
#define MB_W_VFD_RUN
Definition: enums.h:150
OmronVFD::mbTS
millis_t mbTS
Definition: OmronVFD.h:188
OmronVFD::run
uint16_t run()
Definition: OmronVFD.cpp:82
OmronVFD::E_VFD_STATE
E_VFD_STATE
Definition: OmronVFD.h:119
ModbusBridge
Definition: ModbusBridge.h:107
OmronVFD::stop
uint16_t stop()
Definition: OmronVFD.cpp:76
OmronVFDState::FC
uint16_t FC
Definition: OmronVFD.h:60
OmronVFD::stopTS
millis_t stopTS
Definition: OmronVFD.h:222
OmronVFD::direction
E_VFD_DIR direction
Definition: OmronVFD.h:207
OmronVFD::modbus
ModbusBridge * modbus
Definition: OmronVFD.h:210
OmronVFD::retractState
E_VFD_RETRACT_STATE retractState
Definition: OmronVFD.h:227
OmronVFD::debug
short debug()
Definition: OmronVFD.cpp:259
OmronVFD::lastError
short lastError
Definition: OmronVFD.h:219
OmronVFD::modbusLoop
short modbusLoop()
Definition: OmronVFDModbus.cpp:54
OmronVFD::forward
uint16_t forward()
Definition: OmronVFD.cpp:92
OmronVFD::currentStats
Statistic currentStats
Definition: OmronVFD.h:199
OmronVFD::onRawResponse
short onRawResponse(short size, uint8_t rxBuffer[])
Definition: OmronVFDModbus.cpp:187
OmronVFDState::union_errorFC::inputBuf
uint16_t inputBuf[10]
Definition: OmronVFD.h:54
PHApp
Definition: PHApp.h:34
OmronVFD::setup
short setup()
Definition: OmronVFD.cpp:101
OmronVFDState::power
uint16_t power
Definition: OmronVFD.h:61
OmronVFD::E_VFD_RUN_MODE_NONE
@ E_VFD_RUN_MODE_NONE
Definition: OmronVFD.h:103
OmronVFD::dir
Pos3Analog * dir
Definition: OmronVFD.h:197
OmronVFDState::err
int8_t err
Definition: OmronVFD.h:57
OmronVFD::loop
short loop()
Definition: OmronVFD.cpp:120
OmronVFDState::lastUpdated
millis_t lastUpdated
Definition: OmronVFD.h:72
OmronVFD::E_VFD_RUN_MODE_STOP
@ E_VFD_RUN_MODE_STOP
Definition: OmronVFD.h:105
OmronVFD::E_VFD_MODE
E_VFD_MODE
Definition: OmronVFD.h:86
OmronVFD::E_VFD_STATE_ACCELERATING
@ E_VFD_STATE_ACCELERATING
Definition: OmronVFD.h:121
OmronVFD::lastWriteAddress
uint16_t lastWriteAddress
Definition: OmronVFD.h:230
OmronVFDState::status
int16_t status
Definition: OmronVFD.h:66
OmronVFD::E_VFD_MODE_NONE
@ E_VFD_MODE_NONE
Definition: OmronVFD.h:88
POT
Definition: POT.h:21
OmronVFDState::type_errorMX2::cur
uint16_t cur
Definition: OmronVFD.h:46
OmronE5.h
OmronVFD
Definition: OmronVFD.h:83
OmronVFD::E_VFD_RETRACT_STATE_BRAKE_REVERSING
@ E_VFD_RETRACT_STATE_BRAKE_REVERSING
Definition: OmronVFD.h:115
OmronVFDState::nbComErrors
uint8_t nbComErrors
Definition: OmronVFD.h:59
OmronVFD::readSingle_16
short readSingle_16(int addr, int prio=0)
Definition: OmronVFDModbus.cpp:365
OmronVFD::read_coil_single
uint16_t read_coil_single(uint16_t addr)
Definition: OmronVFDModbus.cpp:324
OmronVFD::owner
PHApp * owner
Definition: OmronVFD.h:200
OmronVFDState
Definition: OmronVFD.h:29
OmronVFD::fromTCP
short fromTCP()
Definition: OmronVFDModbus.cpp:235
OmronVFD::last
millis_t last
Definition: OmronVFD.h:186
OmronVFDState::state
int16_t state
Definition: OmronVFD.h:65
OMRON_MX2_STATE_INTERVAL
#define OMRON_MX2_STATE_INTERVAL
Definition: config.h:109
ModbusBridge.h
OmronVFD::lastWriteValue
uint16_t lastWriteValue
Definition: OmronVFD.h:231
OmronVFDState::print
void print()
Definition: OmronVFD.h:76
OmronVFDState::startTS
millis_t startTS
Definition: OmronVFD.h:69
OmronVFD::runTS
millis_t runTS
Definition: OmronVFD.h:223
OmronVFD::readStateTS
millis_t readStateTS
Definition: OmronVFD.h:187
OmronVFDState::direction
uint8_t direction
Definition: OmronVFD.h:67
OmronVFD::E_VFD_RETRACT_STATE_STOPPED
@ E_VFD_RETRACT_STATE_STOPPED
Definition: OmronVFD.h:113
OmronVFD::getVFDState
OmronVFDState * getVFDState()
Definition: OmronVFD.h:201
OmronVFD::setTargetFreq
uint16_t setTargetFreq(uint16_t freq)
Definition: OmronVFD.cpp:97
OmronVFD::E_VFD_DIR_REVERSE
@ E_VFD_DIR_REVERSE
Definition: OmronVFD.h:98
OmronVFDState::max_current
int8_t max_current
Definition: OmronVFD.h:63
OmronVFDState::error
union_errorFC error
Definition: OmronVFD.h:70
OmronVFDState::type_errorMX2::noUse
uint16_t noUse
Definition: OmronVFD.h:44
OmronVFD::OmronVFD
OmronVFD(ModbusBridge *_bridge, short _slaveId, Component *_owner)
Definition: OmronVFD.h:128
OmronVFD::E_VFD_STATE_DECELERATING
@ E_VFD_STATE_DECELERATING
Definition: OmronVFD.h:122
OmronVFD::E_VFD_DIR
E_VFD_DIR
Definition: OmronVFD.h:94
OmronVFD::onStop
short onStop()
Definition: OmronVFD.cpp:49
OmronVFD::debugTS
millis_t debugTS
Definition: OmronVFD.h:189
OmronVFD::read_16
short read_16(int addr, int num, int prio=0)
Definition: OmronVFDModbus.cpp:386
OmronVFD::E_VFD_RETRACT_STATE_RETRACTED
@ E_VFD_RETRACT_STATE_RETRACTED
Definition: OmronVFD.h:116
OmronVFDState::queue
ShiftRegister< uchar, E_VFD_MB_QUEUE_LENGTH > queue
Definition: OmronVFD.h:74
OmronVFD::info
short info()
Definition: OmronVFD.cpp:265
OmronVFD::E_VFD_MODE_MODBUS
@ E_VFD_MODE_MODBUS
Definition: OmronVFD.h:90
OmronVFD::reverse
uint16_t reverse()
Definition: OmronVFD.cpp:87
OmronVFD::E_VFD_STATE_STOPPED
@ E_VFD_STATE_STOPPED
Definition: OmronVFD.h:124
OmronVFD::onError
short onError(short error)
Definition: OmronVFDModbus.cpp:145
OmronVFDState::lastWritten
millis_t lastWritten
Definition: OmronVFD.h:73
OmronVFD::speed
POT * speed
Definition: OmronVFD.h:195
OmronVFDState::type_errorMX2::vol
uint16_t vol
Definition: OmronVFD.h:47
OmronVFDState::union_errorFC::MX2
type_errorMX2 MX2
Definition: OmronVFD.h:53
OmronVFDState::type_errorMX2::time1
uint32_t time1
Definition: OmronVFD.h:48
OmronVFD::reverseStartTS
millis_t reverseStartTS
Definition: OmronVFD.h:224
OmronVFD::E_VFD_DIR_FORWARD
@ E_VFD_DIR_FORWARD
Definition: OmronVFD.h:97
OmronVFDState::OmronVFDState
OmronVFDState()
Definition: OmronVFD.h:32
OmronVFD::E_VFD_RUN_MODE_RUN
@ E_VFD_RUN_MODE_RUN
Definition: OmronVFD.h:104
OmronVFD::E_VFD_RETRACT_STATE_BRAKING
@ E_VFD_RETRACT_STATE_BRAKING
Definition: OmronVFD.h:112
OmronVFDState::type_errorMX2
Definition: OmronVFD.h:40
OmronVFDState::union_errorFC
Definition: OmronVFD.h:51
OmronVFDState::type_errorMX2::time2
uint32_t time2
Definition: OmronVFD.h:49
OmronVFD::onRegisterMethods
short onRegisterMethods(Bridge *bridge)
Definition: OmronVFD.cpp:270
OmronVFD::updateState
uint16_t updateState()
Definition: OmronVFDModbus.cpp:24
OmronVFD::E_VFD_DIR_NONE
@ E_VFD_DIR_NONE
Definition: OmronVFD.h:96
config.h
OmronVFD::E_VFD_MODE_DIRECT
@ E_VFD_MODE_DIRECT
Definition: OmronVFD.h:89
OmronVFD::E_VFD_RETRACT_STATE_NONE
@ E_VFD_RETRACT_STATE_NONE
Definition: OmronVFD.h:111
OmronVFD::E_VFD_MODE_UNKNOWN
@ E_VFD_MODE_UNKNOWN
Definition: OmronVFD.h:91
OmronVFD::E_VFD_STATE_RUNNING
@ E_VFD_STATE_RUNNING
Definition: OmronVFD.h:123
OmronVFD::E_VFD_RETRACT_STATE
E_VFD_RETRACT_STATE
Definition: OmronVFD.h:109
OmronVFDState::type_errorMX2::code
uint16_t code
Definition: OmronVFD.h:42
OmronVFDState::numErr
uint16_t numErr
Definition: OmronVFD.h:58
OmronVFD::bootTS
millis_t bootTS
Definition: OmronVFD.h:190
OmronVFD::write_Bit
uint16_t write_Bit(uint16_t addr, int on)
Definition: OmronVFDModbus.cpp:341
OmronVFD::slaveAddress
short slaveAddress
Definition: OmronVFD.h:211
OmronVFD::onResponse
short onResponse(short error)
Definition: OmronVFDModbus.cpp:94
OmronVFD::ping
short ping()
Definition: OmronVFDModbus.cpp:205
OmronVFD::mode
Pos3Analog * mode
Definition: OmronVFD.h:196
OmronVFD::E_VFD_STATE_ERROR
@ E_VFD_STATE_ERROR
Definition: OmronVFD.h:125
OmronVFDState::type_errorMX2::status
uint16_t status
Definition: OmronVFD.h:43
OmronVFD::states
OmronVFDState states[1]
Definition: OmronVFD.h:212
OmronVFD::motorLoad
MotorLoad * motorLoad
Definition: OmronVFD.h:198
COMPONENT_KEY_VFD
@ COMPONENT_KEY_VFD
Definition: enums.h:54
MotorLoad
Definition: MotorLoad.h:15
OmronVFD::E_VFD_RETRACT_STATE_REVERSING
@ E_VFD_RETRACT_STATE_REVERSING
Definition: OmronVFD.h:114
OmronVFD::onStart
short onStart()
Definition: OmronVFD.cpp:30