From d35766e387b720296176f1adec15fd5265bf94ca Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 21:55:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E5=A4=9A=E4=B8=BB=E8=BD=B4?= =?UTF-8?q?=20G76=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 | 28 ++++++++++++++++++++++ tests/gcode/linuxcnc_multi_spindle_g76.ngc | 7 ++++++ 2 files changed, 35 insertions(+) create mode 100644 tests/gcode/linuxcnc_multi_spindle_g76.ngc diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index f6883a8..f17a8bc 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -313,6 +313,12 @@ CNC_SIM_RS274_VAR="$var_file" \ INI_FILE_NAME="$multi_spindle_threading_file" CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_multi_spindle_threading.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_multi_spindle_threading.json" +# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads +# [TRAJ] SPINDLES from INI_FILE_NAME, and interp_convert.cc assigns +# active_spindle from the G76 $ selector before convert_threading_cycle(). +INI_FILE_NAME="$multi_spindle_threading_file" CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_multi_spindle_g76.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_multi_spindle_g76.json" CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_threading_cycle.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_threading_cycle.json" @@ -2082,6 +2088,27 @@ if not any( ): raise SystemExit("missing source-linked G33.1 selected-spindle rigid tap motion line") +multi_spindle_g76 = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_multi_spindle_g76.json").read_text()) +if not any( + event["type"] == "comment" and + event["line"] == 6 and + event["reserved"] == 3301 and + event["tool"] == 1 and + event["feed"] == 0.05 + for event in multi_spindle_g76 +): + raise SystemExit("missing source-linked G76 selected-spindle sync start") +if not any( + event["type"] == "comment" and event["line"] == 6 and event["reserved"] == 3300 + for event in multi_spindle_g76 +): + raise SystemExit("missing source-linked G76 selected-spindle sync stop") +if not any( + event["type"] == "linear-feed" and event["line"] == 6 and event["end"]["z"] == -1 + for event in multi_spindle_g76 +): + raise SystemExit("missing source-linked G76 selected-spindle final threading pass") + threading_cycle = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_threading_cycle.json").read_text()) if not any( event["type"] == "comment" and @@ -3747,6 +3774,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_source_modal_state.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_modal_autorestore.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_threading_sync.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_threading_cycle.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_source_multi_spindle_g76.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_lathe_diameter_mode.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_lathe_diameter_g76.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_tool_number.json" diff --git a/tests/gcode/linuxcnc_multi_spindle_g76.ngc b/tests/gcode/linuxcnc_multi_spindle_g76.ngc new file mode 100644 index 0000000..a6030ca --- /dev/null +++ b/tests/gcode/linuxcnc_multi_spindle_g76.ngc @@ -0,0 +1,7 @@ +G20 G90 G18 +(Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads [TRAJ] SPINDLES from INI_FILE_NAME.) +(Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc G76 with $ selects active_spindle before convert_threading_cycle.) +S500 M3 $1 +G0 X1 Z0.1 +G76 P0.05 Z-1 I-.075 J0.008 K0.045 Q29.5 L2 E0.045 $1 +M30