验证 INI G64 默认容差
提示词:快速推进,非纯 source-map-only,保留源依据、自动测试、本地提交且不自动推送。 结论:基于 LinuxCNC rs274ngc_pre.cc 读取 G64_DEFAULT_TOLERANCE/G64_DEFAULT_NAIVETOLERANCE 以及 interp_convert.cc convert_control_mode 在 G64 省略 P/Q 时使用默认值,新增 INI/G-code fixture 并接入 native/source-link 事件断言;./test-native.sh 和 ./test-linuxcnc-source-link.sh 通过。
This commit is contained in:
@@ -45,6 +45,7 @@ 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"
|
tight_arc_center_tolerance_ini_file="$(pwd)/tests/gcode/linuxcnc_tight_arc_center_tolerance.ini"
|
||||||
|
g64_default_tolerances_ini_file="$(pwd)/tests/gcode/linuxcnc_g64_default_tolerances.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"
|
||||||
@@ -596,6 +597,10 @@ CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linux
|
|||||||
# convert_control_mode() sends G64 P through SET_MOTION_CONTROL_MODE()
|
# convert_control_mode() sends G64 P through SET_MOTION_CONTROL_MODE()
|
||||||
# and G64 Q through SET_NAIVECAM_TOLERANCE(), defaulting Q to P when Q is omitted.
|
# and G64 Q through SET_NAIVECAM_TOLERANCE(), defaulting Q to P when Q is omitted.
|
||||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_control_mode_tolerances.ngc >"$output_dir/cnc_sim_linuxcnc_control_mode_tolerances.json"
|
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_control_mode_tolerances.ngc >"$output_dir/cnc_sim_linuxcnc_control_mode_tolerances.json"
|
||||||
|
# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads
|
||||||
|
# [RS274NGC] G64_DEFAULT_TOLERANCE/G64_DEFAULT_NAIVETOLERANCE, and
|
||||||
|
# interp_convert.cc convert_control_mode() uses them when G64 omits P/Q.
|
||||||
|
INI_FILE_NAME="$g64_default_tolerances_ini_file" CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_g64_default_tolerances.ngc >"$output_dir/cnc_sim_linuxcnc_g64_default_tolerances.json"
|
||||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_tool_length.ngc >"$output_dir/cnc_sim_linuxcnc_tool_length.json"
|
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_tool_length.ngc >"$output_dir/cnc_sim_linuxcnc_tool_length.json"
|
||||||
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_dynamic_tool_length.ngc >"$output_dir/cnc_sim_linuxcnc_dynamic_tool_length.json"
|
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_dynamic_tool_length.ngc >"$output_dir/cnc_sim_linuxcnc_dynamic_tool_length.json"
|
||||||
# Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc
|
# Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc
|
||||||
@@ -1616,6 +1621,19 @@ expected_control_mode_tolerance_states = [
|
|||||||
if control_mode_tolerance_states != expected_control_mode_tolerance_states:
|
if control_mode_tolerance_states != expected_control_mode_tolerance_states:
|
||||||
raise SystemExit(f"unexpected G64 P/Q control mode tolerance states: {control_mode_tolerance_states!r}")
|
raise SystemExit(f"unexpected G64 P/Q control mode tolerance states: {control_mode_tolerance_states!r}")
|
||||||
|
|
||||||
|
g64_default_tolerances = load("cnc_sim_linuxcnc_g64_default_tolerances.json")
|
||||||
|
g64_default_tolerance_states = [
|
||||||
|
(event["line"], event["reserved"], event["feed"])
|
||||||
|
for event in g64_default_tolerances
|
||||||
|
if event["type"] == "comment" and event["reserved"] in {640, 641}
|
||||||
|
]
|
||||||
|
expected_g64_default_tolerance_states = [
|
||||||
|
(3, 640, 0.07),
|
||||||
|
(3, 641, 0.04),
|
||||||
|
]
|
||||||
|
if g64_default_tolerance_states != expected_g64_default_tolerance_states:
|
||||||
|
raise SystemExit(f"unexpected INI-backed G64 default tolerance states: {g64_default_tolerance_states!r}")
|
||||||
|
|
||||||
tool_length = load("cnc_sim_linuxcnc_tool_length.json")
|
tool_length = load("cnc_sim_linuxcnc_tool_length.json")
|
||||||
if not any(
|
if not any(
|
||||||
event["type"] == "comment" and
|
event["type"] == "comment" and
|
||||||
@@ -3020,6 +3038,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_program_end_m99.json"
|
|||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_coolant.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_coolant.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_feed_modes.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_feed_modes.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_motion_modes.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_motion_modes.json"
|
||||||
|
echo "dumped $output_dir/cnc_sim_linuxcnc_g64_default_tolerances.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_tool_length.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_tool_length.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_dynamic_tool_length.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_dynamic_tool_length.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_canned_cycle.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_canned_cycle.json"
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ 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"
|
tight_arc_center_tolerance_ini_file="$(pwd)/tests/gcode/linuxcnc_tight_arc_center_tolerance.ini"
|
||||||
|
g64_default_tolerances_ini_file="$(pwd)/tests/gcode/linuxcnc_g64_default_tolerances.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"
|
||||||
@@ -412,6 +413,12 @@ CNC_SIM_RS274_VAR="$var_file" \
|
|||||||
CNC_SIM_RS274_VAR="$var_file" \
|
CNC_SIM_RS274_VAR="$var_file" \
|
||||||
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_control_mode_tolerances.ngc \
|
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_control_mode_tolerances.ngc \
|
||||||
>"$output_dir/cnc_sim_linuxcnc_source_control_mode_tolerances.json"
|
>"$output_dir/cnc_sim_linuxcnc_source_control_mode_tolerances.json"
|
||||||
|
# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads
|
||||||
|
# [RS274NGC] G64_DEFAULT_TOLERANCE/G64_DEFAULT_NAIVETOLERANCE, and
|
||||||
|
# interp_convert.cc convert_control_mode() uses them when G64 omits P/Q.
|
||||||
|
INI_FILE_NAME="$g64_default_tolerances_ini_file" CNC_SIM_RS274_VAR="$var_file" \
|
||||||
|
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_g64_default_tolerances.ngc \
|
||||||
|
>"$output_dir/cnc_sim_linuxcnc_source_g64_default_tolerances.json"
|
||||||
CNC_SIM_RS274_VAR="$var_file" \
|
CNC_SIM_RS274_VAR="$var_file" \
|
||||||
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_tool_length.ngc \
|
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_tool_length.ngc \
|
||||||
>"$output_dir/cnc_sim_linuxcnc_source_tool_length.json"
|
>"$output_dir/cnc_sim_linuxcnc_source_tool_length.json"
|
||||||
@@ -2217,6 +2224,19 @@ expected_control_mode_tolerance_states = [
|
|||||||
if control_mode_tolerance_states != expected_control_mode_tolerance_states:
|
if control_mode_tolerance_states != expected_control_mode_tolerance_states:
|
||||||
raise SystemExit(f"unexpected source-linked G64 P/Q control mode tolerance states: {control_mode_tolerance_states!r}")
|
raise SystemExit(f"unexpected source-linked G64 P/Q control mode tolerance states: {control_mode_tolerance_states!r}")
|
||||||
|
|
||||||
|
g64_default_tolerances = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_g64_default_tolerances.json").read_text())
|
||||||
|
g64_default_tolerance_states = [
|
||||||
|
(event["line"], event["reserved"], event["feed"])
|
||||||
|
for event in g64_default_tolerances
|
||||||
|
if event["type"] == "comment" and event["reserved"] in {640, 641}
|
||||||
|
]
|
||||||
|
expected_g64_default_tolerance_states = [
|
||||||
|
(3, 640, 0.07),
|
||||||
|
(3, 641, 0.04),
|
||||||
|
]
|
||||||
|
if g64_default_tolerance_states != expected_g64_default_tolerance_states:
|
||||||
|
raise SystemExit(f"unexpected source-linked INI-backed G64 default tolerance states: {g64_default_tolerance_states!r}")
|
||||||
|
|
||||||
modal_state = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_modal_state.json").read_text())
|
modal_state = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_modal_state.json").read_text())
|
||||||
if not any(
|
if not any(
|
||||||
event["type"] == "rapid" and
|
event["type"] == "rapid" and
|
||||||
@@ -4046,6 +4066,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_source_program_end_m99.json"
|
|||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_coolant.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_coolant.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_feed_modes.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_feed_modes.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_motion_modes.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_motion_modes.json"
|
||||||
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_g64_default_tolerances.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_tool_length.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_tool_length.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_dynamic_tool_length.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_dynamic_tool_length.json"
|
||||||
echo "dumped $output_dir/cnc_sim_linuxcnc_source_canned_cycle.json"
|
echo "dumped $output_dir/cnc_sim_linuxcnc_source_canned_cycle.json"
|
||||||
|
|||||||
3
tests/gcode/linuxcnc_g64_default_tolerances.ini
Normal file
3
tests/gcode/linuxcnc_g64_default_tolerances.ini
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[RS274NGC]
|
||||||
|
G64_DEFAULT_TOLERANCE = 0.07
|
||||||
|
G64_DEFAULT_NAIVETOLERANCE = 0.04
|
||||||
4
tests/gcode/linuxcnc_g64_default_tolerances.ngc
Normal file
4
tests/gcode/linuxcnc_g64_default_tolerances.ngc
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
G21 G90 G17
|
||||||
|
(Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc reads G64_DEFAULT_TOLERANCE and G64_DEFAULT_NAIVETOLERANCE for G64 without P/Q.)
|
||||||
|
G64
|
||||||
|
M30
|
||||||
Reference in New Issue
Block a user