按源同步单位切换当前位置

结论:依据 LinuxCNC interp_convert.cc convert_length_units 与 unit_tests/interp/test_interp_basics.cc,G20/G21 切换时事件桥同步重标定当前线性坐标,native/source-link 覆盖通过。
This commit is contained in:
cnc
2026-06-06 08:15:59 +08:00
parent 10bf0a5897
commit ccd51ff373
6 changed files with 99 additions and 1 deletions

View File

@@ -1858,6 +1858,12 @@ 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_percent_file_ignores_trailing.ngc \
>"$output_dir/cnc_sim_linuxcnc_source_percent_file_ignores_trailing.json"
# Source basis: LinuxCNC unit_tests/interp/test_interp_basics.cc Convert G20 / G21
# asserts that unit changes rescale current linear axes while rotary axes remain
# angular values.
CNC_SIM_RS274_VAR="$var_file" \
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_units_current_position.ngc \
>"$output_dir/cnc_sim_linuxcnc_source_units_current_position.json"
CNC_SIM_RS274_SOURCE_OUTPUT_DIR="$output_dir" python3 - <<'PY'
import json
@@ -1895,6 +1901,27 @@ required_motion = {
check_motion("cnc_sim_linuxcnc_source_basic_motion.json", required_motion)
check_motion("cnc_sim_linuxcnc_source_basic_mill.json", required_motion | {"tool-change"})
units_current_position = load("cnc_sim_linuxcnc_source_units_current_position.json")
units_rapid = [
event
for event in units_current_position
if event["type"] == "rapid"
]
if len(units_rapid) != 3:
raise SystemExit(f"unexpected source-linked unit-current-position rapid count: {len(units_rapid)}")
if units_rapid[1]["start"] != units_rapid[1]["end"]:
raise SystemExit(
"source-linked LinuxCNC G21 current-position rescale was not reflected before the metric no-op rapid: "
f"{units_rapid[1]!r}"
)
if units_rapid[2]["start"] != units_rapid[2]["end"]:
raise SystemExit(
"source-linked LinuxCNC G20 current-position rescale was not reflected before the inch no-op rapid: "
f"{units_rapid[2]!r}"
)
if (units_rapid[1]["end"]["a"], units_rapid[1]["end"]["b"], units_rapid[1]["end"]["c"]) != (4, 5, 6):
raise SystemExit("source-linked LinuxCNC G21 unit change unexpectedly scaled rotary axes")
fractional_linenumbers = load("cnc_sim_linuxcnc_source_fractional_linenumbers.json")
fractional_spindle_states = [
(event["line"], event["spindle"])
@@ -4148,3 +4175,4 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_source_fractional_linenumbers.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_source_extended_linenumbers.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_source_close_and_downcase_words.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_source_percent_file_ignores_trailing.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_source_units_current_position.json"