EtherCAT Control Framework v0.9
Implementation of EtherCAT protocol using IgH EtherCAT library for robot controller.
ecat_definitions.hpp File Reference

Writes desired operational mode, to slave in specified index via SDO. More...

#include <iostream>
#include <cstring>
#include <limits.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#include <sys/mman.h>
#include <malloc.h>
#include <sched.h>
#include <chrono>
#include <memory>
#include "ecrt.h"
#include "object_dictionary.hpp"
Include dependency graph for ecat_definitions.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  Controller
 Opens, reads from and publishes joystick events. More...
 
struct  OffsetPDO
 offset for PDO entries to register PDOs. More...
 
struct  ReceivedData
 Received feedback data from slaves. More...
 
struct  SDO_data
 CKim - SDO_data Structure holding all data needed to send/receive an SDO object. More...
 
struct  SdoRequest
 EtherCAT SDO request structure for configuration phase. More...
 
struct  ProfilePosParam
 Parameters that should be specified in position mode. More...
 
struct  CSPositionModeParam
 Struct contains configuration parameters for cyclic sync. position mode. More...
 
struct  VelControlParam
 Struct containing 'velocity control parameter set' 0x30A2 Has 4 sub index. Default values are from EPOS4 firmware manual. More...
 
struct  CSVelocityModeParam
 Struct contains configuration parameters for cyclic sync. velocity mode. More...
 
struct  CSTorqueModeParam
 Struct contains configuration parameters for cyclic sync. torque mode. More...
 
struct  HomingParam
 Parameters that should be specified in homing mode. More...
 
struct  ProfileVelocityParam
 Parameters that should be specified in velocity mode. More...
 

Macros

#define TEST_BIT(NUM, N)   ((NUM & (1 << N))>>N)
 
#define SET_BIT(NUM, N)   (NUM | (1 << N))
 
#define RESET_BIT(NUM, N)   (NUM & ~(1 << N))
 
#define TIMESPEC2NS(T)   ((uint64_t) (T).tv_sec * g_kNsPerSec + (T).tv_nsec)
 Convert timespec struct to nanoseconds *‍/. More...
 
#define DIFF_NS(A, B)   (((B).tv_sec - (A).tv_sec) * g_kNsPerSec + (B).tv_nsec - (A).tv_nsec)
 
#define CLOCK_TO_USE   CLOCK_MONOTONIC
 Using Monotonic system-wide clock. *‍/. More...
 

Enumerations

enum  OpMode {
  kProfilePosition = 1 , kProfileVelocity = 3 , kProfileTorque = 4 , kHoming = 6 ,
  kInterpolatedPosition = 7 , kCSPosition = 8 , kCSVelocity = 9 , kCSTorque = 10
}
 Motor operation modes. More...
 
enum  MotorStates {
  kReadyToSwitchOn = 1 , kSwitchedOn , kOperationEnabled , kFault ,
  kVoltageEnabled , kQuickStop , kSwitchOnDisabled , kWarning ,
  kRemote , kTargetReached , kInternalLimitActivate
}
 CIA 402 state machine motor states. More...
 
enum  ErrorRegisterBits {
  kGenericError = 0 , kCurrentError , kVoltageError , kTemperatureError ,
  kCommunicationError , kDeviceProfileSpecificError , kReserved , kMotionError
}
 
enum  SensorConfig {
  kSensor1TypeNone =0 , kSensor1TypeDigitalIncrementalEncoder1 =1 , kSensor2TypeNone =0 , kSensor2TypeDigitalIncrementalEncoder2 =256 ,
  kSensor2TypeAnalogIncrementalEncoderSinCos =512 , kSensor2TypeSSIAbsoluteEncoder =768 , kSensor3TypeNone =0 , kSensor3TypeDigitalHallSensor =131072
}
 Sensor Configuration for motor for more information. More...
 
enum  ControlStructureBits {
  kCurrentControlStructure = 0 , kVelocityControlStructure = 4 , kPositionControlStructure = 8 , kGearLocation = 12 ,
  kProcessValueReference = 14 , kMainSensor = 16 , kAuxiliarySensor = 20 , kMountingPositionSensor1 = 24 ,
  kMountingPositionSensor2 = 26 , kMountingPositionSensor3 = 28
}
 Control structure configuration for control mechanism to select sensor structure specific to hardware. More...
 
