Ansys Zemax | 如何使用 ZPL 創(chuàng)建用戶自定義求解

附件下載

聯(lián)系工作人員獲取附件


本文使用兩個(gè)示例演示了如何使用 ZPL 創(chuàng)建用戶自定義解。第一個(gè)示例介紹了如何創(chuàng)建 ZPL 解以確保序列文件中像面的曲率半徑等于系統(tǒng)的 Petzval 曲率。第二個(gè)示例介紹了如何在非序列元件編輯器 ( Non-Sequential Component Editor ) 中基于其他物體的參數(shù)來(lái)約束的物體位置。


簡(jiǎn)介


求解 ( Solve ) 是可以在諸如鏡頭數(shù)據(jù)編輯器或非序列元件編輯器之類(lèi)的編輯器中主動(dòng)調(diào)整特定值的功能。例如,可以在曲率半徑,圓錐系數(shù)或 TCE 上指定求解類(lèi)型,并通過(guò)單擊要放置的求解單元的求解框進(jìn)行設(shè)置。盡管 OpticStudio 提供了許多默認(rèn)的求解類(lèi)型,但用戶有可能希望自定義求解類(lèi)型,這可以通過(guò)使用Zemax 編程語(yǔ)言( Zemax Programming Language ,ZPL)來(lái)實(shí)現(xiàn)。


ZPL 宏求解可用于任何編輯器中的幾乎所有單元(曲率半徑,厚度,參數(shù),多重結(jié)構(gòu)等)??梢韵袢魏纹渌蠼忸?lèi)型一樣,通過(guò)在編輯器中單擊參數(shù)單元格右側(cè)的小框來(lái)設(shè)置 ZPL 宏求解。


ZPL 宏求解通過(guò)執(zhí)行 ZPL 宏來(lái)確定解的值,并使用 SOLVERETURN 關(guān)鍵字將其返回給編輯器。一旦創(chuàng)建了用于求解的宏,并將其放置在 \Zemax\Macros 目錄中,即可在求解窗口的“宏:( Macro: )”中輸入該宏的名稱(chēng):



請(qǐng)注意,在求解框中輸入的宏名稱(chēng)不區(qū)分大小寫(xiě),并且不需要其擴(kuò)展名(.ZPL)。


為確保宏求解按照預(yù)期的方式工作,需要遵循一些規(guī)則,請(qǐng)參閱“技巧和陷阱”部分以獲取更多信息。


Petzval 曲率求解示例


假設(shè)我們想要能夠自動(dòng)將像面的曲率半徑設(shè)置為等于 Petzval 曲率的解。當(dāng)然,在編寫(xiě)宏之前,請(qǐng)始終先檢查一下仍不支持的解!


加載文件:


\Zemax\Samples\Sequential\Objectives\Petzval.zmx 。



宏求解需要計(jì)算系統(tǒng)的 Petzval 曲率,然后將值返回給 OpticStudio。系統(tǒng)的 Petzval 曲率是通過(guò) PETC 優(yōu)化操作數(shù)獲得的,也可以通過(guò) OPEV() 和 OCOD() 函數(shù)直接在宏中調(diào)用:

·OCOD() 提取與優(yōu)化操作數(shù)類(lèi)型相對(duì)應(yīng)的唯一數(shù)字代碼

·OPEV() 計(jì)算操作數(shù)的值,以 OCOD() 提取的唯一代碼作為第一個(gè)參數(shù),然后是優(yōu)化操作數(shù)的參數(shù)。

在本例中:



請(qǐng)注意, SOLVERETURN 關(guān)鍵字用于將數(shù)據(jù)傳遞回編輯器。將該宏另存為 Macros 文件夾中的 PETC.zpl。曲率求解值必須以曲率 (1/R) 的形式返回,而不是曲率半徑。所有其他求解直接返回值。


