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

附件下载

联系工作人员获取附件

本文将介绍一些在MATLAB中使用 ZOS-API 的技巧,以提高您的工作效率并充分利用 ZOS-API 的功能。

简介

OpticStudio开发了应用程序接口 (API) ,用户可以使用API与不同的脚本环境进行连接和交互。使用API,用户可以与已打开的OpticStudio例程进行通信(交互扩展 ( Interactive Extension ) )或在后台运行OpticStudio(独立应用程序 ( Standalone Application ) )。这对于进行重复计算或用户处理OpticStudio生成的数据非常实用。本文只讨论ZOS-API与MATLAB相连接,并重点介绍一些技巧。

语法提示

在MATLAB中,可以使用语法提示完成代码或列出成员(如图所示):

图片

图片

这对于通过减少拼写错误和其他常见错误来提高编码的速度特别实用。但是,当MATLAB脚本完成时,不能访问变量内部的内容。可以运行示例文件的一部分——示例01:创建新文件并使用快速聚焦 ( New File and QuickFocus ) ,以及安装OpticStudio并进行检查。如果想要在MATLAB脚本已经终止时访问TheLDE,就会得到一条消息——“没有找到已完成文件”。

图片

为了避免这个问题,必须运行MATLAB脚本并插入断点来阻止脚本运行结束。这适用于独立应用程序或将代码放在用于交互扩展的MATLABZOSConnection脚本中。通过在MATLAB中点击:编辑器 ( Editor ) > 断点 ( Breakpoints ) > 设置/清除 ( Set/Clear ) 插入断点:

图片

在MATLAB中,断点由行号旁边的红色圆圈表示。本例中,在第44行输入断点:

图片

现在可以通过在MATLAB的 (.) 语句后按TAB键,并在脚本编辑器 ( Script Editor ) 或命令窗口 ( Command Window ) 使用语法提示:

图片

图片

另外,将代码放在单独的脚本中进行交互扩展,将路径添加到MATLABZOSConnection脚本中,并将TheApplication定义为相同的MATLABZOSConnection,而不是将代码放在OpticStudio中生成的交互扩展的MATLABZOSConnection脚本中。本例中,连接号是21。如下为可以使用的代码示例:


addpath('\\zmefs01\redirectedfolders\alastair.humphrey\Documents\Zemax\ZOS-API Projects\MATLABZOSConnection21\')
TheApplication = MATLABZOSConnection21;
 

使用上述的任何一种方法。可以通过OpticStudio进行API命令测试,实时观察命令的运行结果。另外,命令窗口可用作实用的调试工具。因为这两种情况下主函数并没有运行结束,仍然可以通过点击工作空间中的任何对象来研究已声明的对象:

图片

使用带有'out'参数的 .NET方法

以下是使用带有 ' out ' 参数和GetIndex的 .NET方法的示例:

图片

当在MATLAB中使用带有 ' out '  参数的 .NET 方法时,必须确保将方法提供给的对象是正确的类型。在这种情况下,需要长度等于波长数量的双数组。下面的代码是返回表面 2 在三个波长下的折射率的示例:


surf_num = 2;
num_waves = 3; % probably shouldn't hard code thisindex = NET.createArray('System.Double', 3);
TheApplication.PrimarySystem.LDE.GetIndex(surf_num, num_waves, index);
index_data = index.double;
 

MATLAB 函数 methods和 methodsview

MATLAB函数methods和methodsview可以用来查看类方法名称。例如,代码可以写为:

MySag=TheApplication.PrimarySystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM.SurfaceSag);methods(MySag)

运行得到的结果为:

图片

在MATLAB中读取枚举

有时在OpticStudio中,可能需要在MATLAB中循环枚举来读取数据。例如,要将偶次非球面(Even Asphere)的系数读入MATLAB。

偶数非球面的表面矢高为:

图片

可以使用偶次非球面示例文件 

"{Zemax}\Samples\Sequential\Objectives\Even Asphere.zmx" 读取系数:

图片

可以使用eval函数并循环枚举将数据读入MATLAB:

TheSystem = TheApplication.PrimarySystem;
TheLDE = TheSystem.LDE;
for no_coeff=1:8
EA_coeff(no_coeff) = eval(['TheLDE.GetSurfaceAt(2).GetSurfaceCell(ZOSAPI.Editors.LDE.SurfaceColumn.Par' num2str(no_coeff) ').DoubleValue']);
end
 

图片

MATLAB中的时间性能函数

MATLAB中有一些实用的有关时间的函数,能够估计代码或部分代码运行所需的时间。在使用ZOS-API时,这些函数有助于检查优化或公差分析所需的时间。

方法一 :使用 timeit 函数,它将多次运行同一个函数并返回执行代码所需时间的中位数。

方法二:使用 profile 函数,它将返回特定函数执行时间的统计信息。

方法三:使用秒表计时器功能。以下将讨论秒表计时器功能,使用 tic 函数启动秒表, toc 停止秒表:

如下代码摘录自示例代码:"{Zemax}\ZOS-API SampleCode\MATLAB\MATLABStandalone_15_Seq_Optimization.m"。


tic
TheMFE = TheSystem.MFE;
OptWizard = TheMFE.SEQOptimizationWizard;
%Optimize for smallest RMS Spot, which is "Data" = 1
OptWizard.Data = 1;
OptWizard.OverallWeight = 1;
%Gaussian Quadrature with 3 rings (refers to index number = 2)
OptWizard.Ring = 2;
%Set air & glass boundaries
OptWizard.IsGlassUsed = true;
OptWizard.GlassMin = 3.0;
OptWizard.GlassMax = 15.0;
OptWizard.GlassEdge = 3.0;
OptWizard.IsAirUsed = true;
OptWizard.AirMin = 0.5;
OptWizard.AirMax = 1000.0;
OptWizard.AirEdge = 0.5;
%And click OK!
OptWizard.Apply();
toc
tic;
    LocalOpt = TheSystem.Tools.OpenLocalOptimization();
    if ~isempty(LocalOpt)
        LocalOpt.Algorithm = ZOSAPI.Tools.Optimization.OptimizationAlgorithm.DampedLeastSquares;
        LocalOpt.Cycles = ZOSAPI.Tools.Optimization.OptimizationCycles.Automatic;
        LocalOpt.NumberOfCores = 8;
        fprintf('Local Optimization...\n');
        fprintf('Initial Merit Function %6.3f\n', LocalOpt.InitialMeritFunction);
        LocalOpt.RunAndWaitForCompletion();
        fprintf('Final Merit Function %6.3f\n', LocalOpt.CurrentMeritFunction);
        LocalOpt.Close();
    end  
    % Get the elapsed time as a TimeSpan value.
    toc;

进行局部优化 ( Local Optimization )……

初始评价函数值为:0.363

最终评价函数值为:0.170

运行时间为:1.765178秒。

MATLAB 实时编辑器 ( Live Editor )

MATLAB实时编辑器是很实用的工具,可以在其中创建实时脚本,该脚本可以与代码并行显示输出。此外,还可以添加文本、方程、图像和超链接。关于MATLAB实时编辑器的更多信息可以联系我们工作人员获取。

图片

已经从OpticStudio中检索出如下示例中的库克三片式镜头的波前图(Wavefront Map)和FFTMTF,并绘制成MATLAB图形。本例中使用的MLX文件(MATLAB实时脚本文件格式)在本文的附件中。

图片

MATLAB 实时编辑器的实用功能是分节符,可以将代码分节并独立运行。

图片

例如,使用库克三片式镜头,可以选中计算每个表面主光线的AOI 的代码部分,然后单击“ 分节符 ”图标。如果点击“查看每个表面上主光线的AOI”部分(此部分周围会出现蓝色的方框),然后点击“运行小节 ( Run Section) ”图标,可以分别计算该节的代码。

图片

基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设
### Zemax ZOS-API 使用教程与文档 #### 关于 PyZDDE 和 ZOS-API 的概述 PyZDDE 是一个专门用于与 Zemax 光学设计软件交互的 Python 库[^1]。该库通过 Zemax 提供的 ZOS-API 接口实现了对 Zemax 功能的自动化操作,包括但不限于文件管理、光学性能评估以及界面控制等功能。 ZOS-API 则是 Zemax 提供给开发者的编程接口,允许开发者从外部环境(如 Python)调用并操控 Zemax 的核心功能[^2]。这种能力使得复杂的光学设计任务可以被集成到更广泛的工作流中或者实现高度定制化的解决方案。 #### 获取官方文档资源 为了更好地理解和应用 ZOS-API,建议访问 Zemax 官方网站下载最新的 SDK (Software Development Kit),其中包含了详细的 API 参考手册和技术指南。这些资料通常会提供关于如何初始化连接、处理数据结构以及错误排查等方面的具体指导。 另外,在实际编码过程中可能还会涉及到 COM 组件绑定等问题;因此熟悉 Windows 平台下的组件对象模型(COM)概念也是很有帮助的。对于初学者来说,可以从简单的例子入手逐步深入学习复杂的功能模块。 以下是基于上述描述的一个基本示例程序片段展示如何建立同 Zemax 的链接: ```python import comtypes.client def connect_to_zos(): try: zos = comtypes.client.CreateObject('ZOSAPI.ZOS') app = zos.NewApplication() print("Connected to Zemax successfully.") return app except Exception as e: print(f"Failed to connect: {e}") return None if __name__ == "__main__": application = connect_to_zos() ``` 此脚本利用 `comtypes` 库创建了一个指向 ZOS-API 的实例,并尝试打开一个新的应用程序窗口。如果一切正常运行,则会在终端显示成功消息。 #### 注意事项 当使用第三方工具包像 PyZDDE 进行二次开发时,请务必确认所依赖版本之间的兼容性情况。因为随着原生产品不断更新迭代,某些旧版函数签名可能会发生变化甚至被淘汰掉。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值