Ansys Zemax | 如何使用 ZPL 创建用户自定义求解

图片

附件下载

联系工作人员获取附件

本文使用两个示例演示了如何使用 ZPL 创建用户自定义解。第一个示例介绍了如何创建 ZPL 解以确保序列文件中像面的曲率半径等于系统的 Petzval 曲率。第二个示例介绍了如何在非序列元件编辑器  ( Non-Sequential Component Editor ) 中基于其他物体的参数来约束的物体位置。

简介

求解 ( Solve ) 是可以在诸如镜头数据编辑器或非序列元件编辑器之类的编辑器中主动调整特定值的功能。例如,可以在曲率半径,圆锥系数或 TCE 上指定求解类型,并通过单击要放置的求解单元的求解框进行设置。尽管 OpticStudio 提供了许多默认的求解类型,但用户有可能希望自定义求解类型,这可以通过使用Zemax 编程语言( Zemax Programming Language ,ZPL)来实现。

ZPL 宏求解可用于任何编辑器中的几乎所有单元(曲率半径,厚度,参数,多重结构等)。可以像任何其他求解类型一样,通过在编辑器中单击参数单元格右侧的小框来设置 ZPL 宏求解。

ZPL 宏求解通过执行 ZPL 宏来确定解的值,并使用 SOLVERETURN 关键字将其返回给编辑器。一旦创建了用于求解的宏,并将其放置在 <Documents>\Zemax\Macros  目录中,即可在求解窗口的“宏:( Macro: )”中输入该宏的名称:

图片

请注意,在求解框中输入的宏名称不区分大小写,并且不需要其扩展名(.ZPL)。
为确保宏求解按照预期的方式工作,需要遵循一些规则,请参阅“技巧和陷阱”部分以获取更多信息。

Petzval 曲率求解示例

假设我们想要能够自动将像面的曲率半径设置为等于 Petzval 曲率的解。当然,在编写宏之前,请始终先检查一下仍不支持的解!

加载文件:

<Documents>\Zemax\Samples\Sequential\Objectives\Petzval.zmx 。

图片

宏求解需要计算系统的 Petzval 曲率,然后将值返回给 OpticStudio。系统的 Petzval 曲率是通过 PETC 优化操作数获得的,也可以通过 OPEV() 和 OCOD() 函数直接在宏中调用:

  • OCOD() 提取与优化操作数类型相对应的唯一数字代码

  • OPEV() 计算操作数的值,以 OCOD() 提取的唯一代码作为第一个参数,然后是优化操作数的参数。

在本例中:

图片

请注意, SOLVERETURN 关键字用于将数据传递回编辑器。将该宏另存为 Macros 文件夹中的 PETC.zpl。曲率求解值必须以曲率  (1/R) 的形式返回,而不是曲率半径。所有其他求解直接返回值。

要应用宏,请在像面的曲率半径单元中选择求解框,然后选择 ZPL 宏求解类型,然后在单元格中键入宏名称:

图片

瞧!OpticStudio 自动更新求解,并在“求解类型 ( Solve Type )”框中放置“Z”,以指示其处于激活状态:

图片

物体位置求解示例

第二个示例,我们将要使一个非序列物体在另一个非序列物体的末端之后10 mm。为此,需要计算前一个物体的长度,并用它来定位第二个物体。

文章附件里的非序列文件中,第一个物体是矩形的复合抛物线聚光镜 (Compound Parabolic Concentrator,CPC ) 物体。将此物体的最大长度定义为非序列元件编辑器中的参数。如果可以保证该物体始终是最大长度,则可以简单地使用带有偏移量的拾取求解来定位物体2。但是,实际长度有可能小于最大长度参数,因此必须计算实际长度并使用此值。同样,由于这是 CPC 矩形 (Rectangular CPC) 物体,因此 x 和 y 截面的实际长度可能会有所不同:必须选择两者中较小的一个。这是宏求解中的理想问题!

