From f69e10bedf1a8e8cbf19d10d987a712b62a449ad Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 23:41:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E5=88=80=E8=A1=A5=E4=B8=8B?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E5=81=8F=E7=BD=AE=E9=94=99=E8=AF=AF=E8=A6=86?= =?UTF-8?q?=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 结论:基于 LinuxCNC interp_convert.cc convert_tool_length_offset(),native/source-link 现在覆盖 cutter radius comp 打开时 G43 工具长度偏置被拒绝的失败分支。 --- test-linuxcnc-rs274-native.sh | 3 ++- test-linuxcnc-source-link.sh | 8 ++++++++ tests/gcode/linuxcnc_cutter_comp_tool_offset_error.ngc | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 tests/gcode/linuxcnc_cutter_comp_tool_offset_error.ngc diff --git a/test-linuxcnc-rs274-native.sh b/test-linuxcnc-rs274-native.sh index 33af718..e8a2cda 100755 --- a/test-linuxcnc-rs274-native.sh +++ b/test-linuxcnc-rs274-native.sh @@ -746,11 +746,12 @@ CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linux CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_machine_coordinates.ngc >"$output_dir/cnc_sim_linuxcnc_machine_coordinates.json" CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_cutter_comp.ngc >"$output_dir/cnc_sim_linuxcnc_cutter_comp.json" # Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc rejects -# M6, M66, G71.0, and G98/G99 while cutter compensation is active; +# M6, M66, G43, G71.0, and G98/G99 while cutter compensation is active; # compensated corner and G40 exit checks also reject gouging/arc exits. cutter_comp_execution_error_cases=( "linuxcnc_cutter_comp_tool_change_error|Cannot change tools with cutter radius compensation on" "linuxcnc_cutter_comp_wait_input_error|Cannot wait for digital input with cutter radius compensation on" + "linuxcnc_cutter_comp_tool_offset_error|Cannot change tool offset with cutter radius compensation on" "linuxcnc_cutter_comp_g71_error|G71.0 cannot be used with cutter compensation enabled" "linuxcnc_canned_cycle_g98_retract_error|Cannot change retract mode with cutter radius compensation on" "linuxcnc_ccomp_arcexit_error|The move just after exiting cutter compensation mode must be straight, not an arc" diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index 0bea95b..1228729 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -1445,6 +1445,14 @@ if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ fi grep -q "Cannot wait for digital input with cutter radius compensation on" \ "$output_dir/cnc_sim_linuxcnc_source_cutter_comp_wait_input_error.err" +if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_cutter_comp_tool_offset_error.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_cutter_comp_tool_offset_error.json" 2>"$output_dir/cnc_sim_linuxcnc_source_cutter_comp_tool_offset_error.err"; then + echo "expected linuxcnc_cutter_comp_tool_offset_error.ngc to fail" >&2 + exit 1 +fi +grep -q "Cannot change tool offset with cutter radius compensation on" \ + "$output_dir/cnc_sim_linuxcnc_source_cutter_comp_tool_offset_error.err" # Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc # convert_m() rejects M63-M65/M67-M68/M48-M53 while cutter radius # compensation is active before enqueueing digital/analog output or override diff --git a/tests/gcode/linuxcnc_cutter_comp_tool_offset_error.ngc b/tests/gcode/linuxcnc_cutter_comp_tool_offset_error.ngc new file mode 100644 index 0000000..0065133 --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_tool_offset_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +G43 H1