首页/文章/ 详情

在MATLAB或Python中使用 ZOS-API 进行光线追迹的批次处理

4月前浏览413
附件下载

联系工作人员获取附件

简介

这篇文章会说明如何在 MATLAB 或 Python 中以 Zemax OpticStudio 应用程式界面 (ZOS-API)处理光线数据库(Ray Database, ZRD)档案,过程中我们将使用ZRDLoader.dll。本文提供了在 Matlab 中批次处理序列光线追迹(一般、归一化、偏振或非偏振),以及在 Matlab 和 Python 中使用方法 ReadNextSegmentFull() 批次处理非序列 ZRD 档案的范例。

什么是 RayTrace.dll?

RayTrace.dll 结合了 ZRDLoader.dll 和 ReadNextSegmentFull,并在序列模式中与4个 IBatchRayTrace 界面共同运作。此外,RayTrace.dll 这个动态连结函式库涵盖了以下的界面,并且继承了 ZOSAPI.Tools.RayTrace 的命名空间:

  • IRayTraceDirectPolData (sequential):
    在这个界面中,我们可以直接在 XYZ 坐标中完成批次的偏振光线追迹,而这也和 DDE 光线追迹指令(模式3)十分相似。此外,该界面属于 IBatchRayTrace 界面的一种。

  • IRayTraceDirectUnpolData (sequential):
    在这个界面中,我们可以在 XYZ 坐标中完成批次的非偏振光线追迹,而这与 DDE 光线追迹指令(模式1)相似。此外,该界面也同样属于 IBatchRayTrace 界面的一种。

  • IRayTraceNormPolData (sequential):
    在这个界面中,我们可以使用归一化光瞳坐标(normalized pupil coordinate)进行批次偏振光线追迹,这个 DDE 光线追迹指令(模式2)相似。此外,这界面也同样属于 IBatchRayTrace 界面的一种。

  • IRayTraceNormUnpolData (sequential):
    在这个界面中,我们可以使用归一化光瞳坐标进行批次非偏振光线追迹,这与 DDE 光线追迹指令(模式0)相似。

  • IZRDReader (non-sequential):
    我们使用这个界面在Matlab中设定RayDatabaseReader并使其运作,同时读取 C#dll 中每一个区段(segment)的值。

这个 DLL  的设计是为了使光线或区段的原始值(raw value)可以作为宣告物件的属性,而被传递到 MATLAB 或 Python,因此 DLL 运作的过程中不会涉及任何的计算、合并和分析。这个DLL的主要目的是为了减少MATLAB或Python中十分耗时的for循环,将原先效率极低的程式转为原生且编译完成的C#代码。接着,当原始值经过所有循环后,C#代码会将数值回传到MATLAB或Python进行最后的处理。

DLL 使用范例

我们使用三个基础和三个进阶范例示范如何在一般序列模式(sequential direct)、归一化序列模式(sequential normalized)和非序列 ZRD 光线追迹的情況下使用RayTrace.dll。这些示范附件都可以直接下载并使用,不需要对程式码进行任何更改。需要注意的是,RayTrace.dll  必须被存放在和其他 MATLAB 或Python 脚本(script)相同的资料夹中,才能确保使用时能被顺利的呼叫。产生每个 DLL 所使用的 C# 原始码以及 Visual Studio 的解都可以在下方的文章中找到。

基本范例

  • MATLAB_BatchRayTrace_Direct.m – (SEQ Direct).
    这个范例使用了 IRayTraceDirectUnpolData 界面。此外,它还同时使用了RayTrace.dll (DirectUnpol.cs) 中的 ReadDirectUnpolData 函数。范例中,系统追迹了特定透镜表面的光迹图(footprint diagram),同时绘出系统的净口径 (Clear Semi-Diameter)和机械半直径 (Mechanical Semi-Diameter)。

Basic example 1

  • MATLAB_BatchRayTrace_Normalized.m – (SEQ Norm).
    这个范例使用了 IRayTraceNormUnpolData 界面,而该界面还包含了RayTrace.dll (NormUnpol.cs) 中的 ReadNormUnpolData 函数。范例中,系统以超过10,000条光线追迹一个方形图案投射至像面的结果。设定上只使用了单一视场,且整个过程耗时不到一秒。

Basic Example 2

  • MATLAB_ZRDLoaderFull.m or PythonNET_ZRDLoaderFull.py – (NSC ZRD)
    这个范例使用了 IZRDReader 界面,且同时使用了RayTrace.dll (ZRDLoaderFull.cs)中的 ReadZRDData 函数。范例中,系统解析了 ZRD 档案并决定了特定探测器上接收到的总能量。

