一、文檔背景
在Altium Designer中, 設(shè)計(jì)規(guī)則通常用來(lái)定義用戶(hù)的設(shè)計(jì)需求。 這些規(guī)則涵蓋了設(shè)計(jì)的方方面面, 從布線(xiàn)寬度, 對(duì)象的安全間距,內(nèi)電層的連接風(fēng)格, 過(guò)孔風(fēng)格等等。 設(shè)計(jì)規(guī)則不僅能在PCB設(shè)計(jì)的過(guò)程中實(shí)時(shí)檢測(cè), 而且也能夠在需要的時(shí)候進(jìn)行統(tǒng)一的批量檢測(cè)并生成錯(cuò)誤報(bào)告。
Altium Designer的設(shè)計(jì)規(guī)則不是PCB對(duì)象的屬性, 而是獨(dú)立定義的。 每條規(guī)則需針對(duì)具體的PCB對(duì)象。對(duì)于PCB規(guī)則系統(tǒng)來(lái)說(shuō),它必須知道給定的規(guī)則應(yīng)用于哪些對(duì)象,即規(guī)則的應(yīng)用范圍??梢栽赑CB規(guī)則約束管理器對(duì)話(huà)框中設(shè)定規(guī)則及規(guī)則的范圍。其中采用撰寫(xiě)查詢(xún)語(yǔ)句的方式來(lái)定義范圍是經(jīng)常需要用到的,并且非常重要的方式方法。
查詢(xún)語(yǔ)句(Query)是對(duì)規(guī)則應(yīng)用對(duì)象的描述。設(shè)計(jì)規(guī)則的約束對(duì)象可以直接手動(dòng)輸入查詢(xún)語(yǔ)句, 或是在語(yǔ)言編輯區(qū)左側(cè)的控制區(qū)選擇,或者是采用查詢(xún)語(yǔ)句構(gòu)造器來(lái)定義。
二、 查詢(xún)語(yǔ)句含義
查詢(xún)語(yǔ)句實(shí)際上是軟件的一條指令,定義了一系列的目標(biāo)設(shè)計(jì)對(duì)象。查詢(xún)語(yǔ)句由查詢(xún)的關(guān)鍵字組成。下面是一個(gè)查詢(xún)語(yǔ)句的示例: InNet(‘GND‘) And OnLayer(‘TopLayer‘);
如果在寬度規(guī)則中用該查詢(xún)語(yǔ)句定義范圍,那么設(shè)計(jì)者在切換到頂層對(duì)GND網(wǎng)絡(luò)布線(xiàn)時(shí),走線(xiàn)的寬度會(huì)自動(dòng)轉(zhuǎn)換到該規(guī)則指定的寬度值。如果執(zhí)行設(shè)計(jì)規(guī)則檢查(DRC),任何在頂層的GND網(wǎng)絡(luò)必須滿(mǎn)足這個(gè)寬度規(guī)則,否則就會(huì)被標(biāo)記為違反設(shè)計(jì)規(guī)則。
使用PCB規(guī)則約束編輯器( PCB Rules and Constraints Editor)對(duì)話(huà)框中的選項(xiàng)可以創(chuàng)建查詢(xún)語(yǔ)句。根據(jù)規(guī)則是一元的還是二元的,用戶(hù)可能需要相應(yīng)地定義一個(gè)或兩個(gè)對(duì)象范圍。在PCB規(guī)則約束編輯器中,簡(jiǎn)單的查詢(xún)語(yǔ)句有如下幾種類(lèi)型的范圍選項(xiàng)。
● 所有的的設(shè)計(jì)對(duì)象
● 指定網(wǎng)絡(luò)中的所有對(duì)象
● 指定網(wǎng)絡(luò)類(lèi)中的所有對(duì)象
● 指定層上的所有對(duì)象
● 指定層上且屬于指定網(wǎng)絡(luò)的所有對(duì)象

高級(jí)查詢(xún)(Custom Query)選項(xiàng)允許設(shè)計(jì)者撰寫(xiě)自己的更復(fù)雜但更為精確的查詢(xún)語(yǔ)句。設(shè)計(jì)者可以在語(yǔ)句編寫(xiě)區(qū)域直接輸入規(guī)則范圍的定制查詢(xún)語(yǔ)句。有兩個(gè)工具(Query Builder和Query Helper)可幫助創(chuàng)建高級(jí)查詢(xún)語(yǔ)句。當(dāng)不確定查詢(xún)語(yǔ)句的語(yǔ)法或者需要使用的關(guān)鍵字,這兩個(gè)工具就會(huì)相當(dāng)有用。


