Lydia - Printhead
OmronVFD Class Reference

#include <OmronVFD.h>

Inheritance diagram for OmronVFD:
[legend]

Public Types

enum  E_VFD_DIR { E_VFD_DIR_NONE = 0, E_VFD_DIR_FORWARD = 1, E_VFD_DIR_REVERSE = 2 }
 
enum  E_VFD_MODE { E_VFD_MODE_NONE = 0, E_VFD_MODE_DIRECT = 1, E_VFD_MODE_MODBUS = 2, E_VFD_MODE_UNKNOWN = 3 }
 
enum  E_VFD_RETRACT_STATE {
  E_VFD_RETRACT_STATE_NONE = 0, E_VFD_RETRACT_STATE_BRAKING = 1, E_VFD_RETRACT_STATE_STOPPED = 2, E_VFD_RETRACT_STATE_REVERSING = 3,
  E_VFD_RETRACT_STATE_BRAKE_REVERSING = 4, E_VFD_RETRACT_STATE_RETRACTED = 5
}
 
enum  E_VFD_RUN_MODE { E_VFD_RUN_MODE_NONE = 0, E_VFD_RUN_MODE_RUN = 1, E_VFD_RUN_MODE_STOP = 2, E_VFD_RUN_MODE_STOP_RETRACT = 3 }
 
enum  E_VFD_STATE {
  E_VFD_STATE_ACCELERATING = 4, E_VFD_STATE_DECELERATING = 2, E_VFD_STATE_RUNNING = 3, E_VFD_STATE_STOPPED = 1,
  E_VFD_STATE_ERROR = 8
}
 

Public Member Functions

uint16_t configure ()
 
short debug ()
 
short directDirection ()
 
uint16_t forward ()
 
OmronVFDStategetVFDState ()
 
short info ()
 
short loop ()
 
 OmronVFD (ModbusBridge *_bridge, short _slaveId, Component *_owner)
 
short onError (short error)
 
short onRawResponse (short size, uint8_t rxBuffer[])
 
short onRegisterMethods (Bridge *bridge)
 
short onResponse (short error)
 
short onStart ()
 
short onStop ()
 
short read_16 (int addr, int num, int prio=0)
 
uint16_t read_coil_single (uint16_t addr)
 
short readSingle_16 (int addr, int prio=0)
 
uint16_t reverse ()
 
uint16_t run ()
 
uint16_t setTargetFreq (uint16_t freq)
 
short setup ()
 
bool skipRead (int slave, int fn, int addr, int num, int prio)
 
uint16_t stop ()
 
uint16_t updateState ()
 
uint16_t write_Bit (uint16_t addr, int on)
 
uint16_t write_Single (uint16_t cmd, unsigned int data)
 

Public Attributes

millis_t bootTS
 
Statistic currentStats
 
millis_t debugTS
 
Pos3Analogdir
 
E_VFD_DIR direction
 
millis_t last
 
millis_t mbTS
 
Pos3Analogmode
 
MotorLoadmotorLoad
 
PHAppowner
 
millis_t readStateTS
 
POTspeed
 

Private Member Functions

short fromTCP ()
 
short modbusLoop ()
 
short ping ()
 
void updateTCP ()
 

Private Attributes

short lastError
 
uint16_t lastWriteAddress
 
uint16_t lastWriteValue
 
millis_t mbInterval
 
ModbusBridgemodbus
 
millis_t readInterval
 
E_VFD_RETRACT_STATE retractState
 
millis_t reverseStartTS
 
E_VFD_RUN_MODE runMode
 
millis_t runTS
 
short slaveAddress
 
OmronVFDState states [1]
 
millis_t stopTS
 

Detailed Description

Definition at line 83 of file OmronVFD.h.

Member Enumeration Documentation

◆ E_VFD_DIR

Enumerator
E_VFD_DIR_NONE 
E_VFD_DIR_FORWARD 
E_VFD_DIR_REVERSE 

Definition at line 94 of file OmronVFD.h.

95  {
96  E_VFD_DIR_NONE = 0,
99  } E_VFD_DIR;

◆ E_VFD_MODE

Enumerator
E_VFD_MODE_NONE 
E_VFD_MODE_DIRECT 
E_VFD_MODE_MODBUS 
E_VFD_MODE_UNKNOWN 

Definition at line 86 of file OmronVFD.h.

87  {
88  E_VFD_MODE_NONE = 0,
92  } E_VFD_MODE;

◆ E_VFD_RETRACT_STATE

Enumerator
E_VFD_RETRACT_STATE_NONE 
E_VFD_RETRACT_STATE_BRAKING 
E_VFD_RETRACT_STATE_STOPPED 
E_VFD_RETRACT_STATE_REVERSING 
E_VFD_RETRACT_STATE_BRAKE_REVERSING 
E_VFD_RETRACT_STATE_RETRACTED 

Definition at line 109 of file OmronVFD.h.

◆ E_VFD_RUN_MODE

Enumerator
E_VFD_RUN_MODE_NONE 
E_VFD_RUN_MODE_RUN 
E_VFD_RUN_MODE_STOP 
E_VFD_RUN_MODE_STOP_RETRACT 

Definition at line 101 of file OmronVFD.h.

102  {
104  E_VFD_RUN_MODE_RUN = 1,
107  } E_VFD_RUN_MODE;

◆ E_VFD_STATE

Enumerator
E_VFD_STATE_ACCELERATING 
E_VFD_STATE_DECELERATING 
E_VFD_STATE_RUNNING 
E_VFD_STATE_STOPPED 
E_VFD_STATE_ERROR 

Definition at line 119 of file OmronVFD.h.

120  {
126  } E_VFD_STATE;

Constructor & Destructor Documentation

◆ OmronVFD()

OmronVFD::OmronVFD ( ModbusBridge _bridge,
short  _slaveId,
Component *  _owner 
)
inline

Definition at line 128 of file OmronVFD.h.

131  : 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  }

Member Function Documentation

◆ configure()

uint16_t OmronVFD::configure ( )

Definition at line 65 of file OmronVFD.cpp.

66 {
67  // A001 Frequency reference source = 03 = Modbus
69  // A002 Source of the RUN command = 03 = Modbus
71  // C026 Relay output function 5 (AL: error signal) = 05
73  // A004 setting the maximum frequency
75 }

◆ debug()

short OmronVFD::debug ( )

Definition at line 259 of file OmronVFD.cpp.

260 {
261  //*stream << this->name << ":" << this->ok();
262  modbus->print();
263  return false;
264 }

◆ directDirection()

short OmronVFD::directDirection ( )

Definition at line 107 of file OmronVFD.cpp.

108 {
109  if (mode && mode->value == Pos3Analog::POS3_DIRECTION::UP)
110  {
111  if (dir && dir->value)
112  {
113  return dir->value;
114  }
115  }
116  return 0;
117 }

◆ forward()

uint16_t OmronVFD::forward ( )

Definition at line 92 of file OmronVFD.cpp.

93 {
94  direction = E_VFD_DIR::E_VFD_DIR_FORWARD;
95  return write_Bit(MX2_SET_DIR, 0);
96 }

◆ fromTCP()

short OmronVFD::fromTCP ( )
private

Definition at line 235 of file OmronVFDModbus.cpp.

236 {
237  if (modbus->mb->R[9] == 1)
238  {
239  modbus->mb->R[9] = 0;
240  modbus->print();
241  }
242 
243  short ret = E_SKIP;
244  if (!directDirection())
245  {
246  if (modbus->mb->R[MB_W_VFD_RUN] == E_VFD_RUN_MODE::E_VFD_RUN_MODE_RUN)
247  {
248  onStart();
249  write_Bit(MX2_START, 1);
250  modbus->mb->R[MB_W_VFD_RUN] = 0;
251  runMode = E_VFD_RUN_MODE::E_VFD_RUN_MODE_RUN;
252  ret = E_QUEUED;
253  }
254 
255  if (modbus->mb->R[MB_W_VFD_RUN] == E_VFD_RUN_MODE::E_VFD_RUN_MODE_STOP)
256  {
257  onStop();
258  write_Bit(MX2_START, 0);
259  owner->onStop(0);
260  modbus->mb->R[MB_W_VFD_RUN] = 0;
261  runMode = E_VFD_RUN_MODE::E_VFD_RUN_MODE_STOP;
262  ret = E_QUEUED;
263  }
264 
265  if (modbus->mb->R[MB_W_VFD_RUN] == E_VFD_RUN_MODE::E_VFD_RUN_MODE_STOP_RETRACT)
266  {
267  onStop();
268  write_Bit(MX2_START, 0);
269  owner->onStop(0);
270  modbus->mb->R[MB_W_VFD_RUN] = 0;
271  runMode = E_VFD_RUN_MODE::E_VFD_RUN_MODE_STOP_RETRACT;
272  retractState = E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_BRAKING;
273  ret = E_QUEUED;
274  }
275 
276  short dir = modbus->mb->R[MB_W_DIRECTION];
277  if (dir)
278  {
279  switch (dir)
280  {
281  case OmronVFD::E_VFD_DIR::E_VFD_DIR_FORWARD:
282  forward();
283  ret = E_QUEUED;
284  break;
285  case OmronVFD::E_VFD_DIR::E_VFD_DIR_REVERSE:
286  reverse();
287  ret = E_QUEUED;
288  break;
289  default:
290  stop();
291  ret = E_QUEUED;
292  break;
293  }
294  modbus->mb->R[MB_W_DIRECTION] = 0;
295  }
296  }
297  if (modbus->mb->R[MB_W_FREQ_TARGET] > 0)
298  {
300  modbus->mb->R[MB_W_FREQ_TARGET] = 0;
301  ret = E_QUEUED;
302  }
303  return ret;
304 }

◆ getVFDState()

OmronVFDState* OmronVFD::getVFDState ( )
inline

Definition at line 201 of file OmronVFD.h.

202  {
203  return &states[0];
204  }

◆ info()

short OmronVFD::info ( )

Definition at line 265 of file OmronVFD.cpp.

266 {
267  //*stream << this->name << "\n\t : " SPACE("Pin:" << MOTOR_IDLE_PIN);
268  return false;
269 }

◆ loop()

short OmronVFD::loop ( )

Definition at line 120 of file OmronVFD.cpp.