Basic Example 3  


进阶范例

  • MATLAB_BatchRayTrace_Surface_AOI.m – (SEQ Direct).
    这个范例使用了 IRayTraceDirectUnpolData 界面,且同时使用了RayTrace.dll (DirectUnpol.cs)的ReadDirectUnpolData 函数。范例中,系统追迹了光线网格投射至一个特定表面的结果。过程中使用了 LMN 方向的 cosine 向量和 Nxyz 法向量计算光线在表面上每个 XY 点的入射角。

Advanced Example 1

  • MATLAB_BatchRayTrace_Ex22_Performance_Comparison.m – (SEQ Norm).
    这个范例使用了 IRayTraceNormUnpolData 界面,同时还使用了RayTrace.dll (NormUnpol.cs)的ReadNormUnpolData 函数。范例中,系统使用低量化误差光线图型(dithered ray pattern) 绘制了整个视场的点列图(spot diagram)。模拟过程中,系统可以在一秒內追迹10,000条光线。相同情況下,若使用原生 MATLAB 的 for 循环,绘制961条光线将耗时超过4秒。根据电脑的性能差异,使用 DLL 最高可将运算过程加速为原先的40倍。

Advanced Example 2

  • MATLAB_ZRD_Pixelated_Detector_xybin.m – (NSC ZRD).
    这个范例使用了IZRDReader界面,同时也使用了RayTrace.dll (ZRDLoaderFull.cs)的 ReadZRDData 函数。范例中的系统有矩形光源、矩形探测器,以及一个由 “LETTERF.BMP”产生的幻燈片(Slide) 物件,最后在探测器上显现出图型 “F”。接着,我们使用 ZRD 档案中的“xybin”将每个像素的光通量加总,重新在 ZRD 档案中产生一个新的探测器结果。这样的做法可使我们免于使用探测器查看器(Detector Viewer)的分析功能,直接在 MATLAB 中看到结果。

Advanced Example 3

Advanced Example 3    

疑难排解

若是使用了范例提供的 Visual Studio 解,但却在编译的过程中出现错误的话,请先照着以下步骤操作以确保 ZOSAPI  和 ZOSAPI_Interfaces 的来源(Reference)是正确的。我们可以打开 Solution Explorer,并点选 References。假如这时 ZOSAPI  和 ZOSAPI_Interfaces  旁边出现黄色的警示标语,你将会需要进行以下操作:

  • 移除现有的 references (鼠标右键>移除(Remove))

  • 右键选取 Reference 并选择 Add References

  • 点选 Browse 并找到 OpticStudio 的安装资料夹

  • 以快捷键 Shift+Click 选择 ZOSAPI 和 ZOSAPI_Interfaces,接着点选 Add

  • 点选 OK 加入新的解

  • 选取所有的 references,打开 Properties 接着将 Copy Local 由True 改为 False    


来源:武汉宇熠
Mechanical光学MATLABpythonUM理论CST
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-04-20
最近编辑:4月前
武汉宇熠
光机电领域优秀供应商
获赞 352粉丝 280文章 937课程 9
点赞
收藏
作者推荐

科普时刻 | 什么是涡轮机?

