From 120a294f62288ee59368b3f7deefdffb9fdf8ce2 Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 23:06:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=20cutter-comp=20M=E7=A0=81?= =?UTF-8?q?=20source-linked=20=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-linuxcnc-source-link.sh | 19 +++++++++++++++++++ .../gcode/linuxcnc_cutter_comp_m49_error.ngc | 3 +++ .../gcode/linuxcnc_cutter_comp_m63_error.ngc | 3 +++ .../gcode/linuxcnc_cutter_comp_m67_error.ngc | 3 +++ 4 files changed, 28 insertions(+) create mode 100644 tests/gcode/linuxcnc_cutter_comp_m49_error.ngc create mode 100644 tests/gcode/linuxcnc_cutter_comp_m63_error.ngc create mode 100644 tests/gcode/linuxcnc_cutter_comp_m67_error.ngc diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index da48530..40382bf 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -1423,6 +1423,25 @@ 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" +# Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc +# convert_m() rejects M63/M67/M49 while cutter radius compensation is active +# before enqueueing digital/analog output or override canon side effects. +cutter_comp_m_error_cases=( + "linuxcnc_cutter_comp_m63_error|Cannot set motion digital output with cutter radius compensation on" + "linuxcnc_cutter_comp_m67_error|Cannot set motion analog output with cutter radius compensation on" + "linuxcnc_cutter_comp_m49_error|Cannot disable overrides with cutter radius compensation on" +) +for case in "${cutter_comp_m_error_cases[@]}"; do + fixture=${case%%|*} + expected=${case#*|} + if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" "tests/gcode/$fixture.ngc" \ + >"$output_dir/cnc_sim_linuxcnc_source_$fixture.json" 2>"$output_dir/cnc_sim_linuxcnc_source_$fixture.err"; then + echo "expected $fixture.ngc to fail" >&2 + exit 1 + fi + grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err" +done if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_cutter_comp_g71_error.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_cutter_comp_g71_error.json" 2>"$output_dir/cnc_sim_linuxcnc_source_cutter_comp_g71_error.err"; then diff --git a/tests/gcode/linuxcnc_cutter_comp_m49_error.ngc b/tests/gcode/linuxcnc_cutter_comp_m49_error.ngc new file mode 100644 index 0000000..2c38813 --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_m49_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +M49 diff --git a/tests/gcode/linuxcnc_cutter_comp_m63_error.ngc b/tests/gcode/linuxcnc_cutter_comp_m63_error.ngc new file mode 100644 index 0000000..bd70518 --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_m63_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +M63 P1 diff --git a/tests/gcode/linuxcnc_cutter_comp_m67_error.ngc b/tests/gcode/linuxcnc_cutter_comp_m67_error.ngc new file mode 100644 index 0000000..533094c --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_m67_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +M67 E0 Q1