121 {
122 
123  if (millis() - debugTS > OMRON_MX2_DEBUG_INTERVAL)
124  {
125  debugTS = now;
126  }
127 
128 #ifdef MOTOR_LOAD_PIN
129  if (motorLoad)
130  {
131  currentStats.add(abs(motorLoad->value));
132  states[0].max_current = currentStats.maximum();
134  {
135  stop();
136  return onError(E_VFD_OVERLOAD);
137  }
138  }
139 #endif
140  bool hasDirectMode = true;
141  if (hasDirectMode && runMode == E_VFD_RUN_MODE::E_VFD_RUN_MODE_STOP_RETRACT)
142  {
143  short state = states[0].state;
144  switch (retractState)
145  {
146 
147  case E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_BRAKING:
148  {
149  if (state == OMRON_STATE_DECELERATING)
150  {
151  }
152  if (state == OMRON_STATE_STOPPED)
153  {
154  retractState = E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_STOPPED;
155  }
156  break;
157  }
158  case E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_STOPPED:
159  {
160  reverse();
161  run();
162  retractState = E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_REVERSING;
163  reverseStartTS = millis();
164  break;
165  }
166  case E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_REVERSING:
167  {
169  {
170  stop();
171  retractState = E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_BRAKE_REVERSING;
172  }
173  break;
174  }
175  case E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_BRAKE_REVERSING:
176  {
178  {
179  forward();
180  retractState = E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_RETRACTED;
181  runMode == E_VFD_RUN_MODE::E_VFD_RUN_MODE_NONE;
182  }
183  break;
184  }
185  }
186  }
187 
188  /*
189  // left direct mode
190  if (mode && mode->last_switch && !mode->value)
191  {
192  mode->last_switch = mode->value;
193  if (lastError == E_VFD_OVERLOAD)
194  {
195  owner->clearError();
196  }
197  stop();
198  }*/
199  /*
200  // left direct mode
201  if (mode && mode->last_switch && !mode->value && dir && !dir->value && dir->last_switch)
202  {
203  mode->last_switch = mode->value;
204  dir->last_switch = dir->value;
205  if (lastError == E_VFD_OVERLOAD)
206  {
207  owner->clearError();
208  }
209  stop();
210  }*/
211 
212  // cancel retract
213  if (hasDirectMode && mode && mode->value && dir && dir->value)
214  {
215  runMode = E_VFD_RUN_MODE::E_VFD_RUN_MODE_NONE;
216  retractState = E_VFD_RETRACT_STATE::E_VFD_RETRACT_STATE_NONE;
217  }
218 
219  // direct mode : control panel
220  if (mode && mode->value == Pos3Analog::POS3_DIRECTION::UP)
221  {
222  // speed
224  {
226  int dstSpeed = (speed->value * 100 / (ANALOG_INPUT_MAX_LEVEL_0 / 100)) / (OMRON_VFD_MAX_FREQ);
227  setTargetFreq(abs(dstSpeed));
228  }
229 
230  // direction
231  if (dir && dir->last_switch != dir->value)
232  {
233 
234  dir->last_switch = dir->value;
235  switch (dir->value)
236  {
237  case Pos3Analog::POS3_DIRECTION::UP:
238  // Log.notice("VFD: direct %s\n", "forward");
239  forward();
240  run();
241  break;
242  case Pos3Analog::POS3_DIRECTION::DOWN:
243  // Log.notice("VFD: direct %s\n", "reverse");
244  reverse();
245  run();
246  break;
247  case Pos3Analog::POS3_DIRECTION::MIDDLE:
248  // Log.notice("VFD: direct %s\n", "stop");
249  stop();
250  break;
251  }
252  }
253  }
254 
255  modbusLoop();
256  return E_OK;
257 }

◆ modbusLoop()

short OmronVFD::modbusLoop ( )
private

Definition at line 54 of file OmronVFDModbus.cpp.

55 {
56 
57  if (millis() - last < OMRON_MX2_LOOP_INTERVAL)
58  {
59  return E_SKIP;
60  }
61  if (modbus->qstate() != IDLE)
62  {
63  return E_SKIP;
64  }
65 
66  last = now;
67  updateState();
68  fromTCP();
70  if (!nextCommand)
71  {
72  return E_SKIP;
73  }
74  nextCommand->state = QUERY_STATE::PROCESSING;
75  nextCommand->ts = now;
77  if (debugSend)
78  {
80  {
81  debugTS = now;
82  nextCommand->print();
83  Serial.println();
84  }
85  }
86 
87  modbus->query(
88  nextCommand->slave,
89  nextCommand->fn,
90  nextCommand->addr,
91  nextCommand->value,
92  id);
93 }

◆ onError()

short OmronVFD::onError ( short  error)

Definition at line 145 of file OmronVFDModbus.cpp.

146 {
147  // 01 : 86 : 21 : 82 : 78
148  if (printModbusErrors)
149  {
150  Log.verboseln("Omron VFD onError : %d : %d", error, readInterval);
151  }
153  {
155  }
156 
157  lastError = error;
158  readInterval = clamp<millis_t>(readInterval, 0, MB_MAX_POLL_INTERVAL);
160  {
162  }
163  // App Level Errors
164  if (error > E_VFD_CUSTOM)
165  {
166  switch (error)
167  {
168  case E_VFD_OVERLOAD:
169  lastError = error;
170  Log.verboseln("Omron VFD :: Overload Error ! %d", error);
171  owner->onError(id, error);
172  break;
173 
174  default:
175  break;
176  }
177  return error;
178  }
179 
181  if (last)
182  {
183  last->reset();
184  }
185  return E_OK;
186 }

◆ onRawResponse()

short OmronVFD::onRawResponse ( short  size,
uint8_t  rxBuffer[] 
)

Definition at line 187 of file OmronVFDModbus.cpp.

188 {
189  if (!size)
190  {
191  Log.verboseln("OmronVFD::rawResponse - Invalid Size : %d", size);
192  return E_OK;
193  }
194  if (debugReceive)
195  {
196  // Log.verboseln("OmronVFD::rawResponse - Size : %d", size);
197  // printHex(rxBuffer, size);
198  }
199  if (size == 5)
200  {
201  Log.verboseln("Error - Modbus, invalid response size : %d", size);
202  }
203  return ERROR_OK;
204 }

◆ onRegisterMethods()

short OmronVFD::onRegisterMethods ( Bridge *  bridge)

Definition at line 270 of file OmronVFD.cpp.