enum  ErrorType {
  NO_ERROR = 0 , GENERIC_ERROR = 0x1000 , GENERIC_INIT_ERROR = 0x1080 , GENERIC_INIT_ERROR_1 = 0x1081 ,
  GENERIC_INIT_ERROR_2 = 0x1082 , GENERIC_INIT_ERROR_3 = 0x1083 , GENERIC_INIT_ERROR_4 = 0x1084 , GENERIC_INIT_ERROR_5 = 0x1085 ,
  GENERIC_INIT_ERROR_6 = 0x1086 , GENERIC_INIT_ERROR_7 = 0x1087 , GENERIC_INIT_ERROR_8 = 0x1088 , FIRMWARE_INCOMPATIBLITY_ERROR = 0x1090 ,
  OVER_CURRENT_ERROR = 0x2310 , POWER_STAGE_PROTECTION_ERROR = 0x2320 , OVER_VOLTAGE_ERROR = 0x3210 , UNDER_VOLTAGE_ERROR = 0x3220 ,
  THERMAL_OVERLOAD_ERROR = 0x4210 , THERMAL_MOTOR_OVERLOAD_ERRROR = 0x4380 , LOGIC_SUPPLY_TOO_LOW_ERROR = 0x5113 , HARDWARE_DEFECT_ERROR = 0x5280 ,
  HARDWARE_INCOMPATIBLITY_ERROR = 0x5281 , HARDWARE_ERROR = 0x5480 , HARDWARE_ERROR_1 = 0x5481 , HARDWARE_ERROR_2 = 0x5482 ,
  HARDWARE_ERROR_3 = 0x5483 , SIGN_OF_LIFE_ERROR = 0x6080 , EXTENSION_1_WATCHDOG_ERROR = 0x6081 , INTERNAL_SOFTWARE_ERROR = 0x6180 ,
  SOFTWARE_PARAMETER_ERROR = 0x6320 , PERSISTENT_PARAMETER_CORRUPT_ERROR = 0x6380 , POSITION_SENSOR_ERROR = 0x7320 , POSITION_SENSOR_BREACH_ERROR = 0x7380 ,
  POSITION_SENSOR_RESOLUTION_ERROR = 0x7381 , POSITION_SENSOR_INDEX_ERROR = 0x7382 , HALL_SENSOR_ERROR = 0x7388 , HALL_SENSOR_NOT_FOUND_ERROR = 0x7389 ,
  HALL_ANGLE_DETECTION_ERROR = 0x738A , SSI_SENSOR_ERROR = 0x738C , SSI_SENSOR_FRAME_ERROR = 0x738D , MISSING_MAIN_SENSOR_ERROR = 0x7390 ,
  MISSING_COMMUTATION_SENSOR_ERROR = 0x7391 , MAIN_SENSOR_DIRECTION_ERROR = 0x7392 , ETHERCAT_COMMUNCATION_ERROR = 0x8180 , ETHERCAT_INITIALIZATION_ERROR = 0x8181 ,
  ETHERCAT_RX_QUEUE_OVERFLOW_ERROR = 0x8182 , ETHERCAT_COMMUNICATION_ERROR_INTERNAL = 0x8183 , ETHERCAT_COMMUNICATION_CYCLE_TIME_ERROR = 0x8184 , ETHERCAT_PDO_COMMUNICATION_ERROR = 0x8280 ,
  ETHERCAT_SDO_COMMUNICATION_ERROR = 0x8281 , FOLLOWING_ERROR = 0x8611 , NEGATIVE_LIMIT_SWITCH_ERROR = 0x8A80 , POSITIVE_LIMIT_SWITCH_ERROR = 0x8A81 ,
  SOFTWARE_POSITION_LIMIT_ERROR = 0x8A82 , STO_ERROR = 0x8A88 , SYSTEM_OVERLOADED_ERROR = 0xFF01 , WATCHDOG_ERROR = 0xFF02 ,
  SYSTEM_PEAK_OVERLOADED_ERROR = 0XFF0B , CONTROLLER_GAIN_ERROR = 0xFF10 , AUTO_TUNING_INDENTIFICATION_ERROR = 0xFF11 , AUTO_TUNING_CURRENT_LIMIT_ERROR = 0xFF12 ,
  AUTO_TUNING_IDENTIFICATION_CURRENT_ERROR = 0xFF13 , AUTO_TUNING_DATA_SAMPLING_ERROR = 0xFF14 , AUTO_TUNING_SAMPLE_MISMATCH_ERROR = 0xFF15 , AUTO_TUNING_PARAMETER_ERROR = 0xFF16 ,
  AUTO_TUNING_AMPLITUDE_MISMATCH_ERROR = 0xFF17 , AUTO_TUNING_TIMEOUT_ERROR = 0xFF19 , AUTO_TUNING_STAND_STILL_ERROR = 0xFF20 , AUTO_TUNING_TORQUE_INVALID_ERROR = 0xFF21 ,
  AUTO_TUNING_MAX_SYSTEM_SPEED_ERROR = 0XFF22 , AUTO_TUNING_MOTOR_CONNECTION_ERROR = 0xFF23 , AUTO_TUNING_SENSOR_SIGNAL_ERROR = 0XFF24
}
 

