
1. 原理图更新为什么会把PCB规则搞丢1.1 从一个真实的翻车现场说起上周帮一个做工业控制板的朋友救火他的板子已经布了三天线差分对、等长组、电源类规则全都调好了。结果硬件那边改了一版原理图他习惯性地在PCB界面点了“Update Schematics”弹窗一闪规则管理器里那几十条自定义规则全没了差分对变成普通网络等长组直接解散。三天的活白干只能从备份里回滚再手动把规则一条条补回来。这个场景在Altium Designer的使用者里太常见了。很多人以为是软件bug其实不是。AD的规则存储和原理图同步机制是两套独立的系统规则存在PCB文件.PcbDoc里而原理图更新走的是ECOEngineering Change Order工程变更订单流程。ECO只负责比对网络、元件、封装这些“连接关系”层面的差异它压根不管你在规则管理器里手写的那些约束。一旦ECO执行过程中触发了某些边界情况规则就可能被重置、覆盖甚至清空。所以这个问题的本质不是“怎么防止软件出错”而是“怎么理解AD的同步逻辑把规则保护纳入到你的工作流里”。下面我把这套逻辑拆开讲再给一套我自己用了很多年的操作流程。1.2 规则到底存在哪里ECO又动了什么先把这个底层机制说清楚不然后面的操作都是死记硬背。AD的PCB规则全部保存在.PcbDoc文件内部的规则数据库中每条规则有唯一的ID、作用范围Scope、约束类型和优先级。你在PCB界面按D-R打开的规则管理器看到的就是这个数据库的可视化界面。而原理图到PCB的同步走的是“比较器ECO”的路径。你在原理图界面执行“Update PCB Document”或者在PCB界面执行“Import Changes From”AD会做这几件事把原理图的网络表Netlist和PCB当前的网络表做比对生成一份差异清单也就是ECO列表包含添加元件、删除元件、修改网络连接、更新封装等条目你确认执行后AD按ECO逐条修改PCB关键点来了ECO执行时AD会重建PCB的网络对象模型。如果某个网络在ECO中被删除又重新添加哪怕名字一样或者某个元件的封装被替换那么原本绑定在这个网络或元件上的规则作用范围就可能失效。规则本身还在数据库里但它的Scope匹配不到任何对象了表现出来就是“规则丢了”。更狠的一种情况是如果你在原理图里改了工程的网络标识方式比如从Net Label改成Port或者改了层次化设计的连接方式ECO可能会把大量网络判定为“删除新增”这时候规则的作用范围大面积失效看起来就像全丢了。理解了这一点你就明白防护的核心思路要么让规则不依赖易变的网络对象要么在ECO前后做好规则的备份和恢复。2. 更新原理图前的规则保护实操流程2.1 第一步导出规则备份文件这是最基础也最有效的一招但很多人不知道AD自带规则导出功能。在PCB界面按D-R打开PCB Rules and Constraints Editor在左侧规则树的最顶端也就是PCB Rules根节点右键选择Export Rules会弹出一个保存对话框默认格式是.RUL文件。把它存到一个固定位置比如工程目录下的_rules_backup文件夹文件名带上日期像PCB_Rules_20240612.RUL。这个.RUL文件是纯文本的你可以用记事本打开看看里面每条规则的Scope、约束值、优先级都记录得清清楚楚。我一般会在每次重大原理图改动前导出一份改完再导出一份两份对比就能看出规则有没有被动过。注意Export Rules导出的是当前PCB的全部规则包括AD默认的那套。如果你只想备份自定义规则可以在导出后手动编辑.RUL文件把默认规则段删掉只留自己加的那些。不过我个人建议全量备份恢复的时候更省事。2.2 第二步检查规则的Scope是否“脆弱”规则丢失的根源往往在Scope写得不够健壮。AD的规则作用范围支持多种查询语法从最脆弱的到最健壮的排列如下Scope写法示例脆弱程度说明直接引用网络名InNet(VCC_3V3)高网络名一改就失效引用网络类InNetClass(PowerNets)中网络类成员变动会受影响引用元件类InComponentClass(DiffPairs)中元件类需要手动维护引用参数InComponent(U1)低元件位号不变就没事引用自定义参数HasParameter(RuleGroup,Power)最低参数跟着元件走最稳我自己的做法是对于电源网络、差分对、等长组这些关键规则尽量用网络类自定义参数的组合。比如给所有电源网络打上一个NetClassPower的参数规则Scope写成InNetClass(Power)。这样即使网络名变了只要网络类成员关系还在规则就不会丢。但这里有个坑网络类Net Class本身也是存在PCB文件里的ECO执行时如果网络被重建网络类的成员关系也可能被重置。所以更稳的做法是给元件或网络打自定义参数因为参数是跟着原理图对象走的ECO同步时会一起带过来。具体操作在原理图里选中一个网络对应的导线在Properties面板里找到Parameters区域添加一个参数Name填NetClassValue填Power。然后PCB规则的Scope写成HasParameter(NetClass,Power)。这样无论网络怎么重建只要原理图里这个参数还在规则就能匹配上。2.3 第三步用“工程变更订单”面板逐条审查很多人更新原理图就是无脑点“Execute”这是大忌。正确的做法是在ECO对话框里逐条看。在原理图界面执行Design → Update PCB Document会弹出Engineering Change Order对话框。这个对话框分两栏左边是修改类别Add Components、Add Nets、Remove Nets等右边是具体条目。每一条前面有个勾选框默认全选。我的习惯是先点Validate Changes让AD检查所有变更是否可执行。如果有报错的条目红色叉先解决报错别急着执行。然后展开Remove Nets和Remove Components这两类仔细看有没有你不想删的东西。如果ECO要把某个网络删掉再加回来那这个网络的规则大概率会失效。对于确实需要删除的网络先记下它的名字执行完ECO后第一时间去规则管理器里检查对应的规则是否还在。如果发现ECO要把大量网络判定为“删除新增”说明原理图的连接方式改动太大这时候建议先取消ECO回到原理图把改动拆成小步分多次同步。实操心得ECO对话框里有一个Create ECO按钮可以把当前变更导出成一个.ECO文件。我习惯在每次执行前导出一份万一执行后规则乱了可以对照ECO文件分析是哪些变更导致的。2.4 第四步执行ECO后的规则恢复如果规则真的丢了别慌按这个顺序恢复先在PCB界面按D-R打开规则管理器看看规则是“完全消失”还是“还在但Scope失效”。如果是后者规则树里还能看到规则名只是右边显示“No objects match”。如果是Scope失效直接双击那条规则把Scope改成更健壮的写法比如从InNet(VCC_3V3)改成HasParameter(NetClass,Power)。如果是规则完全消失那就用之前导出的.RUL文件恢复。在规则管理器根节点右键选择Import Rules选中你的备份文件AD会问你是“覆盖”还是“合并”。选合并这样不会把现有规则冲掉。恢复后逐条检查规则的Scope是否匹配到了对象。规则管理器右侧有一个“匹配对象数”的显示正常应该大于0。这里有个细节Import Rules导入的规则优先级Priority可能会变。AD的规则优先级数字越小越优先导入后要检查一下关键规则的优先级有没有被默认规则盖住。我一般会把自定义规则的优先级手动调到1到10之间默认规则保持在后面。3. 从原理图侧做规则保护的进阶技巧3.1 用“参数集”把规则信息带到PCB前面提到了自定义参数这里展开讲一个更系统的做法参数集Parameter Set。在原理图里你可以选中一根导线或一个网络标签然后在Properties面板里添加多个参数。比如NetClassDiffPair_100RTargetImpedance100LengthTolerance5mil这些参数会跟着网络一起通过ECO同步到PCB。然后在PCB规则里你可以用这些参数来定义规则。比如差分对规则Scope:HasParameter(NetClass,DiffPair_100R)约束: 差分对宽度、间距、目标阻抗这样做的好处是规则的定义信息存在原理图里跟着版本控制走PCB文件即使被重建只要从原理图同步一次参数就回来了规则自然就能匹配上。我试过在一个有12对差分线的项目里用这套方法原理图改了五版PCB规则一次都没丢过。相比之下之前用网络名直接写Scope的做法每次改原理图都要重新检查规则。3.2 网络类的正确维护方式网络类Net Class是AD里管理规则作用范围的常用手段但很多人用错了。错误的做法在PCB界面手动创建网络类然后把网络拖进去。这种网络类只存在PCB文件里ECO一执行网络重建类成员就没了。正确的做法在原理图里用Place → Directives → Net Class指令把网络类指令放在导线上。这样网络类信息会通过ECO同步到PCBAD会自动在PCB里创建对应的网络类并维护成员关系。具体步骤在原理图界面菜单Place → Directives → Net Class光标变成十字点选你要归类的网络导线在弹出的Properties面板里ClassName填PowerNets然后勾选需要加入的网络重复这个操作把所有需要归类的网络都打上指令同步到PCB后在PCB界面的Design → Classes里就能看到自动创建的网络类这样创建的网络类ECO执行时会自动更新成员关系不会因为网络重建而丢失。3.3 差分对和等长组的特殊处理差分对和等长组是规则丢失的重灾区因为它们依赖网络之间的配对关系。差分对在AD里的定义方式有两种一种是在PCB界面手动创建差分对Differential Pair Editor另一种是在原理图里用网络标签的命名规则自动识别比如USB_D和USB_D-。手动创建的差分对存在PCB文件里ECO执行时如果网络被重建配对关系就丢了。所以我的建议是尽量用命名规则自动识别差分对。在Project → Project Options → Multi-Channel或者Differential Pairs设置里定义好正负网络的命名模式比如*_P和*_N。这样只要原理图里的网络名符合规则PCB里就会自动生成差分对不需要手动维护。等长组Length Tuning Group也是类似。AD的等长组可以通过Design → Classes → Net Classes创建也可以用xSignals功能。xSignals是AD较新版本引入的它可以根据原理图的连接关系自动生成等长组比手动创建的网络类更稳定。如果你的AD版本支持xSignals强烈建议用它来管理等长组。4. 常见问题排查与避坑清单4.1 规则丢失后的快速排查表现象可能原因排查方法解决方式规则管理器里规则消失ECO执行时规则数据库被重置检查是否有备份.RUL文件用Import Rules恢复规则还在但显示No objects matchScope引用的网络/元件被重建查看规则Scope对比当前网络名改用参数或网络类Scope差分对变成普通网络差分对配对关系丢失打开Differential Pair Editor查看用命名规则重新识别等长组解散网络类成员关系被重置检查Design → Classes用xSignals或原理图指令重建规则优先级错乱导入规则时优先级被覆盖查看规则管理器的Priority列手动调整优先级数字ECO执行后PCB网络全乱原理图连接方式大改查看ECO的Remove Nets类别回滚拆分改动分步同步4.2 几个我踩过的坑坑一在PCB界面直接改网络名。有些人为了图方便在PCB里直接双击网络改名字。这个操作不会同步回原理图下次ECO执行时AD会发现原理图的网络名和PCB不一致可能把PCB的网络删掉重建规则就丢了。正确做法是改原理图然后同步。坑二用“Update Schematics”反向同步。AD支持从PCB反向更新原理图在PCB界面执行Design → Update Schematics。这个功能很危险它会用PCB的网络关系去覆盖原理图容易把原理图里精心维护的参数和指令冲掉。除非你非常清楚后果否则别用。坑三多个人同时改原理图和PCB。如果团队里有人改原理图有人改PCB两边都保存后同步ECO会变得非常复杂规则丢失的概率大增。我的建议是原理图和PCB的修改尽量串行改完一边同步完再改另一边。如果必须并行用版本控制工具如Git管理每次同步前先提交一版。坑四忽略AD的版本差异。AD 20、AD 21、AD 22、AD 24在ECO处理和规则管理上有细微差别。比如AD 24对xSignals的支持更好AD 20的规则导入导出界面略有不同。如果你从旧版本升级建议先在一个小工程上测试一遍同步流程确认规则不会丢再上正式项目。4.3 一个万能的规则保护模板最后分享一个我用了很多年的规则保护模板适用于大多数中小规模PCB项目原理图侧所有关键网络打上NetClass参数差分对用_P/_N命名等长组用xSignals或网络类指令。PCB侧规则Scope统一用HasParameter(NetClass,xxx)或InNetClass(xxx)避免直接引用网络名。同步前导出.RUL备份ECO对话框逐条审查Remove Nets和Remove Components。同步后检查规则管理器的匹配对象数检查差分对和等长组是否完整。版本控制原理图、PCB、.RUL备份文件一起提交到Git每次同步前打Tag。这套流程看起来步骤多但熟练之后每次同步也就多花两三分钟。相比规则丢失后重新调三天这个时间投入太值了。我在最近一个六层板项目里用这套方法原理图改了七版PCB规则一条没丢差分对和等长组全程稳定。硬件那边改原理图的时候也不再提心吊胆反正同步前备份、同步后检查出了问题五分钟就能恢复。