gnea\grbl-Mega  1.0f
Source Code Documentation ( Internal Workings )
system.h
Go to the documentation of this file.
1 /*
2  system.h - Header for system level commands and real-time processes
3  Part of Grbl
4 
5  Copyright (c) 2014-2016 Sungeun K. Jeon for Gnea Research LLC
6 
7  Grbl is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  Grbl is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with Grbl. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #ifndef system_h
22 #define system_h
23 
24 #include "grbl.h"
26 // which notifies the main program to execute the specified realtime command asynchronously.
27 //
29 // flags are always false, so the realtime protocol only needs to check for a non-zero value to
30 // know when there is a realtime command to execute.
31 #define EXEC_STATUS_REPORT bit(0)
32 #define EXEC_CYCLE_START bit(1)
33 #define EXEC_CYCLE_STOP bit(2)
34 #define EXEC_FEED_HOLD bit(3)
35 #define EXEC_RESET bit(4)
36 #define EXEC_SAFETY_DOOR bit(5)
37 #define EXEC_MOTION_CANCEL bit(6)
38 #define EXEC_SLEEP bit(7)
39 #define EXEC_ALARM_HARD_LIMIT 1
41 #define EXEC_ALARM_SOFT_LIMIT 2
42 #define EXEC_ALARM_ABORT_CYCLE 3
43 #define EXEC_ALARM_PROBE_FAIL_INITIAL 4
44 #define EXEC_ALARM_PROBE_FAIL_CONTACT 5
45 #define EXEC_ALARM_HOMING_FAIL_RESET 6
46 #define EXEC_ALARM_HOMING_FAIL_DOOR 7
47 #define EXEC_ALARM_HOMING_FAIL_PULLOFF 8
48 #define EXEC_ALARM_HOMING_FAIL_APPROACH 9
49 // Spindle/coolant and feed/rapids are separated into two controlling flag variables.
51 #define EXEC_FEED_OVR_RESET bit(0)
52 #define EXEC_FEED_OVR_COARSE_PLUS bit(1)
53 #define EXEC_FEED_OVR_COARSE_MINUS bit(2)
54 #define EXEC_FEED_OVR_FINE_PLUS bit(3)
55 #define EXEC_FEED_OVR_FINE_MINUS bit(4)
56 #define EXEC_RAPID_OVR_RESET bit(5)
57 #define EXEC_RAPID_OVR_MEDIUM bit(6)
58 #define EXEC_RAPID_OVR_LOW bit(7)
59 // #define EXEC_RAPID_OVR_EXTRA_LOW bit(*) //!< *NOT SUPPORTED*
60 
61 #define EXEC_SPINDLE_OVR_RESET bit(0)
62 #define EXEC_SPINDLE_OVR_COARSE_PLUS bit(1)
63 #define EXEC_SPINDLE_OVR_COARSE_MINUS bit(2)
64 #define EXEC_SPINDLE_OVR_FINE_PLUS bit(3)
65 #define EXEC_SPINDLE_OVR_FINE_MINUS bit(4)
66 #define EXEC_SPINDLE_OVR_STOP bit(5)
67 #define EXEC_COOLANT_FLOOD_OVR_TOGGLE bit(6)
68 #define EXEC_COOLANT_MIST_OVR_TOGGLE bit(7)
69 // of Grbl to manage each without overlapping. It is also used as a messaging flag for
71 // critical events.
72 #define STATE_IDLE 0
73 #define STATE_ALARM bit(0)
74 #define STATE_CHECK_MODE bit(1)
75 #define STATE_HOMING bit(2)
76 #define STATE_CYCLE bit(3)
77 #define STATE_HOLD bit(4)
78 #define STATE_JOG bit(5)
79 #define STATE_SAFETY_DOOR bit(6)
80 #define STATE_SLEEP bit(7)
81 #define SUSPEND_DISABLE 0
83 #define SUSPEND_HOLD_COMPLETE bit(0)
84 #define SUSPEND_RESTART_RETRACT bit(1)
85 #define SUSPEND_RETRACT_COMPLETE bit(2)
86 #define SUSPEND_INITIATE_RESTORE bit(3)
87 #define SUSPEND_RESTORE_COMPLETE bit(4)
88 #define SUSPEND_SAFETY_DOOR_AJAR bit(5)
89 #define SUSPEND_MOTION_CANCEL bit(6)
90 #define SUSPEND_JOG_CANCEL bit(7)
91 #define STEP_CONTROL_NORMAL_OP 0
93 #define STEP_CONTROL_END_MOTION bit(0)
94 #define STEP_CONTROL_EXECUTE_HOLD bit(1)
95 #define STEP_CONTROL_EXECUTE_SYS_MOTION bit(2)
96 #define STEP_CONTROL_UPDATE_SPINDLE_PWM bit(3)
97 #define N_CONTROL_PIN 4
99 #define CONTROL_PIN_INDEX_SAFETY_DOOR bit(0)
100 #define CONTROL_PIN_INDEX_RESET bit(1)
101 #define CONTROL_PIN_INDEX_FEED_HOLD bit(2)
102 #define CONTROL_PIN_INDEX_CYCLE_START bit(3)
103 #define SPINDLE_STOP_OVR_DISABLED 0
105 #define SPINDLE_STOP_OVR_ENABLED bit(0)
106 #define SPINDLE_STOP_OVR_INITIATE bit(1)
107 #define SPINDLE_STOP_OVR_RESTORE bit(2)
108 #define SPINDLE_STOP_OVR_RESTORE_CYCLE bit(3)
109 
111 typedef struct {
112  uint8_t state;
113  uint8_t abort;
114  uint8_t suspend;
115  uint8_t soft_limit;
116  uint8_t step_control;
117  uint8_t probe_succeeded;
119  uint8_t f_override;
120  uint8_t r_override;
126 } system_t;
127 extern system_t sys;
132 
133 volatile uint8_t sys_probe_state;
134 volatile uint8_t sys_rt_exec_state;
135 volatile uint8_t sys_rt_exec_alarm;
136 volatile uint8_t sys_rt_exec_motion_override;
138 
139 #ifdef DEBUG
140  #define EXEC_DEBUG_REPORT bit(0)
141  volatile uint8_t sys_rt_exec_debug;
142 #endif
143 void system_init();
146 uint8_t system_control_get_state();
150 uint8_t system_execute_line(char *line);
152 void system_execute_startup(char *line);
153 
154 
157 float system_convert_axis_steps_to_mpos(int32_t *steps, uint8_t idx);
159 void system_convert_array_steps_to_mpos(float *position, int32_t *steps);
161 #ifdef COREXY
162  int32_t system_convert_corexy_to_x_axis_steps(int32_t *steps);
163  int32_t system_convert_corexy_to_y_axis_steps(int32_t *steps);
164 #endif
165 uint8_t system_check_travel_limits(float *target);
168 void system_set_exec_state_flag(uint8_t mask);
169 void system_clear_exec_state_flag(uint8_t mask);
170 void system_set_exec_alarm(uint8_t code);
172 void system_set_exec_motion_override_flag(uint8_t mask);
173 void system_set_exec_accessory_override_flag(uint8_t mask);
176 
177 
178 #endif
void system_clear_exec_alarm()
Definition: system.c:361
volatile uint8_t sys_probe_state
Probing state value. Used to coordinate the probing cycle with stepper ISR.
Definition: system.h:133
void system_init()
Initialize the serial protocol.
Definition: system.c:24
#define N_AXIS
Axis array index values. Must start with 0 and be continuous.
Definition: nuts_bolts.h:30
uint8_t spindle_speed_ovr
Spindle speed value in percent.
Definition: system.h:121
Define global system variables.
Definition: system.h:111
uint8_t system_check_travel_limits(float *target)
CoreXY calculation only. Returns x or y-axis "steps" based on CoreXY motor steps. ...
Definition: system.c:317
uint8_t suspend
System suspend bitflag variable that manages holds, cancels, and safety door.
Definition: system.h:114
void system_flag_wco_change()
Definition: system.c:265
void system_set_exec_state_flag(uint8_t mask)
Special handlers for setting and clearing Grbl's real-time execution flags.
Definition: system.c:340
void system_clear_exec_motion_overrides()
Definition: system.c:382
volatile uint8_t sys_rt_exec_alarm
Global realtime executor bitflag variable for setting various alarms.
Definition: system.h:135
uint8_t state
Tracks the current system state of Grbl.
Definition: system.h:112
void system_set_exec_motion_override_flag(uint8_t mask)
Definition: system.c:368
uint8_t f_override
Feed rate override value in percent.
Definition: system.h:119
uint8_t report_wco_counter
Tracks when to add work coordinate offset data to status reports.
Definition: system.h:124
float system_convert_axis_steps_to_mpos(int32_t *steps, uint8_t idx)
Returns machine position of axis 'idx'. Must be sent a 'step' array.
Definition: system.c:277
uint8_t abort
System abort flag. Forces exit back to main loop for reset.
Definition: system.h:113
system_t sys
Declare system global variable structure.
Definition: main.c:25
void system_clear_exec_state_flag(uint8_t mask)
Definition: system.c:347
volatile uint8_t sys_rt_exec_motion_override
Global realtime executor bitflag variable for motion-based overrides.
Definition: system.h:136
uint8_t system_check_safety_door_ajar()
Returns if safety door is open or closed, based on pin state.
Definition: system.c:76
uint8_t probe_succeeded
Tracks if last probing cycle was successful.
Definition: system.h:117
void system_convert_array_steps_to_mpos(float *position, int32_t *steps)
Updates a machine 'position' array based on the 'step' array sent.
Definition: system.c:295
uint8_t soft_limit
Tracks soft limit errors for the state machine. (boolean)
Definition: system.h:115
int32_t sys_position[N_AXIS]
NOTE: These position variables may need to be declared as volatiles, if problems arise.
Definition: system.h:130
uint8_t report_ovr_counter
Tracks when to add override data to status reports.
Definition: system.h:123
uint8_t system_execute_line(char *line)
Executes an internal system command, defined as a string starting with a '$'.
Definition: system.c:106
uint8_t step_control
Governs the step segment generator depending on system state.
Definition: system.h:116
volatile uint8_t sys_rt_exec_state
Global realtime executor bitflag variable for state management. See EXEC bitmasks.
Definition: system.h:134
void system_clear_exec_accessory_overrides()
Definition: system.c:389
uint8_t homing_axis_lock
Locks axes when limits engage. Used as an axis motion mask in the stepper ISR.
Definition: system.h:118
uint8_t r_override
Rapids override value in percent.
Definition: system.h:120
uint8_t system_control_get_state()
Returns bitfield of control pin states, organized by CONTROL_PIN_INDEX. (1=triggered, 0=not triggered).
Definition: system.c:39
void system_set_exec_accessory_override_flag(uint8_t mask)
Definition: system.c:375
float spindle_speed
Definition: system.h:125
void system_set_exec_alarm(uint8_t code)
Definition: system.c:354
int32_t sys_probe_position[N_AXIS]
Last probe position in machine coordinates and steps.
Definition: system.h:131
uint8_t spindle_stop_ovr
Tracks spindle stop override states.
Definition: system.h:122
void system_execute_startup(char *line)
Execute the startup script lines stored in EEPROM upon initialization.
Definition: system.c:82
volatile uint8_t sys_rt_exec_accessory_override
Global realtime executor bitflag variable for spindle/coolant overrides.
Definition: system.h:137