271 {
272  // bridge->registerMemberFunction(id, this, C_STR("debug"), (ComponentFnPtr)&OmronVFD::debug);
273  return E_OK;
274 }

◆ onResponse()

short OmronVFD::onResponse ( short  error)

Definition at line 94 of file OmronVFDModbus.cpp.

95 {
97  if (!last || last->slave != slaveAddress || last->owner != id)
98  {
99  return E_SKIP;
100  }
101  OmronVFDState *state = getVFDState();
102  short req = state->queue.val();
103 
104  switch (req)
105  {
107  {
108  states[0].FC = modbus->ModbusSlaveRegisters[0] / 100;
112  lastError = E_OK;
113  state->queue.incr();
114  break;
115  }/*
116  case E_VFD_MB_QUEUE_DIR:
117  {
118  states[0].direction = modbus->ModbusSlaveRegisters[0];
119  readInterval = OMRON_MX2_MB_INTERVAL;
120  lastError = E_OK;
121  state->queue.incr();
122  break;
123  }*/
124  case E_VFD_MB_QUEUE_AMPS:
125  {
128  lastError = E_OK;
129  state->queue.incr();
130  break;
131  }
132  }
133 
135  {
136  last->print();
137  modbus->print();
139  lastError = E_OK;
140  }
141  last->reset();
142  updateTCP();
143  return E_OK;
144 }

◆ onStart()

short OmronVFD::onStart ( )

Definition at line 30 of file OmronVFD.cpp.

31 {
32 
33 #ifdef COOLING_RELAY
34  digitalWrite(COOLING_RELAY, HIGH);
35 #endif
36 #ifdef COOLING_RELAY2
37  digitalWrite(COOLING_RELAY2, HIGH);
38 #endif
39 #ifdef FEEDSCREW_RELAY
40  digitalWrite(FEEDSCREW_RELAY, HIGH);
41 #endif
42 
43  //@todo : handle multi errors
44  owner->clearError();
45  owner->onRun();
46  runTS = millis();
47  return E_OK;
48 }

◆ onStop()

short OmronVFD::onStop ( )

Definition at line 49 of file OmronVFD.cpp.

50 {
51 
52 #ifdef COOLING_RELAY
53  digitalWrite(COOLING_RELAY, 0);
54 #endif
55 #ifdef COOLING_RELAY2
56  digitalWrite(COOLING_RELAY2, 0);
57 #endif
58 #ifdef FEEDSCREW_RELAY
59  digitalWrite(FEEDSCREW_RELAY, 0);
60 #endif
61  // owner->clearError();
62  stopTS = millis();
63  return E_OK;
64 }

◆ ping()

short OmronVFD::ping ( )
private

Definition at line 205 of file OmronVFDModbus.cpp.

206 {
207  Query *next = modbus->nextQueryByState(DONE);
208  if (next)
209  {
211  next->slave = slaveAddress;
212  next->value = 1234;
213  next->addr = 0;
214  next->state = QUERY_STATE::QUEUED;
215  next->ts = millis();
216  return E_OK;
217  }
218  return E_QUERY_BUFFER_END;
219 }

◆ read_16()

short OmronVFD::read_16 ( int  addr,
int  num,
int  prio = 0 
)

Definition at line 386 of file OmronVFDModbus.cpp.

387 {
388  if (skipRead(slaveAddress, ku8MBReadHoldingRegisters, addr, num, prio))
389  {
390  return E_SKIP;
391  }
392 
393  Query *next = modbus->nextQueryByState(DONE);
394  if (next)
395  {
397  next->slave = slaveAddress;
398  next->value = num;
399  next->addr = addr;
400  next->state = QUERY_STATE::QUEUED;
401  next->ts = millis();
402  next->prio = prio;
403  next->owner = id;
404  return E_QUEUED;
405  }
406  return E_SKIP;
407 }

◆ read_coil_single()

uint16_t OmronVFD::read_coil_single ( uint16_t  addr)

Definition at line 324 of file OmronVFDModbus.cpp.

325 {
326  Query *next = modbus->nextQueryByState(DONE);
327  if (next)
328  {
329  next->fn = ku8MBReadCoils;
330  next->slave = slaveAddress;
331  next->value = 1;
332  next->addr = addr;
333  next->state = QUERY_STATE::QUEUED;
334  next->ts = millis();
335  next->owner = id;
337  return E_QUEUED;
338  }
339  return E_SKIP;
340 }

◆ readSingle_16()

short OmronVFD::readSingle_16 ( int  addr,
int  prio = 0 
)

Definition at line 365 of file OmronVFDModbus.cpp.

366 {
367  if (skipRead(slaveAddress, ku8MBReadHoldingRegisters, addr, 1, prio))
368  {
369  return E_SKIP;
370  }
371  Query *next = modbus->nextQueryByState(DONE);
372  if (next)
373  {
375  next->slave = slaveAddress;
376  next->value = 1;
377  next->addr = addr;
378  next->state = QUERY_STATE::QUEUED;
379  next->ts = millis();
380  next->prio = prio;
381  next->owner = id;
382  return E_QUEUED;
383  }
384  return E_SKIP;
385 }

◆ reverse()

uint16_t OmronVFD::reverse ( )

Definition at line 87 of file OmronVFD.cpp.

88 {
89  direction = E_VFD_DIR::E_VFD_DIR_REVERSE;
90  return write_Bit(MX2_SET_DIR, 1);
91 }

◆ run()

uint16_t OmronVFD::run ( )

Definition at line 82 of file OmronVFD.cpp.

83 {
84  onStart();
85  return write_Bit(MX2_START, 1);
86 }

◆ setTargetFreq()

uint16_t OmronVFD::setTargetFreq ( uint16_t  freq)

