用 MATLAB 连结 Zemax OpticStudio 之一:连线与基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:此系列文章共有三篇。
第一篇中,我們會示範如何利用MATLAB連結ZOS-API,並說明相關操作重點。
第二篇中,我們會重點提示撰寫時,幾個常見語法問題。
第三篇中,我們提供幾個有用的範例檔,說明幾個常見應用如何撰寫。
作者:Michael Cheng
發布時間:March 13, 2017
簡介
關於ZOS-API本身,請參考知識庫內另一篇「簡介」。
MATLAB在透過ZOS-API連結OpticStudio時,主要有兩種模式:Standalone (獨立運作) 以及Interactive Extension (互動擴展)。
使用Standalone模式運作時,MATLAB會以背景模式連結到OpticStudio,然後所有動作都在Windows背後進行,過程中不會看到OpticStudio主視窗開啟。
反之,使用Interactive Extension模式運作時,必須先開啟OpticStudio,然後使用者需要先在OpticStudio開放連結,讓MATLAB能夠順利接入並控制,控制過程中OpticStudio不能手動操作,直到使用者手動在OpticStudio取消互動模式,取回控制權。
以下將分別說明如何用兩種不同模式連線。
使用Standalone模式連線
首先是到OpticStudio中點選Programming > MATLAB > Standalone Application,以產生樣板程式碼。
Click To Enlarge
點擊後,可以看到系統會自動建立一個範例的.m檔,並且打開存放的資料夾,如果電腦中有安裝MATLAB,則會自動被開啟,並顯示範例的.m檔。
Click To Enlarge
這個.m檔可以直接被執行,他的設計是讓使用者直接把需要執行的動作的語言,加到以下截圖中的“% Add your custom code here...” 這行下面的部分中。而不需要去管與OpticStudio連結的語法。讓使用者可以專心執行工作。
我們可以看到在“%Add your…” 這行前一句是
TheSystem = TheApplication.PrimarySystem;
這行需要這樣解讀:我們呼叫TheApplication這個物件的一個叫做PrimarySystem的屬性,然後把結果交給一個叫做TheSystem的變數中。
以下是幾個基本說明,請注意這部分與ZOS-API並不直接相關,主要是關於MATLAB,或是大部分程式語言所共通的語法:
1. TheSystem僅為物件變數,可以是任何名稱,例如你也可以寫ABC = TheApplication.PrimarySystem;。這只是
一個存放物件資料的變數名稱。此為重要觀念之一。
2. 這些TheSystem或TheApplication都對應到一個“介面(i nterface)”。介面就像方向盤或遙控器,你可以利用他的方法(method) 或是屬性(properties) 來下指令,執行各種動作。
3. 這些介面通常實際對應到OpticStudio中的某個工具或編輯器,例如ILensDataEditor就是鏡頭數據編輯器。有些介面代表比較模糊的概念,例如IOpticalSystem代表整個你正在操作的系統。這裡的IOpticalSystem指的是介面的名稱(type name),你不能直接使用IOpticalSystem這樣的介面名稱,我們必須建立一個變數來代表他才能使用,前面提到的TheSystem就是一個代表IOpticalSystem介面的變數。
4. 介面可以呼叫介面,他們的關係通常在OpticStudio中也看的到,例如IOpticalSystem可以呼叫ILensDataEditor。通常我們會寫為
TheLDE = TheSystem.LDE;
注意TheSystem與TheLDE都是變數名稱,可以隨意更改。LDE則是IOpticalSystem的一個屬性,名字是固定,無法隨意更改。
另外前面提到的這段語法也是介面呼叫介面。
TheSystem = TheApplication.PrimarySystem;
就是我們呼叫TheApplication這個物件中的PrimarySystem,而此物件會回傳IOpticalSystem介面,最後我們用一個等號“指定” 給TheSystem這個變數來代表這個介面的實體。
5. 每個介面有哪些屬性以及方法,這些屬性以及方法分別有什麼功能,會回傳什麼物件,都可以在我們的Interface Document中找到詳細說明,開啟位置如下圖:
下圖是一個很好的例子,可以看到在IOpticalSystem的Properties (屬性) 列表中,就有一個LDE。只要存在,就可以呼叫,因此我們當然也可以撰寫如下:
TheMCE = TheSystem.MCE;
TheAnalyses = TheSystem.Analyses;
Click To Enlarge
至於上面令好的TheAnalyses變數可以做什麼,則可以點擊上圖中的Analyses連結,就可以看到如下的畫面:
Click To Enlarge
可以看到原來IOpticalSystem的Analyses屬性會回傳I_Analyses介面。讓我們再點一下I_Analyses的連結,然後可以看到如下:
Click To Enlarge
因此在這裡我們可以知道I_Analyses有哪些屬性、方法可以使用。
例如我可以用TheAnalyses.NumberOfAnalyses得知目前系統中開啟了幾個分析視窗。
我也可以用FFTMTF = TheAnalyses.FftMtf()來開啟一個FFT MTF分析視窗的控制介面,並指定給FFTMTF這個變數。
或用TheAnalyses.CloseAnalysis(3)來關閉編號3的分析視窗。
依此類推。
請注意技術支援服務能協助你瞭解這些物件如何被設計,預期要如何操作,但是並不能協助你從最基本的程式語言操作開始。
使用Interactive Extension模式運作
此部分將僅說明跟Standalone模式不同的部分,關於語法的操作上,前面關於Standalone的說明都適用,因此建議讀者仍然閱讀前面的說明。
跟Standalone的模板代碼不同,Interactive Extension的模板程式碼幾乎只需要建立一個,之後就可以一值沿用,建立方法跟Standalone一樣,都是到Programming > MATLAB > Interactive Extension開啟。