要應(yīng)用宏,請(qǐng)?jiān)谙衩娴那拾霃絾卧羞x擇求解框,然后選擇 ZPL 宏求解類(lèi)型,然后在單元格中鍵入宏名稱(chēng):



瞧!OpticStudio 自動(dòng)更新求解,并在“求解類(lèi)型 ( Solve Type )”框中放置“Z”,以指示其處于激活狀態(tài):



物體位置求解示例


第二個(gè)示例,我們將要使一個(gè)非序列物體在另一個(gè)非序列物體的末端之后10 mm。為此,需要計(jì)算前一個(gè)物體的長(zhǎng)度,并用它來(lái)定位第二個(gè)物體。


文章附件里的非序列文件中,第一個(gè)物體是矩形的復(fù)合拋物線聚光鏡 (Compound Parabolic Concentrator,CPC ) 物體。將此物體的最大長(zhǎng)度定義為非序列元件編輯器中的參數(shù)。如果可以保證該物體始終是最大長(zhǎng)度,則可以簡(jiǎn)單地使用帶有偏移量的拾取求解來(lái)定位物體2。但是,實(shí)際長(zhǎng)度有可能小于最大長(zhǎng)度參數(shù),因此必須計(jì)算實(shí)際長(zhǎng)度并使用此值。同樣,由于這是 CPC 矩形 (Rectangular CPC) 物體,因此 x 和 y 截面的實(shí)際長(zhǎng)度可能會(huì)有所不同:必須選擇兩者中較小的一個(gè)。這是宏求解中的理想問(wèn)題!


CPC的長(zhǎng)度“ L”由幫助文件:“設(shè)置 ( Setup ) 選項(xiàng)卡 > 編輯器 ( Editors ) 組 > 非序列元件編輯器 ( Non-Sequential Component Editor ) > 非序列幾何物體 ( Non-Sequential Geometry Objects ) > 復(fù)合拋物線聚光鏡(Compound Parabolic Concentrator , CPC)”部分中的公式給出:



因?yàn)檫@是 CPC 矩形 物體,所以有兩個(gè)相關(guān)的長(zhǎng)度值:X 和 Y,兩個(gè)長(zhǎng)度中較小的將被 OpticStudio 用作 CPC的長(zhǎng)度,除非該長(zhǎng)度大于“長(zhǎng)度 ( Length )”參數(shù)。本例中的長(zhǎng)度是“長(zhǎng)度”參數(shù)的值。因此,宏應(yīng)使用上面的公式計(jì)算 CPC 物體的 X 和 Y 長(zhǎng)度,選擇兩個(gè)值中較小的,添加10 mm偏移,并將該值返回給矩形物體的 Z 位置 ( Z Position )參數(shù)。如果 X 和 Y 之間的較小長(zhǎng)度仍大于“長(zhǎng)度”參數(shù)值,則宏應(yīng)在“長(zhǎng)度”參數(shù)值上添加10 mm偏移,然后返回該值。


可以在文章附件中找到執(zhí)行上述操作的 REC_CPC.ZPL 宏:



如前所述,關(guān)鍵字 SOLVERETURN 用于將所需值傳遞回 NSCE。將宏放置在 \Zemax\Macros 文件夾后,在主菜單中單擊:宏 ( Macros ) > 更新宏列表 ( Refresh Macro List )。


在物體2(矩形)的參數(shù) “Z 位置”的求解框中,選擇“ ZPL 宏”,然后鍵入宏名稱(chēng):



就像前面的示例一樣,NSCE 將在參數(shù)旁邊顯示 “ Z”,表明已在該參數(shù)上設(shè)置了 ZPL 解:



請(qǐng)注意,如果使用 Ctrl-A 在文件中定義的2個(gè)組態(tài)之間切換會(huì)發(fā)生什么。CPC 矩形物體的 Y 角(度)參數(shù)在20到40度之間更改,因此物體的長(zhǎng)度也會(huì)更改。發(fā)生這種情況時(shí),應(yīng)用于物體2的 “Z 位置” ZPL 求解將自動(dòng)更改,以根據(jù)對(duì)應(yīng)操作將此物體始終放置在 CPC 物體末端的10毫米后。




