ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)
本文將使用ZOS-API創(chuàng)建自定義操作數(shù) (User Operand) 來計算各表面之間距離的絕對值之和,該操作數(shù)與TTHI操作數(shù)的功能相同。可以使用UDOC操作數(shù)將該自定義操作數(shù)添加到評價函數(shù) (Merit Function) 中,以控制參數(shù)并執(zhí)行優(yōu)化。(聯(lián)系我們獲取文章附件)
引言
OpticStudio開發(fā)了一個應(yīng)用程序接口(ZOS-API),可以使用最新的軟件技術(shù)連接和定制應(yīng)用程序。雖然ZOS-API依賴于COM接口,但是它來源于.NET 庫,并且通過使用C++或C# (.NET) 來實現(xiàn)API的編程,具體使用取決于用戶對兩種語言的熟練程度。
應(yīng)用程序與OpticStudio之間的連接有四種程序模式。這些模式通常可以分為兩個類別:
1) 完全控制(獨立模式和自定義擴(kuò)展模式),這種情況下,用戶通常完全控制鏡頭設(shè)計和用戶界面;
2) 有限訪問(自定義操作數(shù)模式和自定義分析模式),這種情況下,用戶使用現(xiàn)有鏡頭文件的副本進(jìn)行處理和分析。
本文的主要目標(biāo)是討論自定義操作數(shù)模式。此模式幾乎與自定義分析 (User Analysis) 模式相同,只是它常創(chuàng)建用戶自定義操作數(shù)來進(jìn)行自定義數(shù)據(jù)計算。通過在評價函數(shù)編輯器 (Merit Function Editor) 中使用UDOC操作數(shù)添加自定義操作數(shù)。與自定義分析模式一樣,該模式不允許對當(dāng)前鏡頭系統(tǒng)或用戶界面進(jìn)行更改(即:在這種模式下只允許對系統(tǒng)的副本進(jìn)行更改)。自定義操作數(shù)可以使用C++(COM)或C# (.NET)編寫——具體使用取決于用戶對這兩種語言的熟悉程度。
打開新的編程模板
單擊C# >自定義操作數(shù) (User Operand),使用C#創(chuàng)建自定義操作數(shù)。
使用Windows資源管理器打開解決方案文件夾
{Zemax}\ZOS-API Projects\CSharpUserOperandApplication1。
Visual Studio也會打開新的解決方案。該解決方案包含可以用作任何自定義操作數(shù)的基礎(chǔ)模板代碼。
讀取鏡頭數(shù)據(jù)編輯器
在雙高斯示例文件中使用此自定義操作數(shù)來計算定義范圍內(nèi)所有表面的總厚度。該示例文件位于:
{Zemax}\Samples\Sequential\Objectives\Double Gauss 28 degree field.zmx 。
先使用自定義操作數(shù)讀取位于物面與光闌面之間的表面的中心厚度值,然后將這些值相加來計算雙高斯系統(tǒng)前組的總長度,也可以使用內(nèi)置的操作數(shù)TTHI來完成。
代碼頂部的兩行列出了應(yīng)用程序中經(jīng)常使用的名稱空間,然后可以在不指定完整路徑的情況下使用名稱空間中的接口。
using System;using ZOSAPI;
在模板中,有如下四個參數(shù)可用:
double Hx = TheApplication.OperandArgument1;double Hy = TheApplication.OperandArgument2;double Px = TheApplication.OperandArgument3;double Py = TheApplication.OperandArgument4;
參數(shù)的名稱不能自定義。在計算中,將使用其中兩個參數(shù)來定義表面范圍。
在模板范本中找到"// Add your custom code here..." ,并開始編寫代碼。
通過定義surf1和surf2來定義表面范圍,并鏈接到上述模板中的前兩個參數(shù)。注意,在本例中未使用參數(shù)3和4。
int surf1 = (int)TheApplication.OperandArgument1;int surf2 = (int)TheApplication.OperandArgument2;
定義對象“surf”為接口ZOSAPI.Editors.LDE 的實例,用其讀取鏡頭數(shù)據(jù)編輯器中的參數(shù)值。請記住,C# 是強(qiáng)類型語言,這意味著在聲明變量時必須指定它的數(shù)據(jù)類型。
ZOSAPI.Editors.LDE.ILDERow surf;double thic = 0;
求厚度絕對值之和
使用“if”循環(huán)求取定義的表面范圍內(nèi)的所有表面中心厚度之和。如果表面范圍輸入是有效的,那么自定義操作數(shù)將返回厚度的總和。否則將返回?zé)o窮大的數(shù),這意味著輸入是無效的。
if (surf1 <= surf2){ for (int i = surf1; i <= surf2; i++) { surf = TheSystem.LDE.GetSurfaceAt(i); thic = thic + Math.Abs(surf.Thickness); } operandResults[0] = thic;}else{ operandResults[0] = 1e9;}
現(xiàn)在,示例自定義操作數(shù)的編碼已經(jīng)完成。請注意,在本例中,使用operandResult[0] 將厚度值的和存入數(shù)據(jù)字段0。如果需要存放多個計算值,則可以將這些值存入不同的數(shù)據(jù)字段中,并使用UDOC操作數(shù)中的“Data”參數(shù)來控制確切的返回值。
保存、構(gòu)建和移動可執(zhí)行文件
將解決方案構(gòu)建為發(fā)布版本。在調(diào)試時使用調(diào)試模式,但是在分配插件時,應(yīng)該始終使用發(fā)布模式,因為調(diào)試庫不是可以重新分配的。因此,切換到發(fā)布模式。
與作為控制臺應(yīng)用程序 (Console application) 編譯的自定義分析不同,自定義操作數(shù)應(yīng)該作為Windows應(yīng)用程序編譯。
否則,在使用用戶自定義操作數(shù)進(jìn)行優(yōu)化時,控制臺窗口將不斷彈出,因為在優(yōu)化期間會多次調(diào)用已編譯的.exe文件。
在Visual Studio中,打開項目屬性,并將自定義操作數(shù)應(yīng)用程序的輸出類型 (Output Type) 更改為Windows應(yīng)用程序。注意,編譯后的自定義操作數(shù)應(yīng)用程序作為客戶端程序,由評價函數(shù)操作數(shù)UDOC調(diào)用,由UDOC的prog#參數(shù)中的程序編號定義。因此,應(yīng)用程序的程序集名稱 (Assembly Name) 應(yīng)該定義為UDOCXX,XX表示從00到99的數(shù)字。
然后,構(gòu)建解決方案。
具有已定義程序集名稱的Exe應(yīng)用程序?qū)⒋鎯υ赩isual Studio的項目屬性中已選擇的輸出路徑中:
找到已完成的應(yīng)用程序的位置并將其復(fù)制到文件夾 {Zemax}\ZOS-API\Operands 中。
使用自定義操作數(shù)優(yōu)化系統(tǒng)
為了檢查新的自定義操作數(shù),先打開OpticStudio,并打開鏡頭文件 {Zemax}\Samples\Sequential\Objectives\Double Gauss 28 degree field.zmx 。
打開評價函數(shù)編輯器,并在評價函數(shù)編輯器中插入操作數(shù)UDOC:
Prog# 用來指定客戶端程序名稱的編號,必須是整數(shù)值。
Data = 0 將執(zhí)行客戶端程序并返回當(dāng)前值 (value) 列中的值。
超時(Timeout) 定義了OpticStudio等待UDOC計算所需數(shù)據(jù)并將控制權(quán)返回給OpticStudio的最長時間(以毫秒為單位),在本例中設(shè)置為50000。
然后,操作數(shù)UDOC就像任何內(nèi)置的評價函數(shù)操作數(shù)一樣工作。
Hx=1 和 Hy=5 是定義表面范圍的參數(shù)。
當(dāng)前值為前組的總長度(從表面1到表面6的厚度)。
目標(biāo)值將控制該值的目標(biāo)量。
設(shè)置好所有參數(shù)后,點擊評價函數(shù)編輯器的更新按鈕,計算出的值會顯示在當(dāng)前值列中,如下圖所示:
除了執(zhí)行計算之外,操作數(shù)UDOC還可以像其他任何評價函數(shù)操作數(shù)一樣用來執(zhí)行優(yōu)化。
例如,將前組的總長度限制為40mm,并將每個表面的中心厚度保持在合理的范圍內(nèi)。在操作數(shù)UDOC中將目標(biāo)值設(shè)置為40mm。添加操作數(shù)MNCT和MXCT來限制中心厚度。如果需要,還可以將其他優(yōu)化標(biāo)準(zhǔn)添加到評價函數(shù)編輯器中,比如RMS光斑半徑大小或波前差。
在只控制厚度的情況下執(zhí)行優(yōu)化。
優(yōu)化后,第一組總長度正好為40mm,且各表面中心厚度符合要求。
點擊圖片查看課程詳情
點擊圖片查看投票詳情
相關(guān)閱讀 - 編程
ZEMAX | 了解 ZOS-API 的主要接口——MATLAB
ZEMAX | 使用 ZPL 宏進(jìn)行優(yōu)化:ZPLM 操作數(shù)
ZEMAX | 如何編寫 ZPL 宏:計算環(huán)帶垂軸色差
ZEMAX | ZOS-API、ZPL 和 DLL 之間的區(qū)別
ZEMAX | 如何使用 ZOS-API 創(chuàng)建飛行時間自定義分析
歡迎掃碼添加宇熠工作人員微信,
進(jìn)入 zemax 微信交流群。
一起來學(xué)習(xí)光學(xué)設(shè)計吧!
掃碼邀您入群
如果您對產(chǎn)品感興趣,或需要技術(shù)支持,歡迎致電垂詢!
電話:027-87878386
郵箱:market@ueotek.com
關(guān)注武漢宇熠視頻號 查看更多精彩視頻
武漢宇熠科技是 ZEMAX 中國區(qū)官方指定代理商,提供 ZEMAX 光學(xué)設(shè)計軟件的培訓(xùn)、銷售、技術(shù)支持、二次開發(fā)、解決方案及 ZEMAX 軟件相關(guān)全方位定制服務(wù)。有關(guān) ZEMAX ,您可以點擊文末“閱讀原文”了解更多信息,或致電垂詢武漢宇熠工作人員:
銷售熱線:027-87878386
咨詢郵箱:sales@ueotek.com
工程師必備
- 項目客服
- 培訓(xùn)客服
- 平臺客服
TOP




