CPC的长度“ L”由帮助文件:“设置 ( Setup ) 选项卡 > 编辑器 ( Editors ) 组 > 非序列元件编辑器 ( Non-Sequential Component Editor ) > 非序列几何物体 ( Non-Sequential Geometry Objects ) > 复合抛物线聚光镜(Compound Parabolic Concentrator , CPC)”部分中的公式给出:

图片

因为这是 CPC 矩形 物体,所以有两个相关的长度值:X 和 Y,两个长度中较小的将被 OpticStudio 用作 CPC的长度,除非该长度大于“长度 ( Length )”参数。本例中的长度是“长度”参数的值。因此,宏应使用上面的公式计算 CPC 物体的 X 和 Y 长度,选择两个值中较小的,添加10 mm偏移,并将该值返回给矩形物体的 Z 位置 ( Z Position )参数。如果 X 和 Y 之间的较小长度仍大于“长度”参数值,则宏应在“长度”参数值上添加10 mm偏移,然后返回该值。

可以在文章附件中找到执行上述操作的 REC_CPC.ZPL 宏:

图片

如前所述,关键字 SOLVERETURN 用于将所需值传递回 NSCE。将宏放置在 <Documents>\Zemax\Macros  文件夹后,在主菜单中单击:宏 ( Macros ) > 更新宏列表 ( Refresh Macro List )。

在物体2(矩形)的参数 “Z 位置”的求解框中,选择“ ZPL 宏”,然后键入宏名称:

图片

就像前面的示例一样,NSCE 将在参数旁边显示 “ Z”,表明已在该参数上设置了 ZPL 解:

图片

请注意,如果使用 Ctrl-A 在文件中定义的2个组态之间切换会发生什么。CPC 矩形物体的 Y 角(度)参数在20到40度之间更改,因此物体的长度也会更改。发生这种情况时,应用于物体2的 “Z 位置” ZPL 求解将自动更改,以根据对应操作将此物体始终放置在 CPC 物体末端的10毫米后。

图片

技巧和陷阱

宏求解非常普遍,几乎可以使用任何计算来确定求解值。ZPL 支持的所有函数和关键字均可用。从宏菜单执行或作为求解执行的 ZPL 宏之间没有区别。但是,编写 ZPL 求解时应认真仔细:

  • 许多 ZPL 关键字和某些函数不应在宏求解中使用。例如,从求解中调用 UPDATE 会更新所有求解,这将再次调用宏,从而导致无限循环,会使其他关键字无法使用(例如:,在每次调用求解时都要求用户输入数据)。
  • ​仅更新应用了求解的单元格。宏不应更新其他单元格或以其他方式修改系统(例如,不应优化)。
  • ​宏求解永远不要依赖求解之后的编辑器中的数据,因为如果先调用解,然后再通过单独的后续解修改源数据,这也可能会产生错误的数据。
  • ​仅当宏中的计算不是基于任何光线数据时,宏求解才可以放置在光阑面之前。有关更多信息,请参阅帮助文件的“编程 (Programming) 选项卡 > 关于ZPL ( About the ZPL ) >关键字 ( KEYWORDS ) > SOLVEBEFORESTOP” 部分。
  • ​为了使求解更强且尽可能通用,建议在需要进行表面参考时使用 SURC() 和 SOSO() 函数:
  • SURC() 通过其(特殊的)注释字符串参考表面​
  • ​SOSO() 获取要设置求解的表面/物体编号
  • ​请记住,如果在镜头数据编辑器中的任何曲率半径单元上使用ZPL宏求解,则此参数的所有求解都将计算曲率 (1/R),而不是曲率半径(R)。这意味着应用于此参数的求解应返回曲率半径的倒数,而不是曲率半径本身。
  • ​用户负责对宏返回的数据进行错误检查。例如,如果宏调用  RAYTRACE 来计算光线参数,则应使用  RAYE() 来确保没有发生任何错误(例如渐晕或全内反射)。如果发生错误,则宏应在未调用 SOLVERETURN 的情况下退出,以确保没有值返回到单元格。这在优化过程中尤其重要。以下代码给出了如何测试错误的示例。