Functions

struct timespec timespec_add (struct timespec time1, struct timespec time2)
 Add two timespec struct. More...
 
static std::string GetErrorMessage (const int &err_code)
 

Variables

const uint32_t g_kNsPerSec = 1000000000
 Object dictionary paramaters PDO index and default values in here. More...
 
static volatile sig_atomic_t sig = 1
 
ec_master_t * g_master
 Extern global variable declaration. More...
 
ec_master_state_t g_master_state
 
ec_domain_t * g_master_domain
 
ec_domain_state_t g_master_domain_state
 
struct timespec g_sync_timer
 
uint32_t g_sync_ref_counter
 
static constexpr uint8_t PRIMARY_STATE_UNKNOWN
 
static constexpr uint8_t PRIMARY_STATE_UNCONFIGURED
 
static constexpr uint8_t PRIMARY_STATE_INACTIVE
 
static constexpr uint8_t PRIMARY_STATE_ACTIVE
 
static constexpr uint8_t PRIMARY_STATE_FINALIZED
 
static constexpr uint8_t TRANSITION_STATE_CONFIGURING
 
static constexpr uint8_t TRANSITION_STATE_CLEANINGUP
 
static constexpr uint8_t TRANSITION_STATE_SHUTTINGDOWN
 
static constexpr uint8_t TRANSITION_STATE_ACTIVATING
 
static constexpr uint8_t TRANSITION_STATE_DEACTIVATING
 
static constexpr uint8_t TRANSITION_STATE_ERRORPROCESSING
 

Detailed Description

Writes desired operational mode, to slave in specified index via SDO.

Parameters
indexslave index
op_modedesired operational mode.
See also
OpMode enum defined in
Returns
0 if successfull, otherwise -1.

Macro Definition Documentation

◆ CLOCK_TO_USE

#define CLOCK_TO_USE   CLOCK_MONOTONIC

Using Monotonic system-wide clock. *‍/.

◆ DIFF_NS

#define DIFF_NS (   A,
 
)    (((B).tv_sec - (A).tv_sec) * g_kNsPerSec + (B).tv_nsec - (A).tv_nsec)

◆ RESET_BIT

#define RESET_BIT (   NUM,
 
)    (NUM & ~(1 << N))

◆ SET_BIT

#define SET_BIT (   NUM,
 
)    (NUM | (1 << N))

◆ TEST_BIT

#define TEST_BIT (   NUM,
 
)    ((NUM & (1 << N))>>N)

◆ TIMESPEC2NS

#define TIMESPEC2NS (   T)    ((uint64_t) (T).tv_sec * g_kNsPerSec + (T).tv_nsec)

Convert timespec struct to nanoseconds *‍/.

Enumeration Type Documentation

◆ ControlStructureBits

Control structure configuration for control mechanism to select sensor structure specific to hardware.

See also
EPOS4-Firmware-Specification pg. 140
Enumerator
kCurrentControlStructure 

These are bit locations not values for values.

See also
EPOS4-Firmware-Specification pg. 140 !!!
kVelocityControlStructure 
kPositionControlStructure 
kGearLocation 
kProcessValueReference 
kMainSensor 
kAuxiliarySensor 
kMountingPositionSensor1 
kMountingPositionSensor2 
kMountingPositionSensor3 