Definition at line 97 of file OmronVFD.cpp.

98 {
99  return write_Single(MX2_TARGET_FR, clamp<int>(freq * 100, 0, OMRON_VFD_MAX_FREQ * 100));
100 }

◆ setup()

short OmronVFD::setup ( )

Definition at line 101 of file OmronVFD.cpp.

102 {
103  onStop();
104  bootTS = millis();
105  return E_OK;
106 }

◆ skipRead()

bool OmronVFD::skipRead ( int  slave,
int  fn,
int  addr,
int  num,
int  prio 
)

Definition at line 408 of file OmronVFDModbus.cpp.

409 {
410  Query *same = modbus->nextSame(QUEUED, slave, addr, fn, num);
411  if (same && millis() - same->ts < OMRON_MX2_SAME_REQUEST_INTERVAL)
412  {
413  return true;
414  }
415 
417  {
418  return true;
419  }
420 
421  if (modbus->numSame(QUEUED, slave, addr, fn, num) >= 1)
422  {
423  return true;
424  }
425 
426  if (modbus->numSame(PROCESSING, slave, addr, fn, num) >= 1)
427  {
428  return true;
429  }
430  return false;
431 }

◆ stop()

uint16_t OmronVFD::stop ( )

Definition at line 76 of file OmronVFD.cpp.

77 {
78  onStop();
79  direction = E_VFD_DIR::E_VFD_DIR_NONE;
80  return write_Bit(MX2_START, 0);
81 }

◆ updateState()

uint16_t OmronVFD::updateState ( )

Definition at line 24 of file OmronVFDModbus.cpp.

25 {
26  if (now - mbTS > mbInterval)
27  {
28  OmronVFDState *state = getVFDState();
29  short req = state->queue.val();
30  bool queued = false;
31  switch (req)
32  {
34  {
36  break;
37  }
38  case E_VFD_MB_QUEUE_DIR:
39  {
40  queued = read_coil_single(MX2_C_DIR - 1) == E_QUEUED;
41  break;
42  }
44  {
46  break;
47  }
48  }
49  mbTS = now;
50  return queued ? E_QUEUED : E_OK;
51  }
52  return E_SKIP;
53 }

◆ updateTCP()

void OmronVFD::updateTCP ( )
private

Definition at line 220 of file OmronVFDModbus.cpp.

221 {
223  modbus->mb->R[MB_R_VFD_STATE] = states[0].state;
224  // modbus->mb->R[MB_R_VFD_DIRECTION] = states[0].direction;
225  modbus->mb->R[MB_R_FREQ_TARGET] = states[0].FC;
226 #ifdef MB_MONITORING_STATUS_VFD_MAX_LOAD
230  // modbus->mb->R[75] = states[0].status2;
231  // modbus->mb->R[76] = states[0].status3;
232 #endif
233  // fromTCP();
234 }

◆ write_Bit()

uint16_t OmronVFD::write_Bit ( uint16_t  addr,
int  on 
)

Definition at line 341 of file OmronVFDModbus.cpp.

342 {
344  if (same && millis() - same->ts < 300)
345  {
346  }
347 
348  Query *next = modbus->nextQueryByState(DONE);
349  if (next)
350  {
351  next->fn = ku8MBWriteSingleCoil;
352  next->slave = slaveAddress;
353  next->addr = addr;
354  next->value = on;
355  next->state = QUERY_STATE::QUEUED;
356  next->ts = millis();
357  next->owner = id;
358  next->prio = MB_QUERY_TYPE_CMD;
359  lastWriteAddress = addr;
360  lastWriteValue = on;
361  return E_OK;
362  }
363  return E_QUERY_BUFFER_END;
364 }

◆ write_Single()

uint16_t OmronVFD::write_Single ( uint16_t  cmd,
unsigned int  data 
)

Definition at line 305 of file OmronVFDModbus.cpp.

306 {
307  Query *next = modbus->nextQueryByState(DONE);
308  if (next)
309  {
311  next->slave = slaveAddress;
312  next->value = data;
313  next->addr = addr;
314  next->state = QUERY_STATE::QUEUED;
315  next->ts = millis();
316  next->owner = id;
317  next->prio = MB_QUERY_TYPE_CMD;
318  lastWriteAddress = addr;
319  lastWriteValue = data;
320  return E_QUEUED;
321  }
322  return E_SKIP;
323 }

Member Data Documentation

◆ bootTS

millis_t OmronVFD::bootTS

Definition at line 190 of file OmronVFD.h.

◆ currentStats

Statistic OmronVFD::currentStats

Definition at line 199 of file OmronVFD.h.

◆ debugTS

millis_t OmronVFD::debugTS

Definition at line 189 of file OmronVFD.h.

◆ dir

Pos3Analog* OmronVFD::dir

Definition at line 197 of file OmronVFD.h.

◆ direction

E_VFD_DIR OmronVFD::direction

Definition at line 207 of file OmronVFD.h.

◆ last

millis_t OmronVFD::last

Definition at line 186 of file OmronVFD.h.

◆ lastError

short OmronVFD::lastError
private

Definition at line 219 of file OmronVFD.h.

◆ lastWriteAddress

uint16_t OmronVFD::lastWriteAddress
private

Definition at line 230 of file OmronVFD.h.

◆ lastWriteValue

uint16_t OmronVFD::lastWriteValue
private

Definition at line 231 of file OmronVFD.h.

◆ mbInterval

millis_t OmronVFD::mbInterval
private

Definition at line 221 of file OmronVFD.h.

◆ mbTS

millis_t OmronVFD::mbTS

Definition at line 188 of file OmronVFD.h.