三、 三種規(guī)則語(yǔ)句設(shè)置
1、點(diǎn)擊Query Helper按鈕打開(kāi)Query Helper對(duì)話(huà)框。查詢(xún)引擎會(huì)分析PCB設(shè)計(jì),列出所有可用的對(duì)象,以及所有查詢(xún)關(guān)鍵字。
對(duì)話(huà)框的Query區(qū)域用來(lái)生成查詢(xún)表達(dá)式。我們可以直接在該區(qū)域輸入——會(huì)出現(xiàn)輔助的關(guān)鍵字或?qū)ο蟮奶崾玖斜?。?duì)話(huà)框的Categories區(qū)域用于訪(fǎng)問(wèn)可用的PCB函數(shù)(PCB Functions)、PCB對(duì)象列表(PCB Object Lists)和系統(tǒng)函數(shù)(System Functions),它們用來(lái)創(chuàng)建查詢(xún)表達(dá)式。在這三個(gè)區(qū)域中點(diǎn)擊一個(gè)子類(lèi)別,會(huì)在右側(cè)區(qū)域中顯示相應(yīng)的關(guān)鍵字或?qū)ο罅斜怼6ㄎ灰诓樵?xún)語(yǔ)句中使用的關(guān)鍵字或?qū)ο?,并雙擊其條目,該條目就會(huì)出現(xiàn)在查詢(xún)表達(dá)式區(qū)域的當(dāng)前光標(biāo)位置。

數(shù)學(xué)運(yùn)算符代表的含義:
(1)、算數(shù)運(yùn)算符
操作符 | 描述 | 例子 |
+ | 加法運(yùn)算 | NetPinCount + NetViaCount |
- | 減法運(yùn)算 | ArcStopAngle - ArcStartAngle |
* | 乘法運(yùn)算 | PadXSize_BottomLayer * PadYSize_BottomLayer |
/ | 除法運(yùn)算 | HoleDiameter / ViaDiameter |
Div | 整除運(yùn)算 | Color Div 65536 這將計(jì)算Color除以65536,結(jié)果的小數(shù)部分將被丟棄 |
Mod | 模數(shù)運(yùn)算 | Color Mod 256 這將計(jì)算Color除以256時(shí)的余數(shù),而不確定結(jié)果的小數(shù)部分 |
(2)、邏輯運(yùn)算符
運(yùn)算符 | 描述 | 例子 |
And | 與 | IsPad And OnMultiLayer 對(duì)象必須是一個(gè)PAD而且要位于MultiLayer層上 |
&& | 與 (低優(yōu)先級(jí)) | IsPad && OnMultiLayer 對(duì)象必須是一個(gè)PAD而且要位于MultiLayer層上 |
Or | 或 | IsPad Or IsVia 對(duì)象要么是pad要么是via |
|| | 或 (低優(yōu)先級(jí)) | IsPad || IsVia 對(duì)象要么是pad要么是via |
Xor | 異或 | OnMultiLayer Xor (HoleDiameter <> 0) 對(duì)象是位于MultiLayer且孔徑為0或者不在MultiLayer且孔徑不為0 |
Not | 非 | Not OnMultiLayer 不在MultiLayer層的對(duì)象 |
(3)、比較運(yùn)算符
運(yùn)算符 | 描述 | 例子 |
< | 小于 | HoleDiameter < 40 孔直徑小于40的對(duì)象 |
<= | 小于或等于 | HoleDiameter <= 40 孔直徑小于或等于40的對(duì)象 |
>= | 大于或等于 | HoleDiameter >= 40 孔直徑大于或等于 40的對(duì)象 |
> | 大于 | HoleDiameter > 40 孔直徑大于40的對(duì)象 |
<> | 不等于 | HoleDiameter <> 40 孔直徑不等于40的對(duì)象 |
= | 等于 | HoleDiameter = 40 孔直徑等于40的對(duì)象 |
Between...And... | 包括范圍 | HoleDiameter Between 30 And 50 孔徑大于等于30,小于等于50的對(duì)象 |
Like | Like 關(guān)聯(lián) | Name Like 'ADDR?*' 具有Name屬性的對(duì)象其關(guān)聯(lián)的(文本)字符串以ADDR開(kāi)頭,并且至少包含一個(gè)以上的字符 |
(4)、通配符
OPERATOR | DESCRIPTION | EXAMPLE |
? | 這個(gè)可以用任意類(lèi)型代替的單個(gè)字符 | Footprint Like 'DIP1?' 具有DIP11、12、14、15等封裝屬性的對(duì)象 |
* | 這可以用任意數(shù)量的字符替換每個(gè)字符可以是任何類(lèi)型 | Footprint Like 'SIP*' 具有SIP1、SIP12或SIP216等Footprint屬性的對(duì)象(任何具有SIP Footprint屬性的對(duì)象) |
2、使用Query Builder構(gòu)建查詢(xún)語(yǔ)句
Query Builder提供了一種構(gòu)造查詢(xún)語(yǔ)句的簡(jiǎn)單方法,它允許設(shè)計(jì)者利用條件類(lèi)型和值構(gòu)建相關(guān)的查詢(xún)模塊。點(diǎn)擊“查詢(xún)構(gòu)建器”(Query Builder)按鈕來(lái)打開(kāi)Building Query from Board對(duì)話(huà)框,可以在該對(duì)話(huà)框中創(chuàng)建由AND和OR 邏輯字符串構(gòu)成的查詢(xún)表達(dá)式。左側(cè)部分用于選擇指定目標(biāo)對(duì)象的條件,右側(cè)部分會(huì)顯示當(dāng)前查詢(xún)語(yǔ)句的預(yù)覽,如下圖所示,可以添加多個(gè)條件進(jìn)一步限制目標(biāo)對(duì)象

3、使用PCB Filter 面板創(chuàng)建設(shè)計(jì)規(guī)則
創(chuàng)建設(shè)計(jì)規(guī)則的另一種方法:利用PCB Filter面板的查詢(xún)語(yǔ)句直接創(chuàng)建設(shè)計(jì)規(guī)則。使用查找相似對(duì)象對(duì)話(huà)框,可以為PCB Filter 面板創(chuàng)建查詢(xún)表達(dá)式。然后在PCB Filter面板中使用創(chuàng)建按鈕,為Filter部分的查詢(xún)表達(dá)式直接創(chuàng)建設(shè)計(jì)規(guī)則。步驟如下:
在PCB面板上選擇一個(gè)目標(biāo)對(duì)象,對(duì)其右鍵單擊,然后在彈出的右鍵菜單中選擇”查找相似對(duì)象“命令,打開(kāi)查找相似對(duì)象對(duì)話(huà)框。在該對(duì)話(huà)框中,將目標(biāo)對(duì)象具有的相同元素設(shè)置為”Same “(例如PCB封裝相同,則將Footprint設(shè)置為Same),勾選”創(chuàng)建表達(dá)式“對(duì)話(huà)框,設(shè)置如下圖所示。

此時(shí)可以點(diǎn)擊” 應(yīng)用“按鈕, 查看目標(biāo)對(duì)象是否都被選中。如果我們需要的對(duì)象都被選中,并且不需要的對(duì)象不在選擇范圍內(nèi),則說(shuō)明設(shè)置的選擇范圍沒(méi)有問(wèn)題。點(diǎn)擊”確定“按鈕,此時(shí)已經(jīng)打開(kāi)的PCB Filter面板的”過(guò)濾器“區(qū)域出現(xiàn)了查找相似對(duì)象 對(duì)話(huà)框產(chǎn)生的查詢(xún)表達(dá)式。如下圖所示:

此時(shí)勾選面板上的”選擇“復(fù)選框,然后點(diǎn)擊”全部應(yīng)用“按鈕,將會(huì)選中PCB板上所有要查詢(xún)的設(shè)計(jì)對(duì)象。在確保查找對(duì)象的范圍沒(méi)有問(wèn)題后,可以將”過(guò)濾器“中的查詢(xún)語(yǔ)句復(fù)制到設(shè)計(jì)規(guī)則對(duì)話(huà)框的Query語(yǔ)句區(qū)域。也可以按照下面所示的步驟創(chuàng)建新的設(shè)計(jì)規(guī)則:點(diǎn)擊”過(guò)濾器“對(duì)話(huà)框上的”創(chuàng)建規(guī)則“按鈕,然后在彈出的選擇設(shè)計(jì)規(guī)則類(lèi)型對(duì)話(huà)框中選擇要?jiǎng)?chuàng)建的規(guī)則類(lèi)型;

