Go to the documentation of this file.    1 #ifndef CANOPEN_402_MOTOR_H 
    2 #define CANOPEN_402_MOTOR_H 
    7 #include <boost/container/flat_map.hpp> 
    9 #include <boost/numeric/conversion/cast.hpp> 
   55     boost::condition_variable 
cond_;
 
   70         boost::container::flat_map< std::pair<State402::InternalState, State402::InternalState>, 
Op > 
transitions_;
 
   72             transitions_.insert(std::make_pair(std::make_pair(from, to), op));
 
  111         uint16_t val = MASK & (1<<bit);
 
  116         uint16_t val = MASK & (1<<bit);
 
  120     bool get(uint8_t bit)
 const { 
return word_ & (1<<bit); }
 
  123         uint16_t was = 
word_;
 
  134     virtual bool start() = 0;
 
  135     virtual bool read(
const uint16_t &sw) = 0;
 
  156         using boost::numeric_cast;
 
  157         using boost::numeric::positive_overflow;
 
  158         using boost::numeric::negative_overflow;
 
  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();
 
  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();
 
  190     virtual bool read(
const uint16_t &sw) { 
return true;}
 
  193             cw = cw.
get() | CW_MASK;
 
  197             cw = cw.
get() & ~CW_MASK;
 
  284     virtual bool start();
 
  285     virtual bool read(
const uint16_t &sw);
 
  298       monitor_mode_(settings.get_optional<bool>(
"monitor_mode", true)),
 
  317     template<
