lab-hardware-cad 预制造验证清单深度指南:从源码到出厂的 8 道质检关卡
2026/9/11 20:51:01 网站建设 项目流程

lab-hardware-cad 预制造验证清单深度指南:从源码到出厂的 8 道质检关卡

【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000+ scientists worldwide. 165 ready-to-use validated skills plus 100+ scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills

在 lab-hardware-cad 技能中,设计实验室硬件的难点几乎从来不在几何造型本身,而在于"零件必须与由公开标准或厂商图纸固定的设备精确配合"——微孔板槽位宽了 0.5 mm 就装不进读板机,螺栓孔距按 25.4 mm 而非 25.0 mm 打就拧不上光学平台。为了让"可以拿去制造了"这句话在交付前经得起推敲,该技能在 references/validation.md 中沉淀了一份预制造验证清单(Pre-fabrication validation checklist)

这份清单不是泛泛的流程提醒,而是与技能内gen.pycheck.pysnapshot.py三个脚本深度绑定的可执行检查协议:每一项都点名了它要拦截的失败模式,因为"没有后果的清单会被跳过"。读完本文,你将掌握完整的 8 道验证关卡、每道关卡背后的源码实现原理,以及如何用可复现的命令把"零件准备好了"从口头承诺变成可审计的结论。

验证清单在整个工作流中的位置

先明确这张清单的定位:它是 lab-hardware-cad 技能标准工作流(见 SKILL.md)中第 5、6、7 步——生成与检查、快照目检、通过源码修复——的收口环节,在第 8 步"制造前报告"之前强制执行。工作流的顺序是:

  1. 路由到设备族参考文档(微流控 / 光机 / 实验室耗材适配 / 行为实验装置)
  2. 在任何几何建模之前确立接口尺寸(来源、标称值与公差、间隙或过盈意图)
  3. 先选工艺再定几何(读取 fabrication-limits.md)
  4. 编写参数化模型*_model.py
  5. 运行gen.py生成产物并执行数值检查
  6. 渲染快照并真正看图
  7. 任何检查失败都通过修改源码修复,绝不修补 STEP
  8. 走完 validation.md 清单后向用户报告

清单的每一项背后都有可运行的命令,多数检查失败会通过非零退出码直接"卡住"构建。例如gen.py在生成时就会评估模型声明的checks()量规(gen.py),任一失败即退出非零;check.py的检查子命令同样"退出非零以作为构建闸门"(见 check.py 的文件头注释)。验证不是事后诸葛亮,而是构建流水线的一部分。

1. Provenance(溯源):STEP 必须可复现

第一关检查的是"你要交付的那个 STEP 到底从哪来的"。清单要求三项:

  • STEP 必须由gen.py从当前模型源码生成。拦截的失败模式是:你刚改完代码,但手里拿的是与代码不一致的过期产物。
  • 同目录下必须存在*.manifest.json,且其中source.sha256与模型文件一致。这拦截"静默手工编辑导出 STEP",那会让设计失去可复现性。
  • manifest 的interfaces块必须覆盖捆绑标准涵盖的每一个尺寸,且数值必须是模型在--param覆盖之后计算的结果。空列表只有在"零件没有任何部分与捆绑标准配合"时才是正确的——此时报告里要把每个接口尺寸明确命名为"未检查"。

清单给出的标准命令:

python scripts/gen.py part_model.py --outdir out/

从源码看,这条命令的可复现性保证体现在多个层面(gen.py):

  • 源文件哈希gen.py调用_common.py中的sha256_of()(scripts/_common.py)以 64 KiB 分块流式计算模型文件 SHA-256,写入 manifest 的source.sha256字段。验证清单第 1.2 条正是让你把这个哈希与当前模型文件比对——哈希不一致就说明 STEP 与源码脱节了。
  • 解析后的参数快照:manifest 记录parameters(模型公开的标量参数)与overrides(命令行--param注入的覆盖值),两者分离,覆盖历史可审计。
  • 接口声明的解析后数值interfacesbuild()之后读取,确保记录的是覆盖后解析出的真实数字。源码对此有专门防护——若模型声明的是模块级静态INTERFACES列表(在--param应用之前就被求值),gen.py会打印警告"任何由被覆盖参数导出的接口现在都被记录为错误",并提示把静态列表改写成interfaces()函数(gen.py)。这正是清单第 1.3 条要拦截的"冻结在导入时的静态列表"陷阱。
  • 环境快照:build123d 版本、Python 版本、平台信息一并入档,为跨机复现提供依据。

