From 55149b0a0a4aa64ee6ddc409d1e6b997776ef8f2 Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 21:47:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A6=86=E7=9B=96=E5=A4=9A=E4=B8=BB=E8=BD=B4?= =?UTF-8?q?=E5=85=A8=E9=80=89=20spindle=20source-linked=20=E8=B7=AF?= =?UTF-8?q?=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-linuxcnc-source-link.sh | 30 +++++++++++++++++++ .../linuxcnc_multi_spindle_all_direction.ngc | 9 ++++++ 2 files changed, 39 insertions(+) create mode 100644 tests/gcode/linuxcnc_multi_spindle_all_direction.ngc diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index ba828d7..4047255 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -217,6 +217,13 @@ CNC_SIM_RS274_VAR="$var_file" \ INI_FILE_NAME="$multi_spindle_modes_file" CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_multi_spindle_direction.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_multi_spindle_direction.json" +# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads +# [TRAJ] SPINDLES from INI_FILE_NAME, interp_execute.cc expands S-word $-1 +# over all configured spindles, and interp_convert.cc expands M3/M4/M5 $-1 +# over all configured spindles. +INI_FILE_NAME="$multi_spindle_modes_file" CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_multi_spindle_all_direction.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_multi_spindle_all_direction.json" 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" @@ -1814,6 +1821,28 @@ if multi_spindle_direction_states != expected_multi_spindle_direction_states: f"{multi_spindle_direction_states!r}" ) +multi_spindle_all_direction = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_multi_spindle_all_direction.json").read_text()) +multi_spindle_all_direction_states = [ + (event["line"], event["tool"], event["spindle"], event["reserved"]) + for event in multi_spindle_all_direction + if event["type"] == "set-spindle" and event["line"] in {5, 6, 7, 8} +] +expected_multi_spindle_all_direction_states = [ + (5, 0, 1200, 0), + (5, 1, 1200, 0), + (6, 0, 1200, 1), + (6, 1, 1200, 1), + (7, 0, 1200, 2), + (7, 1, 1200, 2), + (8, 0, 0, 0), + (8, 1, 0, 0), +] +if multi_spindle_all_direction_states != expected_multi_spindle_all_direction_states: + raise SystemExit( + "unexpected source-linked all-spindles S/M3/M4/M5 states: " + f"{multi_spindle_all_direction_states!r}" + ) + spindle_modes = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_spindle_modes.json").read_text()) spindle_mode_states = [ (event["line"], event["reserved"], event["feed"], event["tool"]) @@ -3681,6 +3710,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_source_incremental_and_r_arc.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_rtcp_controls.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_spindle_direction.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_multi_spindle_direction.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_source_multi_spindle_all_direction.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_spindle_modes.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_spindle_orient.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_io_controls.json" diff --git a/tests/gcode/linuxcnc_multi_spindle_all_direction.ngc b/tests/gcode/linuxcnc_multi_spindle_all_direction.ngc new file mode 100644 index 0000000..6218faa --- /dev/null +++ b/tests/gcode/linuxcnc_multi_spindle_all_direction.ngc @@ -0,0 +1,9 @@ +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 expands S-word $-1 to all configured spindles.) +(Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc expands M3/M4/M5 $-1 to all configured spindles.) +S1200 $-1 +M3 $-1 +M4 $-1 +M5 $-1 +M30