继续按 align-linuxcnc 约束:补 M98 与增量圆弧源码覆盖,测试通过
This commit is contained in:
@@ -127,6 +127,10 @@ make --output-sync=target -j"$build_jobs" -f "$rs274_native_makefile"
|
||||
|
||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_basic_motion.ngc >"$output_dir/cnc_sim_linuxcnc_basic_motion.json"
|
||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/basic_mill.ngc >"$output_dir/cnc_sim_linuxcnc_basic_mill.json"
|
||||
# Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc
|
||||
# convert_distance_mode() updates G90/G91 state, and convert_arc() routes
|
||||
# R-format arcs through src/emc/rs274ngc/interp_find.cc arc-center math.
|
||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/incremental_and_r_arc.ngc >"$output_dir/cnc_sim_linuxcnc_incremental_and_r_arc.json"
|
||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_rtcp_controls.ngc >"$output_dir/cnc_sim_linuxcnc_rtcp_controls.json"
|
||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_spindle_direction.ngc >"$output_dir/cnc_sim_linuxcnc_spindle_direction.json"
|
||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_spindle_modes.ngc >"$output_dir/cnc_sim_linuxcnc_spindle_modes.json"
|
||||
@@ -166,6 +170,10 @@ CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linux
|
||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_probe_no_error.ngc >"$output_dir/cnc_sim_linuxcnc_probe_no_error.json"
|
||||
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/smoke_oword_subprogram.ngc >"$output_dir/cnc_sim_linuxcnc_oword_subprogram.json"
|
||||
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_named_oword_subprogram.ngc >"$output_dir/cnc_sim_linuxcnc_named_oword_subprogram.json"
|
||||
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc read_m() marks
|
||||
# Fanuc-style M98/M99 subprogram blocks, and interp_o_word.cc execute_call()
|
||||
# handles L-word repeat counts and return-to-caller position.
|
||||
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/smoke_subprogram_m98.ngc >"$output_dir/cnc_sim_linuxcnc_m98_subprogram.json"
|
||||
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_oword_control_flow.ngc >"$output_dir/cnc_sim_linuxcnc_oword_control_flow.json"
|
||||
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_named_parameter_exists.ngc >"$output_dir/cnc_sim_linuxcnc_named_parameter_exists.json"
|
||||
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_indexed_parameters.ngc >"$output_dir/cnc_sim_linuxcnc_indexed_parameters.json"
|
||||
@@ -830,6 +838,37 @@ expected_arc_centers = [(5, 5, 0), (7, 15, 0), (9, 25, 0)]
|
||||
if arc_centers != expected_arc_centers:
|
||||
raise SystemExit(f"unexpected G90.1/G91.1 arc centers: {arc_centers!r}")
|
||||
|
||||
incremental_r_arc = load("cnc_sim_linuxcnc_incremental_and_r_arc.json")
|
||||
if not any(
|
||||
event["type"] == "linear-feed" and
|
||||
event["line"] == 4 and
|
||||
event["start"]["x"] == 0 and
|
||||
event["end"]["x"] == 10
|
||||
for event in incremental_r_arc
|
||||
):
|
||||
raise SystemExit("missing LinuxCNC G91 incremental X feed move")
|
||||
if not any(
|
||||
event["type"] == "linear-feed" and
|
||||
event["line"] == 5 and
|
||||
event["start"]["y"] == 0 and
|
||||
event["end"]["y"] == 10
|
||||
for event in incremental_r_arc
|
||||
):
|
||||
raise SystemExit("missing LinuxCNC modal incremental Y feed move")
|
||||
if not any(
|
||||
event["type"] == "arc-feed" and
|
||||
event["line"] == 7 and
|
||||
event["start"]["x"] == 10 and
|
||||
event["start"]["y"] == 10 and
|
||||
event["end"]["x"] == 20 and
|
||||
event["end"]["y"] == 10 and
|
||||
event["center"]["x"] == 15 and
|
||||
event["center"]["y"] == 10 and
|
||||
event["arcTurns"] == -1
|
||||
for event in incremental_r_arc
|
||||
):
|
||||
raise SystemExit("missing LinuxCNC absolute R-format clockwise arc")
|
||||
|
||||
predefined = load("cnc_sim_linuxcnc_predefined_positions.json")
|
||||
predefined_rapids = [
|
||||
(
|
||||
@@ -949,6 +988,23 @@ if any(
|
||||
):
|
||||
raise SystemExit("LinuxCNC O-word return should skip remaining subprogram body")
|
||||
|
||||
m98_subprogram = load("cnc_sim_linuxcnc_m98_subprogram.json")
|
||||
m98_sub_moves = [
|
||||
(event["line"], event["start"]["x"], event["end"]["x"])
|
||||
for event in m98_subprogram
|
||||
if event["type"] == "linear-feed" and event["line"] == 8
|
||||
]
|
||||
if m98_sub_moves != [(8, 0, 5), (8, 5, 10)]:
|
||||
raise SystemExit(f"unexpected LinuxCNC M98 repeated subprogram moves: {m98_sub_moves!r}")
|
||||
if not any(
|
||||
event["type"] == "linear-feed" and
|
||||
event["line"] == 5 and
|
||||
event["start"]["x"] == 10 and
|
||||
event["end"]["x"] == 20
|
||||
for event in m98_subprogram
|
||||
):
|
||||
raise SystemExit("missing LinuxCNC M98 return-to-caller motion")
|
||||
|
||||
named_oword = load("cnc_sim_linuxcnc_named_oword_subprogram.json")
|
||||
if not any(
|
||||
event["type"] == "linear-feed" and
|
||||
@@ -1235,6 +1291,7 @@ PY
|
||||
echo "linuxcnc rs274 native smoke passed"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_basic_motion.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_basic_mill.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_incremental_and_r_arc.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_rtcp_controls.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_spindle_direction.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_spindle_modes.json"
|
||||
@@ -1266,6 +1323,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_comments.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_probe_no_error.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_oword_subprogram.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_named_oword_subprogram.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_m98_subprogram.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_oword_control_flow.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_named_parameter_exists.json"
|
||||
echo "dumped $output_dir/cnc_sim_linuxcnc_indexed_parameters.json"
|
||||
|
||||
Reference in New Issue
Block a user