通常,在單獨(dú)的代碼段中執(zhí)行計(jì)算的每個(gè)步驟是一種很好的編程實(shí)踐,本文介紹如何從另一個(gè)宏中調(diào)用 ZPL 宏,以及如何在宏之間來回傳遞數(shù)據(jù)。
介紹
在編寫執(zhí)行許多步驟的ZPL宏時(shí),通常在單獨(dú)的代碼段中執(zhí)行每個(gè)步驟是一種良好的編程做法。這可以通過ZPL子例程來完成,使用GOSUB,SUB,RETURN和END關(guān)鍵字。但是,在某些情況下,在單獨(dú)的宏中執(zhí)行每個(gè)步驟,然后從主(父)宏調(diào)用這些單獨(dú)的(子)宏中的每一個(gè)可能更容易。例如,如果要在許多不同的宏中執(zhí)行相同的計(jì)算,則在隨后由各個(gè)父宏調(diào)用的子宏中執(zhí)行此計(jì)算會更有效。這可以在OpticStudio中使用關(guān)鍵字CALLMACRO來完成。
從一個(gè)宏中調(diào)用另一個(gè)宏
可以在本文附帶的.ZIP文件中找到調(diào)用兩個(gè)單獨(dú)子宏的父宏的示例。這些宏文件應(yīng)放在{Zemax}Macros 目錄下,并用于位于{Zemax}SamplesObjectives 目錄中的文件“Cooke 40 degree field.zmx”。
在這種情況下,數(shù)值和字符串值是簡單的測試值,用于演示在父宏和子宏之間來回傳遞數(shù)據(jù)的方法。
然后,父宏使用關(guān)鍵字CALLMACRO調(diào)用第一個(gè)子宏(CALLMACRO_TEST_CHILD1.ZPL)。在子宏中,存儲在宏緩沖區(qū)中的值使用CALD和$CALLSTR數(shù)字函數(shù)打印到輸出窗口:
然后,該宏使用RAYTRACE關(guān)鍵字和OPDC函數(shù)計(jì)算弧矢方向光瞳坐標(biāo) (Px = 0)和固定視場坐標(biāo) (Hx = Hy = 0) 處的各個(gè)子午光瞳坐標(biāo) (Py)的光程差:
在此子宏中,光瞳坐標(biāo)的值(存儲在x數(shù)組中)使用以下方法傳遞回父宏:
新字符串值也作為測試放置在宏緩沖區(qū)中,以確保將此數(shù)據(jù)傳遞回父宏。子宏完成后,OpticStudio 將返回到父宏,并且光瞳坐標(biāo)的值將存儲在相應(yīng)的數(shù)組中:
然后,父宏調(diào)用第二個(gè)子宏 (CALLMACRO_TEST_CHILD2.ZPL)。此宏與第一個(gè)子宏相同,唯一的區(qū)別是OPD數(shù)據(jù)(存儲在y數(shù)組中)而不是光瞳坐標(biāo)被傳遞回父宏:
作為測試新的字符串值再次放置在宏緩沖區(qū)中,以確保將此數(shù)據(jù)傳遞回父宏。然后將數(shù)字OPD 數(shù)據(jù)存儲到父宏的數(shù)組中:
最后,父宏使用關(guān)鍵字PLOT繪制 OPD 與光瞳坐標(biāo)數(shù)據(jù):
PLOT GO 然后將結(jié)果打印到圖形窗口:
審核編輯:劉清
-
字符串
+關(guān)注
關(guān)注
1文章
579瀏覽量
20537 -
ZEMAX
+關(guān)注
關(guān)注
3文章
34瀏覽量
11380 -
sub
+關(guān)注
關(guān)注
0文章
13瀏覽量
2254
原文標(biāo)題:Zemax光學(xué)設(shè)計(jì)技術(shù):如何從ZPL宏中調(diào)用另一個(gè)ZPL宏
文章出處:【微信號:光電資訊,微信公眾號:光電資訊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論