清单第 1.4 条要求"模型中每个参数都以带单位的名称命名"。这在技能中有硬性编码约定:所有用户可能修改的尺寸都是带单位的模块级具名常量,如bore_d_mmwall_t_mmpost_h_mm,且除 0、1、2 外不允许裸数字出现在模型正文(见 SKILL.md 第 4 步与 build123d-patterns.md)。拦截的失败模式是那个没人能认出是半英寸的裸12.7

2. Geometry is sound(几何健全):数字不会撒谎,但会漏报

第二关从几何内核层面确认实体"不是坏的"。命令:

python scripts/check.py facts out/part.step python scripts/check.py geometry out/part.step --model part_model.py

check.py facts输出is_valid、包围盒(mm)、体积、表面积、质心、实体数量(check.py),这些数据由_common.pyshape_facts()统一计算(scripts/_common.py)。清单用它拦截三类问题:

  • is_valid为假——自相交或非流形实体,切片器和 CAM 会静默把它弄坏;
  • solid_count不符合预期(通常为 1)——布尔减失败留下两个不相连的块,或某个特征悬浮在主体之外;
  • 体积与零件尺寸和壁厚不符——空腔被当实体建模了,或减法根本没生效。

check.py geometry则执行模型checks()声明的 go/no-go 量规,实测而非声明。量规有三种形态(schema 见 scripts/_common.py):

  • clear区域——必须无材料通过的空间(螺丝轴、光束通道、最大材料条件下的配合件落入凹槽),默认每个位置允许侵入体积tol_mm3= 0.01 mm³;
  • material区域——必须保留材料的地方(脊、台阶、螺丝座),默认要求至少min_mm3= 0.01 mm³;
  • bbox_*边界——用户给出的每个尺寸上限(bbox_x/y/zbbox_min/mid/max)都映射为一条检查。

实现上,每个量规被物化为一个实体(盒子或圆柱)与零件求布尔交集(intersection_volume(),scripts/_common.py),逐位置比较体积(evaluate_checks)。gen.py在生成时也会运行同一套量规并逐个打印 PASS/FAIL、记录进 manifest,失败即非零退出——所以违反自身声明几何的零件永远不会悄悄变成产物;check.py geometry则对导出的 STEP(权威产物)重跑同一套量规(check.py)。

清单特别强调:这些量规捕捉的是is_valid、包围盒和声明数字看不见的错误——一个吃掉了螺丝座的凹槽、配合件进不去的口袋、中间立着一堵墙的光束通道、被圆角静默吞噬的特征。量规尺寸应从"需求本身的数字"(板的最大材料条件、用户的高度上限)出发,而不是从参数出发,否则"错误的参数会把量规缩到和错误几何一样小"——这一设计意图在 SKILL.md 的 carrier 示例注释中写得很清楚。

3. Interfaces(接口):最昂贵失败模式的防线

清单明确指出:"每一个接口尺寸都有书面来源(标准 ID、厂商图纸或用户测量值),没有一个来自记忆"——这是本技能中最昂贵的失败模式。因为来自记忆的接口尺寸是单一最贵失败模式(SKILL.md 第 2 步)。

命令:

python scripts/check.py interfaces out/part.manifest.json # 当某个尺寸未在模型中声明时,用手动方式逐项检查 python scripts/check.py fit --standard <id> --intent envelope --clearance <mm> --value <dim>=<mm>