◆ modbus

ModbusBridge* OmronVFD::modbus
private

Definition at line 210 of file OmronVFD.h.

◆ mode

Pos3Analog* OmronVFD::mode

Definition at line 196 of file OmronVFD.h.

◆ motorLoad

MotorLoad* OmronVFD::motorLoad

Definition at line 198 of file OmronVFD.h.

◆ owner

PHApp* OmronVFD::owner

Definition at line 200 of file OmronVFD.h.

◆ readInterval

millis_t OmronVFD::readInterval
private

Definition at line 220 of file OmronVFD.h.

◆ readStateTS

millis_t OmronVFD::readStateTS

Definition at line 187 of file OmronVFD.h.

◆ retractState

E_VFD_RETRACT_STATE OmronVFD::retractState
private

Definition at line 227 of file OmronVFD.h.

◆ reverseStartTS

millis_t OmronVFD::reverseStartTS
private

Definition at line 224 of file OmronVFD.h.

◆ runMode

E_VFD_RUN_MODE OmronVFD::runMode
private

Definition at line 226 of file OmronVFD.h.

◆ runTS

millis_t OmronVFD::runTS
private

Definition at line 223 of file OmronVFD.h.

◆ slaveAddress

short OmronVFD::slaveAddress
private

Definition at line 211 of file OmronVFD.h.

◆ speed

POT* OmronVFD::speed

Definition at line 195 of file OmronVFD.h.

◆ states

OmronVFDState OmronVFD::states[1]
private

Definition at line 212 of file OmronVFD.h.

◆ stopTS

millis_t OmronVFD::stopTS
private

Definition at line 222 of file OmronVFD.h.


