验证 INI 圆弧容差收紧
提示词:快速推进,非纯 source-map-only,保留源依据、自动测试、本地提交且不自动推送。 结论:基于 LinuxCNC rs274ngc_pre.cc 读取 CENTER_ARC_RADIUS_TOLERANCE_MM 以及 interp_convert.cc/interp_arc.cc IJK 圆弧半径误差检查,新增 metric arc fixture 和 tighter INI 覆盖默认通过、INI 收紧失败;./test-native.sh 和 ./test-linuxcnc-source-link.sh 通过。
This commit is contained in:
@@ -44,6 +44,7 @@ base_var_file="$build_dir/rs274ngc-base.var"
|
|||||||
ini_named_parameter_file="$(pwd)/tests/gcode/linuxcnc_ini_named_parameter.ini"
|
ini_named_parameter_file="$(pwd)/tests/gcode/linuxcnc_ini_named_parameter.ini"
|
||||||
disable_g92_persistence_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_g92_persistence.ini"
|
disable_g92_persistence_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_g92_persistence.ini"
|
||||||
disable_fanuc_style_sub_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini"
|
disable_fanuc_style_sub_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini"
|
||||||
|
tight_arc_center_tolerance_ini_file="$(pwd)/tests/gcode/linuxcnc_tight_arc_center_tolerance.ini"
|
||||||
output_dir="$build_dir/outputs"
|
output_dir="$build_dir/outputs"
|
||||||
mkdir -p "$output_dir"
|
mkdir -p "$output_dir"
|
||||||
cp "$linuxcnc_root/tests/halui/jogging/sim.var" "$base_var_file"
|
cp "$linuxcnc_root/tests/halui/jogging/sim.var" "$base_var_file"
|
||||||
@@ -688,6 +689,15 @@ CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linux
|
|||||||
# passes unit-specific center-arc tolerance to src/emc/rs274ngc/interp_arc.cc
|
# passes unit-specific center-arc tolerance to src/emc/rs274ngc/interp_arc.cc
|
||||||
# arc_data_ijk(), which rejects excessive start/end radius mismatch.
|
# arc_data_ijk(), which rejects excessive start/end radius mismatch.
|
||||||
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_center_tolerance_good_imperial.ngc >"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_good_imperial.json"
|
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_center_tolerance_good_imperial.ngc >"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_good_imperial.json"
|
||||||
|
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc >"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_default.json"
|
||||||
|
if INI_FILE_NAME="$tight_arc_center_tolerance_ini_file" CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
|
||||||
|
"$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc \
|
||||||
|
>"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_ini.json" 2>"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_ini.err"; then
|
||||||
|
echo "expected linuxcnc_arc_center_tolerance_tight_metric.ngc to fail with tight INI tolerance" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
grep -Fq "Radius to end of arc differs from radius to start" \
|
||||||
|
"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_ini.err"
|
||||||
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_dump" tests/gcode/linuxcnc_arc_center_tolerance_bad_metric.ngc \
|
"$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_center_tolerance_bad_metric.ngc \
|
||||||
>"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_bad_metric.json" 2>"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_bad_metric.err"; then
|
>"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_bad_metric.json" 2>"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_bad_metric.err"; then
|
||||||
@@ -2053,6 +2063,15 @@ if not any(
|
|||||||
):
|
):
|
||||||
raise SystemExit("missing LinuxCNC small imperial center-format arc within tolerance")
|
raise SystemExit("missing LinuxCNC small imperial center-format arc within tolerance")
|
||||||
|
|
||||||
|
arc_center_tolerance_tight_metric_default = load("cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_default.json")
|
||||||
|
if not any(
|
||||||
|
event["type"] == "arc-feed" and
|
||||||
|
event["line"] == 5 and
|
||||||
|
event["end"]["x"] == 2
|
||||||
|
for event in arc_center_tolerance_tight_metric_default
|
||||||
|
):
|
||||||
|
raise SystemExit("missing LinuxCNC metric center-format arc under default tolerance")
|
||||||
|
|
||||||
incremental_r_arc = load("cnc_sim_linuxcnc_incremental_and_r_arc.json")
|
incremental_r_arc = load("cnc_sim_linuxcnc_incremental_and_r_arc.json")
|
||||||
if not any(
|
if not any(
|
||||||
event["type"] == "linear-feed" and
|
event["type"] == "linear-feed" and
|
||||||
@@ -3010,6 +3029,8 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_extended_plane_cycle.json"
|
|||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_arc_planes.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_arc_planes.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_arc_distance_modes.json"
|
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_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_predefined_positions.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_machine_coordinates.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_cutter_comp.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_cutter_comp.json"
|
||||||
|
|||||||
@@ -177,6 +177,7 @@ base_var_file="$build_dir/rs274ngc-source-base.var"
|
|||||||
ini_named_parameter_file="$(pwd)/tests/gcode/linuxcnc_ini_named_parameter.ini"
|
ini_named_parameter_file="$(pwd)/tests/gcode/linuxcnc_ini_named_parameter.ini"
|
||||||
disable_g92_persistence_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_g92_persistence.ini"
|
disable_g92_persistence_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_g92_persistence.ini"
|
||||||
disable_fanuc_style_sub_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini"
|
disable_fanuc_style_sub_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini"
|
||||||
|
tight_arc_center_tolerance_ini_file="$(pwd)/tests/gcode/linuxcnc_tight_arc_center_tolerance.ini"
|
||||||
multi_spindle_modes_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_modes.ini"
|
multi_spindle_modes_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_modes.ini"
|
||||||
multi_spindle_override_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_override.ini"
|
multi_spindle_override_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_override.ini"
|
||||||
multi_spindle_threading_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_threading.ini"
|
multi_spindle_threading_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_threading.ini"
|
||||||
@@ -1719,6 +1720,17 @@ 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_arc_center_tolerance_good_imperial.ngc \
|
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_arc_center_tolerance_good_imperial.ngc \
|
||||||
>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_good_imperial.json"
|
>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_good_imperial.json"
|
||||||
|
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
|
||||||
|
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc \
|
||||||
|
>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_default.json"
|
||||||
|
if INI_FILE_NAME="$tight_arc_center_tolerance_ini_file" CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
|
||||||
|
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc \
|
||||||
|
>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_ini.json" 2>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_ini.err"; then
|
||||||
|
echo "expected linuxcnc_arc_center_tolerance_tight_metric.ngc to fail with tight INI tolerance" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
grep -Fq "Radius to end of arc differs from radius to start" \
|
||||||
|
"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_ini.err"
|
||||||
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_arc_center_tolerance_bad_metric.ngc \
|
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_arc_center_tolerance_bad_metric.ngc \
|
||||||
>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_bad_metric.json" 2>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_bad_metric.err"; then
|
>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_bad_metric.json" 2>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_bad_metric.err"; then
|
||||||
@@ -3530,6 +3542,15 @@ if not any(
|
|||||||
):
|
):
|
||||||
raise SystemExit("missing source-linked small imperial center-format arc within tolerance")
|
raise SystemExit("missing source-linked small imperial center-format arc within tolerance")
|
||||||
|
|
||||||
|
arc_center_tolerance_tight_metric_default = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_default.json").read_text())
|
||||||
|
if not any(
|
||||||
|
event["type"] == "arc-feed" and
|
||||||
|
event["line"] == 5 and
|
||||||
|
event["end"]["x"] == 2
|
||||||
|
for event in arc_center_tolerance_tight_metric_default
|
||||||
|
):
|
||||||
|
raise SystemExit("missing source-linked metric center-format arc under default tolerance")
|
||||||
|
|
||||||
g76only = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_g76only.json").read_text())
|
g76only = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_g76only.json").read_text())
|
||||||
if not any(
|
if not any(
|
||||||
event["type"] == "comment" and
|
event["type"] == "comment" and
|
||||||
@@ -4056,6 +4077,8 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_source_parameter_expression_assignment
|
|||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_word_bracket_whitespace.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_word_bracket_whitespace.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_m98_mixed_styles_variables.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_m98_mixed_styles_variables.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_good_imperial.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_good_imperial.json"
|
||||||
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_default.json"
|
||||||
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_ini.err"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_g76only.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_g76only.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_numbered_parameters.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_numbered_parameters.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_rotary_probe_numbered_parameters.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_rotary_probe_numbered_parameters.json"
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
G21
|
||||||
|
F1
|
||||||
|
G0 X0 Y0 Z0
|
||||||
|
(Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc applies CENTER_ARC_RADIUS_TOLERANCE_MM from INI before interp_arc.cc checks IJK radius mismatch.)
|
||||||
|
G2 X2 Y0 I[1 - 0.0011]
|
||||||
|
M2
|
||||||
2
tests/gcode/linuxcnc_tight_arc_center_tolerance.ini
Normal file
2
tests/gcode/linuxcnc_tight_arc_center_tolerance.ini
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[RS274NGC]
|
||||||
|
CENTER_ARC_RADIUS_TOLERANCE_MM = 0.001
|
||||||
Reference in New Issue
Block a user