check.py interfaces读取 manifest 中模型声明的每一条接口,对照标准数据库(assets/standards.json)校验数值(check.py)。校验的核心算术在_evaluate()中(check.py),它实现了两种意图(intent),两者回答的是不同问题:

  • match(对称带):本零件自身必须符合标准。接受带 = 标称 ± 公差 ± 间隙(间隙只会加宽、不会平移带)。适用于零件自身轮廓就是接口的场景,例如垫圈按板轮廓切割。
  • envelope(单向下限):本特征必须接纳任何合格零件——凹槽、孔、槽。检查下限 = 标称 + 正公差 + 间隙,单向通过。按标称设计这类特征只装得下合格零件中较小的那一半。

一个关键约束:clearance必须 ≥ 0。源码会直接拒绝负间隙并给出可操作提示——"间隙只能加宽接受带,不能平移它;如果特征是有意做小的,请在报告中说明,而不是把它编码为负间隙"(check.py)。这防止了声明的接口移动自己的接受带从而"认证"一个不合格数值。

清单还要求:

  • 接收标准化组件的特征使用intent: "envelope"。测试用例test_envelope_intent_requires_maximum_material_condition实证了这一语义:127.76 标称的板,公差 +0.25,间隙 0.8,按标称做槽(128.56)必须失败,按最大材料条件做(128.81)才通过(tests/lab-hardware-cad/test_scripts.py)。
  • 任何verified: false的标准条目都必须对照一手文档确认,或明确告知用户未确认。标准数据库中每个条目都有verified布尔字段和来源文档;check.py interfaces对未核实条目输出"WARNING: standard entry is not verified against the document";standards --show同样会打印警告。测试test_unverified_entries_say_so_in_their_notes还强制数据库本身把未核实条目在注释中标明。
  • 公制 vs 英制必须确认。1 英寸严格等于 25.4 mm,而 25 mm 公制光学网格与 1 英寸英制网格不可互换——四孔误差累计 1.6 mm(SKILL.md 单位一节)。数据库中optical-breadboard-metricoptical-breadboard-imperial是两条独立记录,测试test_metric_and_imperial_grids_are_distinct断言两者网格间距标称值不同。
  • 不在任何捆绑标准内的接口(厂商图纸、测量值)必须在报告中向用户说明为未检查,并给出数值与来源。源码对此的立场很强硬:空声明列表通过检查("零件没有任何部分与捆绑标准配合是正确状态,不是错误"),但check.py interfaces会输出提示——"不要虚构声明来填补空白,把每个接口尺寸及其来源(用户规格、厂商图纸、测量)在报告中命名为未检查"(check.py)。

check.py interfaces有一条重要边界,源码注释明确:它校验的是声明的数字——能抓住抄写错误、选错标准、按标称而非 MMC 定尺寸——但永不测量构建出的几何,且"由与检查所用相同常量计算出的数值,按构造必然零裕量通过"。所以它不能作为几何正确的证据,几何正确性由facts和快照负责(check.py)。

4. Fits and assembly(配合与装配):标称尺寸不是配合

清单第 4 关处理零件之间的相对关系:

  • 每个配合尺寸都为工艺选择了刻意的间隙。拦截:标称对标称的配合,装不上。技能给出了每侧的常见起点值(完整表格见 SKILL.md 公差与配合一节与 fabrication-limits.md):

    配合类型FDMSLACNC
    自由滑动(板落入凹槽)0.40 mm0.20 mm0.10 mm
    定位但可手拆0.25 mm0.10 mm0.05 mm
    压配 / 过盈-0.05 mm-0.03 mm-0.02 mm

    这些是首件起点而非保证值,报告时须如实说明,并建议关键接口先打印测试样块。

  • 多零件装配检查干涉

    python scripts/check.py clearance out/a.step out/b.step --min 0.3

    check.py clearance的实现(check.py)先求两个实体的布尔交集体积,超过 1e-6 mm³ 即判定干涉("零件在 CAD 中重叠,因此不可能同时存在");无干涉时再计算最小间距并与--min(默认 0.2 mm)比较。

  • 刚性多孔安装模式至少有一个槽。拦截:四孔螺栓阵列因公差累积而卡死——这正与公制/英制网格 1.6 mm 的累积误差同源。

5. Manufacturability(可制造性):几何能画出来不等于能造出来

