From acbf5b468674c7b8fad104023210586e970c4bb0 Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 21:34:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E4=B8=BB=E8=BD=B4=20G95/G96/G97=20sou?= =?UTF-8?q?rce-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 | 28 ++++++++++++++++++++ tests/gcode/linuxcnc_multi_spindle_modes.ini | 2 ++ tests/gcode/linuxcnc_multi_spindle_modes.ngc | 7 +++++ 3 files changed, 37 insertions(+) create mode 100644 tests/gcode/linuxcnc_multi_spindle_modes.ini create mode 100644 tests/gcode/linuxcnc_multi_spindle_modes.ngc diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index f365683..71bdbf2 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -173,6 +173,7 @@ make --output-sync=target -j"$build_jobs" -f "$source_link_makefile" var_file="$build_dir/rs274ngc-source.var" base_var_file="$build_dir/rs274ngc-source-base.var" ini_named_parameter_file="$(pwd)/tests/gcode/linuxcnc_ini_named_parameter.ini" +multi_spindle_modes_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_modes.ini" multi_spindle_override_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_override.ini" multi_spindle_threading_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_threading.ini" output_dir="$build_dir/outputs" @@ -212,6 +213,12 @@ CNC_SIM_RS274_VAR="$var_file" \ CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_spindle_modes.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_spindle_modes.json" +# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads +# [TRAJ] SPINDLES from INI_FILE_NAME, and interp_execute.cc assigns +# active_spindle from $ before G95/G96/G97 conversion. +INI_FILE_NAME="$multi_spindle_modes_file" CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_multi_spindle_modes.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_multi_spindle_modes.json" CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_spindle_orient.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_spindle_orient.json" @@ -1796,6 +1803,27 @@ expected_spindle_mode_states = [ if spindle_mode_states != expected_spindle_mode_states: raise SystemExit(f"unexpected source-linked G96/G97 spindle mode states: {spindle_mode_states!r}") +multi_spindle_modes = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_multi_spindle_modes.json").read_text()) +multi_spindle_mode_states = [ + (event["line"], event["reserved"], event["feed"], event["tool"]) + for event in multi_spindle_modes + if event["type"] == "comment" and event["line"] in {4, 5} and event["reserved"] in {960, 970} +] +expected_multi_spindle_mode_states = [ + (4, 970, 0, 1), + (5, 960, 2500, 1), +] +if multi_spindle_mode_states != expected_multi_spindle_mode_states: + raise SystemExit(f"unexpected source-linked selected-spindle G96/G97 states: {multi_spindle_mode_states!r}") +if not any( + event["type"] == "set-feed" and + event["line"] == 6 and + event["reserved"] == 1 and + event["tool"] == 1 + for event in multi_spindle_modes +): + raise SystemExit("missing source-linked selected-spindle G95 feed mode event") + spindle_orient = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_spindle_orient.json").read_text()) if not any( event["type"] == "comment" and diff --git a/tests/gcode/linuxcnc_multi_spindle_modes.ini b/tests/gcode/linuxcnc_multi_spindle_modes.ini new file mode 100644 index 0000000..fb8b9de --- /dev/null +++ b/tests/gcode/linuxcnc_multi_spindle_modes.ini @@ -0,0 +1,2 @@ +[TRAJ] +SPINDLES = 2 diff --git a/tests/gcode/linuxcnc_multi_spindle_modes.ngc b/tests/gcode/linuxcnc_multi_spindle_modes.ngc new file mode 100644 index 0000000..aa6ef5b --- /dev/null +++ b/tests/gcode/linuxcnc_multi_spindle_modes.ngc @@ -0,0 +1,7 @@ +G21 G90 G17 +(Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads [TRAJ] SPINDLES from INI_FILE_NAME.) +(Source basis: LinuxCNC src/emc/rs274ngc/interp_execute.cc assigns active_spindle for G95/G96/G97 with $.) +G97 S1000 $1 +G96 S120 D2500 $1 +G95 $1 +M30