EtherCAT Control Framework v0.9
Implementation of EtherCAT protocol using IgH EtherCAT library for robot controller.
ecat_globals.hpp
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * $Id$
4 *
5 * Copyright (C) 2021 Veysi ADIN, UST KIST
6 *
7 * This file is part of the Wrapped IgH EtherCAT master userspace program
8 * for control applications.
9 *
10 * The Wrapped IgH EtherCAT master userspace program for control application
11 * in userspace is free software; you canredistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the
13 * Free Software Foundation; version 2 of the License.
14 *
15 * The Wrapped IgH EtherCAT master userspace program for control application
16 * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
17 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
18 * PURPOSE.
19 * See the GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with the Wrapped IgH EtherCAT master userspace program for control application.
23 * If not, see <http://www.gnu.org/licenses/>.
24 *
25 * ---
26 *
27 * The license mentioned above concerns the source code only. Using the
28 * EtherCAT technology and brand is only permitted in compliance with the
29 * industrial property and similar rights of Beckhoff Automation GmbH.
30 *
31 * Contact information: veysi.adin@kist.re.kr
32 *****************************************************************************/
33/*****************************************************************************
34 * \file ecat_globals.hpp
35 * \brief Header file for all include statements and global variables for EtherCAT
36 * communication.
37 * @note This userspace implementation is ported from ROS2 EtherCAT implementation
38 * which can be found from this link : https://github.com/veysiadn/control_ui_ws.
39 * Therefore node related naming comes from ROS2, it doesn't involve any functionality
40 * related to ROS2.
41 * This header file contains required include statements for IgH EtherCAT library,
42 * global variables (e.g. ethercat master,master_state, domain,domain_state),
43 * structs for PDO offset and recieved data from slaves,
44 * Communication period and number of slaves can be specified in here.
45 *******************************************************************************/
46#pragma once
47
48#include <iostream>
49#include <cstring>
50#include <limits.h>
51#include <stdlib.h>
52#include <pthread.h>
53#include <errno.h>
54#include <signal.h>
55#include <stdio.h>
56#include <string.h>
57#include <sys/resource.h>
58#include <sys/time.h>
59#include <sys/types.h>
60#include <unistd.h>
61#include <time.h>
62#include <sys/mman.h>
63#include <malloc.h>
64#include <sched.h>
65#include <chrono>
66#include <memory>
67#include <vector>
68/****************************************************************************/
69// IgH EtherCAT library header file the user-space real-time interface library.
70// IgH, EtherCAT related functions and data types.
71#include "ecrt.h"
72
73// Object dictionary paramaters PDO index and default values in here.
74#include "object_dictionary.hpp"
75
76/****************************************************************************/
77 /*** USER SHOULD DEFINE THIS AREAS ***/
79#define NUM_OF_SLAVES 1
80
83const uint32_t g_kNumberOfServoDrivers = 1 ;
84
87#define CUSTOM_SLAVE 0
88
90#define FREQUENCY 1000
91
93#define MEASURE_TIMING 1
95#define VELOCITY_MODE 1
97#define POSITION_MODE 0
99#define CYCLIC_POSITION_MODE 0
101#define CYCLIC_VELOCITY_MODE 0
103#define CYCLIC_TORQUE_MODE 0
105#define DISTRIBUTED_CLOCK 1
106/*****************************************************************************/
109#define GEAR_RATIO 103
111#define ENCODER_RESOLUTION 1024
112
113
114
115#define INC_PER_ROTATION GEAR_RATIO*ENCODER_RESOLUTION*4
116#define FIVE_DEGREE_CCW int(INC_PER_ROTATION/72)
117#define THIRTY_DEGREE_CCW int(INC_PER_ROTATION/12)
118
120const uint32_t g_kNsPerSec = 1000000000;
121#define PERIOD_NS (g_kNsPerSec/FREQUENCY)
122#define PERIOD_US (PERIOD_NS / 1000)
123#define PERIOD_MS (PERIOD_US / 1000)
124#if CUSTOM_SLAVE
125 #define FINAL_SLAVE (NUM_OF_SLAVES-1)
126#endif
127/****************************************************************************/
129static volatile sig_atomic_t sig = 1;
130extern ec_master_t * g_master ;
131extern ec_master_state_t g_master_state ;
132
133extern ec_domain_t * g_master_domain ;
134extern ec_domain_state_t g_master_domain_state ;
135
136extern struct timespec g_sync_timer ;
137const struct timespec g_cycle_time = {0, PERIOD_NS} ;
138extern uint32_t g_sync_ref_counter;
139
140/****************************************************************************/
141#define TEST_BIT(NUM,N) ((NUM & (1 << N))>>N)
142#define SET_BIT(NUM,N) (NUM | (1 << N))
143#define RESET_BIT(NUM,N) (NUM & ~(1 << N))
145#define TIMESPEC2NS(T) ((uint64_t) (T).tv_sec * g_kNsPerSec + (T).tv_nsec)
146#define DIFF_NS(A, B) (((B).tv_sec - (A).tv_sec) * g_kNsPerSec + (B).tv_nsec - (A).tv_nsec)
148#define CLOCK_TO_USE CLOCK_MONOTONIC
149
157inline struct timespec timespec_add(struct timespec time1, struct timespec time2)
158{
159 struct timespec result;
160
161 if ((time1.tv_nsec + time2.tv_nsec) >= g_kNsPerSec)
162 {
163 result.tv_sec = time1.tv_sec + time2.tv_sec + 1;
164 result.tv_nsec = time1.tv_nsec + time2.tv_nsec - g_kNsPerSec;
165 }
166 else
167 {
168 result.tv_sec = time1.tv_sec + time2.tv_sec;
169 result.tv_nsec = time1.tv_nsec + time2.tv_nsec;
170 }
171
172 return result;
173}
174
176typedef struct
177{
184 uint8_t red_button_;
195} Controller;
198{
203
205typedef struct {
206 uint16_t slave_position; // Position based addressing.
207 uint16_t index; // Index in Object dictionary
208 uint8_t sub_index; // Subindex in Object dictionary
209 uint32_t data ;
210 size_t data_sz; // Size
211 size_t result_sz; // Resulted data size
212 uint32_t err_code; // Error code
213} SDO_data;
215typedef enum OpMode
216{
225};
226
228typedef struct DataReceived
229{
230 uint16_t com_status;
231 std::vector<int32_t> target_pos ;
232 std::vector<int32_t> target_vel ;
233 std::vector<int16_t> target_tor ;
234 std::vector<int16_t> max_tor ;
235 std::vector<uint16_t> control_word ;
236 std::vector<OpMode> op_mode ;
237 std::vector<int32_t> vel_offset ;
238 std::vector<int16_t> tor_offset ;
239
240 std::vector<int32_t> actual_pos ;
241 std::vector<int32_t> actual_vel ;
242 std::vector<int16_t> actual_cur ;
243 std::vector<int16_t> actual_tor ;
244 std::vector<uint16_t> status_word ;
245 std::vector<uint16_t> error_code ;
246 std::vector<int8_t> op_mode_display ;
250 uint16_t pressure_sensor ;
252};
253
255typedef struct DataSent
256{
257 std::vector<int32_t> target_pos ;
258 std::vector<int32_t> target_vel ;
259 std::vector<int16_t> target_tor ;
260 std::vector<int16_t> max_tor ;
261 std::vector<uint16_t> control_word ;
263 std::vector<int32_t> vel_offset ;
264 std::vector<int16_t> tor_offset ;
266};
267
268
283
285
306 kSensor3TypeDigitalHallSensor=131072 //EC motors only
307
309
313 kCurrentControlStructure = 0, // 0-3 , 4 bits. Val : 1 - PI current controller
314 kVelocityControlStructure = 4, // 4-7, 4bits. Val : 0 - None | 1 - PI Vecolity controller (low pass filter) | 2 - PI velocity controller (observer)
315 kPositionControlStructure = 8, // 8-11 , 4bits. Val : 0 - None | 1 - PID position controller
316 kGearLocation = 12, // 1 bit Val : 0 - None | 1 - Gear Mounted on system
317 kProcessValueReference = 14, // 14-15 2 bits. Val : 0 - On motor (or undefined) | 1 - On gear
318 kMainSensor = 16, // 16-19 4 bits. Val : 0 - None | 1 - Sensor 1 | 2 - Sensor 2 | 3 - Sensor 3
319 kAuxiliarySensor = 20, // 20-23 4 bits. Val : 0 - None | 1 - Sensor 1 | 2 - Sensor 2 | 3 - Sensor 3
320 kMountingPositionSensor1 = 24, // 24-25 2 bits. Val : 0 - On motor (or undefined) | 1 - On gear
321 kMountingPositionSensor2 = 26, // 26-27 2 bits. Val : 0 - On motor (or undefined) | 1 - On gear
322 kMountingPositionSensor3 = 28, // 28-29 2 bits. Val : 0 - On motor
323};
324
326typedef struct
327{
328 uint32_t target_pos ;
329 uint32_t target_vel ;
330 uint32_t target_tor ;
332 uint32_t max_tor ;
333 uint32_t control_word ;
334 uint32_t op_mode ;
335 uint32_t profile_acc ;
336 uint32_t profile_dec ;
337 uint32_t quick_stop_dec ;
338 uint32_t profile_vel ;
339
340 uint32_t actual_pos ;
341 uint32_t pos_fol_err ;
342 uint32_t actual_vel ;
343 uint32_t actual_cur ;
344 uint32_t actual_tor ;
345 uint32_t status_word ;
347 uint32_t error_code ;
349
354} OffsetPDO ;
355
356
358typedef struct
359{
360 ec_sdo_request * profile_acc ;
361 ec_sdo_request * profile_dec ;
362 ec_sdo_request * profile_vel ;
363 ec_sdo_request * quick_stop_dec ;
364 ec_sdo_request * motion_profile_type ;
365 ec_sdo_request * max_profile_vel ;
366 ec_sdo_request * max_fol_err ;
367 ec_sdo_request * speed_for_switch_search;
368 ec_sdo_request * speed_for_zero_search;
369 ec_sdo_request * homing_acc;
370 ec_sdo_request * curr_threshold_homing;
371 ec_sdo_request * home_offset;
372 ec_sdo_request * homing_method;
373} SdoRequest ;
374
375
377typedef struct
378{
379 uint32_t profile_vel ;
380 uint32_t profile_acc ;
381 uint32_t profile_dec ;
382 uint32_t max_fol_err ;
383 uint32_t max_profile_vel ;
384 uint32_t quick_stop_dec ;
386 uint32_t p_gain;
387 uint32_t i_gain;
388 uint32_t d_gain;
390
395typedef struct
396{
404 uint32_t profile_vel ;
405 uint32_t profile_acc ;
406 uint32_t profile_dec ;
407 uint32_t max_fol_err ;
408 uint32_t max_profile_vel ;
409 uint32_t quick_stop_dec ;
412
417 typedef struct
418 {
419 uint32_t Pgain = 20000; // micro amp sec per radian
420 uint32_t Igain = 500000; // micro amp per radian
421 uint32_t FFVelgain = 0;
422 uint32_t FFAccgain = 0;
424
429typedef struct
430{
432 uint32_t quick_stop_dec ;
433 uint32_t profile_dec ;
437
442typedef struct
443{
449 uint32_t profile_vel ;
450 uint32_t profile_acc ;
451 uint32_t profile_dec ;
452 uint32_t max_profile_vel ;
453 uint32_t quick_stop_dec ;
456
458typedef struct
459{
460 uint32_t max_fol_err;
465 uint32_t homing_acc;
469 int32_t home_offset;
472
474typedef struct
475{
478 uint32_t profile_acc;
479 uint32_t profile_dec;
482
484{
538 STO_ERROR = 0x8A88,
557
558static std::string GetErrorMessage(const int& err_code)
559{
560 switch (err_code)
561 {
562 case NO_ERROR:
563 return "No error";
564 case GENERIC_ERROR:
565 return "Generic error";
567 return "Generic initialization error";
569 return "Generic initialization error 1";
571 return "Generic initialization error 2";
573 return "Generic initialization error 3";
575 return "Generic initialization error 4";
577 return "Generic initialization error 5";
579 return "Generic initialization error 6";
581 return "Generic initialization error 7";
583 return "Generic initialization error 8";
585 return "Firmware incompatibility error";
587 return "Over current error";
589 return "Power stage protection error";
591 return "Over voltage error";
593 return "Under voltage error";
595 return "Thermal overload error";
597 return "Thermal motor overload error";
599 return "Logic supply too low error";
601 return "Hardware defect error";
603 return "Hardware incompatibility error";
604 case HARDWARE_ERROR:
605 return "Hardware error";
606 case HARDWARE_ERROR_1:
607 return "Hardware error 1";
608 case HARDWARE_ERROR_2:
609 return "Hardware error 2";
610 case HARDWARE_ERROR_3:
611 return "Hardware error 3";
613 return "Sign of life error";
615 return "Extension 1 watchdog error";
617 return "Internal software error";
619 return "Software parameter error";
621 return "Persistent parameter corrupt error";
623 return "Position sensor error";
625 return "Position sensor breach error";
627 return "Position sensor resolution error";
629 return "Position sensor index error";
631 return "Hall sensor error";
633 return "Hall sensor not found error";
635 return "Hall angle detection error";
636 case SSI_SENSOR_ERROR:
637 return "SSI sensor error";
639 return "SSI sensor frame error";
641 return "Missing main sensor error";
643 return "Missing commutation sensor error";
645 return "Main sensor direction error";
647 return "Ethercat communication error";
649 return "Ethercat initialization error";
651 return "Ethercat RX queue overflow error";
653 return "Ethercat communication error internal";
655 return "Ethercat communication cycle time error";
657 return "Ethercat PDO communication error";
659 return "Ethercat SDO communication error";
660 case FOLLOWING_ERROR:
661 return "Following error";
663 return "Negative limit switch error";
665 return "Positive limit switch error";
667 return "Software position limit error";
668 case STO_ERROR :
669 return "STO error";
671 return "System overloaded error";
672 case WATCHDOG_ERROR:
673 return "Watchdog error";
675 return "System peak overloaded error";
677 return "Controller gain error";
679 return "Auto tuning identification error";
681 return "Auto tuning current limit error";
683 return "Auto tuning identification current error";
685 return "Auto tuning data sampling error";
687 return "Auto tuning sample mismatch error";
689 return "Auto tuning parameter error";
691 return "Auto tuning amplitude mismatch error";
693 return "Auto tuning timeout error";
695 return "Auto tuning stand still error";
697 return "Auto tuning torque invalid error";
699 return "Auto tuning max system speed error";
701 return "Auto tuning motor connection error";
703 return "Auto tuning sensor signal error";
704 default:
705 return "Unknown error";
706 }
707}
const struct timespec g_cycle_time
timer for DC sync .
Definition: ecat_globals.hpp:137
uint32_t g_sync_ref_counter
cycletime settings in ns.
Definition: ecat_node.cpp:12
LifeCycleState
Class states.
Definition: ecat_globals.hpp:198
@ TRANSITIONING
Definition: ecat_globals.hpp:201
@ FAILURE
Definition: ecat_globals.hpp:199
@ SUCCESS
Definition: ecat_globals.hpp:200
ec_domain_state_t g_master_domain_state
Ethercat data passing master domain.
Definition: ecat_node.cpp:10
ec_master_t * g_master
Extern global variable declaration.
Definition: ecat_node.cpp:7
SensorConfig
Definition: ecat_globals.hpp:298
@ kSensor2TypeDigitalIncrementalEncoder2
Definition: ecat_globals.hpp:302
@ kSensor3TypeNone
Definition: ecat_globals.hpp:305
@ kSensor3TypeDigitalHallSensor
Definition: ecat_globals.hpp:306
@ kSensor2TypeAnalogIncrementalEncoderSinCos
Definition: ecat_globals.hpp:303
@ kSensor2TypeNone
Definition: ecat_globals.hpp:301
@ kSensor1TypeNone
Definition: ecat_globals.hpp:299
@ kSensor2TypeSSIAbsoluteEncoder
Definition: ecat_globals.hpp:304
@ kSensor1TypeDigitalIncrementalEncoder1
Definition: ecat_globals.hpp:300
OpMode
Motor operation modes based on CiA402.
Definition: ecat_globals.hpp:216
@ kCSPosition
Definition: ecat_globals.hpp:222
@ kCSTorque
Definition: ecat_globals.hpp:224
@ kProfileTorque
Definition: ecat_globals.hpp:219
@ kProfileVelocity
Definition: ecat_globals.hpp:218
@ kInterpolatedPosition
Definition: ecat_globals.hpp:221
@ kHoming
Definition: ecat_globals.hpp:220
@ kCSVelocity
Definition: ecat_globals.hpp:223
@ kProfilePosition
Definition: ecat_globals.hpp:217
ec_domain_t * g_master_domain
EtherCAT master state.
Definition: ecat_node.cpp:9
MotorStates
CIA 402 state machine motor states.
Definition: ecat_globals.hpp:270
@ kWarning
Definition: ecat_globals.hpp:278
@ kFault
Definition: ecat_globals.hpp:274
@ kSwitchedOn
Definition: ecat_globals.hpp:272
@ kTargetReached
Definition: ecat_globals.hpp:280
@ kSwitchOnDisabled
Definition: ecat_globals.hpp:277
@ kOperationEnabled
Definition: ecat_globals.hpp:273
@ kVoltageEnabled
Definition: ecat_globals.hpp:275
@ kQuickStop
Definition: ecat_globals.hpp:276
@ kReadyToSwitchOn
Definition: ecat_globals.hpp:271
@ kRemote
Definition: ecat_globals.hpp:279
@ kInternalLimitActivate
Definition: ecat_globals.hpp:281
static volatile sig_atomic_t sig
Definition: ecat_globals.hpp:129
static std::string GetErrorMessage(const int &err_code)
Definition: ecat_globals.hpp:558
ec_master_state_t g_master_state
EtherCAT master.
Definition: ecat_node.cpp:8
const uint32_t g_kNumberOfServoDrivers
Definition: ecat_globals.hpp:83
ErrorRegisterBits
CiA402 Error register bits for error index.
Definition: ecat_globals.hpp:286
@ kTemperatureError
Definition: ecat_globals.hpp:290
@ kVoltageError
Definition: ecat_globals.hpp:289
@ kMotionError
Definition: ecat_globals.hpp:294
@ kDeviceProfileSpecificError
Definition: ecat_globals.hpp:292
@ kCurrentError
Definition: ecat_globals.hpp:288
@ kReserved
Definition: ecat_globals.hpp:293
@ kGenericError
Definition: ecat_globals.hpp:287
@ kCommunicationError
Definition: ecat_globals.hpp:291
const uint32_t g_kNsPerSec
Nanoseconds per second.
Definition: ecat_globals.hpp:120
ErrorType
Definition: ecat_globals.hpp:484
@ POSITION_SENSOR_RESOLUTION_ERROR
Definition: ecat_globals.hpp:517
@ GENERIC_INIT_ERROR_7
Definition: ecat_globals.hpp:494
@ SIGN_OF_LIFE_ERROR
Definition: ecat_globals.hpp:510
@ AUTO_TUNING_STAND_STILL_ERROR
Definition: ecat_globals.hpp:551
@ ETHERCAT_INITIALIZATION_ERROR
Definition: ecat_globals.hpp:528
@ THERMAL_OVERLOAD_ERROR
Definition: ecat_globals.hpp:501
@ AUTO_TUNING_TORQUE_INVALID_ERROR
Definition: ecat_globals.hpp:552
@ HARDWARE_ERROR
Definition: ecat_globals.hpp:506
@ POSITION_SENSOR_INDEX_ERROR
Definition: ecat_globals.hpp:518
@ PERSISTENT_PARAMETER_CORRUPT_ERROR
Definition: ecat_globals.hpp:514
@ STO_ERROR
Definition: ecat_globals.hpp:538
@ GENERIC_INIT_ERROR_6
Definition: ecat_globals.hpp:493
@ AUTO_TUNING_CURRENT_LIMIT_ERROR
Definition: ecat_globals.hpp:544
@ ETHERCAT_SDO_COMMUNICATION_ERROR
Definition: ecat_globals.hpp:533
@ ETHERCAT_COMMUNCATION_ERROR
Definition: ecat_globals.hpp:527
@ HARDWARE_ERROR_2
Definition: ecat_globals.hpp:508
@ POSITION_SENSOR_ERROR
Definition: ecat_globals.hpp:515
@ GENERIC_INIT_ERROR_4
Definition: ecat_globals.hpp:491
@ UNDER_VOLTAGE_ERROR
Definition: ecat_globals.hpp:500
@ ETHERCAT_RX_QUEUE_OVERFLOW_ERROR
Definition: ecat_globals.hpp:529
@ GENERIC_INIT_ERROR_5
Definition: ecat_globals.hpp:492
@ THERMAL_MOTOR_OVERLOAD_ERRROR
Definition: ecat_globals.hpp:502
@ ETHERCAT_COMMUNICATION_ERROR_INTERNAL
Definition: ecat_globals.hpp:530
@ OVER_VOLTAGE_ERROR
Definition: ecat_globals.hpp:499
@ HARDWARE_INCOMPATIBLITY_ERROR
Definition: ecat_globals.hpp:505
@ HARDWARE_ERROR_3
Definition: ecat_globals.hpp:509
@ MISSING_COMMUTATION_SENSOR_ERROR
Definition: ecat_globals.hpp:525
@ POWER_STAGE_PROTECTION_ERROR
Definition: ecat_globals.hpp:498
@ GENERIC_INIT_ERROR_8
Definition: ecat_globals.hpp:495
@ SOFTWARE_PARAMETER_ERROR
Definition: ecat_globals.hpp:513
@ HALL_ANGLE_DETECTION_ERROR
Definition: ecat_globals.hpp:521
@ FIRMWARE_INCOMPATIBLITY_ERROR
Definition: ecat_globals.hpp:496
@ AUTO_TUNING_INDENTIFICATION_ERROR
Definition: ecat_globals.hpp:543
@ ETHERCAT_PDO_COMMUNICATION_ERROR
Definition: ecat_globals.hpp:532
@ MAIN_SENSOR_DIRECTION_ERROR
Definition: ecat_globals.hpp:526
@ EXTENSION_1_WATCHDOG_ERROR
Definition: ecat_globals.hpp:511
@ AUTO_TUNING_TIMEOUT_ERROR
Definition: ecat_globals.hpp:550
@ INTERNAL_SOFTWARE_ERROR
Definition: ecat_globals.hpp:512
@ OVER_CURRENT_ERROR
Definition: ecat_globals.hpp:497
@ SYSTEM_OVERLOADED_ERROR
Definition: ecat_globals.hpp:539
@ GENERIC_INIT_ERROR_3
Definition: ecat_globals.hpp:490
@ GENERIC_ERROR
Definition: ecat_globals.hpp:486
@ AUTO_TUNING_IDENTIFICATION_CURRENT_ERROR
Definition: ecat_globals.hpp:545
@ AUTO_TUNING_MAX_SYSTEM_SPEED_ERROR
Definition: ecat_globals.hpp:553
@ NEGATIVE_LIMIT_SWITCH_ERROR
Definition: ecat_globals.hpp:535
@ CONTROLLER_GAIN_ERROR
Definition: ecat_globals.hpp:542
@ WATCHDOG_ERROR
Definition: ecat_globals.hpp:540
@ GENERIC_INIT_ERROR_1
Definition: ecat_globals.hpp:488
@ HARDWARE_DEFECT_ERROR
Definition: ecat_globals.hpp:504
@ AUTO_TUNING_SAMPLE_MISMATCH_ERROR
Definition: ecat_globals.hpp:547
@ HALL_SENSOR_ERROR
Definition: ecat_globals.hpp:519
@ ETHERCAT_COMMUNICATION_CYCLE_TIME_ERROR
Definition: ecat_globals.hpp:531
@ MISSING_MAIN_SENSOR_ERROR
Definition: ecat_globals.hpp:524
@ GENERIC_INIT_ERROR_2
Definition: ecat_globals.hpp:489
@ POSITION_SENSOR_BREACH_ERROR
Definition: ecat_globals.hpp:516
@ SSI_SENSOR_FRAME_ERROR
Definition: ecat_globals.hpp:523
@ NO_ERROR
Definition: ecat_globals.hpp:485
@ GENERIC_INIT_ERROR
Definition: ecat_globals.hpp:487
@ SSI_SENSOR_ERROR
Definition: ecat_globals.hpp:522
@ AUTO_TUNING_DATA_SAMPLING_ERROR
Definition: ecat_globals.hpp:546
@ SYSTEM_PEAK_OVERLOADED_ERROR
Definition: ecat_globals.hpp:541
@ AUTO_TUNING_SENSOR_SIGNAL_ERROR
Definition: ecat_globals.hpp:555
@ AUTO_TUNING_MOTOR_CONNECTION_ERROR
Definition: ecat_globals.hpp:554
@ FOLLOWING_ERROR
Definition: ecat_globals.hpp:534
@ AUTO_TUNING_PARAMETER_ERROR
Definition: ecat_globals.hpp:548
@ HARDWARE_ERROR_1
Definition: ecat_globals.hpp:507
@ HALL_SENSOR_NOT_FOUND_ERROR
Definition: ecat_globals.hpp:520
@ LOGIC_SUPPLY_TOO_LOW_ERROR
Definition: ecat_globals.hpp:503
@ SOFTWARE_POSITION_LIMIT_ERROR
Definition: ecat_globals.hpp:537
@ POSITIVE_LIMIT_SWITCH_ERROR
Definition: ecat_globals.hpp:536
@ AUTO_TUNING_AMPLITUDE_MISMATCH_ERROR
Definition: ecat_globals.hpp:549
#define PERIOD_NS
Definition: ecat_globals.hpp:121
struct timespec g_sync_timer
EtherCAT master domain state.
Definition: ecat_node.cpp:11
ControlStructureBits
Control structure configuration for control mechanism to select sensor structure specific to hardware...
Definition: ecat_globals.hpp:311
@ kMountingPositionSensor1
Definition: ecat_globals.hpp:320
@ kCurrentControlStructure
These are bit locations not values for values.
Definition: ecat_globals.hpp:313
@ kMountingPositionSensor2
Definition: ecat_globals.hpp:321
@ kVelocityControlStructure
Definition: ecat_globals.hpp:314
@ kGearLocation
Definition: ecat_globals.hpp:316
@ kProcessValueReference
Definition: ecat_globals.hpp:317
@ kAuxiliarySensor
Definition: ecat_globals.hpp:319
@ kMountingPositionSensor3
Definition: ecat_globals.hpp:322
@ kPositionControlStructure
Definition: ecat_globals.hpp:315
@ kMainSensor
Definition: ecat_globals.hpp:318
struct timespec timespec_add(struct timespec time1, struct timespec time2)
Add two timespec struct.
Definition: ecat_globals.hpp:157
Struct contains configuration parameters for cyclic sync. position mode.
Definition: ecat_globals.hpp:396
uint32_t profile_acc
Definition: ecat_globals.hpp:405
uint32_t quick_stop_dec
Definition: ecat_globals.hpp:409
uint32_t max_gear_input_speed
Definition: ecat_globals.hpp:403
uint32_t nominal_current
Definition: ecat_globals.hpp:397
uint32_t position_control_parameter_set
Definition: ecat_globals.hpp:400
uint32_t profile_dec
Definition: ecat_globals.hpp:406
uint32_t current_controller_gain
Definition: ecat_globals.hpp:399
uint32_t interpolation_time_period
Definition: ecat_globals.hpp:410
uint32_t profile_vel
Definition: ecat_globals.hpp:404
uint32_t max_fol_err
Definition: ecat_globals.hpp:407
uint32_t max_profile_vel
Definition: ecat_globals.hpp:408
uint32_t software_position_limit
Definition: ecat_globals.hpp:401
uint16_t torque_constant
Definition: ecat_globals.hpp:398
uint16_t motor_rated_torque
Definition: ecat_globals.hpp:402
Struct contains configuration parameters for cyclic sync. torque mode.
Definition: ecat_globals.hpp:443
uint32_t max_profile_vel
Definition: ecat_globals.hpp:452
uint32_t interpolation_time_period
Definition: ecat_globals.hpp:454
uint32_t profile_vel
Definition: ecat_globals.hpp:449
uint32_t profile_dec
Definition: ecat_globals.hpp:451
uint16_t torque_constant
Definition: ecat_globals.hpp:445
uint32_t nominal_current
Definition: ecat_globals.hpp:444
uint32_t quick_stop_dec
Definition: ecat_globals.hpp:453
uint32_t profile_acc
Definition: ecat_globals.hpp:450
uint32_t software_position_limit
Definition: ecat_globals.hpp:446
uint16_t motor_rated_torque
Definition: ecat_globals.hpp:447
uint32_t max_gear_input_speed
Definition: ecat_globals.hpp:448
Struct contains configuration parameters for cyclic sync. velocity mode.
Definition: ecat_globals.hpp:430
uint32_t quick_stop_dec
Definition: ecat_globals.hpp:432
uint32_t software_position_limit
Definition: ecat_globals.hpp:434
uint32_t interpolation_time_period
Definition: ecat_globals.hpp:435
VelControlParam velocity_controller_gain
Definition: ecat_globals.hpp:431
uint32_t profile_dec
Definition: ecat_globals.hpp:433
Xbox Controller values.
Definition: ecat_globals.hpp:177
uint8_t left_rb_button_
Definition: ecat_globals.hpp:190
uint8_t right_rb_button_
Definition: ecat_globals.hpp:191
uint8_t blue_button_
Definition: ecat_globals.hpp:182
uint8_t xbox_button_
Definition: ecat_globals.hpp:194
float left_y_axis_
Definition: ecat_globals.hpp:179
uint8_t left_u_button_
Definition: ecat_globals.hpp:188
float right_x_axis_
Definition: ecat_globals.hpp:180
uint8_t left_d_button_
Definition: ecat_globals.hpp:189
float right_y_axis_
Definition: ecat_globals.hpp:181
uint8_t right_start_button_
Definition: ecat_globals.hpp:193
uint8_t left_l_button_
Definition: ecat_globals.hpp:187
uint8_t left_start_button_
Definition: ecat_globals.hpp:192
uint8_t yellow_button_
Definition: ecat_globals.hpp:185
uint8_t red_button_
Definition: ecat_globals.hpp:184
uint8_t green_button_
Definition: ecat_globals.hpp:183
float left_x_axis_
Definition: ecat_globals.hpp:178
uint8_t left_r_button_
Definition: ecat_globals.hpp:186
Structure for data to be received from slaves.
Definition: ecat_globals.hpp:229
std::vector< uint16_t > control_word
Definition: ecat_globals.hpp:235
std::vector< int16_t > tor_offset
Definition: ecat_globals.hpp:238
std::vector< int8_t > op_mode_display
Definition: ecat_globals.hpp:246
DataReceived()
Definition: ecat_globals.hpp:251
std::vector< int16_t > actual_cur
Definition: ecat_globals.hpp:242
std::vector< int16_t > max_tor
Definition: ecat_globals.hpp:234
std::vector< int32_t > target_pos
Definition: ecat_globals.hpp:231
std::vector< int16_t > actual_tor
Definition: ecat_globals.hpp:243
std::vector< int32_t > actual_pos
Definition: ecat_globals.hpp:240
std::vector< uint16_t > error_code
Definition: ecat_globals.hpp:245
uint8_t left_limit_switch_val
Definition: ecat_globals.hpp:247
uint8_t right_limit_switch_val
Definition: ecat_globals.hpp:248
std::vector< OpMode > op_mode
Definition: ecat_globals.hpp:236
std::vector< int32_t > vel_offset
Definition: ecat_globals.hpp:237
uint16_t pressure_sensor
Definition: ecat_globals.hpp:250
std::vector< int32_t > actual_vel
Definition: ecat_globals.hpp:241
uint8_t emergency_switch_val
Definition: ecat_globals.hpp:249
std::vector< uint16_t > status_word
Definition: ecat_globals.hpp:244
std::vector< int16_t > target_tor
Definition: ecat_globals.hpp:233
std::vector< int32_t > target_vel
Definition: ecat_globals.hpp:232
uint16_t com_status
Definition: ecat_globals.hpp:230
Structure for data to be sent to slaves.
Definition: ecat_globals.hpp:256
std::vector< int16_t > tor_offset
Definition: ecat_globals.hpp:264
std::vector< uint16_t > control_word
Definition: ecat_globals.hpp:261
OpMode op_mode
Definition: ecat_globals.hpp:262
std::vector< int16_t > max_tor
Definition: ecat_globals.hpp:260
std::vector< int32_t > vel_offset
Definition: ecat_globals.hpp:263
std::vector< int16_t > target_tor
Definition: ecat_globals.hpp:259
std::vector< int32_t > target_pos
Definition: ecat_globals.hpp:257
std::vector< int32_t > target_vel
Definition: ecat_globals.hpp:258
DataSent()
Definition: ecat_globals.hpp:265
Homing mode configuration parameters.
Definition: ecat_globals.hpp:459
uint32_t speed_for_switch_search
Definition: ecat_globals.hpp:463
uint32_t max_profile_vel
Definition: ecat_globals.hpp:461
int32_t home_offset
Amount to move away from the sensed limit
Definition: ecat_globals.hpp:469
int8_t homing_method
Definition: ecat_globals.hpp:470
uint32_t quick_stop_dec
Definition: ecat_globals.hpp:462
uint32_t homing_acc
Definition: ecat_globals.hpp:465
uint16_t curr_threshold_homing
Used when homing by touching mechanical limit and sensing current.
Definition: ecat_globals.hpp:467
uint32_t max_fol_err
Definition: ecat_globals.hpp:460
uint32_t speed_for_zero_search
Definition: ecat_globals.hpp:464
offset for PDO entries to register PDOs.
Definition: ecat_globals.hpp:327
uint32_t profile_vel
Definition: ecat_globals.hpp:338
uint32_t target_pos
Definition: ecat_globals.hpp:328
uint32_t actual_tor
Definition: ecat_globals.hpp:344
uint32_t profile_dec
Definition: ecat_globals.hpp:336
uint32_t target_vel
Definition: ecat_globals.hpp:329
uint32_t profile_acc
Definition: ecat_globals.hpp:335
uint32_t emergency_switch
Definition: ecat_globals.hpp:352
uint32_t op_mode_display
Definition: ecat_globals.hpp:346
uint32_t error_code
Definition: ecat_globals.hpp:347
uint32_t op_mode
Definition: ecat_globals.hpp:334
uint32_t r_limit_switch
Definition: ecat_globals.hpp:350
uint32_t quick_stop_dec
Definition: ecat_globals.hpp:337
uint32_t control_word
Definition: ecat_globals.hpp:333
uint32_t actual_cur
Definition: ecat_globals.hpp:343
uint32_t pos_fol_err
Definition: ecat_globals.hpp:341
uint32_t actual_pos
Definition: ecat_globals.hpp:340
uint32_t l_limit_switch
Definition: ecat_globals.hpp:351
uint32_t status_word
Definition: ecat_globals.hpp:345
uint32_t pressure_sensor
Definition: ecat_globals.hpp:353
uint32_t extra_status_reg
Definition: ecat_globals.hpp:348
uint32_t actual_vel
Definition: ecat_globals.hpp:342
uint32_t target_tor
Definition: ecat_globals.hpp:330
uint32_t max_tor
Definition: ecat_globals.hpp:332
uint32_t torque_offset
Definition: ecat_globals.hpp:331
Parameters that should be specified in position mode.
Definition: ecat_globals.hpp:378
uint32_t profile_dec
Definition: ecat_globals.hpp:381
uint32_t max_fol_err
Definition: ecat_globals.hpp:382
uint32_t max_profile_vel
Definition: ecat_globals.hpp:383
uint32_t quick_stop_dec
Definition: ecat_globals.hpp:384
uint16_t motion_profile_type
Definition: ecat_globals.hpp:385
uint32_t profile_acc
Definition: ecat_globals.hpp:380
uint32_t d_gain
Definition: ecat_globals.hpp:388
uint32_t i_gain
Definition: ecat_globals.hpp:387
uint32_t p_gain
Definition: ecat_globals.hpp:386
uint32_t profile_vel
Definition: ecat_globals.hpp:379
Profile velocity mode configuration parameters.
Definition: ecat_globals.hpp:475
uint32_t profile_dec
Definition: ecat_globals.hpp:479
uint16_t motion_profile_type
Definition: ecat_globals.hpp:480
uint32_t max_profile_vel
Definition: ecat_globals.hpp:476
uint32_t profile_acc
Definition: ecat_globals.hpp:478
uint32_t quick_stop_dec
Definition: ecat_globals.hpp:477
SDO_data Structure holding all data needed to send an SDO object.
Definition: ecat_globals.hpp:205
size_t data_sz
Definition: ecat_globals.hpp:210
uint8_t sub_index
Definition: ecat_globals.hpp:208
uint32_t err_code
Definition: ecat_globals.hpp:212
uint32_t data
Definition: ecat_globals.hpp:209
uint16_t index
Definition: ecat_globals.hpp:207
uint16_t slave_position
Definition: ecat_globals.hpp:206
size_t result_sz
Definition: ecat_globals.hpp:211
EtherCAT SDO request structure for configuration phase.
Definition: ecat_globals.hpp:359
ec_sdo_request * max_fol_err
Definition: ecat_globals.hpp:366
ec_sdo_request * homing_method
Definition: ecat_globals.hpp:372
ec_sdo_request * profile_acc
Definition: ecat_globals.hpp:360
ec_sdo_request * max_profile_vel
Definition: ecat_globals.hpp:365
ec_sdo_request * home_offset
Definition: ecat_globals.hpp:371
ec_sdo_request * profile_dec
Definition: ecat_globals.hpp:361
ec_sdo_request * profile_vel
Definition: ecat_globals.hpp:362
ec_sdo_request * speed_for_switch_search
Definition: ecat_globals.hpp:367
ec_sdo_request * curr_threshold_homing
Definition: ecat_globals.hpp:370
ec_sdo_request * homing_acc
Definition: ecat_globals.hpp:369
ec_sdo_request * quick_stop_dec
Definition: ecat_globals.hpp:363
ec_sdo_request * speed_for_zero_search
Definition: ecat_globals.hpp:368
ec_sdo_request * motion_profile_type
Definition: ecat_globals.hpp:364
Struct containing 'velocity control parameter set' 0x30A2 Has 4 sub index. Default values are from EP...
Definition: ecat_globals.hpp:418