Skip to content

Commit 80bd55c

Browse files
committed
Interpreter: Allow active G43 for tools with all zero offsets
Current behavior switches to G49 if G43 is commanded with loaded tool offset values all zero. Behavior for G43.1 and G43.2 remains unchanged.
1 parent 781023e commit 80bd55c

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

src/emc/rs274ngc/interp_convert.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6199,7 +6199,8 @@ int Interp::convert_tool_length_offset(int g_code, //!< g_code being execu
61996199
int idx;
62006200
EmcPose tool_offset;
62016201
ZERO_EMC_POSE(tool_offset);
6202-
6202+
settings->g43_with_zero_offset = 0;
6203+
62036204
CHKS((settings->cutter_comp_side != CUTTER_COMP::OFF),
62046205
(_("Cannot change tool offset with cutter radius compensation on")));
62056206
if (g_code == G_49) {
@@ -6237,6 +6238,10 @@ int Interp::convert_tool_length_offset(int g_code, //!< g_code being execu
62376238
tool_offset.u = USER_TO_PROGRAM_LEN(settings->tool_table[idx].offset.u);
62386239
tool_offset.v = USER_TO_PROGRAM_LEN(settings->tool_table[idx].offset.v);
62396240
tool_offset.w = USER_TO_PROGRAM_LEN(settings->tool_table[idx].offset.w);
6241+
settings->g43_with_zero_offset =
6242+
(settings->tool_offset.tran.x || settings->tool_offset.tran.y || settings->tool_offset.tran.z ||
6243+
settings->tool_offset.a || settings->tool_offset.b || settings->tool_offset.c ||
6244+
settings->tool_offset.u || settings->tool_offset.v || settings->tool_offset.w);
62406245
} else if (g_code == G_43_1) {
62416246
tool_offset = settings->tool_offset;
62426247
idx = -1;

src/emc/rs274ngc/interp_internal.hh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,7 @@ struct setup
759759
CANON_TOOL_TABLE tool_table[CANON_POCKETS_MAX]; // index is pocket number
760760
double traverse_rate; // rate for traverse motions
761761
double orient_offset; // added to M19 R word, from [RS274NGC]ORIENT_OFFSET
762+
bool g43_with_zero_offset; // added to allow active G43 with tool offset values all zero
762763

763764
/* stuff for subroutines and control structures */
764765
int defining_sub; // true if in a subroutine defn

src/emc/rs274ngc/interp_write.cc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,10 @@ int Interp::write_g_codes(block_pointer block, //!< pointer to a block of RS27
108108
7) ? (530 + (10 * settings->origin_index)) : (584 +
109109
settings->origin_index);
110110
settings->active_g_codes[9] =
111-
(settings->tool_offset.tran.x || settings->tool_offset.tran.y || settings->tool_offset.tran.z ||
112-
settings->tool_offset.a || settings->tool_offset.b || settings->tool_offset.c ||
113-
settings->tool_offset.u || settings->tool_offset.v || settings->tool_offset.w) ? G_43 : G_49;
111+
(settings->g43_with_zero_offset ||
112+
settings->tool_offset.tran.x || settings->tool_offset.tran.y || settings->tool_offset.tran.z ||
113+
settings->tool_offset.a || settings->tool_offset.b || settings->tool_offset.c ||
114+
settings->tool_offset.u || settings->tool_offset.v || settings->tool_offset.w) ? G_43 : G_49;
114115
settings->active_g_codes[10] = (settings->retract_mode == RETRACT_MODE::OLD_Z) ? G_98 : G_99;
115116
// Three modes: G_64, G_61, G_61_1 or CANON_CONTINUOUS/EXACT_PATH/EXACT_STOP
116117
settings->active_g_codes[11] =
@@ -279,7 +280,8 @@ int Interp::write_state_tag(block_pointer block,
279280
state.flags[GM_FLAG_G92_IS_APPLIED] = settings->parameters[5210];
280281

281282
state.flags[GM_FLAG_TOOL_OFFSETS_ON] =
282-
(settings->tool_offset.tran.x ||
283+
(settings->g43_with_zero_offset ||
284+
settings->tool_offset.tran.x ||
283285
settings->tool_offset.tran.y ||
284286
settings->tool_offset.tran.z ||
285287
settings->tool_offset.a ||

0 commit comments

Comments
 (0)