Motorcortex Core  version: 2.7.6
drive_cia402_fsm_data.h
1 /*
2  * Developer : Alexey Zakharov (alexey.zakharov@vectioneer.com)
3  * All rights reserved. Copyright (c) 2018 VECTIONEER.
4  */
5 
6 #ifndef MOTORCORTEX_CORE_DRIVE_CIA402_FSM_DATA_H
7 #define MOTORCORTEX_CORE_DRIVE_CIA402_FSM_DATA_H
8 
9 #include <utility>
10 
11 #include "drive_command.h"
12 #include "drive_state.h"
13 #include "drive_mode.h"
14 
15 
16 namespace mcx {
17 
18 namespace drive {
19 
20 class Transition;
21 
22 /*
23  * Command Bit 7 Bit 3 Bit 2 Bit 1 Bit 0 Transition
24  * Fault Reset Enable Op. Quick Stop Disable Volt. Switch on
25  *
26  * Shutdown X X 1 1 0 2,6,8
27  * Switch on X X 1 1 1 3
28  * Disable Volt. X X X 0 X 7,9,10,12
29  * Quick Stop X X 0 1 X 7,10,11
30  * Disable Oper. X 0 1 1 1 5
31  * Enable Oper. X 1 1 1 1 4,16
32  * Fault Reset 1 X X X X 15
33  */
34 
35 enum Cia402Command {
36  CIA402_CMD_SWITCH_ON = 0,
37  CIA402_CMD_DISABLE_VOLTAGE = 1,
38  CIA402_CMD_QUICK_STOP = 2,
39  CIA402_CMD_ENABLE_OPERATION = 3,
40  CIA402_CMD_MODE_ACTION = 4,
41  CIA402_CMD_FAULT_REST = 7
42 };
43 
44 enum Cia402Mode {
45  CIA402_MODE_NOMODE = 0,
46  CIA402_MODE_PROFILED_POSITION = 1,
47  CIA402_MODE_VELOCITY = 2,
48  CIA402_MODE_PROFILED_VELOCITY = 3,
49  CIA402_MODE_PROFILED_TORQUE = 4,
50  CIA402_MODE_HOMING = 6,
51  CIA402_MODE_INTERPOLATED_POSITION = 7,
52  CIA402_MODE_CYCLIC_SYNC_POSITION = 8,
53  CIA402_MODE_CYCLIC_SYNC_VELOCITY = 9,
54  CIA402_MODE_CYCLIC_SYNC_TORQUE = 10
55 };
56 
57 enum Cia402Status {
58  CIA402_STATUS_READY_TO_SWITCH_ON = 0,
59  CIA402_STATUS_SWITCHED_ON = 1,
60  CIA402_STATUS_OPERATION_ENABLED = 2,
61  CIA402_STATUS_FAULT = 3,
62  CIA402_STATUS_VOLTAGE_DISABLED = 4,
63  CIA402_STATUS_QUICK_STOP_NOT_ACTIVE = 5,
64  CIA402_STATUS_SWITCH_ON_DISABLED = 6,
65  CIA402_STATUS_WARNING = 7,
66 };
67 
68 struct Cia402FsmData {
69  explicit Cia402FsmData(std::string name) : fsm_name{std::move(name)} {};
70 
71  const std::string fsm_name;
72  DriveState drive_state{DriveState::DRIVE_STATE_OFF};
73  bool upload_error_code{};
74  unsigned int cia402_cmd{};
75  unsigned int cia402_mode{};
76  unsigned int cia402_state{};
77  struct {
78  double fault_ack{1};
79  double shutdown{1};
80  double switch_on{1};
81  double disable_voltage{1};
82  double quick_stop{1};
83  double disable_operation{1};
84  double enable_operation{1};
85  double upload_code{0.01};
86  } timeout_sec;
87  struct {
88  double enable_operation{0};
89  } delay_sec;
90 };
91 
92 } // namespace drive
93 
94 } // namespace mcx
95 
96 #endif //MOTORCORTEX_CORE_DRIVE_CIA402_FSM_DATA_H
mcx::drive::Cia402FsmData
Definition: drive_cia402_fsm_data.h:68