ZEMAX | ZOS-API、ZPL 和 DLL 之間的區(qū)別
本文對 ZOS-API、ZPL 和DLL 進行了比較。我們將會對與 OpticStudio 的互聯(lián)、代碼執(zhí)行、語句和數(shù)據(jù)存取與處理這些方面進行解釋說明。
概述
在 OpticStudio 中,用戶可以通過編程(Programming) 選項卡訪問 OpticStudio 的編程功能,如 Zemax編程語言( ZPL )、應用程序編程接口( ZOS-API )和動態(tài)鏈接庫 ( DLL )。每種編程方法都有其獨特的特點。本文描述了這三種編程功能的特點和區(qū)別。
ZOS-API 和 ZPL之間的區(qū)別
ZOS-API 和 ZPL 在許多方面都有所不同,包括它們的語句、應用程序和運行環(huán)境。以下部分將提供這兩種編程方法的概述,并詳細描述這些差異。
什么是 ZOS-API?

ZOS-API 是一個應用程序接口,它是為使 OpticStudio 能夠支持與其它應用程序的連接和自定義而開發(fā)的。雖然 ZOS-API 依賴于 COM 接口,但它來源于.NET庫,因此可以使用任何能夠訪問API庫的編程語言(如C++、C#、Python、MATLAB) 進行 API 編程。ZOS-AP I允許應用程序與 OpticStudio 中打開的實例直接交互,或者將 OpticStudio 作為背景程序運行。
什么是 ZPL?

Zemax 編程語言( ZPL )是一種宏語言,它允許用戶在 OpticStudio 中直接編寫自己的程序。ZPL 可以:
· 自動地重復鍵盤和鼠標操作
· 基于 OpticStudio 數(shù)據(jù)執(zhí)行計算
· 以特定格式導出數(shù)據(jù)
不同之處
以下為 ZOS-API 與 ZPL 之間最基本的差別。
1、接口
ZPL 宏是一個文本文件??梢栽?OpticStudio 內(nèi)的 ZPL 編輯器中創(chuàng)建和編輯ZPL 宏。ZPL 宏很容易學習,不需要任何編程經(jīng)驗,并且在其中提供了能夠執(zhí)行一系列命令的強大工具。下面的截圖顯示了 ZPL 編輯器中的 ZPL 宏。

ZOS-API 應用程序是用可以訪問 API 庫的編程語言編寫的。ZOS-API 支持四種編程語言:MATLAB、Python、C++ 和 C#。下方截圖顯示了用于連接至 ZOS-API的 Matlab 代碼。

2、代碼執(zhí)行
ZPL 宏在 OpticStudio 圖形用戶界面( GUI )中運行。要執(zhí)行或編輯 ZPL 宏,請單擊:編程( Programming )> ZPL 宏( ZPL Macros )>編輯/執(zhí)行 (Edit/Run)。

ZOS-API 應用程序的執(zhí)行取決于使用的模式:
· 獨立應用程序(A Standalone Application) 模式是一個外部可執(zhí)行文件(.exe),它將啟動一個全新的 OpticStudio 實例作為背景程序。在這種模式下,OpticStudio 作為服務器運行,沒有用戶界面。必須小心確保運行實例數(shù)量沒有達到 OpticStudio 許可運行的最大數(shù)量。
· 自定義擴展(User Extension)或自定義分析( User Analysis) 模式是從OpticStudio 內(nèi)置的GUI中啟動的,可構(gòu)建類似于擴展程序的應用程序。它們可以通過編程(Programming)> ZOS-API.NET接口( ZOS-API.NET Applications)> 自定義分析/擴展 (User Analyses/Extensions)來訪問的。
· 交互擴展 (Interactive Extension )從編程(Programming)>ZOS-API.NET 接口(ZOS-API.NET Applications)>交互擴展(Interactive Extension)打開。它可以將外部的 ZOS-API 應用程序連接到 OpticStudio的現(xiàn)有實例。
3、語法
ZPL 是一種可編譯的“宏”或“腳本”語言,類似于帶有光線追跡函數(shù)BASIC編程語言 。
所有 ZOS-API 程序和擴展都是用 C#、C++、MATLAB 或 Python 等外部編程語言編寫的。
4、數(shù)據(jù)存取和處理
ZPL 宏由存儲在文本文件中的一系列命令組成。這些命令可以給變量(數(shù)值或字符串)賦值、使用關(guān)鍵字調(diào)用函數(shù)或進行注釋。在 ZPL 中,所有數(shù)據(jù)存取和處理都基于已定義的命令。ZPL 作為解譯型代碼,在運行復雜計算時,它可能比完全編譯的代碼慢。
在 ZOS-API 中,數(shù)據(jù)存取和數(shù)據(jù)處理更加靈活和強大。ZOS-API 可以利用其它高級編程語言(如 MATLAB)的數(shù)值分析和矩陣計算能力。
5、互用性
ZPL 不能通過 ZOS-API 調(diào)用,反之亦然。
6、對比表格

ZOS-API 和 DLL 的區(qū)別
什么是 DLL?
動態(tài)鏈接庫 (Dynamic Link Library,DLL) 是一個共享庫。它是一個 Windows 程序,但不能像 EXE 程序那樣直接運行。它可以被另一個程序調(diào)用,即我們的OpticStudio。DLL 根據(jù)需要調(diào)用,并在完成時關(guān)閉。只在需要時使用DLL,使得內(nèi)存管理方面更高效。在 OpticStudio 中,發(fā)送到 DLL 的數(shù)據(jù)是指定且有一定限制的。存在不同類型的 DLL,如用戶自定義表面、用戶自定義散射配置文件等。對于每種類型的 DLL,可以在文件夾 {Zemax } / DLL下的示例 DLL 源代碼中找到數(shù)據(jù)結(jié)構(gòu)。
不同之處
ZOS-API 和 DLL 之間最根本的區(qū)別是客戶端-服務器角色是相反的。
· ZOS-API 腳本是一個客戶端,它調(diào)用 OpticStudio 作為服務器來執(zhí)行任務。ZOS-API 腳本可以訪問 OpticStudio 接口,并且 OpticStudio 內(nèi)幾乎所有方面的功能都可以通過 ZOS-API 腳本訪問和運行。API 腳本還包含其他功能,比如批量處理光線追跡 (Batch Ray Trace)等。
· DLL 充當服務器。OpticStudio 客戶端將指定數(shù)據(jù)發(fā)送給 DLL 或從 DLL 獲取指定數(shù)據(jù),并最終將這些數(shù)據(jù)返回至 OpticStudio 中。因此,OpticStudio 僅負責數(shù)據(jù)交換,由此限制了 DLL 的操作范圍。
