From 9c73577ade26f370d7b1af7e3b9ebbce57238f63 Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 21:50:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E5=A4=9A=E4=B8=BB=E8=BD=B4?= =?UTF-8?q?=20M19=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_orient.ngc | 5 ++++ 2 files changed, 33 insertions(+) create mode 100644 tests/gcode/linuxcnc_multi_spindle_orient.ngc diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index 4047255..f6883a8 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -236,6 +236,12 @@ INI_FILE_NAME="$multi_spindle_modes_file" CNC_SIM_RS274_VAR="$var_file" \ 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" +# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads +# [TRAJ] SPINDLES from INI_FILE_NAME, and interp_convert.cc routes M19 with a +# $ selector to the selected spindle for orient and wait Canon calls. +INI_FILE_NAME="$multi_spindle_modes_file" CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_multi_spindle_orient.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_multi_spindle_orient.json" CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_io_controls.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_io_controls.json" @@ -1899,6 +1905,27 @@ if not any( ): raise SystemExit("missing source-linked M19 spindle orient wait state") +multi_spindle_orient = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_multi_spindle_orient.json").read_text()) +if not any( + event["type"] == "comment" and + event["line"] == 4 and + event["reserved"] == 1901 and + event["tool"] == 1 and + event["feed"] == 45 and + event["arcTurns"] == 1 + for event in multi_spindle_orient +): + raise SystemExit("missing source-linked selected-spindle M19 orient state") +if not any( + event["type"] == "comment" and + event["line"] == 4 and + event["reserved"] == 1902 and + event["tool"] == 1 and + event["dwellSeconds"] == 2 + for event in multi_spindle_orient +): + raise SystemExit("missing source-linked selected-spindle M19 orient wait state") + io_controls = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_io_controls.json").read_text()) io_states = [ (event["line"], event["reserved"], event["tool"], event["feed"], event["arcTurns"], event["dwellSeconds"]) @@ -3713,6 +3740,7 @@ 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_multi_spindle_orient.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_io_controls.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_override_controls.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_modal_state.json" diff --git a/tests/gcode/linuxcnc_multi_spindle_orient.ngc b/tests/gcode/linuxcnc_multi_spindle_orient.ngc new file mode 100644 index 0000000..6e53b99 --- /dev/null +++ b/tests/gcode/linuxcnc_multi_spindle_orient.ngc @@ -0,0 +1,5 @@ +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_convert.cc M19 with $ selects spindle orient and wait calls.) +M19 R45 P1 Q2 $1 +M30