按源同步单位切换当前位置
结论:依据 LinuxCNC interp_convert.cc convert_length_units 与 unit_tests/interp/test_interp_basics.cc,G20/G21 切换时事件桥同步重标定当前线性坐标,native/source-link 覆盖通过。
This commit is contained in:
@@ -1174,6 +1174,10 @@ CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linux
|
||||
# src/emc/rs274ngc/interp_read.cc returns INTERP_ENDFILE at the matching '%',
|
||||
# so later lines are ignored.
|
||||
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_percent_file_ignores_trailing.ngc >"$output_dir/cnc_sim_linuxcnc_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 and work/G92 linear
|
||||
# offsets while rotary axes remain angular values.
|
||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_units_current_position.ngc >"$output_dir/cnc_sim_linuxcnc_units_current_position.json"
|
||||
CNC_SIM_RS274_NATIVE_OUTPUT_DIR="$output_dir" python3 - <<'PY'
|
||||
import json
|
||||
import os
|
||||
@@ -1199,6 +1203,27 @@ required_motion = {"set-units", "set-plane", "set-spindle", "rapid", "set-feed",
|
||||
check(OUTPUT_DIR / "cnc_sim_linuxcnc_basic_motion.json", required_motion)
|
||||
check(OUTPUT_DIR / "cnc_sim_linuxcnc_basic_mill.json", required_motion | {"tool-change"})
|
||||
|
||||
units_current_position = load("cnc_sim_linuxcnc_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 unit-current-position rapid count: {len(units_rapid)}")
|
||||
if units_rapid[1]["start"] != units_rapid[1]["end"]:
|
||||
raise SystemExit(
|
||||
"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(
|
||||
"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("LinuxCNC G21 unit change unexpectedly scaled rotary axes")
|
||||
|
||||
fractional_linenumbers = load("cnc_sim_linuxcnc_fractional_linenumbers.json")
|
||||
fractional_spindle_states = [
|
||||
(event["line"], event["spindle"])
|
||||
@@ -3050,6 +3075,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_arc_distance_modes.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_arc_center_tolerance_good_imperial.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_default.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_ini.err"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_units_current_position.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_predefined_positions.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_machine_coordinates.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_cutter_comp.json"
|
||||
|
||||
Reference in New Issue
Block a user