From 51b415a70132d8db4622c5fa34d5f885fe5bb6c8 Mon Sep 17 00:00:00 2001 From: cnc Date: Wed, 3 Jun 2026 20:36:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=82=E8=80=83=E6=89=80=E6=9C=89=E5=88=86?= =?UTF-8?q?=E7=BB=84=EF=BC=8C=E5=AE=8C=E6=88=90=E5=B0=BD=E9=87=8F=E5=A4=9A?= =?UTF-8?q?=E7=9A=84=E5=86=85=E5=AE=B9=E3=80=82=E7=A6=81=E6=AD=A2=E9=A1=BA?= =?UTF-8?q?=E6=89=8B=E6=89=A9=E5=8A=9F=E8=83=BD=20smoke?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 结论:补齐 Puma560 DH 参数生成器的可执行入口和 LinuxCNC-root 相对 HAL 源约束,锁住 puma560_dh.hal 中 genserkins DH 值到生成输出的映射,不新增 CNC 行为或 smoke 功能。 --- generate-linuxcnc-puma560-dh-parameters.sh | 35 +++++++++++- test-all-native.sh | 63 ++++++++++++++++++++++ 2 files changed, 96 insertions(+), 2 deletions(-) mode change 100644 => 100755 generate-linuxcnc-puma560-dh-parameters.sh diff --git a/generate-linuxcnc-puma560-dh-parameters.sh b/generate-linuxcnc-puma560-dh-parameters.sh old mode 100644 new mode 100755 index 4ddb6b5..dee4367 --- a/generate-linuxcnc-puma560-dh-parameters.sh +++ b/generate-linuxcnc-puma560-dh-parameters.sh @@ -7,7 +7,38 @@ cd "$(dirname "$0")" # configs/sim/axis/vismach/puma/puma560_dh.hal setp genserkins.{A,ALPHA,D}-N # values used by LinuxCNC genser/switchkins simulation configs. linuxcnc_root=${LINUXCNC_ROOT:-../linuxcnc} + +usage() { + echo "usage: $0 [linuxcnc-root-relative-puma560-dh-hal]" >&2 +} + +case "${1:-}" in + --help|-h) + usage + exit 0 + ;; + --*) + usage + echo "unknown LinuxCNC puma560 DH generator option: $1" >&2 + exit 1 + ;; +esac +if [[ -n "${2:-}" ]]; then + usage + echo "too many LinuxCNC puma560 DH generator arguments" >&2 + exit 1 +fi + source_path=${1:-configs/sim/axis/vismach/puma/puma560_dh.hal} +if [[ "$source_path" = /* || "$source_path" == .. || "$source_path" == ../* || "$source_path" == */.. || "$source_path" == */../* ]]; then + echo "LinuxCNC puma560 DH HAL source path must stay LinuxCNC-root relative: $source_path" >&2 + exit 1 +fi +if [[ "$source_path" != *.hal ]]; then + echo "LinuxCNC puma560 DH source must be a HAL file: $source_path" >&2 + exit 1 +fi + source_file="$linuxcnc_root/$source_path" if [[ ! -f "$source_file" ]]; then @@ -25,8 +56,8 @@ $1 == "setp" && $2 ~ /^genserkins\.(A|ALPHA|D)-[0-5]$/ { split($2, qualified, ".") split(qualified[2], name_index, "-") name = name_index[1] - index = name_index[2] + 0 - values[name, index] = $3 + joint_index = name_index[2] + 0 + values[name, joint_index] = $3 } END { diff --git a/test-all-native.sh b/test-all-native.sh index 574e0bc..8c141b8 100755 --- a/test-all-native.sh +++ b/test-all-native.sh @@ -47,6 +47,10 @@ switchkins_generator_unknown_option_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_switch switchkins_generator_missing_output_dir_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_switchkins_generator_missing_output_dir.XXXXXX.log") switchkins_generator_too_many_args_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_switchkins_generator_too_many_args.XXXXXX.log") switchkins_generator_whitespace_output_dir_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_switchkins_generator_whitespace_output_dir.XXXXXX.log") +puma560_dh_unknown_option_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_puma560_dh_unknown_option.XXXXXX.log") +puma560_dh_too_many_args_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_puma560_dh_too_many_args.XXXXXX.log") +puma560_dh_escaped_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_puma560_dh_escaped_source.XXXXXX.log") +puma560_dh_non_hal_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_puma560_dh_non_hal_source.XXXXXX.log") bad_line_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_bad_manifest_line.XXXXXX.txt") bad_line_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_bad_manifest_line.XXXXXX.log") absolute_source_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_absolute_manifest_source.XXXXXX.txt") @@ -92,6 +96,10 @@ cleanup_native_test_temps() { "$switchkins_generator_missing_output_dir_log" \ "$switchkins_generator_too_many_args_log" \ "$switchkins_generator_whitespace_output_dir_log" \ + "$puma560_dh_unknown_option_log" \ + "$puma560_dh_too_many_args_log" \ + "$puma560_dh_escaped_source_log" \ + "$puma560_dh_non_hal_source_log" \ "$bad_line_manifest" \ "$bad_line_log" \ "$absolute_source_manifest" \ @@ -120,6 +128,12 @@ grep -F 'LinuxCNC source basis: cached switchkins/remap validation hashes the Li grep -F 'LinuxCNC source basis: generated switchkins/remap tables are extracted from' generate-linuxcnc-switchkins-remap-table.sh >/dev/null grep -F 'LINUXCNC_ROOT="$linuxcnc_root" ./check-linuxcnc-inputs-cached.sh "$manifest"' generate-linuxcnc-switchkins-remap-table.sh >/dev/null grep -F 'LinuxCNC source basis: Puma560 DH parameter output is generated from' generate-linuxcnc-puma560-dh-parameters.sh >/dev/null +test -x generate-linuxcnc-puma560-dh-parameters.sh +grep -F 'usage: $0 [linuxcnc-root-relative-puma560-dh-hal]' generate-linuxcnc-puma560-dh-parameters.sh >/dev/null +grep -F 'unknown LinuxCNC puma560 DH generator option: $1' generate-linuxcnc-puma560-dh-parameters.sh >/dev/null +grep -F 'too many LinuxCNC puma560 DH generator arguments' generate-linuxcnc-puma560-dh-parameters.sh >/dev/null +grep -F 'LinuxCNC puma560 DH HAL source path must stay LinuxCNC-root relative: $source_path' generate-linuxcnc-puma560-dh-parameters.sh >/dev/null +grep -F 'LinuxCNC puma560 DH source must be a HAL file: $source_path' generate-linuxcnc-puma560-dh-parameters.sh >/dev/null grep -F 'LinuxCNC source basis: all-native guardrails lock source-backed manifests' test-all-native.sh >/dev/null test -x check-linuxcnc-inputs-cached.sh grep -F 'CNC_SIM_PREFLIGHT_CACHE_DIR' check-linuxcnc-inputs-cached.sh >/dev/null @@ -221,6 +235,10 @@ for forbidden_manual_cleanup in \ 'rm -f "$switchkins_generator_missing_output_dir_log"' \ 'rm -f "$switchkins_generator_too_many_args_log"' \ 'rm -f "$switchkins_generator_whitespace_output_dir_log"' \ + 'rm -f "$puma560_dh_unknown_option_log"' \ + 'rm -f "$puma560_dh_too_many_args_log"' \ + 'rm -f "$puma560_dh_escaped_source_log"' \ + 'rm -f "$puma560_dh_non_hal_source_log"' \ 'rm -f "$bad_line_manifest" "$bad_line_log"' \ 'rm -f "$absolute_source_manifest" "$absolute_source_log"' \ 'rm -f "$invalid_build_jobs_log"' \ @@ -1408,6 +1426,51 @@ grep -Fx "HALCMD = setp xyzac-trt-kins.conventional-directions 0" "$linuxcnc_roo grep -Fx "setp genserkins.A-2 17" "$linuxcnc_root/configs/sim/axis/vismach/puma/puma560_dh.hal" >/dev/null grep -Fx "setp genserkins.ALPHA-4 -1.570796326" "$linuxcnc_root/configs/sim/axis/vismach/puma/puma560_dh.hal" >/dev/null grep -Fx "setp genserkins.D-0 26.45" "$linuxcnc_root/configs/sim/axis/vismach/puma/puma560_dh.hal" >/dev/null +puma560_dh_output=$(LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-puma560-dh-parameters.sh) +grep -Fx " parameters.a[2] = 17;" <<<"$puma560_dh_output" >/dev/null +grep -Fx " parameters.alpha[4] = -1.570796326;" <<<"$puma560_dh_output" >/dev/null +grep -Fx " parameters.d[0] = 26.45;" <<<"$puma560_dh_output" >/dev/null +if ./generate-linuxcnc-puma560-dh-parameters.sh --unknown >"$puma560_dh_unknown_option_log" 2>&1; then + echo "Puma560 DH generator accepted an unknown option" >&2 + exit 1 +fi +if ! grep -F "unknown LinuxCNC puma560 DH generator option: --unknown" "$puma560_dh_unknown_option_log" >/dev/null; then + echo "Puma560 DH generator did not report unknown options clearly" >&2 + sed -n '1,20p' "$puma560_dh_unknown_option_log" >&2 + exit 1 +fi +if ./generate-linuxcnc-puma560-dh-parameters.sh \ + configs/sim/axis/vismach/puma/puma560_dh.hal extra >"$puma560_dh_too_many_args_log" 2>&1; then + echo "Puma560 DH generator accepted too many arguments" >&2 + exit 1 +fi +if ! grep -F "too many LinuxCNC puma560 DH generator arguments" "$puma560_dh_too_many_args_log" >/dev/null; then + echo "Puma560 DH generator did not report too many arguments clearly" >&2 + sed -n '1,20p' "$puma560_dh_too_many_args_log" >&2 + exit 1 +fi +if ./generate-linuxcnc-puma560-dh-parameters.sh \ + ../configs/sim/axis/vismach/puma/puma560_dh.hal >"$puma560_dh_escaped_source_log" 2>&1; then + echo "Puma560 DH generator accepted an escaped LinuxCNC source path" >&2 + exit 1 +fi +if ! grep -F "LinuxCNC puma560 DH HAL source path must stay LinuxCNC-root relative: ../configs/sim/axis/vismach/puma/puma560_dh.hal" \ + "$puma560_dh_escaped_source_log" >/dev/null; then + echo "Puma560 DH generator did not report escaped source paths clearly" >&2 + sed -n '1,20p' "$puma560_dh_escaped_source_log" >&2 + exit 1 +fi +if ./generate-linuxcnc-puma560-dh-parameters.sh \ + configs/sim/axis/vismach/puma/puma560.ini >"$puma560_dh_non_hal_source_log" 2>&1; then + echo "Puma560 DH generator accepted a non-HAL source path" >&2 + exit 1 +fi +if ! grep -F "LinuxCNC puma560 DH source must be a HAL file: configs/sim/axis/vismach/puma/puma560.ini" \ + "$puma560_dh_non_hal_source_log" >/dev/null; then + echo "Puma560 DH generator did not report non-HAL source paths clearly" >&2 + sed -n '1,20p' "$puma560_dh_non_hal_source_log" >&2 + exit 1 +fi ./list-linuxcnc-rs274-dump-project-sources.sh >/dev/null rs274_dump_source=$(./list-linuxcnc-rs274-dump-project-sources.sh linuxcnc_rs274_dump.cpp)