◆ ErrorRegisterBits

Enumerator
kGenericError 
kCurrentError 
kVoltageError 
kTemperatureError 
kCommunicationError 
kDeviceProfileSpecificError 
kReserved 
kMotionError 

◆ ErrorType

enum ErrorType
Enumerator
NO_ERROR 
GENERIC_ERROR 
GENERIC_INIT_ERROR 
GENERIC_INIT_ERROR_1 
GENERIC_INIT_ERROR_2 
GENERIC_INIT_ERROR_3 
GENERIC_INIT_ERROR_4 
GENERIC_INIT_ERROR_5 
GENERIC_INIT_ERROR_6 
GENERIC_INIT_ERROR_7 
GENERIC_INIT_ERROR_8 
FIRMWARE_INCOMPATIBLITY_ERROR 
OVER_CURRENT_ERROR 
POWER_STAGE_PROTECTION_ERROR 
OVER_VOLTAGE_ERROR 
UNDER_VOLTAGE_ERROR 
THERMAL_OVERLOAD_ERROR 
THERMAL_MOTOR_OVERLOAD_ERRROR 
LOGIC_SUPPLY_TOO_LOW_ERROR 
HARDWARE_DEFECT_ERROR 
HARDWARE_INCOMPATIBLITY_ERROR 
HARDWARE_ERROR 
HARDWARE_ERROR_1 
HARDWARE_ERROR_2 
HARDWARE_ERROR_3 
SIGN_OF_LIFE_ERROR 
EXTENSION_1_WATCHDOG_ERROR 
INTERNAL_SOFTWARE_ERROR 
SOFTWARE_PARAMETER_ERROR 
PERSISTENT_PARAMETER_CORRUPT_ERROR 
POSITION_SENSOR_ERROR 
POSITION_SENSOR_BREACH_ERROR 
POSITION_SENSOR_RESOLUTION_ERROR 
POSITION_SENSOR_INDEX_ERROR 
HALL_SENSOR_ERROR 
HALL_SENSOR_NOT_FOUND_ERROR 
HALL_ANGLE_DETECTION_ERROR 
SSI_SENSOR_ERROR 
SSI_SENSOR_FRAME_ERROR 
MISSING_MAIN_SENSOR_ERROR 
MISSING_COMMUTATION_SENSOR_ERROR 
MAIN_SENSOR_DIRECTION_ERROR 
ETHERCAT_COMMUNCATION_ERROR 
ETHERCAT_INITIALIZATION_ERROR 
ETHERCAT_RX_QUEUE_OVERFLOW_ERROR 
ETHERCAT_COMMUNICATION_ERROR_INTERNAL 
ETHERCAT_COMMUNICATION_CYCLE_TIME_ERROR 
ETHERCAT_PDO_COMMUNICATION_ERROR 
ETHERCAT_SDO_COMMUNICATION_ERROR 
FOLLOWING_ERROR 
NEGATIVE_LIMIT_SWITCH_ERROR 
POSITIVE_LIMIT_SWITCH_ERROR 
SOFTWARE_POSITION_LIMIT_ERROR 
STO_ERROR 
SYSTEM_OVERLOADED_ERROR 
WATCHDOG_ERROR 
SYSTEM_PEAK_OVERLOADED_ERROR 
CONTROLLER_GAIN_ERROR 
AUTO_TUNING_INDENTIFICATION_ERROR 
AUTO_TUNING_CURRENT_LIMIT_ERROR 
AUTO_TUNING_IDENTIFICATION_CURRENT_ERROR 
AUTO_TUNING_DATA_SAMPLING_ERROR 
AUTO_TUNING_SAMPLE_MISMATCH_ERROR 
AUTO_TUNING_PARAMETER_ERROR 
AUTO_TUNING_AMPLITUDE_MISMATCH_ERROR 
AUTO_TUNING_TIMEOUT_ERROR 
AUTO_TUNING_STAND_STILL_ERROR 
AUTO_TUNING_TORQUE_INVALID_ERROR 
AUTO_TUNING_MAX_SYSTEM_SPEED_ERROR 
AUTO_TUNING_MOTOR_CONNECTION_ERROR 
AUTO_TUNING_SENSOR_SIGNAL_ERROR 