图片

  • 通常,宏求解应保持简短,简单,并避免冗长的计算。

  • 最后,请注意,OpticStudio 不会尝试限定或验证求解宏。此功能很强大,且具有灵活性,但必须谨慎使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

含中间直流的三相电力电子变压器PET仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 背景&#xff1a; 目前高压电网中应用的绝大多数电力变压器都属于传 统电力变压器&#xff0c;传统变压器的优势在于工艺简单、安全性 较强。但传统变压器本身的弊端也非常突出&#xff0c;占地大、重 量大&…

从虚拟到现实:数字孪生驱动智慧城市可持续发展

随着科技的飞速发展&#xff0c;智慧城市已经成为未来城市发展的重要趋势。数字孪生技术作为智慧城市建设中的关键技术之一&#xff0c;正在发挥着越来越重要的作用。本文将探讨数字孪生如何从虚拟走向现实&#xff0c;驱动智慧城市的可持续发展。 一、数字孪生技术&#xff1…

【Vue3】2-6 : 计算属性与侦听器区别与原理(一)

本书目录&#xff1a;点击进入 一、计算属性 - computed:{} 1.1 目的 1.2 写法 代码 二、特征 2.1 调用时当属性调用 2.2 缓存 2.3 默认只读 2.4 可赋值&#xff1a;需要定义成对象&#xff0c;并写get&#xff0c;set方法 &#xff08;类似于java&#xff09; 三、原…

tryhackme--Command Injection(命令注入)

查看应用程序在哪个用户下运行。 任务1 简介&#xff08;什么是命令注入&#xff1f;&#xff09; 命令注入是滥用应用程序的行为&#xff0c;使用与设备上运行的应用程序相同的权限在操作系统上执行命令。例如&#xff0c;在以名为joe的用户身份运行的 Web 服务器上实现命令…

4.2 MATRIX MULTIPLICATION

矩阵-矩阵乘法&#xff0c;或简称矩阵乘法&#xff0c;在 i X j&#xff08;i 行 by j 列&#xff09;矩阵 M 和 j x k 矩阵 N 之间产生 i X k 矩阵P。矩阵乘法是基本线性代数子程序&#xff08;BLAS&#xff09;标准的重要组成部分&#xff08;见第3章中的“线性代数函数”边栏…

gazebo安装版本--公元2024年1月

不好意思我误导了各位&#xff0c;顺便也误导了我自己。。。。。。。。。 harmonic版本只适合单独使用&#xff0c;不适合与ros2配合仿真。 到2024年1月&#xff0c;只有fortress版本能与ros2配合使用

如何将 element-ui 中的 el-select 默认展开

<el-form-item label"藕粉桂花糖糕" prop"state" required><el-selectref"mySelect"v-model"form.state"style"width: 280px"placeholder"请选择"><el-option label"藕粉" :value"…

Bito智能辅助编程体验报告

Bito智能辅助编程体验报告 1 Bito 能够为我们做些什么事&#xff1f; 号称 IDE 的“瑞士军刀”&#xff0c;可以提升开发 10 倍的效率; 生成代码&#xff1a;要求 Bito 使用自然语言提示生成任何语言的代码。&#xff08;例如&#xff0c;编写一个 Java 函数将数字从一种基数转…

【tensorflowflutter】自己写个机器学习模型用在项目上?

背景 拍摄APP项目上线有一阵了&#xff0c;每天的拍摄数据呈现波动上升状态、业务方需要对数据进行加工&#xff0c;如果能有对未来的数据量的预测就好了 。 目标 在端侧展示拍摄数据可视化趋势图等、并能推断数据&#xff08;选择预测日期&#xff09; 简单实现个demo gif背…

P1067 [NOIP2009 普及组] 多项式输出————C++

目录 [NOIP2009 普及组] 多项式输出题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 [NOIP2009 普及组] 多项式输出 题目描述 一元 n n n 次多项式可用如下的表达式表示&#xff1a; f ( x ) a n x n a …