The documentation for this class was generated from the following files:
OmronVFD::write_Single
uint16_t write_Single(uint16_t cmd, unsigned int data)
Definition: OmronVFDModbus.cpp:305
Query::value
short value
Definition: ModbusBridge.h:23
MB_MONITORING_STATUS_VFD_MAX_LOAD
#define MB_MONITORING_STATUS_VFD_MAX_LOAD
Definition: enums.h:260
ANALOG_INPUT_MAX_LEVEL_0
#define ANALOG_INPUT_MAX_LEVEL_0
Definition: config_adv.h:114
ku8MBWriteSingleRegister
#define ku8MBWriteSingleRegister
Modbus function 0x06 Write Single Register.
Definition: enums.h:105
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
ku8MBReadHoldingRegisters
#define ku8MBReadHoldingRegisters
Modbus function 0x03 Read Holding Registers.
Definition: enums.h:103
OmronVFD::readInterval
millis_t readInterval
Definition: OmronVFD.h:220
OMRON_MX2_LOOP_INTERVAL
#define OMRON_MX2_LOOP_INTERVAL
Definition: config.h:112
OmronVFD::mbInterval
millis_t mbInterval
Definition: OmronVFD.h:221
ModbusBridge::nextWaitingTime
int nextWaitingTime
Definition: ModbusBridge.h:165
OmronVFD::E_VFD_RUN_MODE_STOP_RETRACT
@ E_VFD_RUN_MODE_STOP_RETRACT
Definition: OmronVFD.h:106
PROCESSING
@ PROCESSING
Definition: enums.h:91
OmronVFD::skipRead
bool skipRead(int slave, int fn, int addr, int num, int prio)
Definition: OmronVFDModbus.cpp:408
MB_MAX_POLL_INTERVAL
#define MB_MAX_POLL_INTERVAL
Definition: config_adv.h:29
ku8MBReadCoils
#define ku8MBReadCoils
Modbus function 0x01 Read Coils.
Definition: enums.h:97
POT::value
int value
Definition: POT.h:89
PHApp::clearError
short clearError()
Definition: PHApp.cpp:319
MB_W_VFD_RUN
#define MB_W_VFD_RUN
Definition: enums.h:150
OMRON_MX2_SAME_REQUEST_INTERVAL
#define OMRON_MX2_SAME_REQUEST_INTERVAL
Definition: config.h:113
MX2_A001
#define MX2_A001
Definition: OmronMX2.h:78
OMRON_MX2_DEBUG_INTERVAL
#define OMRON_MX2_DEBUG_INTERVAL
Definition: config.h:111
MX2_A004
#define MX2_A004
Definition: OmronMX2.h:82
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
E_VFD_MB_QUEUE_DIR
#define E_VFD_MB_QUEUE_DIR
Definition: OmronVFD.h:23
OmronVFD::stop
uint16_t stop()
Definition: OmronVFD.cpp:76
ModbusBridge::numByState
int numByState(int state=DONE)
Definition: ModbusBridge.cpp:261
OmronVFDState::FC
uint16_t FC
Definition: OmronVFD.h:60
ku8MBWriteSingleCoil
#define ku8MBWriteSingleCoil
Modbus function 0x05 Write Single Coil.
Definition: enums.h:99
OmronVFD::stopTS
millis_t stopTS
Definition: OmronVFD.h:222
E_VFD_MB_QUEUE_AMPS
#define E_VFD_MB_QUEUE_AMPS
Definition: OmronVFD.h:24
ModbusBridge::query
short query(int slave, short function, long start, int coils, Component *_owner, ComponentFnPtr _responseFn)
Definition: ModbusBridge.cpp:316
MotorLoad::value
short value
Definition: MotorLoad.h:128
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
MB_R_VFD_STATUS
#define MB_R_VFD_STATUS
Definition: enums.h:145
E_VFD_OVERLOAD
#define E_VFD_OVERLOAD
Definition: enums.h:27
ModbusBridge::print
void print()
Definition: ModbusBridge.cpp:273
MX2_C026
#define MX2_C026
Definition: OmronMX2.h:68
E_VFD_CUSTOM
#define E_VFD_CUSTOM
Definition: enums.h:24
Query::ts
millis_t ts
Definition: ModbusBridge.h:29
IDLE
@ IDLE
Definition: enums.h:83
ModbusBridge::ModbusSlaveRegisters
uint16_t ModbusSlaveRegisters[8]
Definition: ModbusBridge.h:131
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
OMRON_STATE_STOPPED
#define OMRON_STATE_STOPPED
Definition: enums.h:274
debugSend
bool debugSend
Definition: OmronVFDModbus.cpp:16
ERR_MODBUS_TIMEOUT
#define ERR_MODBUS_TIMEOUT
Definition: enums.h:133
OmronVFD::E_VFD_RUN_MODE_NONE
@ E_VFD_RUN_MODE_NONE
Definition: OmronVFD.h:103
MB_MONITORING_STATUS_VFD_CURRENT
#define MB_MONITORING_STATUS_VFD_CURRENT
Definition: enums.h:265
MB_MONITORING_STATUS_VFD_RUN_MODE
#define MB_MONITORING_STATUS_VFD_RUN_MODE
Definition: enums.h:264
ModbusBridge::nextSame
Query * nextSame(uchar state, short slave, int addr, short fn, int value)
Definition: ModbusBridge.cpp:206
OmronVFD::dir
Pos3Analog * dir
Definition: OmronVFD.h:197
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
Pos3Analog::value
int value
Definition: 3PosAnalog.h:73
ModbusBridge::mb
Mudbus * mb
Definition: ModbusBridge.h:166
MX2_C_DIR
#define MX2_C_DIR
Definition: OmronMX2.h:5
OmronVFD::lastWriteAddress
uint16_t lastWriteAddress
Definition: OmronVFD.h:230
MB_QUERY_TYPE_STATUS_POLL_2
#define MB_QUERY_TYPE_STATUS_POLL_2
Definition: config_adv.h:19
OmronVFDState::status
int16_t status
Definition: OmronVFD.h:66
ModbusBridge::nextQueryByState
Query * nextQueryByState(uchar state=DONE, int owner=-1)
Definition: ModbusBridge.cpp:138
OmronVFD::E_VFD_MODE_NONE
@ E_VFD_MODE_NONE
Definition: OmronVFD.h:88
E_VFD_TIMEOUT
#define E_VFD_TIMEOUT
Definition: enums.h:28
OmronVFD::E_VFD_RETRACT_STATE_BRAKE_REVERSING
@ E_VFD_RETRACT_STATE_BRAKE_REVERSING
Definition: OmronVFD.h:115
OmronVFD::read_coil_single
uint16_t read_coil_single(uint16_t addr)
Definition: OmronVFDModbus.cpp:324
MB_W_DIRECTION
#define MB_W_DIRECTION
Definition: enums.h:152
MB_QUERY_TYPE_STATUS_POLL
#define MB_QUERY_TYPE_STATUS_POLL
Definition: config_adv.h:17
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
ku8MBLinkTestOmronMX2Only
#define ku8MBLinkTestOmronMX2Only
Modbus function 0x08 Test.
Definition: enums.h:109
OMRON_MX2_STATE_INTERVAL
#define OMRON_MX2_STATE_INTERVAL
Definition: config.h:109
OmronVFD::lastWriteValue
uint16_t lastWriteValue
Definition: OmronVFD.h:231
MX2_START
#define MX2_START
Definition: OmronMX2.h:85
OmronVFD::runTS
millis_t runTS
Definition: OmronVFD.h:223
OmronVFD::readStateTS
millis_t readStateTS
Definition: OmronVFD.h:187
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
MODBUS_CMD_WAIT
#define MODBUS_CMD_WAIT
Definition: config_adv.h:8
MB_QUERY_TYPE_CMD
#define MB_QUERY_TYPE_CMD
Definition: config_adv.h:21
MX2_TARGET_FR
#define MX2_TARGET_FR
Definition: OmronMX2.h:13
Query::print
void print()
Definition: ModbusBridge.h:55
PHApp::onError
short onError(short id, short code)
Definition: PHApp.cpp:278
OmronVFD::E_VFD_DIR_REVERSE
@ E_VFD_DIR_REVERSE
Definition: OmronVFD.h:98
valA001
#define valA001
Definition: OmronVFD.cpp:26
Query::addr
long addr
Definition: ModbusBridge.h:22
OmronVFDState::max_current
int8_t max_current
Definition: OmronVFD.h:63
MX2_R_TORQUE
#define MX2_R_TORQUE
Definition: OmronMX2.h:8
ModbusBridge::numSame
int numSame(uchar state, short slave, int addr, short fn, int value)
Definition: ModbusBridge.cpp:229
OMRON_STATUS_POLL_REGISTERS
#define OMRON_STATUS_POLL_REGISTERS
Definition: enums.h:281
ERROR_OK
@ ERROR_OK
Definition: enums.h:73
OmronVFD::E_VFD_STATE_DECELERATING
@ E_VFD_STATE_DECELERATING
Definition: OmronVFD.h:122
OmronVFD::E_VFD_DIR
E_VFD_DIR
Definition: OmronVFD.h:94
E_QUEUED
#define E_QUEUED
Definition: enums.h:13
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
MB_R_FREQ_TARGET
#define MB_R_FREQ_TARGET
Definition: enums.h:143
MOTOR_OVERLOAD_RANGE_MIN
#define MOTOR_OVERLOAD_RANGE_MIN
Definition: config_adv.h:60
DONE
@ DONE
Definition: enums.h:94
MX2_SET_DIR
#define MX2_SET_DIR
Definition: OmronMX2.h:86
MX2_A002
#define MX2_A002
Definition: OmronMX2.h:80
OmronVFDState::queue
ShiftRegister< uchar, E_VFD_MB_QUEUE_LENGTH > queue
Definition: OmronVFD.h:74
ModbusBridge::nextQueryByState2
Query * nextQueryByState2(uchar state, int owner)
Definition: ModbusBridge.cpp:76
QUEUED
@ QUEUED
Definition: enums.h:90
OmronVFD::E_VFD_MODE_MODBUS
@ E_VFD_MODE_MODBUS
Definition: OmronVFD.h:90
valA002
#define valA002
Definition: OmronVFD.cpp:27
Query::prio
int prio
Definition: ModbusBridge.h:27
Query::state
short state
Definition: ModbusBridge.h:24
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
debugReceive
bool debugReceive
Definition: OmronVFDModbus.cpp:15
VFD_RETRACT_REVERSE_DURATION
#define VFD_RETRACT_REVERSE_DURATION
Definition: config.h:116
OmronVFD::speed
POT * speed
Definition: OmronVFD.h:195
E_OK
#define E_OK
Definition: enums.h:11
printModbusErrors
bool printModbusErrors
Definition: OmronVFDModbus.cpp:20
OmronVFD::reverseStartTS
millis_t reverseStartTS
Definition: OmronVFD.h:224
PHApp::onStop
short onStop(short code=0)
Definition: PHApp.cpp:312
OmronVFD::E_VFD_DIR_FORWARD
@ E_VFD_DIR_FORWARD
Definition: OmronVFD.h:97
OmronVFD::E_VFD_RUN_MODE_RUN
@ E_VFD_RUN_MODE_RUN
Definition: OmronVFD.h:104
MODBUS_QUEUE_MIN_FREE
#define MODBUS_QUEUE_MIN_FREE
Definition: config.h:91
OmronVFD::E_VFD_RETRACT_STATE_BRAKING
@ E_VFD_RETRACT_STATE_BRAKING
Definition: OmronVFD.h:112
OMRON_VFD_MAX_FREQ
#define OMRON_VFD_MAX_FREQ
Definition: config.h:115
OMRON_MX2_MB_INTERVAL
#define OMRON_MX2_MB_INTERVAL
Definition: config.h:110
OmronVFD::updateState
uint16_t updateState()
Definition: OmronVFDModbus.cpp:24
OmronVFD::E_VFD_DIR_NONE
@ E_VFD_DIR_NONE
Definition: OmronVFD.h:96
OMRON_STATE_DECELERATING
#define OMRON_STATE_DECELERATING
Definition: enums.h:272
OMRON_STATE_RUNNING
#define OMRON_STATE_RUNNING
Definition: enums.h:273
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
Query
Definition: ModbusBridge.h:18
OmronVFD::E_VFD_MODE_UNKNOWN
@ E_VFD_MODE_UNKNOWN
Definition: OmronVFD.h:91
ANALOG_INPUT_MIN_DT_0
#define ANALOG_INPUT_MIN_DT_0
Definition: config_adv.h:120
MB_R_VFD_STATE
#define MB_R_VFD_STATE
Definition: enums.h:146
MB_POLL_RETRY_STEP
#define MB_POLL_RETRY_STEP
Definition: config_adv.h:31
OmronVFD::E_VFD_STATE_RUNNING
@ E_VFD_STATE_RUNNING
Definition: OmronVFD.h:123
Query::owner
short owner
Definition: ModbusBridge.h:28
OmronVFD::E_VFD_RETRACT_STATE
E_VFD_RETRACT_STATE
Definition: OmronVFD.h:109
OmronVFD::bootTS
millis_t bootTS
Definition: OmronVFD.h:190
E_SKIP
#define E_SKIP
Definition: enums.h:12
PHApp::onRun
short onRun(short code=0)
Definition: PHApp.cpp:272
Pos3Analog::last_switch
int last_switch
Definition: 3PosAnalog.h:72
OmronVFD::write_Bit
uint16_t write_Bit(uint16_t addr, int on)
Definition: OmronVFDModbus.cpp:341
OmronVFD::slaveAddress
short slaveAddress
Definition: OmronVFD.h:211
Query::fn
short fn
Definition: ModbusBridge.h:25
E_QUERY_BUFFER_END
#define E_QUERY_BUFFER_END
Definition: enums.h:16
valC026
#define valC026
Definition: OmronVFD.cpp:28
ModbusBridge::qstate
short qstate()
Definition: ModbusBridge.cpp:304
OmronVFD::mode
Pos3Analog * mode
Definition: OmronVFD.h:196
OmronVFD::E_VFD_STATE_ERROR
@ E_VFD_STATE_ERROR
Definition: OmronVFD.h:125
OmronVFD::states
OmronVFDState states[1]
Definition: OmronVFD.h:212
POT::last_value
int last_value
Definition: POT.h:90
OmronVFD::motorLoad
MotorLoad * motorLoad
Definition: OmronVFD.h:198
COMPONENT_KEY_VFD
@ COMPONENT_KEY_VFD
Definition: enums.h:54
MB_W_FREQ_TARGET
#define MB_W_FREQ_TARGET
Definition: enums.h:151
OmronVFD::E_VFD_RETRACT_STATE_REVERSING
@ E_VFD_RETRACT_STATE_REVERSING
Definition: OmronVFD.h:114
OmronVFD::onStart
short onStart()
Definition: OmronVFD.cpp:30
Query::slave
short slave
Definition: ModbusBridge.h:21