第 5 关把设计放回工艺现实(依据 references/fabrication-limits.md):

  • 最小壁厚与特征尺寸落在所选工艺范围内。工艺规划表(都是起点值,须用测试样块验证):FDM 典型公差 ±0.3 mm(超过 100 mm 常常更差)、最小壁厚 1.2 mm(3×0.4 mm 喷嘴)、最小特征约 0.8 mm,各向异性且多孔;SLA/DLP ±0.1 mm、壁厚 0.8 mm、特征约 0.3 mm;SLS ±0.2 mm、各向同性、无需支撑;CNC ±0.05 mm 或更好,内角携带刀具半径——铣削不出尖锐内角;激光切割 ±0.1 mm、切缝约 0.1–0.3 mm、仅 2D。
  • 打印/加工方向必须声明,且载荷沿层向而非横跨层向。FDM 零件横跨层向明显更弱,方向是设计决策而非打印细节;水平孔会垂顶,需泪滴或倒角保持圆整;每个封闭腔在树脂打印中都需要排液路径。
  • 螺纹用嵌件或包螺母,而非打印螺纹(除非粗牙)。打印螺纹通常是个错误——层分辨率与螺距相当,强度差、尺寸不可靠、掉屑。优先级:热熔螺纹嵌件 > 清孔+六角槽包螺母 > 直接攻丝打印材料(仅限轻载、少拆装)> 打印螺纹(仅限约 M6 以上的粗牙,绝不用于 SM1 这类 0.635 mm 细牙)。
  • 封闭腔留树脂排液路径,尽可能无支撑通道
  • 铣削内角留刀具半径的让位。如果铣削口袋要容纳方件,必须加角部让位切割。

6. Material(材料):被清洁剂打败的完美几何

第 6 关强调一个反直觉的事实:材料必须与清洁剂兼容,而不仅仅是与样品兼容。这正是制造中最常翻车的地方之一:

  • 亚克力(PMMA)接触醇类(包括 70% 乙醇)会开裂——在一个用乙醇消毒一切实验室里这是严重问题;
  • PLA 在 121 °C 高压灭菌中严重变形,远低于其使用上限;PLA 还会水解,在湿热或反复清洗服务中劣化;
  • 聚碳酸酯被许多溶剂和碱性清洁剂侵蚀;
  • PP、PTFE、PEEK 化学耐受面广,是溶剂接触的安全选择。

清单据此要求:

  • 材料与清洁剂兼容(70% 乙醇使亚克力龟裂、高压灭菌使 PLA 变形);
  • 灭菌方法明确陈述且材料确实能扛住(假设打印件不可高压灭菌,除非是验证过的高温材料,替代方案是化学或气体灭菌,并须对照溶剂注意事项核查);
  • 接触细胞、组织或动物的任何东西都有正当的材料理由,或把接触设计掉——未固化的 SLA 树脂有细胞毒性,"生物相容"标签指特定认证工艺与用途,不随你的打印机、固化安排或实验迁移;
  • 零件靠近光束或探测器时须回应光学要求——打印/铣削表面会散射,多数打印树脂显著自发荧光,黑色不自动低反射。

材料维度的完整数据(热学使用上限表、化学耐受性、生物相容性、光学注意事项、成本与交期现实)见 references/fabrication-limits.md。

7. Visual review(目检):不可豁免的强制关卡

第 7 关是全清单中最强硬的条款:快照渲染了不算,必须真正读图

python scripts/snapshot.py out/part.step --out out/part.png

确认项包括:特征在预期的面上;模具/芯片极性正确;每个口、孔、凸台都存在、在体内、并贯通;没有特征被圆角吞噬;净孔无遮挡。

源码揭示了这张图是怎么画的(snapshot.py):

  • 通过 matplotlib 的 Agg 后端离屏渲染,无需显示器、GPU 或查看器,六个默认视图(iso/front/right/top/left/bottom)为真正的正交投影axes.set_proj_type("ortho")),避免透视把方形件扭成楔形——那正是这张渲染图要排除的东西;
  • 面来自 OpenCascade 的曲面细分,轮廓线是模型真实的 BREP 边、不做隐藏线消除地绘出——所以"透过材料"看到的圆是远侧孔,不是窗口,零件并不透明,读图时别把不存在的孔报成孔;
  • 每张子图标注该视图的平面尺寸(mm),底座按法线与相机角度做平面着色,让凹槽、台阶、凸台可读。

