Zemax プログラミング言語 (ZPL) は高機能なプログラミング言語です。その使用は容易ですが、エラー チェック、コード論理のデバッグ、適切なプログラミング手法の採用にはユーザー側で対応する必要があります。この記事では、適切なプログラミングの実践方法を解説し、ZPL マクロの最適な作成とデバッグを実現するうえで効果的なヒントをいくつか紹介します。
著者 Mark Nicholson
Introduction
Zemax プログラミング言語 (ZPL) は、OpticStudio の各種機能を利用できるように設計された高機能なプログラミング言語であり、繰り返しの多い作業や解析の効率的な実行を実現します。その使用は容易で、多数の独自な用途に使用できます。そのため、マクロ作成に関するテクニカル サポートは、ZPL のすべての関数とキーワードが、ドキュメントに記載されているとおりに確実に機能できるようにすることまでに限定されています。(キーワードがドキュメントどおりに動作しないことが判明した場合は、作成したコードを support@zemax.com まで、お送りください)。
Zemax サポートでは、お客様に代わってプログラムを作成することもデバッグすることもできないので、この記事を十分に理解いただき、適切なプログラミング手法や、優れた ZPL コードを作成するための秘訣を習得することをお勧めします。
ZPL マクロのデバッグ方法
以下に、適切な構造のマクロを作成するうえで効果的な実務を紹介します。
1. マクロの作成を進めながら、一定の範囲ごとに検証します。
2. デバッグ用の制御パラメータを使用します。次のようなコードがきわめて効果的です。
debug = 1 #Set debug = 0 to prevent printing information messages
# or <>0 to print messages
IF (debug) THEN PRINT "hello" # for example
当然のことながら、"Hello" と出力する代わりに、変数などを出力することもできます。また、唯一のパラメータである変数 debug の値を 0 と 0 以外の任意の値との間で切り換えることで、情報メッセージ出力の有効と無効を切り換えることができます。こうすることで、複雑なマクロのデバッグもはるかに容易になります。コード全体にわたり、必要な数だけ IF (debug) THEN の行を記述しておけば、1 つの変数を変更するだけでエラー報告を出力するかどうかを切り換えることができます。
3. 必ず、設計を初期状態に戻します (マクロの目的がレンズ ファイルの意図的な変更である場合は例外です)。たとえば、ズーム レンズの CAM テーブルを出力するマクロを作成するとします。このマクロでは、コンフィグレーションを変更する必要があります。必ず次のようなコードを追加して、元のコンフィグレーションが復元されるようにします。
orig_config = CONF() # Get the configuration number
# when the macro starts
{write your code here....change configurations, get data, print etc...}
SETCONFIG orig_config # restore the starting configuration.
波長、視野点、アパチャー、温度など、何らかの値をマクロで変更した場合も同様です。マクロによってファイルを恒久的に変更する意図がない限り、データを変更した場合は、必ずマクロ開始時のデータを復元するか、マクロの実行終了時に、データの変更を保存せずにレンズ ファイルが閉じるようにします。任意の中間段階でファイルを保存するようなマクロとすることもできます。
4. レンズ ファイルのあらゆるデータをマクロで変更できますが、実際には UPDATE キーワードを実行するまで変更が反映されません。これにより、必要なだけファイルをマクロで変更したうえで、すべての変更を一度に実装できます。
5. 半年後に再度マクロを実行しても動作内容がわかるようなコメントを記述しておきます。
6. ZPL では大文字と小文字が区別されませんが、ユーザー独自の変数をすべて小文字、ZPL のキーワードと関数をすべて大文字で記述すると便利です。
7. 光線追跡のエラーが発生していないことを確認します。キーワード RAYTRACE を呼び出した場合は、RAYE() の値を参照し、光線追跡が正常に終了していることや、たとえば TIR が発生していないことやアパチャーで光線が遮蔽されていないことを確認します。
8. キーワードを呼び出すときは変数を使用します。これにより、コードが読みやすくなり、デバッグが容易になります。
hx = 0
hy = 1
px = 0.2
py = -0.5
wavelength = 1
RAYTRACE hx, hy, px, py, wavelength
つまり:
RAYTRACE 0 1 .2 -.5 1
9. 作成するマクロを複数の Zemax ファイルで使用する場合は、面番号、波長番号、視野番号などをハード コーディングしないようにします。これらのデータを実行時に抽出できるように、NSUR()、NWAV()、PWAV() などの関数を使用します。
10. ユーザー入力が必ず検証されるようにします。たとえば、次のコードを考えます。
INPUT "Enter the wavelength number", wavelength
このコードでダイアログ ボックスを開き、ユーザーに波長番号の入力を求める場合は、その後ろに次のようなチェック用のコードを追加します。
IF (wavelength > NWAV()) THEN wavelength = NWAV()
IF (wavelength < 1) THEN wavelength = 1
このようなコードにより、入力データの妥当性が必ず確認されるようにします。
KA-01424
コメント
記事コメントは受け付けていません。