typename T, 
typename ...Args>
 
  319         return mode_allocators_.insert(std::make_pair(mode,  [args..., mode, 
this](){
 
  320             if(isModeSupportedByDevice(mode)) registerMode(mode, ModeSharedPtr(new T(args...)));
 
  369     std::unordered_map<uint16_t, ModeSharedPtr > 
modes_;
 
 
virtual void handleWrite(LayerStatus &status, const LayerState ¤t_state)
Op(uint16_t to_set, uint16_t to_reset)
std::shared_ptr< MotorBase > MotorBaseSharedPtr
std::atomic< bool > has_target_
canopen::ObjectStorage::Entry< int8_t > op_mode_
canopen::ObjectStorage::Entry< int32_t > target_position_
std::atomic< bool > start_fault_reset_
WordAccessor & operator=(const uint16_t &val)
@ CW_Manufacturer_specific3
canopen::ObjectStorage::Entry< uint16_t > control_word_entry_
virtual MotorBaseSharedPtr allocate(const std::string &name, ObjectStorageSharedPtr storage, const canopen::Settings &settings)
const void error(const std::string &r)
virtual bool setTarget(const double &val)
virtual bool isModeSupported(uint16_t mode)
bool get(uint8_t bit) const
std::function< void()> AllocFuncType
boost::condition_variable cond_
virtual void registerDefaultModes(ObjectStorageSharedPtr storage)
@ SW_Manufacturer_specific0
virtual bool read(const uint16_t &sw)
bool waitForNewState(const time_point &abstime, InternalState &state)
virtual bool isModeSupportedByDevice(uint16_t mode)
ModeForwardHelper< MotorBase::Profiled_Torque, int16_t, 0x6071, 0, 0 > ProfiledTorqueMode
ModeForwardHelper< MotorBase::Cyclic_Synchronous_Position, int32_t, 0x607A, 0, 0 > CyclicSynchronousPositionMode
static const TransitionTable transitions_
ModeForwardHelper< MotorBase::Profiled_Velocity, int32_t, 0x60FF, 0, 0 > ProfiledVelocityMode
void operator()(uint16_t &val) const
@ CW_Operation_mode_specific2
@ CW_Operation_mode_specific1
boost::chrono::high_resolution_clock::time_point time_point
@ Cyclic_Synchronous_Position
canopen::ObjectStorage::Entry< TYPE > target_entry_
const State402::InternalState switching_state_
virtual bool setTarget(const double &val)
static State402::InternalState nextStateForEnabling(State402::InternalState state)
bool error(canopen::LayerStatus &status, const std::string &msg)
canopen::ObjectStorage::Entry< uint32_t > supported_drive_modes_
@ SW_Operation_mode_specific1
std::shared_ptr< Mode > ModeSharedPtr
virtual uint16_t getMode()
@ CW_Manufacturer_specific1
@ SW_Manufacturer_specific1
virtual bool executeHoming(canopen::LayerStatus &status)
virtual bool setTarget(double val)
Motor402(const std::string &name, ObjectStorageSharedPtr storage, const canopen::Settings &settings)
virtual void handleRecover(LayerStatus &status)
DefaultHomingMode(ObjectStorageSharedPtr storage)
@ Cyclic_Synchronous_Torque
#define ROSCANOPEN_ERROR(name, args)
canopen::ObjectStorage::Entry< int8_t > homing_method_
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
boost::condition_variable mode_cond_
bool switchMode(LayerStatus &status, uint16_t mode)
bool switchState(LayerStatus &status, const State402::InternalState &target)
std::atomic< uint16_t > status_word_
virtual bool write(OpModeAccesser &cw)=0
@ Cyclic_Synchronous_Velocity
std::atomic< State402::InternalState > target_state_
canopen::ObjectStorage::Entry< int8_t > op_mode_display_
WordAccessor(uint16_t &word)
ModeForwardHelper< MotorBase::Cyclic_Synchronous_Torque, int16_t, 0x6071, 0, 0 > CyclicSynchronousTorqueMode
virtual bool write(OpModeAccesser &cw)
virtual void handleRead(LayerStatus &status, const LayerState ¤t_state)
canopen::ObjectStorage::Entry< uint16_t > status_word_entry_
static bool setTransition(uint16_t &cw, const State402::InternalState &from, const State402::InternalState &to, State402::InternalState *next)
@ CW_Manufacturer_specific0
virtual void handleDiag(LayerReport &report)
const Op & get(const State402::InternalState &from, const State402::InternalState &to) const
virtual bool enterModeAndWait(uint16_t mode)
ModeSharedPtr allocMode(uint16_t mode)
ModeForwardHelper(ObjectStorageSharedPtr storage)
@ CW_Operation_mode_specific3
@ SW_Operation_mode_specific0
const boost::chrono::seconds state_switch_timeout_
@ CW_Operation_mode_specific0
@ CW_Manufacturer_specific4
@ SW_Manufacturer_specific2
virtual bool write(Mode::OpModeAccesser &cw)
InternalState read(uint16_t sw)
virtual void handleShutdown(LayerStatus &status)
ModeTargetHelper(uint16_t mode)
ModeForwardHelper< MotorBase::Cyclic_Synchronous_Velocity, int32_t, 0x60FF, 0, 0 > CyclicSynchronousVelocityMode
bool registerMode(uint16_t mode, Args &&... args)
virtual bool read(const uint16_t &sw)
bool readState(LayerStatus &status, const LayerState ¤t_state)
ModeSharedPtr selected_mode_
virtual bool executeHoming(canopen::LayerStatus &status)=0
ProfiledPositionMode(ObjectStorageSharedPtr storage)
std::unordered_map< uint16_t, ModeSharedPtr > modes_
std::atomic< bool > execute_
virtual void handleHalt(LayerStatus &status)
virtual bool write(OpModeAccesser &cw)
virtual bool read(const uint16_t &sw)=0
virtual bool read(const uint16_t &sw)
@ CW_Manufacturer_specific2
std::unordered_map< uint16_t, AllocFuncType > mode_allocators_
ObjectStorage::ObjectStorageSharedPtr ObjectStorageSharedPtr
virtual void handleInit(LayerStatus &status)
#define ROSCANOPEN_WARN(name, args)
boost::condition_variable cond_
boost::container::flat_map< std::pair< State402::InternalState, State402::InternalState >, Op > transitions_
void add(const State402::InternalState &from, const State402::InternalState &to, Op op)
canopen_402
Author(s): Thiago de Freitas 
, Mathias Lüdtke 
autogenerated on Wed Mar 2 2022 00:52:28