清单在此处的不可豁免声明值得逐字强调:"数字检查通过绝不豁免这一步。is_valid: true加正确包围盒与'凹槽切错了面'或'模具反转'完全兼容——这些错误在图上显而易见,在数字里隐形。"

还要知道渲染的极限:远小于画面尺度的特征(40 mm 零件上 0.3 mm 的模具脊、板上的沉头台阶)从视图里可能根本无法判定,不要报告图像分辨率撑不起的东西。此时技能提供了两款测量仪器:

  • check.py bores <step>:普查每个圆柱面(直径、轴、位置、跨度、扫掠角),用于把钻孔与模型意图对账——完整 360° 扫掠是孔/凸台,约 90° 是边圆角,沉头孔是同轴的两段完整扫掠(cylinder_census);
  • check.py probe <step> --cyl D|--box X,Y,Z --at ...:一次性回答"这个区域是空的还是有材料",无需编辑模型。

引用测得数字,图片只陈述图片真正显示的东西。

8. Report(报告):诚实的交付物比自信的错误有用

最后一关面向用户交付,要求明确给出六项内容:

  1. 工艺与材料,以及为什么;
  2. 每个接口尺寸及其来源与公差;
  3. 选定的间隙及其来源的配合等级;
  4. 快照显示了什么——要描述,而不是仅仅说"生成了快照";
  5. 每项未通过的检查,以及每个无法验证的尺寸;
  6. 只要设计依赖配合,就建议在投入整件之前先打印关键接口的测试样块。

清单的收尾立场:"把未验证项如实陈述。一份带有一句诚实的'这个尺寸需要确认'的零件清单,远比一份自信却静默错误的清单有用。"这也与check.py fit在输出末尾的提醒呼应:"Reminder: a passing bounding box is not a passing part. Run snapshot.py."(check.py)——自动检查的沉默不是确认,没人检查的尺寸必须被命名。

把清单落成日常操作

验证清单之所以能落地,是因为它每一步都对应着可执行、可复现、失败即非零退出的命令,且这些命令的行为由测试锁定。tests/lab-hardware-cad/test_scripts.py不安装 build123d的情况下直接验证了标准数据库的格式、fit 算术(match/envelope 两种意图、间隙偏移、MMC 判定)、接口检查的清单语义与失败聚合——这意味着清单的关键防线可以在纯净环境里被持续验证(tests/lab-hardware-cad/test_scripts.py)。

实践中,完整的一轮验证流程是:

# 生成(含 checks() 量规评估与 manifest 溯源记录) python scripts/gen.py part_model.py --outdir out/ # 数值三连:几何事实、声明接口、实测量规 python scripts/check.py facts out/part.step python scripts/check.py interfaces out/part.manifest.json python scripts/check.py geometry out/part.step --model part_model.py # 多件装配干涉检查 python scripts/check.py clearance out/a.step out/b.step --min 0.3 # 强制目检:渲染,然后真正看图 python scripts/snapshot.py out/part.step --out out/part.png

如果任何检查失败,走第 7 步:编辑参数或模型代码,重跑gen.py,再重跑上面的数值检查与快照,绝不修补 STEP(见 SKILL.md 第 7 步)。out/只是约定俗成的暂存目录,用户指定了交付位置时要用--outdir .生成或把 STEP、manifest、DXF 复制过去——只存在于out/里的交付物等于没交付。

最后记住本清单的完整参考链:工艺与材料数据在 references/fabrication-limits.md,interfaces()checks()契约和 build123d 0.11.1 模式在 references/build123d-patterns.md,标准数据库在 assets/standards.json,而技能总工作流在 SKILL.md。把这份清单走完,再对用户说出"可以制造了"。

【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000+ scientists worldwide. 165 ready-to-use validated skills plus 100+ scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询