本文对ZOS-API、ZPL和DLL进行了比较。我们将会对与OpticStudio的互联、代码执行、语句和数据存取与处理这些方面进行解释说明。
作者 Haosheng Hu
概述
在OpticStudio中,用户可以通过编程(Programming)选项卡访问OpticStudio的编程功能,如Zemax编程语言(ZPL)、应用程序编程接口(ZOS-API)和动态链接库(DLL)。每种编程方法都有其独特的特点。本文描述了这三种编程功能的特点和区别。
ZOS-API 和 ZPL之间的区别
ZOS-API和ZPL在许多方面都有所不同,包括它们的语句、应用程序和运行环境。以下部分将提供这两种编程方法的概述,并详细描述这些差异。
什么是ZOS-API?
ZOS-API是一个应用程序接口,它是为使OpticStudio能够支持与其它应用程序的连接和自定义而开发的。虽然ZOS-API依赖于COM接口,但它来源于.NET库,因此可以使用任何能够访问API库的编程语言(如C++、C#、Python、MATLAB)进行API编程。ZOS-API允许应用程序与OpticStudio中打开的实例直接交互,或者将OpticStudio作为背景程序运行。有关不同交互模式的详细资料,请查看文章ZOS-API用户可用的示例文件。
什么是 ZPL?
Zemax编程语言(ZPL)是一种宏语言,它允许用户在OpticStudio中直接编写自己的程序。ZPL可以:
- 自动地重复键盘和鼠标操作
- 基于OpticStudio数据执行计算
- 以特定格式导出数据
- 生成数据的图表和文本清单
想要获得更多关于ZPL的信息,可查看文章Zemax编程语言(ZPL)简介
不同之处
以下为ZOS-API与ZPL之间最基本的差别。
-
接口
ZPL宏是一个文本文件。可以在OpticStudio内的ZPL编辑器中创建和编辑ZPL宏。ZPL宏很容易学习,不需要任何编程经验,并且在其中提供了能够执行一系列命令的强大工具。下面的截图显示了ZPL编辑器中的ZPL宏。
ZOS-API应用程序是用可以访问API库的编程语言编写的。ZOS-API支持四种编程语言:MATLAB、Python、C++和C#。下方截图显示了用于连接至ZOS-API的Matlab代码。
- 代码执行
ZPL宏在OpticStudio图形用户界面(GUI)中运行。要执行或编辑ZPL宏,请单击:编程(Programming)> ZPL宏(ZPL Macros)>编辑/执行(Edit/Run)。
ZOS-API应用程序的执行取决于使用的模式:
- 独立应用程序(A Standalone Application) 模式是一个外部可执行文件(.exe),它将启动一个全新的OpticStudio实例作为背景程序。在这种模式下,OpticStudio作为服务器运行,没有用户界面。必须小心确保运行实例数量没有达到OpticStudio许可运行的最大数量。
- 自定义扩展(User Extension)或自定义分析(User Analysis) 模式是从OpticStudio 内置的GUI中启动的,可构建类似于扩展程序的应用程序。它们可以通过编程(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的现有实例。
-
语法
ZPL是一种可编译的“宏”或“脚本”语言,类似于带有光线追迹函数BASIC编程语言 。
所有ZOS-API程序和扩展都是用C#、C++、MATLAB或Python等外部编程语言编写的。
-
数据存取和处理
ZPL宏由存储在文本文件中的一系列命令组成。这些命令可以给变量(数值或字符串)赋值、使用关键字调用函数或进行注释。在ZPL中,所有数据存取和处理都基于已定义的命令。ZPL作为解译型代码,在运行复杂计算时,它可能比完全编译的代码慢。
在ZOS-API中,数据存取和数据处理更加灵活和强大。ZOS-API可以利用其它高级编程语言(如MATLAB)的数值分析和矩阵计算能力。
-
互用性
ZPL不能通过ZOS-API调用,反之亦然。
- 对比表格
ZOS-API | ZPL | |
接口 | 取决于所选的编程语言 | OpticStudio内置 |
代码执行 | 非常灵活(可以是可执行文件,可以从编程语言运行,也可以嵌入到OpticStudio中) | OpticStudio内置 |
语法 | 取决于所选的编程语言 | 非常基础;易于学习 |
数据存取和处理 |
灵活而强大的数据存取和处理 可以利用其他编程语言的数值分析和矩阵计算能力(如使用MATLAB的ZOS-API) |
解译型语言 进行复杂计算时,比完全编译的代码更慢 |
ZOS-API 和DLL的区别
什么是DLL?
动态链接库(Dynamic Link Library,DLL)是一个共享库。它是一个Windows程序,但不能像EXE程序那样直接运行。它可以被另一个程序调用,即我们的OpticStudio。DLL根据需要调用,并在完成时关闭。只在需要时使用DLL,使得内存管理方面更高效。在OpticStudio中,发送到DLL的数据是指定且有一定限制的。存在不同类型的DLL,如用户自定义表面、用户自定义散射配置文件等。对于每种类型的DLL,可以在文件夹{Zemax}/DLL下的示例DLL源代码中找到数据结构。有关DLL的更多信息,请查看文章如何编译用户自定义DLL。
不同之处
ZOS-API和DLL之间最根本的区别是客户端-服务器角色是相反的。
- ZOS-API脚本是一个客户端,它调用OpticStudio作为服务器来执行任务。ZOS-API脚本可以访问OpticStudio接口,并且OpticStudio内几乎所有方面的功能都可以通过ZOS-API脚本访问和运行。API脚本还包含其他功能,比如批量处理光线追迹(Batch Ray Trace)等。
- DLL充当服务器。OpticStudio客户端将指定数据发送给DLL或从DLL获取指定数据,并最终将这些数据返回至OpticStudio中。因此,OpticStudio仅负责数据交换,由此限制了DLL的操作范围。
KA-01806
评论
文章评论已关闭。