技巧和陷阱


宏求解非常普遍,幾乎可以使用任何計(jì)算來(lái)確定求解值。ZPL 支持的所有函數(shù)和關(guān)鍵字均可用。從宏菜單執(zhí)行或作為求解執(zhí)行的 ZPL 宏之間沒(méi)有區(qū)別。但是,編寫(xiě) ZPL 求解時(shí)應(yīng)認(rèn)真仔細(xì):

·許多 ZPL 關(guān)鍵字和某些函數(shù)不應(yīng)在宏求解中使用。例如,從求解中調(diào)用 UPDATE 會(huì)更新所有求解,這將再次調(diào)用宏,從而導(dǎo)致無(wú)限循環(huán),會(huì)使其他關(guān)鍵字無(wú)法使用(例如:,在每次調(diào)用求解時(shí)都要求用戶輸入數(shù)據(jù))。

·僅更新應(yīng)用了求解的單元格。宏不應(yīng)更新其他單元格或以其他方式修改系統(tǒng)(例如,不應(yīng)優(yōu)化)。

·宏求解永遠(yuǎn)不要依賴求解之后的編輯器中的數(shù)據(jù),因?yàn)槿绻日{(diào)用解,然后再通過(guò)單獨(dú)的后續(xù)解修改源數(shù)據(jù),這也可能會(huì)產(chǎn)生錯(cuò)誤的數(shù)據(jù)。

·僅當(dāng)宏中的計(jì)算不是基于任何光線數(shù)據(jù)時(shí),宏求解才可以放置在光闌面之前。有關(guān)更多信息,請(qǐng)參閱幫助文件的“編程 (Programming) 選項(xiàng)卡 > 關(guān)于ZPL ( About the ZPL ) >關(guān)鍵字 ( KEYWORDS ) > SOLVEBEFORESTOP” 部分。

·為了使求解更強(qiáng)且盡可能通用,建議在需要進(jìn)行表面參考時(shí)使用 SURC() 和 SOSO() 函數(shù):

·SURC() 通過(guò)其(特殊的)注釋字符串參考表面

·SOSO() 獲取要設(shè)置求解的表面/物體編號(hào)

·請(qǐng)記住,如果在鏡頭數(shù)據(jù)編輯器中的任何曲率半徑單元上使用ZPL宏求解,則此參數(shù)的所有求解都將計(jì)算曲率 (1/R),而不是曲率半徑(R)。這意味著應(yīng)用于此參數(shù)的求解應(yīng)返回曲率半徑的倒數(shù),而不是曲率半徑本身。

·用戶負(fù)責(zé)對(duì)宏返回的數(shù)據(jù)進(jìn)行錯(cuò)誤檢查。例如,如果宏調(diào)用 RAYTRACE 來(lái)計(jì)算光線參數(shù),則應(yīng)使用 RAYE() 來(lái)確保沒(méi)有發(fā)生任何錯(cuò)誤(例如漸暈或全內(nèi)反射)。如果發(fā)生錯(cuò)誤,則宏應(yīng)在未調(diào)用 SOLVERETURN 的情況下退出,以確保沒(méi)有值返回到單元格。這在優(yōu)化過(guò)程中尤其重要。以下代碼給出了如何測(cè)試錯(cuò)誤的示例。



·通常,宏求解應(yīng)保持簡(jiǎn)短,簡(jiǎn)單,并避免冗長(zhǎng)的計(jì)算。

·最后,請(qǐng)注意,OpticStudio 不會(huì)嘗試限定或驗(yàn)證求解宏。此功能很強(qiáng)大,且具有靈活性,但必須謹(jǐn)慎使用。