JAVA期末考试知识点总结

基础语法 在Java中&#xff0c;基本数据类型有以下几种&#xff1a;1.整数类型&#xff1a; 2.byte&#xff1a;占用 1 字节&#xff08;8 位&#xff09;&#xff0c;范围为 -128 到 127。 3.short&#xff1a;占用 2 字节&#xff08;16 位&#xff09;&#xff0c;范围为 -…

亚马逊实时 AI 编程助手 CodeWhisperer使用体验

文章目录 1&#xff1a;什么是CodeWhisperer &#xff1f;2&#xff1a;试用3&#xff1a;上手体验 1&#xff1a;什么是CodeWhisperer &#xff1f; 最近ChatGPT展现出强大AI能力给我们带来了深刻的影响&#xff0c;AI现在不是一个概念&#xff0c;基于AI的产品一定在各行各业…

实战AI大模型:AIGC及经典模型

今天&#xff0c;人工智能技术的快速发展和广泛应用已经引起了大众的关注和兴趣&#xff0c;它不仅成为技术发展的核心驱动力&#xff0c;更是推动着社会生活的全方位变革。特别是作为AI重要分支的深度学习&#xff0c;通过不断刷新的表现力已引领并定义了一场科技革命。大型深…

Linux服务器安装操作Nginx

1.下载nginx压缩包 //进入/usr/local目录创建一个文件夹 cd /usr/local mkdir nginx cd nginx //下载tar包 wget http://nginx.org/download/nginx-1.20.1.tar.gz 2.配置nginx安装所需的环境 1. 安装gcc 安装 nginx 需要先将官网下载的源码进行编译&#xff0c;编译依赖 gc…

网站如何创建百度地图显示地理位置

在做企业网站的时候&#xff0c;我们会放置一个地理位置&#xff0c;我们可以引用百度地图&#xff0c;来显示我们的店铺所在位置 效果演示&#xff1a; 操作步骤 1、打开百度地图https://map.baidu.com/&#xff0c;搜索输入地址 2、点击地址 3、会出现如下视图 4、点击分享…

Dijkstra算法——邻接矩阵实现+路径记录

本文是在下面这篇文章的基础上做了一些补充&#xff0c;增加了路径记录的功能。具体Dijkstra的实现过程可以参考下面的这篇文章。 [jarvan&#xff1a;Dijkstra算法详解 通俗易懂](Dijkstra算法详解 通俗易懂 - jarvan的文章 - 知乎 https://zhuanlan.zhihu.com/p/338414118) …

HarmonyOS应用开发者基础认证考试

判断题 1.Ability是系统调度应用的最小单元,是能够完成一个独立功能的组件。一个应用可以包含一个或多个Ability。 正确(True) 2.所有使用Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。 错误(False) 3.每调用一次router.pushUrl()方法,…

Cocos Creator 3.8 开发2D水面波纹Shader

使用cocos Creator 3.8做了一个游戏开中常用的2D的波浪水面,把技术点给记录一下&#xff0c;并提供完整的Shader代码。先上效果: 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 2D 波浪的基本技术原理 2D 水面波纹的主要原理就是给定一个正选波的边界&…

基于 SpringBoot + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统

Tansci-Boot 基于 SpringBoot2 magic-api Vue3 Element Plus amis3.0 快速开发管理系统 Tansci-Boot 是一个前后端分离后台管理系统&#xff0c; 前端集成 amis 低代码前端框架&#xff0c;后端集成 magic-api 的接口快速开发框架。包含基础权限、安全认证、以及常用的一…

2020年认证杯SPSSPRO杯数学建模D题(第二阶段)让电脑桌面飞起来全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现&#xff1a; 对于一些必须每天使用电脑工作的白领来说&#xff0c;电脑桌面有着非常特殊的意义&#xff0c;通常一些频繁使用或者比较重要的图标会一直保留在桌面上&#xff0c;但是随着时间的推移&#xff0c;…