◆ MotorStates

CIA 402 state machine motor states.

Enumerator
kReadyToSwitchOn 
kSwitchedOn 
kOperationEnabled 
kFault 
kVoltageEnabled 
kQuickStop 
kSwitchOnDisabled 
kWarning 
kRemote 
kTargetReached 
kInternalLimitActivate 

◆ OpMode

enum OpMode

Motor operation modes.

Enumerator
kProfilePosition 
kProfileVelocity 
kProfileTorque 
kHoming 
kInterpolatedPosition 
kCSPosition 
kCSVelocity 
kCSTorque 

◆ SensorConfig

Sensor Configuration for motor for more information.

See also
EPOS4-Firmware-Specification Pg.138
Enumerator
kSensor1TypeNone 
kSensor1TypeDigitalIncrementalEncoder1 
kSensor2TypeNone 
kSensor2TypeDigitalIncrementalEncoder2 
kSensor2TypeAnalogIncrementalEncoderSinCos 
kSensor2TypeSSIAbsoluteEncoder 
kSensor3TypeNone 
kSensor3TypeDigitalHallSensor 

Function Documentation

◆ GetErrorMessage()

static std::string GetErrorMessage ( const int &  err_code)
static

◆ timespec_add()

struct timespec timespec_add ( struct timespec  time1,
struct timespec  time2 
)
inline

Add two timespec struct.

Parameters
time1Timespec struct 1
time2Timespec struct 2
Returns
Addition result

Variable Documentation

◆ g_kNsPerSec

const uint32_t g_kNsPerSec = 1000000000

Object dictionary paramaters PDO index and default values in here.

IgH EtherCAT library header file the user-space real-time interface library. IgH, EtherCAT related functions and data types.

◆ g_master

ec_master_t* g_master
extern

Extern global variable declaration.

◆ g_master_domain

ec_domain_t* g_master_domain
extern

◆ g_master_domain_state

ec_domain_state_t g_master_domain_state
extern

◆ g_master_state

ec_master_state_t g_master_state
extern

◆ g_sync_ref_counter

uint32_t g_sync_ref_counter
extern

◆ g_sync_timer

struct timespec g_sync_timer
extern

◆ PRIMARY_STATE_ACTIVE

constexpr uint8_t PRIMARY_STATE_ACTIVE
staticconstexpr
Initial value:
=
3u

◆ PRIMARY_STATE_FINALIZED

constexpr uint8_t PRIMARY_STATE_FINALIZED
staticconstexpr
Initial value:
=
4u

◆ PRIMARY_STATE_INACTIVE

constexpr uint8_t PRIMARY_STATE_INACTIVE
staticconstexpr
Initial value:
=
2u

◆ PRIMARY_STATE_UNCONFIGURED

constexpr uint8_t PRIMARY_STATE_UNCONFIGURED
staticconstexpr
Initial value:
=
1u

◆ PRIMARY_STATE_UNKNOWN

constexpr uint8_t PRIMARY_STATE_UNKNOWN
staticconstexpr
Initial value:
=
0u

◆ sig

volatile sig_atomic_t sig = 1
static

◆ TRANSITION_STATE_ACTIVATING

constexpr uint8_t TRANSITION_STATE_ACTIVATING
staticconstexpr
Initial value:
=
13u

◆ TRANSITION_STATE_CLEANINGUP

constexpr uint8_t TRANSITION_STATE_CLEANINGUP
staticconstexpr
Initial value:
=
11u

◆ TRANSITION_STATE_CONFIGURING

constexpr uint8_t TRANSITION_STATE_CONFIGURING
staticconstexpr
Initial value:
=
10u

◆ TRANSITION_STATE_DEACTIVATING

constexpr uint8_t TRANSITION_STATE_DEACTIVATING
staticconstexpr
Initial value:
=
14u

◆ TRANSITION_STATE_ERRORPROCESSING

constexpr uint8_t TRANSITION_STATE_ERRORPROCESSING
staticconstexpr
Initial value:
=
15u

◆ TRANSITION_STATE_SHUTTINGDOWN

constexpr uint8_t TRANSITION_STATE_SHUTTINGDOWN
staticconstexpr
Initial value:
=
12u