【转】如何应用Query语句进行规则的语法设置?
在Altium Designer中, 设计规则通常用来定义用户的设计需求。 这些规则涵盖了设计的方方面面, 从布线宽度, 对象的安全间距,内电层的连接风格, 过孔风格等等。 设计规则不仅能在PCB设计的过程中实时检测, 而且也能够在需要的时候进行统一的批量检测并生成错误报告。
Altium Designer的设计规则不是PCB对象的属性, 而是独立定义的。 每条规则需针对具体的PCB对象。对于PCB规则系统来说,它必须知道给定的规则应用于哪些对象,即规则的应用范围。可以在PCB Rules and Constraints Editor对话框中设定规则及规则的范围。其中采用撰写查询语句的方式来定义范围是经常需要用到的,并且非常重要的方式方法。
查询语句(Query)是对规则应用对象的描述。设计规则的约束对象可以直接手动输入查询语句, 或是在语言编辑区左侧的控制区选择,抑或是采用查询语句构造器来定义。
查询语句(Query)如何组织?
查询语句实际上是软件的一条指令,定义了一系列的目标设计对象。查询语句由查询的关键字组成。下面是一个查询语句的示例:
InNet('GND') And OnLayer('TopLayer')
如果在宽度规则中用该查询语句定义范围,那么设计者在切换到顶层对GND网络布线时,走线的宽度会自动转换到该规则指定的宽度值。如果执行设计规则检查(DRC),任何在顶层的GND网络必须满足这个宽度规则,否则就会被标记为违反设计规则。
使用PCB规则约束编辑器( PCB Rules and Constraints Editor)对话框中的选项可以创建查询语句。根据规则是一元的还是二元的,用户可能需要相应地定义一个或二个对象范围。在PCB规则约束编辑器中,简单的查询语句有如下几种类型的范围选项。
-
所有的的设计对象
-
指定网络中的所有对象
-
指定网络类中的所有对象
-
指定层上的所有对象
-
指定层上且属于指定网络的所有对象
选择其中的任一选项,如果需要的话,可以使用右边的下拉菜单选定适当的目标,比如某个网络或某个层。查询语句会自动出现在Full Query区域的右方。如下图。
高级查询Advanced (Query)选项允许设计者撰写自己的更复杂但更为精确的查询语句。设计者可以在Full Query区域直接输入规则范围的定制查询语句。有两个工具(Query Builder和Query Helper)可帮助创建高级查询语句。当不确定查询语句的语法或者需要使用的关键字,这两个工具就会相当有用。
-
Query Builder定义规则范围
Query Builder是一种较简单的创建查询语句的方法,它允许设计者使用敏感的条 件类型和数值但只能使用相关的‘构件’。对于高级查询语句的创建,可以使用Query Helper来查询关键字的说明及操作符的语法。
点击Query Builder按钮可以打开Building Query from Board对话框, 该对话框使得用户通过AND或OR等符号连接构造字符串,从而可以创建指向设计文档中特定对象的查询语句。如下图所示。
在对话框中的左边部分,用户可以为某组对象指定所需要的条件类型。当用户在对话框左半部分定义好条件后,在右半部分就可以预览显示当前创建的查询语句。根据需要用户可以继续添加更多的条件以缩小用户的设计对象目标范围。
-
Query Helper获得帮助
要使用Query Helper,先选择Advanced (Query) 选项,然后点击Query Helper按钮就可以打开Query Helper对话框。系统背后的查询引擎会分析PCB设计,然后列出所有可用的对象与查询语句中使用的通用关键字。如下图所示。
使用对话框的Query区域,构造一个查询表达式语句。在默认情况下,当前有效规则范围的表达式会显示在这一区域。用户可以在该区域内直接输入。当用户输入时,智能感知功能将根据用户的输入提示给用户可能的关键字或对象列表。
对话框中的左下角红色圈出的Categories区域,提供了可以用来创建查询语句的PCB函数、PCB对象列表和系统函数。当用户点击此三个类别中的某个子类别,右方的区域将会显示对应的关键字或对象列表。找到查询语句需要用到的关键字或对象,然后双击该条目,该条目就会被插入到上方区域中查询表达式的当前光标处。
-
当Query语句有错误时
如果你键入的查询语句的语法有错误,在PCB Rules and Constraints Editor对话框的左边区域,该规则会被用红色高亮出来。及时修正这样的错误非常重要,否则做在线实时检测会非常慢。因为一个有语法错误的规则范围会极大地降低在线或者批量DRC分析的速度。当你试图关闭规则设置框时系统也会弹出一个错误对话框。所以请确保所有规则范围的语法正确!
PCB Filter面板中使用查询语句(Query)
同样的道理,可以在过滤器面板使用查询语句来查找指定的一系列对象,然后定义每个规则应用到的对象。
PCB Filter面板为用户提供了创建设计规则的途径,创建的设计规则的应用范围将使用当前在面板中央区域中定义的查询语句来定义。
如上图所示。要添加一条新的设计规则,只要点击Create Rule 按钮,就会显示Choose Design Rule Type对话框。此对话框列出了PCB文档中所有可用的规则类别与规则种类。用户只需选择希望创建的规则种类然后点击OK即可(或直接双击该规则种类入口)。
这时就会显示PCB Rules and Constraints Editor对话框,在此对话框中系统已为用户创建了一个该种类的规则,并将该规则显示在主编辑窗口中,等待用户为此规则定义特定的约束条件。而来自PCB Filter面板的查询语句也已经显示在对话框中的Full Query区域中,作为此规则的应用范围。
采用Query Helper创建Query语句案例
案例前因:某项目的PCB设计中有诸多规则设置,特别是间距方面,由于12V网络需要更大的间距规则,已为其设置了20mil安全距离。
然后PCB完成之后,对其进行规则检查,出现了2条违规信息。如上图所示。两个电容C3和C4违反了规则,已绿色高亮显示。原因是这些电容的焊盘形状已经固定。没办法改变,我们只能修改规则的设置来适应这两个电容。打开12V网络的间距规则设置,我们来修改规则范围,使其排除这2个电容。操作如下。
-
设置时,需要在第二个对象处“Where the second object matches”不选中C3和C4。即将C3和C4两个元件排除20mil间距的规则约束。点击自定义语句“Custom Query”,然后选择“Query Helper”。
-
找到“Component membership”语句,将其添加到规则中。我们双击“In Component”条目,即可将其添加到语句对话框。
-
然后移动到语句“Query” 对话框,在括号中键入一个单引号,将会弹出一个列表,选择C3。
-
然后添加“Or”到语句中,然后继续,我们先键入“In”。然后选中需要的条目“In component”。这次选择C4。
-
现在我们选中了C3或者C4。接下来要做的是,规则设置的范围不包含这两个电容。于是我们添加逻辑非“Not”。点击OK添加该条规则语句。
-
然后将其应用到规则设置中。现在的12V间距规则,已经排除了这2个电容。重新运行间距规则的DRC检查,结果很干净。而且C3和C4也不再高亮。
采用PCB Filter面板生成Query语句案例
大家都深有体会:让我们自己去输入一条条Query语句,熟练使用其语法条件,以及各条件之间的运算关系,这玩意对于非代码设计师来说,想想都头晕。能不碰就不碰,能有变通方法尽量绕开!
那么这里介绍一套生成Query语句的法宝。通过这个法宝我们可以方便地组织所需的Query语句。甚至还方便智能到根据所选对象自动生成Query语句的地步!废话少说,案例过一遍就都清楚了。
要熟练运用该法宝必须要与其左右两大护法搞好关系:查找相似对象(Find similar objects)和PCB过滤器(PCB Filter)。
案例前因:一PCB设计中,有几个连接器件,想让它们互相交叠挨在一起而不报错。那就需要设置这几个连接器件的元件之间间距(Component clearance)允许它们零距离亲密接触。
-
首先第一步,用查找相似对象的方式,来创建自定义Query语句。即选定一个对象,然后右键点击,选择查找相似对象“Find similar object”。
-
在封装“Footprint”条目后面,选择相同“Same” ,并确保创建表达式“Create expression”选项框被勾选。
-
现在点击应用“Apply”来看看是否所有符合条件的目标元件被选中。结果如你所愿。
-
然后打开PCB过滤器窗口“PCB filter”,这里看到生成的语句表达式。
-
在过滤器窗口中,你可以拷贝并粘贴该表达式到规则设置中,或者直接点击创建规则“Create rule”按钮,来打开规则设置页面。让我们为“Anderson”连接器选择元件间距。我们想要将它们摆放在一起,而不会报错。点击OK打开该规则设置页面。
-
让我们为该规则命名为“Anderson”。现在我们的新规则中,第一个对象匹配的Quuery语句是来自PCB Filter自动导过来的。代表的是黑色“Black”Anderson连接器,我们想让第二个对象匹配的语句是红色“Red” Anderson连接器。这里偷下懒,直接从第一个对象的语句表达式拷贝粘贴到第二个对象的语句表达式,然后编辑,将黑色改为红色。
-
现在我们有了一个关于黑色连接器和红色连接器之间的元件间距的规则。将其水平方向的间距设置为-5 mil,以允许它们摆放连接在一起。
-
定义好规则之后,现在我们要看一看,该规则的范围是不是恰好准确包含了想要涵盖的对象。要检查这个,我们需要用到测试语句“Test queries”的功能。它会打开一个测试语句的结果对话框,显示每个语句表达式的结果。点击每个不同的条目,会跳转并缩放到那些被选中的对象。点击OK。
现在让我们放置一个红色和黑色的连接器,毗连在一起,看看它们有没有发生间距报错。并没有!这就是刚才的规则所起的作用。
所以,采用查找相似对象(Find Similar Objects)找到你关注的对象,然后勾选Creat Expressions,自动生成Query语句到PCB Filter面板,然后直接Creat Rule即可。So easy!干吗还哼哧哼哧去查去写Query语句呢?
【来源】