這將打開(kāi)PCB 規(guī)則及約束編輯器窗口,查詢(xún)語(yǔ)句已經(jīng)被復(fù)制到相應(yīng)的區(qū)域,此時(shí)只要對(duì)規(guī)則進(jìn)行命名,然后進(jìn)行后續(xù)的設(shè)置即可。

4、檢測(cè)Query語(yǔ)句
在設(shè)置設(shè)計(jì)規(guī)則時(shí),了解規(guī)則的范圍是否正確涵蓋了所有預(yù)期的對(duì)象,且不包括其他的對(duì)象,是個(gè)很重要的步驟。測(cè)試語(yǔ)句功能可以測(cè)試查詢(xún)語(yǔ)句,驗(yàn)證查詢(xún)表達(dá)式是否定位到正確的對(duì)象。在設(shè)計(jì)規(guī)則界面點(diǎn)擊窗口右上角的”測(cè)試語(yǔ)句“按鈕,打開(kāi)測(cè)試查詢(xún)結(jié)果窗口,該窗口中會(huì)顯示查詢(xún)語(yǔ)句實(shí)際上應(yīng)用到的對(duì)象數(shù),如下圖所示。

四、討論分析
Query Helper和Query Builder是Altium Designer中用于構(gòu)建查詢(xún)語(yǔ)句的兩個(gè)工具,它們各有優(yōu)缺點(diǎn):
Query Helper
優(yōu)點(diǎn):
1. 高級(jí)查詢(xún)支持:Query Helper提供了一個(gè)對(duì)話(huà)框,允許用戶(hù)使用PCB Functions、PCB Object Lists和System Functions來(lái)構(gòu)建復(fù)雜的查詢(xún)表達(dá)式。
2. 語(yǔ)法檢查:提供了Check Syntax按鈕,用于驗(yàn)證查詢(xún)表達(dá)式的語(yǔ)法是否正確。
3. 詳細(xì)文檔支持:對(duì)于每個(gè)關(guān)鍵字,提供了簡(jiǎn)短的描述,并且可以通過(guò)按F1鍵訪(fǎng)問(wèn)在線(xiàn)幫助文檔,獲取更多關(guān)于如何使用該關(guān)鍵字的信息。
4. 關(guān)鍵字搜索:通過(guò)Mask字段,可以快速搜索相關(guān)的關(guān)鍵字,這在不確定確切關(guān)鍵字時(shí)非常有用。
缺點(diǎn):
1. 復(fù)雜性:對(duì)于初學(xué)者來(lái)說(shuō),可能需要一定的學(xué)習(xí)曲線(xiàn)來(lái)熟悉如何使用Query Helper構(gòu)建復(fù)雜的查詢(xún)語(yǔ)句。
2. 手動(dòng)輸入:需要用戶(hù)手動(dòng)輸入查詢(xún)語(yǔ)句,這可能會(huì)增加出錯(cuò)的機(jī)會(huì),尤其是在不熟悉查詢(xún)語(yǔ)法的情況下。
Query Builder
優(yōu)點(diǎn):
1. 用戶(hù)友好:Query Builder提供了一個(gè)圖形界面,通過(guò)下拉列表選擇測(cè)試條件,適合不太熟悉查詢(xún)語(yǔ)法的用戶(hù)。
2. 自動(dòng)生成查詢(xún):QueryBuilder對(duì)話(huà)框可以幫助用戶(hù)自動(dòng)生成與指定條件相對(duì)應(yīng)的查詢(xún),簡(jiǎn)化了查詢(xún)構(gòu)建過(guò)程。
3. 直觀操作:用戶(hù)可以通過(guò)直觀的界面添加和組合條件,構(gòu)建由AND和OR邏輯字符串構(gòu)成的查詢(xún)表達(dá)式。
缺點(diǎn):
1. 限制性:QueryBuilder主要使用相關(guān)的“構(gòu)建塊”來(lái)構(gòu)建查詢(xún),可能不如Query Helper那樣靈活,無(wú)法構(gòu)建非常復(fù)雜的查詢(xún)語(yǔ)句。
2. 缺少高級(jí)功能:對(duì)于需要精確控制查詢(xún)語(yǔ)法和關(guān)鍵字的高級(jí)用戶(hù)來(lái)說(shuō),QueryBuilder可能不夠用。
總的來(lái)說(shuō),Query Helper適合那些需要構(gòu)建復(fù)雜查詢(xún)并且熟悉查詢(xún)語(yǔ)法的用戶(hù),而Query Builder則更適合初學(xué)者或者需要快速構(gòu)建簡(jiǎn)單查詢(xún)的用戶(hù)。兩者可以根據(jù)不同的需求和場(chǎng)景選擇使用。
使用PCB Filter 面板創(chuàng)建設(shè)計(jì)規(guī)則
優(yōu)點(diǎn):
1. 精確選擇和編輯:PCB Filter面板通過(guò)邏輯查詢(xún)提供精確選擇和編輯多個(gè)對(duì)象的能力,這對(duì)于復(fù)雜的PCB設(shè)計(jì)尤其有用。
2. 用戶(hù)友好的界面:面板提供了直觀的界面,使得用戶(hù)可以快速構(gòu)建簡(jiǎn)單的過(guò)濾表達(dá)式,針對(duì)任何組合的對(duì)象。
3. 動(dòng)態(tài)查詢(xún)構(gòu)建:隨著用戶(hù)在面板中進(jìn)行過(guò)濾選擇,查詢(xún)表達(dá)式會(huì)動(dòng)態(tài)構(gòu)建并顯示在面板中,使得用戶(hù)可以實(shí)時(shí)看到過(guò)濾結(jié)果。
4. 視覺(jué)過(guò)濾效果:面板提供了不同的視覺(jué)過(guò)濾效果,如Normal、Mask和Dim,幫助用戶(hù)在工作區(qū)中區(qū)分過(guò)濾和未過(guò)濾的對(duì)象。
5. 輔助工具:PCB Filter面板提供了Query Helper和Query Builder工具,幫助用戶(hù)構(gòu)建查詢(xún)語(yǔ)句,尤其是對(duì)于不熟悉查詢(xún)語(yǔ)法的用戶(hù)。
6. 設(shè)計(jì)規(guī)則創(chuàng)建:面板還提供了創(chuàng)建設(shè)計(jì)規(guī)則的功能,其范圍將使用面板中定義的查詢(xún)表達(dá)式。
7. 靈活性:用戶(hù)可以有效地應(yīng)用新的過(guò)濾查詢(xún)來(lái)構(gòu)建在之前過(guò)濾結(jié)果的基礎(chǔ)上,增加了設(shè)計(jì)的靈活性。
缺點(diǎn):
1. 學(xué)習(xí)曲線(xiàn):對(duì)于初學(xué)者來(lái)說(shuō),PCB Filter面板可能需要一定的學(xué)習(xí)曲線(xiàn),尤其是當(dāng)涉及到復(fù)雜的查詢(xún)語(yǔ)句構(gòu)建時(shí)。
2. 性能影響:在處理大型或復(fù)雜的PCB設(shè)計(jì)時(shí),應(yīng)用復(fù)雜的過(guò)濾規(guī)則可能會(huì)對(duì)軟件性能產(chǎn)生一定影響,尤其是在計(jì)算機(jī)配置較低的情況下。
3. 忽略錯(cuò)誤:在某些情況下,如DRC(設(shè)計(jì)規(guī)則檢查)時(shí)可能會(huì)忽略那些沒(méi)有放好的器件,如果設(shè)計(jì)規(guī)則設(shè)置不當(dāng),可能會(huì)導(dǎo)致設(shè)計(jì)中的問(wèn)題被遺漏。
五、結(jié)論
Custom Query選項(xiàng)使設(shè)計(jì)人員能夠自定義編寫(xiě)更復(fù)雜的查詢(xún)語(yǔ)句,以便更具體地限定規(guī)則應(yīng)用的范圍。編寫(xiě)Query 語(yǔ)句并檢測(cè)其準(zhǔn)確性。