Ansys Zemax光学设计软件技术教程:如何使用ZPL创建用户自定义求解
本文使用两个示例演示了如何使用ZPL创建用户自定义解。 第一个示例介绍了如何创建ZPL解以确保序列文件中像面的曲率半径等于系统的Petzval曲率。第二个示例介绍了如何在非序列元件编辑器 ( Non-Sequential Component Editor ) 中基于其他物体的参数来约束的物体位置。作者 Nam-Hyong Kim, updated by Alessandra Croce下载文章附件简介求解 ( 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()提取的唯一代码作为第一个参数,然后是优化操作数的参数。
许多ZPL关键字和某些函数不应在宏求解中使用。例如,从求解中调用 UPDATE 会更新所有求解,这将再次调用宏,从而导致无限循环,会使其他关键字无法使用(例如:,在每次调用求解时都要求用户输入数据)。
仅更新应用了求解的单元格。宏不应更新其他单元格或以其他方式修改系统(例如,不应优化)。
宏求解永远不要依赖求解之后的编辑器中的数据,因为如果先调用解,然后再通过单独的后续解修改源数据,这也可能会产生错误的数据。
仅当宏中的计算不是基于任何光线数据时,宏求解才可以放置在光阑面之前。有关更多信息,请参阅帮助文件的“编程(Programming)选项卡 > 关于ZPL ( About the ZPL ) >关键字 ( KEYWORDS ) > SOLVEBEFORESTOP”部分。
为了使求解更强且尽可能通用,建议在需要进行表面参考时使用 SURC() 和 SOSO() 函数:
SURC() 通过其(特殊的)注释字符串参考表面
SOSO() 获取要设置求解的表面/物体编号
请记住,如果在镜头数据编辑器中的任何曲率半径单元上使用ZPL宏求解,则此参数的所有求解都将计算曲率 (1/R),而不是曲率半径(R)。这意味着应用于此参数的求解应返回曲率半径的倒数,而不是曲率半径本身。
用户负责对宏返回的数据进行错误检查。例如,如果宏调用 RAYTRACE 来计算光线参数,则应使用 RAYE() 来确保没有发生任何错误(例如渐晕或全内反射)。如果发生错误,则宏应在未调用 SOLVERETURN 的情况下退出,以确保没有值返回到单元格。 这在优化过程中尤其重要。以下代码给出了如何测试错误的示例。
通常,宏求解应保持简短,简单,并避免冗长的计算。
最后,请注意,OpticStudio不会尝试限定或验证求解宏。此功能很强大,且具有灵活性,但必须谨慎使用。
光研科技南京有限公司是国内可靠的Ansys Zemax光学设计软件代理商!公司已经为广大企业,研究所以及高校提供了很多优秀的相关产品和服务,在行业内建立了值得信任的口碑。
Ansys Zemax光学软件
咨询与订购方式
联系人:光研科技南京有限公司徐保平
手机号:15051861513
微信号:13627124798