按源验证当前位置命名参数

This commit is contained in:
cnc
2026-06-06 08:51:20 +08:00
parent de5f28f7ee
commit 92562db29f
3 changed files with 50 additions and 1 deletions

View File

@@ -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. # 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" 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() # 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.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_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 # Source basis: LinuxCNC src/emc/rs274ngc/interp_array.cc defines
# required/readonly numbered parameters; interp_internal.cc set_probe_data() # required/readonly numbered parameters; interp_internal.cc set_probe_data()
# and interp_convert.cc update probe, tool, G28/G30, G92, G5X, and current # 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: if readonly_moves != expected_readonly_moves:
raise SystemExit(f"unexpected LinuxCNC readonly named parameter motions: {readonly_moves!r}") 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") numbered_parameters = load("cnc_sim_linuxcnc_numbered_parameters.json")
if not any( if not any(
event["type"] == "linear-feed" and 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_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.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_readonly_named_parameters_extra.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_numbered_parameters.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_rotary_probe_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" echo "dumped $output_dir/cnc_sim_linuxcnc_multi_rotary_probe_numbered_parameters.json"

View File

@@ -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" \ 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 \ "$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" >"$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" \ 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 \ "$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 >"$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: if readonly_common_moves != expected_readonly_common_moves:
raise SystemExit(f"unexpected source-linked readonly named parameter motions: {readonly_common_moves!r}") 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()) readonly_named = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_readonly_named_parameters_extra.json").read_text())
if not any( if not any(
event["type"] == "linear-feed" and 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_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.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_source_readonly_named_parameters_extra.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_value_returned.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_source_call_level.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_call_level.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_source_exists_word_value.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_exists_word_value.json"

View File

@@ -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