motor.h
Go to the documentation of this file.
1 #ifndef CANOPEN_402_MOTOR_H
2 #define CANOPEN_402_MOTOR_H
3 
4 #include <canopen_402/base.h>
6 #include <functional>
7 #include <boost/container/flat_map.hpp>
8 
9 #include <boost/numeric/conversion/cast.hpp>
10 #include <limits>
11 #include <algorithm>
12 
13 namespace canopen
14 {
15 
16 class State402{
17 public:
19  {
36  };
38  {
39  Unknown = 0,
40  Start = 0,
48  Fault = 8,
49  };
51  InternalState read(uint16_t sw);
52  bool waitForNewState(const time_point &abstime, InternalState &state);
54 private:
55  boost::condition_variable cond_;
56  boost::mutex mutex_;
58 };
59 
60 class Command402 {
61  struct Op {
62  uint16_t to_set_;
63  uint16_t to_reset_;
64  Op(uint16_t to_set ,uint16_t to_reset) : to_set_(to_set), to_reset_(to_reset) {}
65  void operator()(uint16_t &val) const {
66  val = (val & ~to_reset_) | to_set_;
67  }
68  };
70  boost::container::flat_map< std::pair<State402::InternalState, State402::InternalState>, Op > transitions_;
71  void add(const State402::InternalState &from, const State402::InternalState &to, Op op){
72  transitions_.insert(std::make_pair(std::make_pair(from, to), op));
73  }
74  public:
76  const Op& get(const State402::InternalState &from, const State402::InternalState &to) const {
77  return transitions_.at(std::make_pair(from, to));
78  }
79  };
82  Command402();
83 public:
85  {
96  // CW_Reserved1=10,
102  };
103  static bool setTransition(uint16_t &cw, const State402::InternalState &from, const State402::InternalState &to, State402::InternalState *next);
104 };
105 
106 template<uint16_t MASK> class WordAccessor{
107  uint16_t &word_;
108 public:
109  WordAccessor(uint16_t &word) : word_(word) {}
110  bool set(uint8_t bit){
111  uint16_t val = MASK & (1<<bit);
112  word_ |= val;
113  return val;
114  }
115  bool reset(uint8_t bit){
116  uint16_t val = MASK & (1<<bit);
117  word_ &= ~val;
118  return val;
119  }
120  bool get(uint8_t bit) const { return word_ & (1<<bit); }
121  uint16_t get() const { return word_ & MASK; }
122  WordAccessor & operator=(const uint16_t &val){
123  uint16_t was = word_;
124  word_ = (word_ & ~MASK) | (val & MASK);
125  return *this;
126  }
127 };
128 
129 class Mode {
130 public:
131  const uint16_t mode_id_;
132  Mode(uint16_t id) : mode_id_(id) {}
134  virtual bool start() = 0;
135  virtual bool read(const uint16_t &sw) = 0;
136  virtual bool write(OpModeAccesser& cw) = 0;
137  virtual bool setTarget(const double &val) { ROSCANOPEN_ERROR("canopen_402", "Mode::setTarget not implemented"); return false; }
138  virtual ~Mode() {}
139 };
140 typedef std::shared_ptr<Mode> ModeSharedPtr;
141 
142 template<typename T> class ModeTargetHelper : public Mode {
144  std::atomic<bool> has_target_;
145 
146 public:
147  ModeTargetHelper(uint16_t mode) : Mode (mode) {}
148  bool hasTarget() { return has_target_; }
149  T getTarget() { return target_; }
150  virtual bool setTarget(const double &val) {
151  if(std::isnan(val)){
152  ROSCANOPEN_ERROR("canopen_402", "target command is not a number");
153  return false;
154  }
155 
156  using boost::numeric_cast;
157  using boost::numeric::positive_overflow;
158  using boost::numeric::negative_overflow;
159 
160  try
161  {
162  target_= numeric_cast<T>(val);
163  }
164  catch(negative_overflow&) {
165  ROSCANOPEN_WARN("canopen_402", "Command " << val << " does not fit into target, clamping to min limit");
166  target_= std::numeric_limits<T>::min();
167  }
168  catch(positive_overflow&) {
169  ROSCANOPEN_WARN("canopen_402", "Command " << val << " does not fit into target, clamping to max limit");
170  target_= std::numeric_limits<T>::max();
171  }
172  catch(...){
173  ROSCANOPEN_ERROR("canopen_402", "Was not able to cast command " << val);
174  return false;
175  }
176 
177  has_target_ = true;
178  return true;
179  }
180  virtual bool start() { has_target_ = false; return true; }
181 };
182 
183 template<uint16_t ID, typename TYPE, uint16_t OBJ, uint8_t SUB, uint16_t CW_MASK> class ModeForwardHelper : public ModeTargetHelper<TYPE> {
185 public:
187  if(SUB) storage->entry(target_entry_, OBJ, SUB);
188  else storage->entry(target_entry_, OBJ);
189  }
190  virtual bool read(const uint16_t &sw) { return true;}
191  virtual bool write(Mode::OpModeAccesser& cw) {
192  if(this->hasTarget()){
193  cw = cw.get() | CW_MASK;
194  target_entry_.set(this->getTarget());
195  return true;
196  }else{
197  cw = cw.get() & ~CW_MASK;
198  return false;
199  }
200  }
201 };
202 
210 
211 class ProfiledPositionMode : public ModeTargetHelper<int32_t> {
213  double last_target_;
214  uint16_t sw_;
215 public:
216  enum SW_masks {
220  };
221  enum CW_bits {
225  };
227  storage->entry(target_position_, 0x607A);
228  }
229  virtual bool start() { sw_ = 0; last_target_= std::numeric_limits<double>::quiet_NaN(); return ModeTargetHelper::start(); }
230  virtual bool read(const uint16_t &sw) { sw_ = sw; return (sw & MASK_Error) == 0; }
231  virtual bool write(OpModeAccesser& cw) {
232  cw.set(CW_Immediate);
233  if(hasTarget()){
234  int32_t target = getTarget();
235  if((sw_ & MASK_Acknowledged) == 0 && target != last_target_){
236  if(cw.get(CW_NewPoint)){
237  cw.reset(CW_NewPoint); // reset if needed
238  }else{
239  target_position_.set(target);
240  cw.set(CW_NewPoint);
241  last_target_ = target;
242  }
243  } else if (sw_ & MASK_Acknowledged){
244  cw.reset(CW_NewPoint);
245  }
246  return true;
247  }
248  return false;
249  }
250 };
251 
252 class HomingMode: public Mode{
253 protected:
254  enum SW_bits {
257  };
258  enum CW_bits {
260  };
261 public:
262  HomingMode() : Mode(MotorBase::Homing) {}
263  virtual bool executeHoming(canopen::LayerStatus &status) = 0;
264 };
265 
268  std::atomic<bool> execute_;
269 
270  boost::mutex mutex_;
271  boost::condition_variable cond_;
272  uint16_t status_;
273 
274  enum SW_masks {
278  };
279  bool error(canopen::LayerStatus &status, const std::string& msg) { execute_= false; status.error(msg); return false; }
280 public:
282  storage->entry(homing_method_, 0x6098);
283  }
284  virtual bool start();
285  virtual bool read(const uint16_t &sw);
286  virtual bool write(OpModeAccesser& cw);
287 
288  virtual bool executeHoming(canopen::LayerStatus &status);
289 };
290 
291 class Motor402 : public MotorBase
292 {
293 public:
294 
295  Motor402(const std::string &name, ObjectStorageSharedPtr storage, const canopen::Settings &settings)
297  switching_state_(State402::InternalState(settings.get_optional<unsigned int>("switching_state", static_cast<unsigned int>(State402::Operation_Enable)))),
298  monitor_mode_(settings.get_optional<bool>("monitor_mode", true)),
299  state_switch_timeout_(settings.get_optional<unsigned int>("state_switch_timeout", 5))
300  {
301  storage->entry(status_word_entry_, 0x6041);
302  storage->entry(control_word_entry_, 0x6040);
303  storage->entry(op_mode_display_, 0x6061);
304  storage->entry(op_mode_, 0x6060);
305  try{
306  storage->entry(supported_drive_modes_, 0x6502);
307  }
308  catch(...){
309  }
310  }
311 
312  virtual bool setTarget(double val);
313  virtual bool enterModeAndWait(uint16_t mode);
314  virtual bool isModeSupported(uint16_t mode);
315  virtual uint16_t getMode();
316 
317  template<typename T, typename ...Args>
318  bool registerMode(uint16_t mode, Args&&... args) {
319  return mode_allocators_.insert(std::make_pair(mode, [args..., mode, this](){
320  if(isModeSupportedByDevice(mode)) registerMode(mode, ModeSharedPtr(new T(args...)));
321  })).second;
322  }
323 
325  registerMode<ProfiledPositionMode> (MotorBase::Profiled_Position, storage);
326  registerMode<VelocityMode> (MotorBase::Velocity, storage);
327  registerMode<ProfiledVelocityMode> (MotorBase::Profiled_Velocity, storage);
328  registerMode<ProfiledTorqueMode> (MotorBase::Profiled_Torque, storage);
329  registerMode<DefaultHomingMode> (MotorBase::Homing, storage);
330  registerMode<InterpolatedPositionMode> (MotorBase::Interpolated_Position, storage);
331  registerMode<CyclicSynchronousPositionMode> (MotorBase::Cyclic_Synchronous_Position, storage);
332  registerMode<CyclicSynchronousVelocityMode> (MotorBase::Cyclic_Synchronous_Velocity, storage);
333  registerMode<CyclicSynchronousTorqueMode> (MotorBase::Cyclic_Synchronous_Torque, storage);
334  }
335 
337  public:
338  virtual MotorBaseSharedPtr allocate(const std::string &name, ObjectStorageSharedPtr storage, const canopen::Settings &settings);
339  };
340 protected:
341  virtual void handleRead(LayerStatus &status, const LayerState &current_state);
342  virtual void handleWrite(LayerStatus &status, const LayerState &current_state);
343  virtual void handleDiag(LayerReport &report);
344  virtual void handleInit(LayerStatus &status);
345  virtual void handleShutdown(LayerStatus &status);
346  virtual void handleHalt(LayerStatus &status);
347  virtual void handleRecover(LayerStatus &status);
348 
349 private:
350  virtual bool isModeSupportedByDevice(uint16_t mode);
351  void registerMode(uint16_t id, const ModeSharedPtr &m);
352 
353  ModeSharedPtr allocMode(uint16_t mode);
354 
355  bool readState(LayerStatus &status, const LayerState &current_state);
356  bool switchMode(LayerStatus &status, uint16_t mode);
357  bool switchState(LayerStatus &status, const State402::InternalState &target);
358 
359  std::atomic<uint16_t> status_word_;
360  uint16_t control_word_;
361  boost::mutex cw_mutex_;
362  std::atomic<bool> start_fault_reset_;
363  std::atomic<State402::InternalState> target_state_;
364 
365 
367 
368  boost::mutex map_mutex_;
369  std::unordered_map<uint16_t, ModeSharedPtr > modes_;
370  typedef std::function<void()> AllocFuncType;
371  std::unordered_map<uint16_t, AllocFuncType> mode_allocators_;
372 
374  uint16_t mode_id_;
375  boost::condition_variable mode_cond_;
376  boost::mutex mode_mutex_;
378  const bool monitor_mode_;
379  const boost::chrono::seconds state_switch_timeout_;
380 
386 };
387 
388 }
389 
390 #endif
canopen::HomingMode::HomingMode
HomingMode()
Definition: motor.h:262
canopen::MotorBase::Profiled_Torque
@ Profiled_Torque
Definition: base.h:19
canopen::State402::SW_Internal_limit
@ SW_Internal_limit
Definition: motor.h:31
canopen::ProfiledPositionMode::MASK_Error
@ MASK_Error
Definition: motor.h:219
canopen::ProfiledPositionMode::CW_Blending
@ CW_Blending
Definition: motor.h:224
canopen::Motor402::handleWrite
virtual void handleWrite(LayerStatus &status, const LayerState &current_state)
Definition: motor.cpp:414
canopen::Command402::Op::Op
Op(uint16_t to_set, uint16_t to_reset)
Definition: motor.h:64
canopen::DefaultHomingMode::status_
uint16_t status_
Definition: motor.h:272
canopen::State402::SW_Switch_on_disabled
@ SW_Switch_on_disabled
Definition: motor.h:26
canopen::MotorBase::MotorBaseSharedPtr
std::shared_ptr< MotorBase > MotorBaseSharedPtr
Definition: base.h:33
canopen::State402::State402
State402()
Definition: motor.h:53
canopen::Command402::Op::to_set_
uint16_t to_set_
Definition: motor.h:62
canopen::ModeTargetHelper::has_target_
std::atomic< bool > has_target_
Definition: motor.h:144
canopen::HomingMode::CW_StartHoming
@ CW_StartHoming
Definition: motor.h:259
canopen::HomingMode::CW_bits
CW_bits
Definition: motor.h:258
canopen::WordAccessor::get
uint16_t get() const
Definition: motor.h:121
canopen::Motor402::op_mode_
canopen::ObjectStorage::Entry< int8_t > op_mode_
Definition: motor.h:384
canopen::ProfiledPositionMode::target_position_
canopen::ObjectStorage::Entry< int32_t > target_position_
Definition: motor.h:212
canopen::Motor402::monitor_mode_
const bool monitor_mode_
Definition: motor.h:378
canopen::State402::mutex_
boost::mutex mutex_
Definition: motor.h:56
canopen::State402::Not_Ready_To_Switch_On
@ Not_Ready_To_Switch_On
Definition: motor.h:41
canopen::Motor402::start_fault_reset_
std::atomic< bool > start_fault_reset_
Definition: motor.h:362
canopen::WordAccessor::operator=
WordAccessor & operator=(const uint16_t &val)
Definition: motor.h:122
canopen::Command402::CW_Quick_Stop
@ CW_Quick_Stop
Definition: motor.h:88
canopen::WordAccessor::set
bool set(uint8_t bit)
Definition: motor.h:110
canopen::Command402::CW_Manufacturer_specific3
@ CW_Manufacturer_specific3
Definition: motor.h:100
canopen::Motor402::control_word_entry_
canopen::ObjectStorage::Entry< uint16_t > control_word_entry_
Definition: motor.h:382
canopen::Mode::Mode
Mode(uint16_t id)
Definition: motor.h:132
canopen::Motor402::Allocator::allocate
virtual MotorBaseSharedPtr allocate(const std::string &name, ObjectStorageSharedPtr storage, const canopen::Settings &settings)
Definition: plugin.cpp:4
canopen::LayerStatus::error
const void error(const std::string &r)
canopen::Mode::setTarget
virtual bool setTarget(const double &val)
Definition: motor.h:137
canopen::Motor402::isModeSupported
virtual bool isModeSupported(uint16_t mode)
Definition: motor.cpp:252
canopen::WordAccessor::get
bool get(uint8_t bit) const
Definition: motor.h:120
canopen::Motor402::AllocFuncType
std::function< void()> AllocFuncType
Definition: motor.h:370
canopen::Command402::Op
Definition: motor.h:61
canopen::ModeTargetHelper::hasTarget
bool hasTarget()
Definition: motor.h:148
canopen::DefaultHomingMode::cond_
boost::condition_variable cond_
Definition: motor.h:271
canopen::ModeTargetHelper::start
virtual bool start()
Definition: motor.h:180
canopen::Motor402::mode_mutex_
boost::mutex mode_mutex_
Definition: motor.h:376
canopen::MotorBase::Allocator
Definition: base.h:35
canopen::State402::Unknown
@ Unknown
Definition: motor.h:39
canopen::Motor402::registerDefaultModes
virtual void registerDefaultModes(ObjectStorageSharedPtr storage)
Definition: motor.h:324
canopen::ModeTargetHelper::target_
T target_
Definition: motor.h:143
canopen.h
canopen::State402::SW_Manufacturer_specific0
@ SW_Manufacturer_specific0
Definition: motor.h:28
canopen::DefaultHomingMode::read
virtual bool read(const uint16_t &sw)
Definition: motor.cpp:172
canopen::DefaultHomingMode::mutex_
boost::mutex mutex_
Definition: motor.h:270
canopen::MotorBase::Velocity
@ Velocity
Definition: base.h:17
canopen::ProfiledPositionMode::last_target_
double last_target_
Definition: motor.h:213
canopen::MotorBase::Homing
@ Homing
Definition: base.h:21
canopen::Motor402::map_mutex_
boost::mutex map_mutex_
Definition: motor.h:368
canopen::State402::SW_Remote
@ SW_Remote
Definition: motor.h:29
canopen::State402::Ready_To_Switch_On
@ Ready_To_Switch_On
Definition: motor.h:43
canopen::State402::SW_Voltage_enabled
@ SW_Voltage_enabled
Definition: motor.h:24
canopen::State402::waitForNewState
bool waitForNewState(const time_point &abstime, InternalState &state)
Definition: motor.cpp:72
canopen::Motor402::isModeSupportedByDevice
virtual bool isModeSupportedByDevice(uint16_t mode)
Definition: motor.cpp:268
canopen::ProfiledTorqueMode
ModeForwardHelper< MotorBase::Profiled_Torque, int16_t, 0x6071, 0, 0 > ProfiledTorqueMode
Definition: motor.h:204
canopen::CyclicSynchronousPositionMode
ModeForwardHelper< MotorBase::Cyclic_Synchronous_Position, int32_t, 0x607A, 0, 0 > CyclicSynchronousPositionMode
Definition: motor.h:205
canopen::Layer::LayerState
LayerState
canopen::Command402::transitions_
static const TransitionTable transitions_
Definition: motor.h:80
base.h
canopen::HomingMode::SW_Error
@ SW_Error
Definition: motor.h:256
canopen::ProfiledVelocityMode
ModeForwardHelper< MotorBase::Profiled_Velocity, int32_t, 0x60FF, 0, 0 > ProfiledVelocityMode
Definition: motor.h:203
canopen::Command402::Op::operator()
void operator()(uint16_t &val) const
Definition: motor.h:65
canopen::Command402::CW_Operation_mode_specific2
@ CW_Operation_mode_specific2
Definition: motor.h:92
canopen::DefaultHomingMode::SW_masks
SW_masks
Definition: motor.h:274
canopen::Command402::CW_Operation_mode_specific1
@ CW_Operation_mode_specific1
Definition: motor.h:91
canopen::Command402::CW_Fault_Reset
@ CW_Fault_Reset
Definition: motor.h:93
canopen::State402::Switched_On
@ Switched_On
Definition: motor.h:44
canopen::time_point
boost::chrono::high_resolution_clock::time_point time_point
canopen::MotorBase::Cyclic_Synchronous_Position
@ Cyclic_Synchronous_Position
Definition: base.h:23
canopen::ModeForwardHelper::target_entry_
canopen::ObjectStorage::Entry< TYPE > target_entry_
Definition: motor.h:184
canopen::ProfiledPositionMode::MASK_Acknowledged
@ MASK_Acknowledged
Definition: motor.h:218
canopen::MotorBase
Definition: base.h:9
canopen::Motor402::state_handler_
State402 state_handler_
Definition: motor.h:366
canopen::Motor402::switching_state_
const State402::InternalState switching_state_
Definition: motor.h:377
canopen::ModeTargetHelper::setTarget
virtual bool setTarget(const double &val)
Definition: motor.h:150
canopen::Command402::nextStateForEnabling
static State402::InternalState nextStateForEnabling(State402::InternalState state)
Definition: motor.cpp:119
canopen::WordAccessor::word_
uint16_t & word_
Definition: motor.h:107
canopen::Command402::Op::to_reset_
uint16_t to_reset_
Definition: motor.h:63
canopen::DefaultHomingMode::error
bool error(canopen::LayerStatus &status, const std::string &msg)
Definition: motor.h:279
canopen::DefaultHomingMode::start
virtual bool start()
Definition: motor.cpp:168
canopen::State402::Start
@ Start
Definition: motor.h:40
canopen::Motor402::supported_drive_modes_
canopen::ObjectStorage::Entry< uint32_t > supported_drive_modes_
Definition: motor.h:385
canopen::Command402::CW_Enable_Voltage
@ CW_Enable_Voltage
Definition: motor.h:87
canopen::State402::SW_Operation_mode_specific1
@ SW_Operation_mode_specific1
Definition: motor.h:33
canopen::ProfiledPositionMode::CW_bits
CW_bits
Definition: motor.h:221
canopen::WordAccessor
Definition: motor.h:106
canopen::ModeSharedPtr
std::shared_ptr< Mode > ModeSharedPtr
Definition: motor.h:140
canopen::State402::Fault_Reaction_Active
@ Fault_Reaction_Active
Definition: motor.h:47
canopen::Motor402
Definition: motor.h:291
canopen::Command402::CW_Switch_On
@ CW_Switch_On
Definition: motor.h:86
canopen::Motor402::getMode
virtual uint16_t getMode()
Definition: motor.cpp:263
canopen::Command402::CW_Manufacturer_specific1
@ CW_Manufacturer_specific1
Definition: motor.h:98
canopen::State402::SW_Manufacturer_specific1
@ SW_Manufacturer_specific1
Definition: motor.h:34
canopen::DefaultHomingMode::executeHoming
virtual bool executeHoming(canopen::LayerStatus &status)
Definition: motor.cpp:190
canopen::Motor402::setTarget
virtual bool setTarget(double val)
Definition: motor.cpp:245
canopen::Motor402::Motor402
Motor402(const std::string &name, ObjectStorageSharedPtr storage, const canopen::Settings &settings)
Definition: motor.h:295
canopen::WordAccessor::reset
bool reset(uint8_t bit)
Definition: motor.h:115
canopen::State402::SW_Fault
@ SW_Fault
Definition: motor.h:23
canopen::Motor402::handleRecover
virtual void handleRecover(LayerStatus &status)
Definition: motor.cpp:534
canopen::DefaultHomingMode::DefaultHomingMode
DefaultHomingMode(ObjectStorageSharedPtr storage)
Definition: motor.h:281
canopen::MotorBase::Cyclic_Synchronous_Torque
@ Cyclic_Synchronous_Torque
Definition: base.h:25
canopen::Mode::~Mode
virtual ~Mode()
Definition: motor.h:138
ROSCANOPEN_ERROR
#define ROSCANOPEN_ERROR(name, args)
canopen::Motor402::control_word_
uint16_t control_word_
Definition: motor.h:360
canopen::DefaultHomingMode::MASK_Error
@ MASK_Error
Definition: motor.h:277
canopen::DefaultHomingMode::homing_method_
canopen::ObjectStorage::Entry< int8_t > homing_method_
Definition: motor.h:267
canopen::Mode::OpModeAccesser
WordAccessor<(1<< Command402::CW_Operation_mode_specific0)|(1<< Command402::CW_Operation_mode_specific1)|(1<< Command402::CW_Operation_mode_specific2)|(1<< Command402::CW_Operation_mode_specific3)> OpModeAccesser
Definition: motor.h:133
canopen::State402
Definition: motor.h:16
canopen::DefaultHomingMode::MASK_Attained
@ MASK_Attained
Definition: motor.h:276
canopen::ProfiledPositionMode::SW_masks
SW_masks
Definition: motor.h:216
canopen::Motor402::mode_cond_
boost::condition_variable mode_cond_
Definition: motor.h:375
canopen::Motor402::switchMode
bool switchMode(LayerStatus &status, uint16_t mode)
Definition: motor.cpp:291
canopen::Motor402::switchState
bool switchState(LayerStatus &status, const State402::InternalState &target)
Definition: motor.cpp:359
canopen::Motor402::status_word_
std::atomic< uint16_t > status_word_
Definition: motor.h:359
canopen::State402::SW_Quick_stop
@ SW_Quick_stop
Definition: motor.h:25
canopen::Motor402::Allocator
Definition: motor.h:336
canopen::State402::Quick_Stop_Active
@ Quick_Stop_Active
Definition: motor.h:46
canopen::Mode::write
virtual bool write(OpModeAccesser &cw)=0
canopen::MotorBase::Cyclic_Synchronous_Velocity
@ Cyclic_Synchronous_Velocity
Definition: base.h:24
canopen::Motor402::target_state_
std::atomic< State402::InternalState > target_state_
Definition: motor.h:363
canopen::Mode::mode_id_
const uint16_t mode_id_
Definition: motor.h:131
canopen::ProfiledPositionMode::MASK_Reached
@ MASK_Reached
Definition: motor.h:217
canopen::Motor402::op_mode_display_
canopen::ObjectStorage::Entry< int8_t > op_mode_display_
Definition: motor.h:383
canopen::HomingMode
Definition: motor.h:252
canopen::WordAccessor::WordAccessor
WordAccessor(uint16_t &word)
Definition: motor.h:109
canopen::CyclicSynchronousTorqueMode
ModeForwardHelper< MotorBase::Cyclic_Synchronous_Torque, int16_t, 0x6071, 0, 0 > CyclicSynchronousTorqueMode
Definition: motor.h:207
canopen::DefaultHomingMode::write
virtual bool write(OpModeAccesser &cw)
Definition: motor.cpp:181
canopen::Motor402::handleRead
virtual void handleRead(LayerStatus &status, const LayerState &current_state)
Definition: motor.cpp:409
canopen::Motor402::cw_mutex_
boost::mutex cw_mutex_
Definition: motor.h:361
canopen::State402::SW_Target_reached
@ SW_Target_reached
Definition: motor.h:30
canopen::Motor402::status_word_entry_
canopen::ObjectStorage::Entry< uint16_t > status_word_entry_
Definition: motor.h:381
canopen::State402::SW_Warning
@ SW_Warning
Definition: motor.h:27
canopen::State402::Switch_On_Disabled
@ Switch_On_Disabled
Definition: motor.h:42
canopen::Mode::start
virtual bool start()=0
canopen::Command402::TransitionTable::TransitionTable
TransitionTable()
Definition: motor.cpp:82
canopen::Command402::setTransition
static bool setTransition(uint16_t &cw, const State402::InternalState &from, const State402::InternalState &to, State402::InternalState *next)
Definition: motor.cpp:145
canopen
canopen::State402::getState
InternalState getState()
Definition: motor.cpp:7
canopen::Command402::CW_Manufacturer_specific0
@ CW_Manufacturer_specific0
Definition: motor.h:97
canopen::Motor402::handleDiag
virtual void handleDiag(LayerReport &report)
Definition: motor.cpp:438
canopen::Command402::CW_Halt
@ CW_Halt
Definition: motor.h:94
canopen::Mode
Definition: motor.h:129
canopen::ProfiledPositionMode::sw_
uint16_t sw_
Definition: motor.h:214
canopen::Command402::TransitionTable::get
const Op & get(const State402::InternalState &from, const State402::InternalState &to) const
Definition: motor.h:76
canopen::MotorBase::Interpolated_Position
@ Interpolated_Position
Definition: base.h:22
canopen::DefaultHomingMode
Definition: motor.h:266
canopen::ModeTargetHelper::getTarget
T getTarget()
Definition: motor.h:149
canopen::Motor402::enterModeAndWait
virtual bool enterModeAndWait(uint16_t mode)
Definition: motor.cpp:254
canopen::MotorBase::Profiled_Position
@ Profiled_Position
Definition: base.h:16
canopen::Motor402::allocMode
ModeSharedPtr allocMode(uint16_t mode)
Definition: motor.cpp:279
canopen::ModeForwardHelper::ModeForwardHelper
ModeForwardHelper(ObjectStorageSharedPtr storage)
Definition: motor.h:186
canopen::Command402::CW_Operation_mode_specific3
@ CW_Operation_mode_specific3
Definition: motor.h:95
canopen::State402::SW_Operation_mode_specific0
@ SW_Operation_mode_specific0
Definition: motor.h:32
canopen::Motor402::state_switch_timeout_
const boost::chrono::seconds state_switch_timeout_
Definition: motor.h:379
canopen::DefaultHomingMode::MASK_Reached
@ MASK_Reached
Definition: motor.h:275
canopen::ProfiledPositionMode
Definition: motor.h:211
canopen::ProfiledPositionMode::CW_NewPoint
@ CW_NewPoint
Definition: motor.h:222
canopen::Command402::TransitionTable
Definition: motor.h:69
canopen::ObjectStorage::Entry
canopen::Command402::CW_Operation_mode_specific0
@ CW_Operation_mode_specific0
Definition: motor.h:90
canopen::Command402::CW_Manufacturer_specific4
@ CW_Manufacturer_specific4
Definition: motor.h:101
canopen::State402::SW_Manufacturer_specific2
@ SW_Manufacturer_specific2
Definition: motor.h:35
canopen::ModeForwardHelper::write
virtual bool write(Mode::OpModeAccesser &cw)
Definition: motor.h:191
canopen::HomingMode::SW_bits
SW_bits
Definition: motor.h:254
canopen::MotorBase::Profiled_Velocity
@ Profiled_Velocity
Definition: base.h:18
canopen::State402::Operation_Enable
@ Operation_Enable
Definition: motor.h:45
canopen::State402::read
InternalState read(uint16_t sw)
Definition: motor.cpp:12
canopen::State402::StatusWord
StatusWord
Definition: motor.h:18
canopen::Motor402::mode_id_
uint16_t mode_id_
Definition: motor.h:374
canopen::Motor402::handleShutdown
virtual void handleShutdown(LayerStatus &status)
Definition: motor.cpp:514
canopen::ModeTargetHelper::ModeTargetHelper
ModeTargetHelper(uint16_t mode)
Definition: motor.h:147
canopen::Command402::Command402
Command402()
canopen::Layer::name
const std::string name
canopen::CyclicSynchronousVelocityMode
ModeForwardHelper< MotorBase::Cyclic_Synchronous_Velocity, int32_t, 0x60FF, 0, 0 > CyclicSynchronousVelocityMode
Definition: motor.h:206
canopen::Motor402::registerMode
bool registerMode(uint16_t mode, Args &&... args)
Definition: motor.h:318
canopen::ProfiledPositionMode::read
virtual bool read(const uint16_t &sw)
Definition: motor.h:230
canopen::ProfiledPositionMode::start
virtual bool start()
Definition: motor.h:229
canopen::ProfiledPositionMode::CW_Immediate
@ CW_Immediate
Definition: motor.h:223
canopen::Motor402::readState
bool readState(LayerStatus &status, const LayerState &current_state)
Definition: motor.cpp:379
canopen::State402::state_
InternalState state_
Definition: motor.h:57
canopen::State402::SW_Operation_enabled
@ SW_Operation_enabled
Definition: motor.h:22
canopen::Motor402::selected_mode_
ModeSharedPtr selected_mode_
Definition: motor.h:373
canopen::HomingMode::executeHoming
virtual bool executeHoming(canopen::LayerStatus &status)=0
canopen::ProfiledPositionMode::ProfiledPositionMode
ProfiledPositionMode(ObjectStorageSharedPtr storage)
Definition: motor.h:226
canopen::ModeTargetHelper
Definition: motor.h:142
canopen::Command402::ControlWord
ControlWord
Definition: motor.h:84
canopen::Motor402::modes_
std::unordered_map< uint16_t, ModeSharedPtr > modes_
Definition: motor.h:369
canopen::Command402
Definition: motor.h:60
canopen::ModeForwardHelper
Definition: motor.h:183
canopen::Command402::CW_Enable_Operation
@ CW_Enable_Operation
Definition: motor.h:89
canopen::LayerStatus
canopen::State402::SW_Ready_To_Switch_On
@ SW_Ready_To_Switch_On
Definition: motor.h:20
canopen::State402::SW_Switched_On
@ SW_Switched_On
Definition: motor.h:21
canopen::DefaultHomingMode::execute_
std::atomic< bool > execute_
Definition: motor.h:268
canopen::State402::InternalState
InternalState
Definition: motor.h:37
canopen::HomingMode::SW_Attained
@ SW_Attained
Definition: motor.h:255
canopen::Motor402::handleHalt
virtual void handleHalt(LayerStatus &status)
Definition: motor.cpp:518
canopen::ProfiledPositionMode::write
virtual bool write(OpModeAccesser &cw)
Definition: motor.h:231
canopen::Mode::read
virtual bool read(const uint16_t &sw)=0
canopen::ModeForwardHelper::read
virtual bool read(const uint16_t &sw)
Definition: motor.h:190
canopen::Command402::CW_Manufacturer_specific2
@ CW_Manufacturer_specific2
Definition: motor.h:99
canopen::State402::Fault
@ Fault
Definition: motor.h:48
canopen::Motor402::mode_allocators_
std::unordered_map< uint16_t, AllocFuncType > mode_allocators_
Definition: motor.h:371
canopen::ObjectStorageSharedPtr
ObjectStorage::ObjectStorageSharedPtr ObjectStorageSharedPtr
canopen::Motor402::handleInit
virtual void handleInit(LayerStatus &status)
Definition: motor.cpp:471
ROSCANOPEN_WARN
#define ROSCANOPEN_WARN(name, args)
canopen::LayerStatus
canopen::LayerReport
canopen::State402::cond_
boost::condition_variable cond_
Definition: motor.h:55
canopen::Command402::TransitionTable::transitions_
boost::container::flat_map< std::pair< State402::InternalState, State402::InternalState >, Op > transitions_
Definition: motor.h:70
canopen::Command402::TransitionTable::add
void add(const State402::InternalState &from, const State402::InternalState &to, Op op)
Definition: motor.h:71


canopen_402
Author(s): Thiago de Freitas , Mathias Lüdtke
autogenerated on Wed Mar 2 2022 00:52:28