0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何从ZPL宏中调用另一个ZPL宏?

LD18688690737 来源:光电资讯 2023-02-25 15:19 次阅读

通常,在单独的代码段中执行计算的每个步骤是一种很好的编程实践,本文介绍如何从另一个宏中调用 ZPL 宏,以及如何在宏之间来回传递数据。

介绍

在编写执行许多步骤的ZPL宏时,通常在单独的代码段中执行每个步骤是一种良好的编程做法。这可以通过ZPL子例程来完成,使用GOSUB,SUB,RETURN和END关键字。但是,在某些情况下,在单独的宏中执行每个步骤,然后从主(父)宏调用这些单独的(子)宏中的每一个可能更容易。例如,如果要在许多不同的宏中执行相同的计算,则在随后由各个父宏调用的子宏中执行此计算会更有效。这可以在OpticStudio中使用关键字CALLMACRO来完成。

从一个宏中调用另一个宏

可以在本文附带的.ZIP文件中找到调用两个单独子宏的父宏的示例。这些宏文件应放在{Zemax}Macros 目录下,并用于位于{Zemax}SamplesObjectives 目录中的文件“Cooke 40 degree field.zmx”。

poYBAGP5tpOAUzjtAADBSL7F5BI957.jpg

在这种情况下,数值和字符串值是简单的测试值,用于演示在父宏和子宏之间来回传递数据的方法。

然后,父宏使用关键字CALLMACRO调用第一个子宏(CALLMACRO_TEST_CHILD1.ZPL)。在子宏中,存储在宏缓冲区中的值使用CALD和$CALLSTR数字函数打印到输出窗口:

pYYBAGP5trCAGPEfAACU5OYiwWE135.jpg

然后,该宏使用RAYTRACE关键字和OPDC函数计算弧矢方向光瞳坐标 (Px = 0)和固定视场坐标 (Hx = Hy = 0) 处的各个子午光瞳坐标 (Py)的光程差:

poYBAGP5tsqAHVGjAACz2PzwSTg116.jpg

在此子宏中,光瞳坐标的值(存储在x数组中)使用以下方法传递回父宏:

poYBAGP5tuOADRs4AADVFI6Ze2Q697.jpg

新字符串值也作为测试放置在宏缓冲区中,以确保将此数据传递回父宏。子宏完成后,OpticStudio 将返回到父宏,并且光瞳坐标的值将存储在相应的数组中:

poYBAGP5tv-AUzjaAACL29wA2kE135.jpg

然后,父宏调用第二个子宏 (CALLMACRO_TEST_CHILD2.ZPL)。此宏与第一个子宏相同,唯一的区别是OPD数据(存储在y数组中)而不是光瞳坐标被传递回父宏:

pYYBAGP5tyOAXqUmAADpyu7McuE589.jpg
poYBAGP5tyyAUhhMAAEKv4xenqU411.jpg

作为测试新的字符串值再次放置在宏缓冲区中,以确保将此数据传递回父宏。然后将数字OPD 数据存储到父宏的数组中:

pYYBAGP5t1eAZ6T_AAB-pD2ri_k930.jpg

最后,父宏使用关键字PLOT绘制 OPD 与光瞳坐标数据:

pYYBAGP5t2uAPGFDAADJVQqWSHk118.jpg
PLOT GO 然后将结果打印到图形窗口:

8fd69dce-b2c2-11ed-bfe3-dac502259ad0.jpg







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    584

    浏览量

    20553
  • ZEMAX
    +关注

    关注

    3

    文章

    34

    浏览量

    11381
  • sub
    sub
    +关注

    关注

    0

    文章

    13

    浏览量

    2256

原文标题:Zemax光学设计技术:如何从ZPL宏中调用另一个ZPL宏

文章出处:【微信号:光电资讯,微信公众号:光电资讯】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    vi调用另一个vi,并将数据传给被调用vi

    我想在vi调用另一个vi比如说,在这个vi1,我获得了
    发表于 03-28 13:57

    C语言定义#和##的作用

    : helloworld , 就可以通过这样的的调用, printf( str(helloworld) );2. ## : 在定义,将其前后的两变量拼接在
    发表于 08-23 18:22

    C语言中的

    我们对定义的使用更加的常江,下面我们方面来了解下函数的使用。1.函数的书写#def
    发表于 12-13 15:32

    扩展问题

    MPLAB IDIDV3.65和XC8HI,“扩展工具”是方便的工具来查看在项目文件的扩展(右键单击
    发表于 04-14 09:57

    【原创文章】程序的调试和使用的技巧

    的dprint)会自动根据程序中表达式的内容,生成一个字符串的(示例的#expr)。这样同样可以在程序中表示一个字符串。②进
    发表于 08-18 17:27

    ios的使用注意点

    使用的时候, 其中会有很多的注意点, 如果不小心被忽略, 那么将会带来完全不想要的结果。 所以要想灵活的使用它, 那么还是先了解些比较好。 而且在iOS开发如果你是使用OC, 那么你可能经常会使用到#define(swift当前不支持
    发表于 09-25 17:30 0次下载
    ios<b class='flag-5'>中</b><b class='flag-5'>宏</b>的使用注意点

    excel的使用方法、技巧和步骤

    excel的使用方法如下: 、建立 二、执行 三、编辑和删除
    发表于 11-19 10:16 11.7w次阅读
    excel<b class='flag-5'>中</b><b class='flag-5'>宏</b>的使用方法、技巧和步骤

    什么是,excel的作用

    所谓,就是些命令组织在起,作为单独命令完成
    发表于 11-19 10:36 5.5w次阅读

    QuartusⅡ功能模块的使用

    QuartusⅡ软件针对常用的功能,提供了参数化(Parameterized)的功能(megafunctions)模块,通过调用功能模块,可以减少工作量,加快设计的进程。 用户可以通过向导工具
    发表于 04-03 15:34 12次下载

    工程师避免这些误区才能让【】削铁如泥

    括号,可以创建主体内部开始但在主体外部结束的调用
    的头像 发表于 10-23 15:15 1764次阅读

    几种特殊的函数封装方式介绍

    : #defineINT_SWAP(a,b) inttmp=a; a=b; b=tmp但上述的具有明显的缺点:当遇到 if、while 等语句且不使用花括号仅调用
    的头像 发表于 11-03 16:03 2113次阅读

    当使用参数调用时,会将参数替换为主体

    在大多数定义示例,每次出现的参数名称都带有括号,并且另一对括号通常会包围整个定义,这是编写
    的头像 发表于 11-16 16:41 2347次阅读

    函数的三种封装方式

    : #define INT_SWAP(a,b) \ int tmp = a; \ a = b; \ b = tmp 但上述的具有明显的缺点:当遇到 if、while 等语句且不使用花括号仅
    的头像 发表于 12-22 15:49 3690次阅读

    如何才能避免【】的这七误区

    当使用参数调用时,会将参数替换为主体,并与其他输入文件起检查结果,以进行更多的调用,可以
    的头像 发表于 12-24 14:29 417次阅读

    c语言定义可以嵌套吗?

    c语言定义可以嵌套吗? C语言定义可以嵌套,也就是定义可以包含另一个
    的头像 发表于 09-04 17:38 3225次阅读