From 92562db29f08d34ed9572caf1b16f8e486f58d4e Mon Sep 17 00:00:00 2001 From: cnc Date: Sat, 6 Jun 2026 08:51:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=89=E6=BA=90=E9=AA=8C=E8=AF=81=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E4=BD=8D=E7=BD=AE=E5=91=BD=E5=90=8D=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-linuxcnc-rs274-native.sh | 22 ++++++++++++++++++- test-linuxcnc-source-link.sh | 21 ++++++++++++++++++ ...nuxcnc_readonly_named_current_position.ngc | 8 +++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 tests/gcode/linuxcnc_readonly_named_current_position.ngc diff --git a/test-linuxcnc-rs274-native.sh b/test-linuxcnc-rs274-native.sh index 2f03eac..892f6f6 100755 --- a/test-linuxcnc-rs274-native.sh +++ b/test-linuxcnc-rs274-native.sh @@ -915,9 +915,11 @@ INI_FILE_NAME="$ini_named_parameter_file" CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS27 # and close_and_downcase() accept whitespace around bracketed word values. CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_word_bracket_whitespace.ngc >"$output_dir/cnc_sim_linuxcnc_word_bracket_whitespace.json" # Source basis: LinuxCNC src/emc/rs274ngc/interp_namedparams.cc lookup_named_param() -# and init_readonly_param() expose modal/unit/feed/spindle readonly parameters. +# and init_readonly_param() expose modal/unit/feed/spindle readonly parameters +# plus current-position #<_x> through #<_w> aliases. CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_readonly_named_parameters.ngc >"$output_dir/cnc_sim_linuxcnc_readonly_named_parameters.json" CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_readonly_named_parameters_extra.ngc >"$output_dir/cnc_sim_linuxcnc_readonly_named_parameters_extra.json" +CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_readonly_named_current_position.ngc >"$output_dir/cnc_sim_linuxcnc_readonly_named_current_position.json" # Source basis: LinuxCNC src/emc/rs274ngc/interp_array.cc defines # required/readonly numbered parameters; interp_internal.cc set_probe_data() # and interp_convert.cc update probe, tool, G28/G30, G92, G5X, and current @@ -2623,6 +2625,23 @@ expected_readonly_moves = [ if readonly_moves != expected_readonly_moves: raise SystemExit(f"unexpected LinuxCNC readonly named parameter motions: {readonly_moves!r}") +readonly_current = load("cnc_sim_linuxcnc_readonly_named_current_position.json") +if not any( + event["type"] == "linear-feed" and + event["line"] == 6 and + event["end"]["x"] == 10 and + event["end"]["y"] == 2 and + event["end"]["z"] == 3 and + event["end"]["a"] == 4 and + event["end"]["b"] == 5 and + event["end"]["c"] == 6 and + event["end"]["u"] == 7 and + event["end"]["v"] == 8 and + event["end"]["w"] == 9 + for event in readonly_current +): + raise SystemExit("missing LinuxCNC readonly named current-position branch motion") + numbered_parameters = load("cnc_sim_linuxcnc_numbered_parameters.json") if not any( event["type"] == "linear-feed" and @@ -3151,6 +3170,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_named_parameter_normalization.json" echo "dumped $output_dir/cnc_sim_linuxcnc_ini_named_parameter.json" echo "dumped $output_dir/cnc_sim_linuxcnc_readonly_named_parameters.json" echo "dumped $output_dir/cnc_sim_linuxcnc_readonly_named_parameters_extra.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_readonly_named_current_position.json" echo "dumped $output_dir/cnc_sim_linuxcnc_numbered_parameters.json" echo "dumped $output_dir/cnc_sim_linuxcnc_rotary_probe_numbered_parameters.json" echo "dumped $output_dir/cnc_sim_linuxcnc_multi_rotary_probe_numbered_parameters.json" diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index bd29869..e9fa47f 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -887,6 +887,9 @@ CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_readonly_named_parameters_extra.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_readonly_named_parameters_extra.json" +CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_readonly_named_current_position.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_readonly_named_current_position.json" if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_readonly_named_parameter_assign_error.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_readonly_named_parameter_assign_error.json" 2>"$output_dir/cnc_sim_linuxcnc_source_readonly_named_parameter_assign_error.err"; then @@ -3381,6 +3384,23 @@ expected_readonly_common_moves = [ if readonly_common_moves != expected_readonly_common_moves: raise SystemExit(f"unexpected source-linked readonly named parameter motions: {readonly_common_moves!r}") +readonly_current = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_readonly_named_current_position.json").read_text()) +if not any( + event["type"] == "linear-feed" and + event["line"] == 6 and + event["end"]["x"] == 10 and + event["end"]["y"] == 2 and + event["end"]["z"] == 3 and + event["end"]["a"] == 4 and + event["end"]["b"] == 5 and + event["end"]["c"] == 6 and + event["end"]["u"] == 7 and + event["end"]["v"] == 8 and + event["end"]["w"] == 9 + for event in readonly_current +): + raise SystemExit("missing source-linked readonly named current-position branch motion") + readonly_named = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_readonly_named_parameters_extra.json").read_text()) if not any( event["type"] == "linear-feed" and @@ -4172,6 +4192,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_source_named_parameter_normalization.j echo "dumped $output_dir/cnc_sim_linuxcnc_source_ini_named_parameter.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_readonly_named_parameters.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_readonly_named_parameters_extra.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_source_readonly_named_current_position.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_value_returned.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_call_level.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_exists_word_value.json" diff --git a/tests/gcode/linuxcnc_readonly_named_current_position.ngc b/tests/gcode/linuxcnc_readonly_named_current_position.ngc new file mode 100644 index 0000000..64bc36f --- /dev/null +++ b/tests/gcode/linuxcnc_readonly_named_current_position.ngc @@ -0,0 +1,8 @@ +G21 G90 G17 +(Source basis: LinuxCNC src/emc/rs274ngc/interp_namedparams.cc maps readonly #<_x> through #<_w> aliases to current X/Y/Z/A/B/C/U/V/W positions.) +F100 +G1 X1 Y2 Z3 A4 B5 C6 U7 V8 W9 +O10 if [[#<_x> EQ 1] AND [#<_y> EQ 2] AND [#<_z> EQ 3] AND [#<_a> EQ 4] AND [#<_b> EQ 5] AND [#<_c> EQ 6] AND [#<_u> EQ 7] AND [#<_v> EQ 8] AND [#<_w> EQ 9]] +G1 X10 +O10 endif +M30