涡轮机通过轴上连接的多个涡轮叶片,将工作流体的动能(以速度形式)和势能(以压力形式)转换为旋转动能,从而将气体或液体的能量转换为功率。叶片本质上是一个由流体的动量和压力推动的杠杆,这个杠杆上的力会在轴周围产生扭矩,从而产生机械能。该能量可被轴上连接的任何系统使用。英文中的“turbine”一词来自于拉丁语turbo,意思是“旋转”。这种以贯流方式从流体中提取能量的方法,与内燃机(ICE)或蒸汽机等依靠活塞进行能量转换的机器截然不同。通过涡轮机获取能量的设备通常被归类为涡轮机械。几千年来,人类一直在使用涡轮机推动工业创新,这可以追溯到石磨上连接的简单的水车和风车。如今,我们可以使用涡轮机实现多种用途:将风力、水、压缩空气、蒸汽和加热气体中的能量转化为电能;提高汽车发动机的效率;为飞机提供动力等等。涡轮机械行业致力于研究和改进涡轮机和涡轮机械的热力学、流体力学特性和可靠性。 涡轮机的工作原理 所有涡轮机都有称为叶片的纤薄结构,这些叶片连接到与轴相连的圆柱体上,流体会推动叶片或围绕叶片流动。不过,涡轮机具有不同的分类,这具体取决于它们是从流体的动量中提取能量(冲动式涡轮机),还是借助流体的压力(反动式涡轮机)获得能量。冲动式涡轮机佩尔顿(Pelton)水力涡轮机,是一种较常见的冲动式涡轮机在冲动式涡轮机中,流体会撞击一连串类似于桨叶或铲斗的叶片。流体使叶片转动时,其动能被转化为机械能。这就会产生力,进而在轴上产生扭矩并使转子旋转。水车是一种最早的冲动式涡轮机形式,其中水车轮上的桨叶被河流或运河的水流推动。在现代冲动式涡轮机中,喷嘴会产生高速的水流、蒸汽或压缩空气。与反动式涡轮机不同,冲动式涡轮机不需要外壳来引导流体。在冲动式涡轮机系统中,流体在离开喷嘴后,其压力不会发生变化,但流体在撞击涡轮叶片后,其流动方向通常会发生显著变化。反动式涡轮机反动式涡轮机的工作原理是,流体通过一组叶片时发生膨胀,从而将压力转化为叶片上的力。其中,每个叶片都承受相同的载荷。反动式涡轮机可以由多组转子(称为“级”)组成,这些转子根据其对应流动段的压力条件进行了优化。最常见的反动式涡轮机类型是用于喷气式发动机的风力机和燃气轮机。大多数蒸汽涡轮机和天然气动力涡轮机都属于反动式涡轮机。反动式涡轮机使用护罩或外壳来定位流体流经涡轮叶片的位置。当流体流经涡轮机时,反动式涡轮机中的流动会经历明显的压力下降。 涡轮机中的关键组件 蒸汽涡轮机的关键组件:蒸汽进入并被静子引导至转子。蒸汽的压力和速度被转换为叶片上的力,进而在轴上产生扭矩要了解涡轮机工作原理,一个好方法是查看每个关键组件的作用。涡轮叶片叶片是涡轮机最关键的组件,它们通过平台(通常是圆盘)连接到轴上。涡轮叶片有时被称为转子叶片,其作用是将动量或压降转换为垂直作用于旋转轴的力,从而在轴周围产生扭矩。涡轮叶片的形式可以很简单,比如浸入流动水道、与流动方向呈垂直角度的扁平桨叶;它们也可以很复杂,比如涡轮增压器中的径流式涡轮机,其叶片呈螺旋形状排列,以便将来自转子圆周的流体向内转换为与轴对齐的轴向流。一些叶片非常纤薄而细长,比如蒸汽涡轮机或风力机的叶片;还有一些叶片则更长而且相对较厚,比如燃气轮机发动机的高压叶片。涡轮机转子涡轮叶片所连接的轮状物、圆盘或鼓形结构被称为涡轮机转子。轴由涡轮叶片产生、由涡轮机转子传递的机械功率,会被涡轮机的轴传递出去。轴通过高速轴承连接到静态结构。多个涡轮机转子可以连接到同一个轴上。通常,通过齿轮箱,轴可以连接到涡轮机驱动的任何系统上。齿轮箱轴的旋转速度或扭矩可能与涡轮机的应用并不匹配。因此,涡轮机通常会配备齿轮箱,以提高或降低涡轮机的旋转速度,并相反地降低或提高扭矩。涡轮机转子总成涡轮机转子总成是涡轮机的旋转部分,由涡轮机转子、轴和涡轮叶片组成。这三个组件可以通过各种机制进行拆分和组装,也可以由一种材料整体制造而成。旋转组旋转组是一组以相同速度旋转的涡轮机转子总成。大多数燃气轮机都有一个为压缩机提供动力的多级高压旋转组,以及一个为推进风扇或动力轴提供动力的低压旋转组。在蒸汽涡轮机中,由于蒸汽能量会减少,因此会使用多级转子叶片来提取压力。定子叶片流体流入和流出涡轮机转子总成的速度、大小和方向以及压力,对于涡轮机性能至关重要。涡轮在转子组件的上游和下游都使用固定叶片,来控制压力、轴向速度和切向速度或涡流。这些不旋转的叶片被称为静子叶片。涡轮级涡轮级是指单个转子总成及其支撑静态组件,包括与之配对的定子。许多涡轮机在涡轮段有多个级,且通常有两个或多个涡轮段,而且每个段都针对特定的压降进行了优化。喷嘴喷嘴将压力转换为速度,并以最佳角度将流体引导为柱状流。在反动式涡轮机中,将压力转换为速度的叶片通常被称为喷嘴。轴承轴承是任何涡轮机的一个关键组件,它使转子总成能够相对于系统的静止部分旋转。涡轮机的速度、温度、工作环境和载荷决定了所需轴承的类型和尺寸。护罩或涡轮机外壳大多数反动式涡轮机都需要涡轮机转子总成的外径上有一个实心表面,以强制流体流经叶片。这个外壳被称为护罩或涡轮机外壳,它通常属于涡轮机的固定结构。如果是带罩的涡轮机转子,转子总成的外径会添加一圈材料。入口入口是流体进入涡轮机的区域。入口会采用特定形状,以使涡轮机获得最佳压力和速度。入口处通常放置可移动的叶片或阀门,以控制流入涡轮机的流量。出口工作流体会通过出口离开涡轮机。工程师会优化出口的形状,以提高性能。静态结构这是涡轮机的非旋转部件。静态结构包含入口出口、底座、冷却硬件、用于固定轴承的结构,以及用于保持涡轮机内部流动和防止异物进入流动的外壳。仪表和控制系统涡轮机的关键部分,是测量涡轮机物理属性的机械与电子控制器和传感器。它们通常是整个涡轮机控制系统的一部分,用于修改涡轮机的输入,以获得最佳的涡轮机效率、性能和安全性。 涡轮机类型及其应用 有许多不同的涡轮机分类方法,这些分类是基于将移动流体中的能量转化为有用功的旋转机械本身,而非整个涡轮机械系统或涡轮驱动的外部设备。对涡轮机械中使用的涡轮机分类的一些常见标准/依据包括:工作流体:涡轮机可以将水、风力、蒸汽、加热气体或压缩空气中的能量进行转换。流动方向:轴向流与轴对齐,切向流与轴垂直,而径向流从外径向内流向轴。一些涡轮机还涉及混合流,比如在入口处有径向流,在出口处有轴向流。速度或压力能量提取:如上所述,冲动式涡轮机利用速度对叶片产生力,反动式涡轮机利用的是压力。 涡轮机械的常见类型和应用 如果不定义涡轮机所驱动的机械的类型,很难进行进一步探讨。以下列出了最常见的涡轮机械类型、所使用的工作流体的能量来源,以及每种涡轮机械的一些常见应用。水力涡轮机或液力涡轮机 大型水力发电系统的示意图:底部的蓝色结构是单级涡轮机。可变角度定子将流体引导至转子的外径;当水向下偏转时,能量被提取。顶部的黄色、蓝色结构是发电机水力涡轮机或液力涡轮机,是最古老的涡轮机械类型。其工作流体是水,而且水的能量来源是重力。当用于水坝发电时,水力发电涡轮机通常采用混合流设计,其直接连接到水坝底部的发电机。发电是水力涡轮机最常见的应用。蒸汽涡轮机全球大多数发电厂都使用蒸汽涡轮机发电。对水进行加热,会导致相变,从而获取大量能量。这种热能的来源通常是化石燃料的燃烧,但也可以来自核反应堆。还有一种发展中的方法,是利用可再生能源,即利用集中的太阳能,为大型发电厂的蒸汽涡轮机的水提供热量。风力机一组风力机通常被称为风电场,它们通常建造在农村地区或海上人类制造了风车和后来的风力机,以利用风能替代人类和动物的劳动。大气中的太阳能加热是风力的能量来源。现代风能系统使用聚集在陆地或海上风电场上的大型、高效三叶片风力机。大多数大型风力机(如上图所示)都是水平轴风力机,而较小的垂直轴风力机,有时会更多地用于城市环境中。虽然世界上的一些地区仍然使用风力来转动磨坊和抽水,但发电已成为风力机目前的主要用途。空气涡轮机高性能手动工具通常由压缩空气来直接驱动。能量通过活塞增加到空气中,并存储在压力容器中。然后,由阀门释放高压空气冲击冲动式涡轮机,通常是佩尔顿轮(Pelton wheel),以产生极高的转速。空气涡轮机最常见的应用形式是牙科钻头。燃气轮机或涡轮发动机燃气轮机(即燃烧涡轮机),是涡轮机械的一大类,其使用燃烧室为气体增加能量,然后通过涡轮机膨胀。提供推进力的涡轮机被称为涡轮发动机。燃气轮机通常还包括由涡轮段中的旋转组驱动的压缩机,以提高燃烧效率。对燃气轮机的分类,是基于其使用的燃烧类型或功率输出方式。动力涡轮机:这些属于燃气轮机,通常由天然气提供动力,并驱动发电机发电,以提供电力,而不是推进力。涡轮增压器:这种涡轮机从内燃机的燃烧中提取未使用的能量,为气缸上游的压缩机提供动力,从而使燃烧更充分。涡喷发动机:涡轮喷气式发动机仅依靠燃烧为飞机产生推力,并且具有单个旋转组,就像涡轮增压器一样,用于驱动压缩机,从而提高燃烧效率。涡轮风扇发动机:涡轮风扇发动机有二级转子,用于驱动大型风扇,这是一种高效的带涵道风扇,是主要的推力来源。它们比涡轮喷气式发动机更高效,并且是当今商用飞机推进系统的主要形式。涡轮轴发动机:涡轮轴发动机不会产生推进力,而是产生扭矩来驱动飞机的螺旋桨、船舶的螺旋桨或陆地车辆的车轮。涡轮泵:涡轮泵使用燃烧产生的热气体来驱动泵。最常见的涡轮泵,是用于液体燃料火箭发动机的燃料泵,或用于石油和天然气开采的高流量泵。 利用仿真设计和改进涡轮机 从事涡轮机设计的工程师,会从不同方面来研究涡轮的定义与优化。人们过去会使用试错法,然后是使用简单的方程来开发早期涡轮机的叶片几何结构、入口配置和转子设计。但随着对更高效、更低成本的涡轮机的需求不断增长,工程师转而采用先进的仿真来推动其设计。与所有设计一样,涡轮机设计需要在成本、效率、性能和可靠性之间进行平衡。对于飞机推进中使用的涡轮机,工程师还需要考虑重量这个因素。流道设计涡轮机的基本配置,是在流道设计阶段确定的。性能工程师会在涡轮机所驱动的整个涡轮机械系统环境中,研究涡轮机的热力学行为。他们可以使用2D贯流工具(如Ansys Vista TF涡轮机械设计软件)来尝试不同类型的流、级配置、定子选项以及入口和出口几何结构。叶片和定子设计在定义了流道后,下一步就是设计属于每个级的涡轮叶片和定子。被称为矢量图的基本计算,可以让工程师进行初始估计。接下来,他们需要创建3D几何结构,并使用通用计算流体力学(CFD)工具(如Ansys Fluent流体仿真软件),或专用于涡轮机械的CFD平台(如Ansys CFX软件)。工程师使用此类工具来指导改进3D几何结构,以便在多种工况下优化流体流动的能量提取。叶片设计是一个随着时间的推移而不断改进的迭代过程。 涡轮增压器中径向流式涡轮机的CFD仿真。热的废气从外径进入,能量被提取,然后气流沿轴的轴线离开涡轮机多级和瞬态组件设计在完成叶片设计后,下一步是优化静态和旋转级的协同工作方式。工程师会调整每级的叶片和定子角度,使用涡轮机械专用工具(例如CFX软件或Fluent软件,这些工具可以对静态和旋转区域进行建模)的高级功能,来研究静态和瞬态流动随时间变化的情况。结构和热分析设计涡轮机的旋转部分和静态部分具有挑战而且十分复杂,因为涡轮在极端载荷条件下运行,并且这些高载荷具有周期性特性。此外,高温给燃气轮机和蒸汽涡轮机带来了独特的挑战,涡轮机遇到的循环压力和旋转载荷引起的振动也是如此。大多数参与涡轮机设计的热工程师和机械工程师都采用通用多物理场仿真工具,如Ansys Mechanical结构有限元分析(FEA)软件,以捕获涡轮机中每个组件和总成的静态、动态和振动行为。这包括对轴承、二次冷却、转子动力学、轮盘应力、叶片应力、耐用性和热应力进行仿真。工程师还可以将CFD工具(如CFX软件)与结构程序(如Mechanical软件)耦合,以了解流体和结构域之间的振动相互作用。系统设计在设计涡轮机时,工程师还需要结合其所在的整个系统来进行设计。在完成系统映射后,工程师会使用基于模型的系统工程(MBSE)工具(如Ansys ModelCenter软件),确保在整个系统范围内对每个组件进行优化。来源:武汉宇熠

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