下载
文章附件简介
求解 ( Solve ) 是可以在诸如镜头数据编辑器或非序列元件编辑器之类的编辑器中主动调整特定值的功能。例如,可以在曲率半径,圆锥系数或TCE上指定求解类型,并通过单击要放置的求解单元的求解框进行设置。尽管OpticStudio提供了许多默认的求解类型,但用户有可能希望自定义求解类型,这可以通过使用Zemax编程语言( Zemax Programming Language ,ZPL)来实现。ZPL宏求解可用于任何编辑器中的几乎所有单元(曲率半径,厚度,参数,多重结构等)。可以像任何其他求解类型一样,通过在编辑器中单击参数单元格右侧的小框来设置ZPL宏求解。ZPL宏求解通过执行ZPL宏来确定解的值,并使用 SOLVERETURN 关键字将其返回给编辑器。一旦创建了用于求解的宏,并将其放置在 <Documents>\Zemax\Macros 目录中,即可在求解窗口的“宏:( Macro: )”中输入该宏的名称:
为确保宏求解按照预期的方式工作,需要遵循一些规则,请参阅“技巧和陷阱”部分以获取更多信息。
Petzval 曲率求解示例
假设我们想要能够自动将像面的曲率半径设置为等于Petzval曲率的解。当然,在编写宏之前,请始终先检查一下仍不支持的解!加载文件:<Documents>\Zemax\Samples\Sequential\Objectives\Petzval.zmx 。
OCOD() 提取与优化操作数类型相对应的唯一数字代码
OPEV() 计算操作数的值,以 OCOD()提取的唯一代码作为第一个参数,然后是优化操作数的参数。



物体位置求解示例
第二个示例,我们将要使一个非序列物体在另一个非序列物体的末端之后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)”部分中的公式给出:




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

通常,宏求解应保持简短,简单,并避免冗长的计算。
最后,请注意,OpticStudio不会尝试限定或验证求解宏。此功能很强大,且具有灵活性,但必须谨慎使用。
光研科技南京有限公司是国内可靠的Ansys Zemax光学设计软件代理商!公司已经为广大企业,研究所以及高校提供了很多优秀的相关产品和服务,在行业内建立了值得信任的口碑。