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ù)


ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖1

使用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來完成。

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖2


代碼頂部的兩行列出了應(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;
 

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖3

參數(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ā)布模式。

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖4


 

與作為控制臺應(yīng)用程序 (Console application編譯的自定義分析不同,自定義操作數(shù)應(yīng)該作為Windows應(yīng)用程序編譯。

否則,在使用用戶自定義操作數(shù)進(jìn)行優(yōu)化時,控制臺窗口將不斷彈出,因為在優(yōu)化期間會多次調(diào)用已編譯的.exe文件。

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖5


在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ù)字。

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖6

然后,構(gòu)建解決方案。

具有已定義程序集名稱的Exe應(yīng)用程序?qū)⒋鎯υ赩isual Studio的項目屬性中已選擇的輸出路徑中:

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖7

找到已完成的應(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:

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖8

  • 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)前列中,如下圖所示:

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖9

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖10

除了執(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光斑半徑大小或波前差。

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖11

在只控制厚度的情況下執(zhí)行優(yōu)化。

優(yōu)化后,第一組總長度正好為40mm,且各表面中心厚度符合要求。

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖12


ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖13


Zemax 全新 22.1 版本產(chǎn)品現(xiàn)已發(fā)布!

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖14

點擊圖片查看課程詳情

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖15

點擊圖片查看投票詳情

相關(guān)閱讀 - 編程

ZEMAX | 在MATLAB中使用ZOS-API的技巧

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)建飛行時間自定義分析

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



   

歡迎掃碼添加宇熠工作人員微信,

進(jìn)入 zemax 微信交流群。

一起來學(xué)習(xí)光學(xué)設(shè)計吧!

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖16

掃碼邀您入群


如果您對產(chǎn)品感興趣,或需要技術(shù)支持,歡迎致電垂詢!

電話:027-87878386

郵箱:market@ueotek.com

關(guān)注武漢宇熠視頻號 查看更多精彩視頻 


 
ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖17    
ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖18    

武漢宇熠科技是 ZEMAX 中國區(qū)官方指定代理商,提供 ZEMAX 光學(xué)設(shè)計軟件的培訓(xùn)、銷售、技術(shù)支持、二次開發(fā)、解決方案及 ZEMAX 軟件相關(guān)全方位定制服務(wù)。有關(guān) ZEMAX ,您可以點擊文末“閱讀原文”了解更多信息,或致電垂詢武漢宇熠工作人員:

銷售熱線:027-87878386

咨詢郵箱:sales@ueotek.com

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖19    
ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖20    


ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖21

ZEMAX | 如何使用ZOS-API創(chuàng)建自定義操作數(shù)的圖22

登錄后免費查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP