From eb91ced792ab734ac646d416cd9068ff5659bc1c Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 21:09:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=AF=8D=EF=BC=9A=E8=A1=A5?= =?UTF-8?q?=E9=BD=90=20M51=20=E5=A4=9A=E4=B8=BB=E8=BD=B4=E6=BA=90=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 结论:新增 [TRAJ] SPINDLES=2 的 source-linked fixture,验证 LinuxCNC interp_convert.cc 中 M51 带 只切换选定主轴的 speed override;INI 来源为 rs274ngc_pre.cc init 读取 INI_FILE_NAME。未扩展 smoke 语义。检查通过:./test-linuxcnc-source-link.sh;./test-native.sh。 --- test-linuxcnc-source-link.sh | 23 +++++++++++++++++++ .../gcode/linuxcnc_multi_spindle_override.ini | 2 ++ .../gcode/linuxcnc_multi_spindle_override.ngc | 6 +++++ 3 files changed, 31 insertions(+) create mode 100644 tests/gcode/linuxcnc_multi_spindle_override.ini create mode 100644 tests/gcode/linuxcnc_multi_spindle_override.ngc diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index 598f074..508850a 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_override_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_override.ini" output_dir="$build_dir/outputs" mkdir -p "$output_dir" cp "$linuxcnc_root/tests/halui/jogging/sim.var" "$base_var_file" @@ -257,6 +258,12 @@ done CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_override_controls.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_override_controls.json" +# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads +# [TRAJ] SPINDLES from INI_FILE_NAME, and interp_convert.cc M51 applies +# speed override changes only to the selected $ spindle when present. +INI_FILE_NAME="$multi_spindle_override_file" CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_multi_spindle_override.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_multi_spindle_override.json" CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_modal_state.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_modal_state.json" @@ -1846,6 +1853,22 @@ expected_override_states = [ if override_states != expected_override_states: raise SystemExit(f"unexpected source-linked M48-M53 override states: {override_states!r}") +multi_spindle_override = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_multi_spindle_override.json").read_text()) +multi_spindle_override_states = [ + (event["line"], event["reserved"], event["tool"], event["feed"]) + for event in multi_spindle_override + if event["type"] == "comment" and event["reserved"] == 51 +] +expected_multi_spindle_override_states = [ + (4, 51, 1, 0), + (5, 51, 1, 1), +] +if multi_spindle_override_states != expected_multi_spindle_override_states: + raise SystemExit( + "unexpected source-linked M51 selected-spindle override states: " + f"{multi_spindle_override_states!r}" + ) + control_mode_tolerances = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_control_mode_tolerances.json").read_text()) control_mode_tolerance_states = [ (event["line"], event["reserved"], event["feed"]) diff --git a/tests/gcode/linuxcnc_multi_spindle_override.ini b/tests/gcode/linuxcnc_multi_spindle_override.ini new file mode 100644 index 0000000..fb8b9de --- /dev/null +++ b/tests/gcode/linuxcnc_multi_spindle_override.ini @@ -0,0 +1,2 @@ +[TRAJ] +SPINDLES = 2 diff --git a/tests/gcode/linuxcnc_multi_spindle_override.ngc b/tests/gcode/linuxcnc_multi_spindle_override.ngc new file mode 100644 index 0000000..ad81626 --- /dev/null +++ b/tests/gcode/linuxcnc_multi_spindle_override.ngc @@ -0,0 +1,6 @@ +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 M51 with $ selects one spindle override.) +M51 P0 $1 +M51 P1 $1 +M30