透镜面的厚度与材料
单透镜:两个面组成,第一个面赋予材料和厚度——即该透镜的材料和厚度;第二个面不需要赋予材料,其厚度为下一个透镜的空气间隔——即下一个物体的起始点以此厚度末端为原点
胶合透镜:三个面组成,第一个面和第二个面赋予材料和厚度——即该胶合透镜第一个和第二个的材料和厚度;第三个面不需要赋予材料,其厚度为下一个透镜的空气间隔
所以,当一个表面被赋予材料后,说明其下一个表面与其共属于同一个透镜,连续n个表面被赋予材料,则就是n胶合透镜;当一个表面没有赋予材料,说明该表面后面是空气层
曲率半径:无限大为平面,正值表示曲率圆心在该表面的右边,负值表示曲率圆心在该表面的左边
光阑:视作一个表面,一般为平面
像面:没有厚度,曲率一般为无限大
净口径:通过口径,例如光阑(光圈),用半径表示,clear radius
机械半直径:edge radius,大于等于clear radius
使用COM组件控制Zemax
COM控制Zemax,会有模板,参考
![](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml300\wps1.jpg)
|独立应用程序(Standalone Application )|在此模式下,应用程序会启动全新的OpticStudio例程(其他模式依赖于已经打开的现有例程而存在)。因此,在以这种模式启动应用程序之前,必须注意确保OpticStudio已打开至少一个例程(以满足OpticStudio的许可证验证)。在此模式下,OpticStudio实际上是作为服务器运行的,没有自定义界面。
|交互扩展(Interactive Extension)|交互扩展模式连接到OpticStudio的已经打开的例程。在此模式下运行时,OpticStudio界面随着程序的变化进行实时更新。它几乎与自定义扩展相同,除了这个功能可以从脚本环境(如MATLAB或Python)进行连接,这些脚本环境中没有可编译的可执行文件来使OpticStudio启动。
序列模式下,启动独立应用程序然后会自动生成一个模板,文件名称为(xxx数字)PythonStandaloneApplicationxxx.py
C:\Users\Administrator\Documents\Zemax\ZOS-API Projects
前期准备-依赖包和环境
使用Vscode打开编辑该文件
看到文件开头需要win32com包,你需要win+r执行cmd命名,启动conda,通过pip安装pywin32
pip install pywin32
编辑python独立交互程序
程序中的zosapi.TheApplication.SamplesDir的地址为:
C:\Users\Administrator\Documents\Zemax\Samples
第95行处有注释:
# Insert Code Here;
在下面插入代码,控制Zemax的COM组件
设计规格如下的单透镜:
- 光线来自无限远,半视场角为5°,单一波长(d光,0.587mm)。
- 准直的入射光被聚焦为最小的RMS光斑半径,均匀射入视场中。
- F 数为10,入瞳直径为 40 mm。
- 材料为 N-BK7。
- 光阑为位于透镜之后单独的表面,可以自由移动。
- 至少3片透镜,并且中心厚度不超过15mm。
- 透镜的边缘厚度最小为3mm,空气间隙最小为 0.5 mm
系统基本数据
系统:新建文件,视场,光圈,波长
接下来,前期文件设置
# Insert Code Here;从这开始
# Example code to create a new system
TheSystem = zosapi.TheSystem;
# Create a new system
TheSystem.New(False); # False表示不保存文件
# Example code to save a file
fileOut = zosapi.TheApplication.SamplesDir + "\\Sequential\\Objectives\\SEFFL002.zmx";
# Save the current system as a new file;TheSystemData包含系统的所有基本数据,可以用其设置光圈、视场、波长等。
zosapi.TheSystem.SaveAs(fileOut); #对同一个文件,不能多次保存SaveAs(fileOut);如需,则应另存为名字不同的文件
# Set the aperture of the system to 40mm
TheSystemData = TheSystem.SystemData;
TheSystemData.Aperture.ApertureValue = 40;
# Fields
TheSystemData.Fields.AddField(0,5.0,1.0);
# Wavelength preset
TheSystemData.Wavelengths.SelectWavelengthPreset(constants.WavelengthPreset_d_0p587);
#对于枚举常量,如: WavelengthPreset, Python将每个常量创建为{enum name}_{enum value}.
# Lens data and surfaces editor
# 每一行表示系统中定义的一个表面:表面0是物面,最后一个表面是像面。
# 对于位于光阑前的单透镜,透镜的前表面是表面1,透镜的后表面是表面2,光阑是表面3。
TheLDE = TheSystem.LDE; # 打开Lens Data Editor
TheLDE.InsertNewSurfaceAt(1); # 在第1个位置插入一个表面
TheLDE.InsertNewSurfaceAt(1); # 在第1个位置插入一个表面
Surface_1 = TheLDE.GetSurfaceAt(1); # 获取第1个表面
Surface_2 = TheLDE.GetSurfaceAt(2);
Surface_3 = TheLDE.GetSurfaceAt(3);
Surface_1.Thickness = 10.0; # 前透镜厚度为10mm
Surface_1.Comment = 'front of lens';
Surface_1.Material = 'N-BK7';
Surface_2.Thickness = 50.0; # 后透镜厚度为50mm
Surface_2.Comment = 'rear of lens';
Surface_3.Comment = 'Stop is free to move';
Surface_3.Thickness = 350.0;
# 可以用5个自变量来实现设计目标——透镜的前后半径、透镜的厚度、光阑的位置和像的位置。
# Make thicknesses and radii variable
Surface_1.RadiusCell.MakeSolveVariable(); # 前半径
Surface_1.ThicknessCell.MakeSolveVariable(); # 前透镜厚度
Surface_2.RadiusCell.MakeSolveVariable(); # 后半径
Surface_2.ThicknessCell.MakeSolveVariable(); # 后透镜厚度
Surface_3.ThicknessCell.MakeSolveVariable(); # 光阑厚度
# Set the initial values for the variables
# 如果想在OpticStudio中打开文件来查看当前的进度,首先需要使用以下代码保存镜头文件:
# Save and close
TheSystem.Save(); # 最后会保存,中间可以多次保存
TheSystem.Close(True); # True表示保存文件;
孔径,入瞳直径40mm
视场和权重
镜头数据结果,该系统的光阑前面有镜头,曲率、厚度和备注,设置材料和变量参数
初始系统,2D视图
设置评价函数编辑器
使用序列优化向导 ( Sequential Optimization Wizard ) 在默认的评价函数中指定最小光斑半径 ( Minimum Spot Radius ) 和玻璃/空气的边界条件的目标值。
标签:OpticStudio,Python,厚度,Surface,TheSystem,Zemax,透镜,联用,表面 From: https://www.cnblogs.com/invo/p/18230251