Назначение:
Эти четыре ключевых слова используются вместе для определения и вызова подпрограмм, записанных в ZPL программе. Каждое из этих ключевых слов имеет свое назначение. GOSUB используется для направления хода выполнения программы к указанной подпрограмме. SUB используется для определения имени подпрограммы, а также индикации места начала подпрограммы. RETURN указывает, что дальнейшее выполнение программы должно производиться от места, из которого был вызван самый последний GOSUB. END указывает, что выполнение программы должно быть прекращено немедленно.
Синтаксис: Смотри данный ниже пример.
Обсуждение:
Допускается не более 50 определенных подпрограмм для одного ZPL макроса. Каждая подпрограмма должна быть ограничена командой RETURN. Более одной команды RETURN может быть вложено в тело подпрограммы. Если подпрограммы определены, то по меньшей мере одна команда END должна быть использована для указания конца основной программы. Тело основной программы должно располагаться в начале файла.
Не может быть более 50 "встроенных подпрограмм" в ZPL макросе. Например, если подпрограмма АВС вызывает подпрограмму XYZ, то число встроенных подпрограмм равно 2. Если затем подпрограмма XYZ вызывает подпрограмму DEF, то число встроенных подпрограмм будет уже 3.
Все переменные в ZPL - глобальные. Все переменные, используемые или определенные в подпрограмме, существуют также и в основной программе.
Пример:
х = 1
у = 2
GOSUB add
print "the sum of ", x, \' and \\, y, " is ", z
END
SUB add
z = x + у
RETURN
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-29
GOTO
Назначение:
Обычно все строки в программе выполняются по очереди. Команда GOTO позволяет направить дальнейшее выполнение программы к произвольной строке программы. GOTO всегда используется в связке с командой LABEL.
Синтаксис:
GOTO lаЬеl_номер
Обсуждение:
В программе должна где-либо находиться команда LABEL с указанным номером, в противном случае будет ошибка.
Пример:
Label 1
х = RAND(10)
if x <= 5 THEN GOTO 1
PRINT "X is greater than 5 "
GRAPHICS
Назначение:
Служит для создания стандартной для графиков ZEMAX рамки с линиями для заголовков.
Синтаксис:
GRAPHICS
GRAPHICS OFF
Обсуждение:
Команда GRAPHICS создает стандартное графическое окно ZEMAX; все последующие графические команды адресуются к вновь созданному окну. Команда GRAPHICS OFF закрывает доступ к существующему графическому окну, а затем высвечивает его на экране.
Пример:
Graphics
Xmx = xmax()
Xmn = xmin()
Ymx = ymax ()
Ymn = ymin()
Xwidth = xmx-xmn
Ywidth = ymx-ymn
Xleft = xmn + (.1 * xwidth)
Xrigh = xmn + (.9 * xwidth)
Ytopp = xmn + (.1 * ywidth)
Ybott = ymn + (. 7 * ywidth)
Line xleft,ytopp,xrigh,ytopp
Line xrigh,ttopp,xrigh,ybott
Line xrigh,ybott,xleft,ybott
Line xleft,ybott,xleft,ytopp
Gtitle " the rain in Spain falls mainly on the plain"
Glensname
Gdate
24 -30 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
Gtext xmx/2,ymx/2,0, "start this text in the center.”
" Gtextcent ymx*.05, "center this text near the top.”
" Gtext xmx*.05,ymx*.75,9,"place me vertically near left edge.
" Gtext xmx*.15,ymx*.68,30, "orient me at 30 degrees."
Graphics off
Полученный график показан ниже на рис. 1.
GTEXT
Назначение:
Команда GTEXT используется для нанесения на графики различных надписей.
Синтаксис:
GTEXT х, у, угол, текст_пользователя
GTEXT х, у, угол, А$
Обсуждение:
Координаты х и у определяют место на графике, где должен начинаться записанный в этой команде текст. Текст может быть записан либо в виде "постоянной" строки (либерала), взятой в кавычки, либо в виде имени строчной переменной. С помощью аргумента Угол определяется наклон строки относительно графической рамки; 0 градусов соответствует горизонтальному направлению. Смотри также SETTEXTSIZE.Пример:
Смотри раздел GRAFICS.
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-31
GTEXTCENT
Назначение:
Команда GTEXTCENT используется для центрирования ваших надписей на графиках.
Синтаксис:
GTEXTCENT у, текст_пользователя
Обсуждение:
Координата у определяет положение вашей строки на графике по вертикали. Смотри также SETTEXTSIZE.
Пример:
Смотри раздел GRAFICS.
GTITLE
Назначение:
Команда GTITLE служит для записи строки с названием графика; строка будет центрирована и помещена в рамку заголовка в графическом окне. GTITLE полезна для того, чтобы созданный вами график имел такой же вид, как все другие графики ZEMAX.
Синтаксис:
GTTITLE текст_ пользователя
Обсуждение:
GTITLE в основном используется для того, чтобы созданный вами график имел такой же вид, как все другие графики ZEMAX.
Пример:
Смотри раздел GRAFICS.
IF-THEN-ELSE-ENDIF
Назначение:
С помощью IF задаются условия выполнения программы и ее ветвления.
Синтаксис:
IF (выражение)
(операции)
ELSE
(операции)
ENDIF
ИЛИ
IF (выражение) THEN (выражение)
Обсуждение:
Конструкция IF-ELSE-ENDIF используется для определения условий, при которых должна выполняться группа операций, следующих за словом IF, или операций, следующих за словом ELSE (иначе), но не за обоими этими словами. Если аргумент выражение равен нулю, то выражение рассматривается как ложное, в противном случае оно рассматривается как правильное. Выражение может быть любым ZPL выражением, состоящим из функций, переменных, операторов и постоянных.
24 -32 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
Оператор IF должен использоваться в паре с оператором ENDIF, в то время как оператор ENDIF может вводиться или нет. Пары операторов IF-ENDIF могут быть встроенными на разных уровнях.
Конструкция IF-THEN удобна для задания условия выполнения одной единственной инструкции. Если используется слово THEN, то нет необходимости вводить слово ENDIF, так как команда IF и так будет ограничена только одной инструкцией. Слово ELSE в конструкции IF-THEN не используется.
Пример:
X = 1
у = 2
if (x < у)
PRINT "x is less than y"
ELSE
If (x == y) THEN PRINT "x equals y"
If (x > y) THEN PRINT "x is greater than y"
ENDIF
INPUT
Назначение:
INPUT позволяет пользователю вводить в программу числовые и текстовые данные в процессе ее выполнения.
Синтаксис:
INPUT "Строка подсказки", переменная
INPUT переменная
INPUT "Строка подсказки", строчная_переменная
INPUT строчная_переменная
Обсуждение:
Переменным величинам могут быть даны любые обозначения. Если переменная является строчной переменной, то вход будет интерпретирован как текстовая строка;
в противном случае - как число. Если при записи команды после слова INPUT не введено никакой "подсказки", то будет использован знак "?". Строка подсказки всегда высвечивается на экране и может быть записана на русском языке; введение числовых и строчных переменных всегда производится с помощью клавиатуры.
Пример:
INPUT "Введите значение x", x
PRINT "X = ", x
INPUT "Введите текст для А$:", А$
PRINT A$
INSERT
Назначение:
С помощью команды INSERT вводится новая поверхность в таблицу редактора Lens Data Editor.
Синтаксис:
INSERT (n)
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-33
Обсуждение:
Выражение для n должно генерировать целое число. Смотри также DELETE и SURFTYPE.
Пример:
INSERT 5
INSERT i + 2*j
LABEL
Назначение:
Метка LABEL служит для указания цели для команды GOTO; смотри описание команды GOTO.
Синтаксис:
LABEL номер_метки
Обсуждение:
Номер метки должен быть целым числом, таким как 1 или 7. LABEL не оказывает никакого воздействия на ход самой программы.
LINE
Назначение:
LINE служит для рисования прямой линии в графическом окне.
Синтаксис:
LINE oldx, oldy, newx, newy
Обсуждение:
LINE определяется четырьмя выражениями и рисует прямую линию между заданными точками. Координаты х и у относятся к системе координат графического окна и должны находиться в пределах, заданных командами XMIN, YMIN, ХМАХ и YMAX. Хотя координаты могут быть только целочисленными величинами, аргументами LINE могут быть любые действительные числа, которые при выполнении команды будут округлены до ближайших целых чисел. Команда LINE действует только в графическом режиме.
Пример:
Смотри раздел GRAPHICS.
LOADLENS
Назначение:
Загружает новую схему с диска.
Синтаксис:
LOADLENS "filename" [appendflag]
LOADLENS file$ [appendflag]
Обсуждение:
LOADLENS загружает новую схему из диска. Если "filename" содержит запись полного пути к файлу, как например, C:\MYDIR\MYLENS.ZMX, то указанный файл будет загружен. Если указание пути к файлу отсутствует, то будет осуществлен поиск файла в директории, установленном в диалоговом окне Environment (смотри раздел Environment в главе File menu).
24 -34 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
Если [appendflag] равен нулю или отсутствует, то команда LOADLENS просто загружает указанный файл. Если [appendflag] больше нуля, то указанный файл присоединяется к текущему файлу; при той поверхности, номер которой соответствует значению [appendflag].
Пример:
LOADLENS "СООКЕ.ZMX"
Связанные слова:
SAVELENS
LOADMERIT
Назначение:
Загружает оценочную функцию ("Merit function") с диска и помещает ее в файл с текущей схемой.
Синтаксис:
LOADMERIT "filename" LOADMERIT file$
Обсуждение:
LOADMERIT загружает новую Merit function из диска. Если "filename" содержит запись полного пути к файлу, как например, C:\MYDIR\MYLENS.MF, то указанный файл будет загружен. Если указание пути к файлу отсутствует, то будет осуществлен поиск файла в директории, установленном в диалоговом окне Environment (смотри раздел Environment в главе File menu).
NEXT
Смотри FOR. NUMFIELD
Назначение:
Устанавливает полное число определяемых полей.
Синтаксис:
NUMFIELD <выражение>
NUMWAVE
Назначение:
Устанавливает полное число используемых длин волн.
Синтаксис:
NUMWAVE <выражение>
OPEN
Назначение:
Открывает ASCII-файл с числовыми данными, которые читаются затем с помощью команды READ.
Синтаксис:
OPEN "имя файла"
OPEN A$
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-35
Обсуждение:
Имя вызываемого файла должно быть либо записано в кавычках, либо содержаться в строчной переменной; смотри ключевые слова READ и CLOSE. После прочтения данных текстовый файл всегда должен закрываться словом CLOSE!
Пример:
PRINT "Reading the double-column file TEST.DAT!"
OPEN "TEST.DAT"
READ x1, y1
READ x2, y2
READ x3, y3
CLOSE
OPTIMIZE
Назначение;
Вызывает алгоритм оптимизации текущей схемы с текущей оценочной функцией.
Синтаксис:
OPTIMIZE OPTIMIZE число_циклов
Обсуждение:
Если аргумент отсутствует, то оптимизация проводится в автоматическом режиме ("Automatic" mode) и заканчивается, когда алгоритм обнаружит, что процесс достиг предела. Если аргумент присутствует, он должен быть целым числом между 0 и 99; в таком случае будет выполнено указанное число циклов оптимизации.
Родственные функции:
MFCN
OPTRETURN
Назначение:
Используется для записи указанных результатов вычислений, произведенных ZPL макросом, в глобальную матрицу данных текущей схемы с целью сделать их доступными (в качестве входных данных) для оператора оптимизации ZPLM.
Синтаксис:
OPTRETURN (позиция) = (результат)
Обсуждение:
OPTRETURN имеет два аргумента, разделенных знаком равенства. Выражение (позиция) должно генерировать целое число от 0 до 50; это число определяет номер поля в глобальной матрице, ассоциируемой с текущей схемой, в которое должен быть записан (результат) вычислений. Единственная цель OPTRETURN - сделать возможным оптимизацию значений, вычисленных ZPL макросом.
В оценочной функции должен быть использован оператор оптимизации ZPLM для вызова необходимого макроса, его выполнения и извлечения результатов вычислений, передаваемых командой OPTRETURN. Смотри главу "Optimization".
Пример:
x = sqrt (thic(3) + radi(5))
OPTRETURN j = x + 5
24 –36 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
OUTPUT
Назначение:
Определяет место, куда должен выводиться выходной текст: на экран или записываться в указанный файл.
Синтаксис:
OUTPUT SCREEN
OUTPUT "имя файла"
OUTPUT "имя файла" APPEND
OUTPUT A$
OUTPUT A$ APPEND
Обсуждение:
Если использован только выход OUTPUT SCREEN, то все записи, определяемые последующими операторами PRINT, будут выводиться на экран. Если указано имя файла, то все записи, определяемые последующими операторами PRINT, будут записываться в указанный файл. Для закрытия созданного ранее файла, используйте команду OUTPUT SCREEN, которая будет выводить последующие операции PRINT на экран. Команда SHOWFILE закрывает файл и выводит его содержание для просмотра на экран. Команда PRINTFILE закрывает файл и распечатывает его содержание на заданном принтере.
Если за именем файла следует слово APPEND, то выходы последующих команд PRINTER будут присоединены к содержимому файла. В противном случае содержание файла будет переписано.
Пример:
OUTPUT "x.txt"
PRINT "This will not appear on the screen, but in the",
PRINT " file x.txt."
OUTPUT SCREEN
PRINT "This will appear on the screen."
OUTPUT "x.txt" APPEND
PRINT "This will appear after the first line in the file",
PRINT " x.txt."
Связанные слова:
CLOSE, OPEN, SHOWFILE, PRINTFILE
PARn
Назначение:
PARn используется для определения величины п-го параметра для указанной поверхности. Смысл параметров описан в главе "Using ZEMAX". Для моделирования поверхностей используются от 0 до 8 различных параметров.
Синтаксис:
PAR1 (поверхность) = (новое_значение)
PAR8 (поверхность) = (новое_значение)
Обсуждение:
Это ключевое слово требует два выражения: одно для указания номера поверхности и другое для определения новой величины указанного параметра. Выражение поверхность вычисляется и округляется до меньшего целого значения, которое и
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-37
определяет номер поверхности; если номер поверхности меньше нуля или больше числа заданных в схеме поверхностей, то команда игнорируется! В противном случае указанному параметру присваивается значение, равное вычисленной величине выражения новое_значение. Заметьте, что оператор PARn относится к 8 различным командам: PAR1, PAR2,..., PAR8.
Пример:
PAR1 (1) = 250
Связанные слова:
UPDATE
PARAXIAL
Назначение:
Используется для установки режима трассировки лучей: для параксиальных лучей или для реальных лучей.
Синтаксис:
PARAXIAL ON PARAXIAL OFF
Обсуждение:
Используется для управления режимом трассировки лучей: для параксиальных или для реальных лучей. Определить установленный в данный момент режим можно с помощью ключевого слова PMOD, которое принимает значение 0, если производится трассировка реальных лучей, и значение 1, если установлен режим трассировки параксиальных лучей. Для вычисления некоторых величин, таких как дисторсия или фокальная длина, требуется трассировка параксиальных лучей.
Пример:
mode = PMOD()
If mode then PRINT "Paraxial mode is on!"
If!mode THEN PRINT "Paraxial mode is not on!"
PARAXIAL ON
PRINT "Now paraxial mode is on!"
PRINT "Restoring original mode..."
If!mode THEN PARAXIAL OFF
PAUSE
Назначение:
Приостанавливает выполнение программы, а на экране высвечивает сообщение о текущем состоянии.
Синтаксис:
PAUSE
PAUSE x
PAUSE "Ready to continue...”
PAUSE x + sqrt (5)
Обсуждение:
Эта команда вызывается автоматически, когда закрывается графическое окно. Эта команда используется для рисования точечных диаграмм.
24 -38 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
POLDEFINE
Назначение:
Определяет исходное состояние поляризации перед последующим вызовом команды POLTRACE.
Синтаксис:
POLDEFINE Ex, Еу, PhaX, PhaY
Обсуждение:
Ключевое слово POLDEFINE используется для определения исходного состояния поляризации луча перед его трассировкой. POLDEFINE требует определения нормированных величин электрического поля Ех и Еу, а также фазовых углов Х и Y в градусах. По умолчанию принимаются значения 0, 1, 0 и 0, соответственно. После того как исходная поляризация определена, она остается одной и той же до ее изменения.
Пример:
POLDEFINE 2.0 2.0 45.0 -66.0
Связанные слова:
POLTRACE
POLTRACE
Назначение:
Вызывает программу трассировки лучей для трассировки отдельного луча через текущую схему.
Синтаксис:
POLTRACE (hx),(hy),(px),(ру),(волна),(вектор),(поверхность)
Обсуждение:
Выражения hx и hy должны быть в пределах от -1 до +1 и представлять собой нормализованные координаты объекта. Значения координат зрачка px и ру также должны находиться в пределах от-1 до +1. Смотри раздел "Using normalized field and pupil coordinates". Выражение волна должно генерировать целое число между 1 и максимальным числом заданных длин волн. Выражение вектор должно оцениваться целым число от 1 до 4 включительно. Выражение поверхность должно определяться целым числом от 1 до числа заданных в схеме поверхностей (включительно).
Исходное состояние поляризации луча определяется с помощью ключевого слова POLDEFINE.
При трассировке луча данные о его поляризации помещаются в векторную матрицу, указанную в выражении вектор. Например, если записана команда "poltrace hx, hy, px, ру, w, 2, n", то данные будут записаны в векторную матрицу VEC2. Данные записываются в следующем формате (первое число в каждой строке обозначает позицию в матрице):
0: n, общее число данных, записанных в матрицу
1: интенсивность луча после прохождения поверхности
2: х-компонента электрического вектора, реальная часть
3: у-компонента электрического вектора, реальная часть
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-39
4: z-компонента электрического вектора, реальная часть
5: х-компонента электрического вектора, мнимая часть
6: у-компонента электрического вектора, мнимая часть
7: z-компонента электрического вектора, мнимая часть
8: амплитуда S-поляризации отраженного луча, реальная часть
9: амплитуда S-поляризации отраженного луча, мнимая часть
10: амплитуда S-поляризации пропущенного луча, реальная часть
11: амплитуда S-поляризации пропущенного луча, мнимая часть
12: амплитуда Р-поляризации отраженного луча, реальная часть
13: амплитуда Р-поляризации отраженного луча, мнимая часть
14: амплитуда Р-поляризации пропущенного луча, реальная часть
15: амплитуда Р-поляризации пропущенного луча, мнимая часть
Если в позиции 0 записано число 0, то это означает, что произошла ошибка и данные поляризации ошибочны! Это может случиться, если заданный луч не может быть трассирован. Смотри RAYTRACE, где дана информация о возможных ошибках.
Пример:
POLDEFINE 0, 1, 0, О
POLTRACE 0, 1, 0, 0, pwav(), 1, nsur()
PRINT "Trans. of chief ray at primary wavelenght is \\,vec1(1)
Связанные слова:
POLDEFINE, RAYTRACE
Назначение:
Команда PRINT используется для вывода на экран или для записи в файл (в зависимости от аргумента ключевого слова OUTPUT) выходных текстовых и числовых данных.
Синтаксис:
PRINT X
PRINT "The value of x is ", x
PRINT "x = ", x, "x + у = ", x + у
Обсуждение:
Если используется только одно слово PRINT (без аргумента), то печатается пустая строка. Если за словом PRINT следует список текстовых сообщений и аналитических выражений, то будут печататься каждая текстовая строка (заключенная в кавычки) и числовые значения всех выражений. Числа печатаются в формате, определенном в команде FORMAT. Если после последнего выражения в списке будет поставлена запятая, то печатаемая строка не закончится возвратом каретки: в этой же строке будут потом записаны выходные данные, выводимые следующей командой PRINT.
Пример:
x = 3
PRINT "X equals "x
PRINTFILE
Назначение:
Печатает на принтере текст, записанный в файле.
24 -40 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
Синтаксис:
PRINTFILE "имя файла"
PRINTFILE NAME$
Обсуждение:
Имя файла должно быть заключено в кавычки; в качестве аргумента может быть записано также имя строчной переменной, содержащей имя файла. Файл должен быть записан в формате ASCII (таким, как файл, создаваемый командами OUTPUT и PRINT) и должен находиться в текущем директории. PRINTFILE также сам закрывает файл, если не было команды CLOSE.
Пример:
OUTPUT "test.txt"
PRINT "Print this to the printer."
PRINTFILE "test.txt"
Связанные слова:
OPEN, OUTPUT, CLOSE, PRINT
PRINTWINDOW
Назначение:
Печатает на принтере открытый график или текстовое окно.
Синтаксис:
PRINTWINDOW номер__окна
Обсуждение:
Аргумент номер окна должен быть либо целым числом, либо выражением, которое генерирует целое число; этот аргумент определяет номер окна, которое должно быть напечатано. ZEMAX нумерует окна последовательно, как они открывались, начиная с номера 1. Каждое закрытое окно устраняется из списка окон без перенумерации оставшихся окон. Каждое окно, открытое после того как другое окно было закрыто, получит номер, наименьший из освободившихся.
Пример:
PRINTWINDOW 5 RADI
Назначение:
RADI используется для определения радиуса кривизны указанной поверхности.
Синтаксис:
RADI (поверхность) = (новое_значение)
Обсуждение:
Это ключевое слово требует два выражения: одно для определения номера поверхности и другое для определения нового значения. Выражение поверхность вычисляется и затем округляется до меньшего целого числа, которое и определяет номер поверхности. Если вычисленный номер поверхности окажется меньше нуля или больше числа заданных в схеме поверхностей, то эта команда просто игнорируется. Во всех других случая вычисляется выражение новое_значение и устанавливаются новая величина радиуса кривизны указанной поверхности.
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-41
Пример:
RADI i + m = -1200
Связанные слова:
UPDATE
RAYTRACE
Назначение:
Вызывает программу трассировки отдельного луча через текущую схему.
Синтаксис:
RAYTRACE (hx), (hy), (рх), (ру), (длина_волны)
Обсуждение:
Выражения hx и hy должны быть в пределах от -1 до +1 и представлять собой нормированные координаты объекта. Значения координат зрачка рх и ру также должны находиться в пределах от-1 до +1; смотри раздел "Using normalized field and pupil coordinates". Выражение длина волны может не определяться - по умолчанию будет использована главная длина волны; но если выражение длина волны определено, то оно должно давать целое число между 1 и максимальным числом заданных в схеме длин волн.
Сразу после трассировки луча можно определить координаты точек пересечения луча с поверхностями и направляющие косинусы луча с помощью ZPL-функций RAYX, RAYY, RAYZ, RAYL, RAYM и RAYN. Если при трассировке луча происходит ошибка, то функция RAYE (RAY Error) принимает отличное от нуля значение: если RAYE принимает отрицательное значение, то это означает, что имело место полное внутренне отражение на поверхности (номер, которой равен абсолютной величине значения RAYE); если RAYE принимает положительное значение, то это означает, что луч прошел мимо поверхности (номер которой равен значению RAYE). Вы можете по своему усмотрению контролировать или нет значение RAYE, однако, если эта функция принимает ненулевое значение, то функции RAYX, RAYY..., могут давать ошибочные результаты. Функции RANX, RANY и РАМ7дают величины направляющих косинусов нормалей к поверхностям в точках их пересечения с трассированным лучом. Функция OPDC дает величину разности оптического пути луча. Функция RAYV принимает значение, равное номеру поверхности, на которой луч был виньетирован, или принимает нулевое значение, если виньетирования не было. Принятые функциями значения для поверхностей, которые расположены после виньетирующей поверхности, могут быть не точными!
Пример:
PRINT "Tracing the marginal ray at primary wavelength!"
n = NSUR()
RAYTRACE 0, 0, 0, 1
у = RAYY(n)
PRINT "The ray intercept is ", у
PRINT "Tracing the chief ray at maximum wavelength!"
RAYTRACE 0, 1, 0, 0, NWAV()
у = RAYY(n)
PRINT "The ray intercept is ", у
24 -42 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
READ
Назначение:
Считывает данные из ASCII-файла, открытого командой OPEN.
Синтаксис:
READ x
READ x, у
READ x, y, z, a, b, c, q
Обсуждение:
ASXII-файл должен быть уже открытым; смотри ключевое слово OPEN. Каждая команда READ считывает только одну строку из файла. Число, записанное в этой строке первым, присваивается первой из перечисленных переменных. Число, записанное вторым, присваивается второй переменной, если она указана. Поэтому число переменных должно соответствовать числу колонок в тексте файла. Числовые данные, записанные в файле, должны быть разделены пробелом. Данные могут быть записаны в любой форме (желательно, способствующей их записи с двойной точностью). Максимум 199 знаков может быть считано из одной строки. Указанные переменные должны иметь имена, принятые для переменных ZPL.
Всегда после считывания данных необходимо закрывать файл командой CLOSE. Смотри описание функции EOFF.
Пример:
PRINT "Reading the double-column file TEST.DAT!"
OPEN TEST.DAT
READ x1, y1
READ x2, y2
READ x3, y3
CLOSE
READSTRING
Назначение:
Считывает данные из текстового ASCII-файла, открытого командой OPEN,
Синтаксис:
READSTRING А$
Обсуждение:
ASXII-файл должен быть уже открытым; смотри ключевое слово OPEN. Каждая команда READ считывает только одну строку из файла. Текст всей строки присваивается указанной строчной переменной. Имена указанных переменных должны соответствовать обозначениям, принятым в ZPL; переменные не обязательно должны быть объявлены заранее. Всегда после считывания данных закрывайте файл командой CLOSE. Смотри функцию EOFF.
Пример:
PRINT "Reading the contents of file TEST.DAT!"
READSTRING A$
PRINT A$
CLOSE
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-43
REM.!
Назначение:
REM используется для обозначения, что данная строка является комментарием.
Синтаксис:
REM текст! текст
Обсуждение:
Знак восклицания может быть также использован для обозначения комментария. Как команда REM, так и знак "!" действуют как индикаторы комментария только в том случае, если они находятся в самом начале строки, перед любыми пробелами, метками или какими-либо другими печатными знаками. Все другие использования этих слов будут приводить к ошибкам при выполнении программы.
Пример:
REM any text can be placed after the REM command.
! any text can also be placed
! after the exclamation symbol.
RETURN
Смотри GOSUB.
SAVELENS
Назначение:
Записывает файл с текущей схемой.
Синтаксис:
SAVELENS ["имя файла"]
SAVELENS NEW$
Обсуждение:
SAVELENS записывает файл с текущей схемой на диск. Имя файла с текущей схемой будет изменено на указанное; если имя файла не указано, то данные схемы будут записаны в файл под именем текущего файла.
Пример:
SAVELENS
SAVELENS "NEWCOPY.ZMX"
SAVELENS NEW$
Связанные сова:
LOADLENS
SDIA
Назначение:
SDIA используется для определения величины полудиаметра указанной поверхности.
Синтаксис:
SDIA (поверхность) = (новое_значение)
24 -44 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
Обсуждение:
Это ключевое слово требует два выражения: одно для определения номера поверхности и другое для определения нового значения. Выражение поверхность вычисляется и затем округляется до меньшего целого числа, которое и определяет номер поверхности. Если вычисленный номер поверхности окажется меньше нуля или будет больше числа заданных в схеме поверхностей, то эта команда просто игнорируется. Во всех других случая вычисляется выражение новое значение и устанавливаются новая величина полудиаметра указанной поверхности.
Если выражение новое значение дает положительную величину, то статус полудиаметра будет изменен на "Fixed", вне зависимости от того, каким был статус этого полудиаметра до этого. Если выражение новое значение даст отрицательную величину, то будет установлен статус "Automatic", который обновит величину полудиаметра после последующего вызова команды "UPDATE".
Пример:
SDIA 5 = SDIA(4)
Связанные слова:
UPDATE
SETAIM
Назначение:
Устанавливает состояние функции "Ray aiming".
Синтаксис:
SETAIM состояние
Обсуждение:
Требует одного числового выражения, которое должно принимать целое значение между 0 и 2. Выражение состояние - это кодовое число, которое равно: 0 для выключения функции "ray aiming"; 1 - для параксиального приближения; 2 - для реального случая.
Пример:
SETAIM 1
SETCONFIG
Назначение:
Для систем с изменяющейся конфигурацией (zoom-систем) устанавливает указанный номер конфигурации в качестве текущей схемы.
Синтаксис:
SETCONFIG (номер конфигурации)
Обсуждение:
Это ключевое слово требует одного числового выражения, которое должно давать целое число между 1 и числом определенных в схеме конфигураций. Выражение оценивается и затем округляется до меньшего целого числа, которое и считается заданным номером конфигурации.
Пример:
SETCONFIG 4
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-45
Родственные функции:
CONF, NCON
SETTEXTSIZE
Назначение:
Изменяет размер знаков, печатаемых по команде GTEXT.
Синтаксис:
SETTEXTSIZE х-размер у-размер
Обсуждение:
Аргументы определяют размер печатных знаков в долях ширины графического окна. Например, по умолчанию печатные знаки имеют размер 70 40. Это означает, что каждый знак имеет ширину, равную 1/70 от ширины графического окна, и высоту, равную 1/40 от высоты окна. Если аргументы равны нулю, то вновь устанавливается размер 70 40.
Пример:
! Make text twice default size
SETTEXTSIZE 35 20
! Restore text size to default
SETTEXTSIZE
SETTITLE
Назначение:
Вводит название схемы, которое обычно появляется на всех графиках.
Синтаксис:
SETTITLE А$
SETTITLE "Here is the lens title"
SETUNITS
Назначение:
Устанавливает нужные единицы измерения для текущей схемы.
Синтаксис:
SETUNITS код
Обсуждение:
Это ключевое слово требует только одно числовое выражение, которое должно принимать значения от 0 до 3. Код 0 - для миллиметров, 1 - для сантиметров, 2 - для дюймов, 3 - для метров. Эта функция не масштабирует и не преобразует данные схемы каким-либо образом, она только изменяет интерпретацию данных, описывающих схему!
Пример:
SETUNITS 0 SETVAR
Назначение:
Устанавливает на параметры схемы статус переменной величины для оптимизации этих параметров.
24 -46 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
Синтаксис:
SETVAR (поверхность), VARCODE, (статус)
Обсуждение:
Выражение поверхность должно давать целое число между 0 и максимальным числом определенных в схеме поверхностей; в противном случае будет ошибка! Выражение поверхность определяет номер поверхности, параметры которой должны быть сделаны переменными величинами.
Аргументу VARCODE должно быть присвоено одно из следующих символических обозначений:
r - для радиуса кривизны,
т - для толщины,
с - для конической постоянной,
Рn - для параметра номер n,
En - для внешних данных номер n.
Если выражение статус будет равно 0, то статус переменной величины будет снят;
в других случаях, для параметра будет установлен статус переменной величины.
Пример:
SETVAR j+3, R, 1
SETVAR 5, Р6, 0
SETVAR surfk+2, E06, status
SETVECSIZE
Назначение:
Изменяет максимальный размер матриц VEC1, VEC2, VEC3 и VEC4.
Синтаксис:
SETVECSIZE (выражение)
Обсуждение:
Выражение должно генерировать целое число между 1 и 100,000. Все четыре векторных матрицы всегда имеют один и тот же размер.
SETVJG
Назначение:
Устанавливает коэффициенты виньетирования для схемы.
Синтаксис:
SETVIG
Обсуждение:
Смотри главу "Conventions and Definitions", в которой дано описание коэффициентов виньетирования.
SHOWFILE
Назначение:
Выводит текст файла на экран.
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-47
Синтаксис:
SHOWFILE "filename" save-флаг
SHOWFILE NAME$ save-флаг
Обсуждение:
Имя файла должно быть записано в кавычках, или должно быть указано имя строчной переменной, которой присвоено имя файла. Файл должен быть записан в формате ASCII (например, созданный командами OUTPUT и PRINT) и находиться в текущем директории. Как только файл появится на экране, он может быть прокручен вперед и назад и распечатан как другие текстовые файлы. Возможность просмотра и распечатки файла - главное преимущество команд OUTPUT и SHOWFILE перед простой командой PRINT. SHOWFILE также закрывает файл, если он не был закрыт командой CLOSE: если аргумент save-флаг равен нулю или отсутствует, то файл стирается из памяти после закрытия окна; если save-флаг имеет отличное от нуля значение, то после закрытия окна файл сохраняется.
Пример:
OUTPUT "test.txt"
PRINT "Print this to a file."
SHOWFILE "test.txt"
Связанные слова:
OPEN, OUTPUT, CLOSE, PRINT, PRINTFILE
SOLVETYPE
Назначение:
Изменяет статус функции solve и значения ее параметров для указанной поверхности; свяжитесь с фирмой FSI для получения информации об установке других типов solve.
Синтаксис:
SOLVETYPE (поверхность), код, (аргумент!), (аргумент2)
Обсуждение:
Выражение поверхность должно генерировать целое число между 0 и количеством заданных в схеме поверхностей, в противном случае будет ошибка. Код функции solve должен быть указан в соответствии с символическими обозначениями, приведенными в нижеследующей таблице.
CODES FOR SOLVETYPE KEYWORD КОДЫ ДЛЯ КЛЮЧЕВОГО СЛОВА SOLVETYPE
| |
Тип функции SOLVE | КОД |
Curvature Pickup | CP |
Thickness Pickup | TP |
Thickness Marginal Ray Height | TM |
Glass Pickup | GP |
Conic Pickup | KP |
Тип функции SOLVE | КОД |
Parameter 1-8 Pickup | P1, P2...P8 |
Выражения аргумент1 и аргумент2 должны давать величины первого и второго параметров функции solve, как это определено в главе "Solves".
24-48 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
Пример:
! The following line will add a glas pickup solve
! on surface 7, picking up from surface 5:
SOLVETYPE 7, GP, 5
! Add a thickness pickup with a scale factor of -1:
SOLVETYPE 7, TP, 5, -1
STOPSURF
Назначение:
STOPSURF устанавливает апертурную диафрагму системы на указанную поверхность.
Синтаксис:
STOPSURF (поверхность)
Обсуждение:
Это ключевое слово требует только одно выражение, которое должно оцениваться между 1 и числом, на единицу меньшим числа заданных в схеме поверхностей.
Пример;
STOPSURF n+2
Связанные слова:
UPDATE
SUB
Смотри GOSUB.
SURFTYPE
Назначение:
Изменяет тип указанной поверхности. Синтаксис:
SURFTYPE (поверхность), код
Обсуждение:
Выражение поверхность должно оцениваться целым числом между 0 и числом определенных в схеме поверхностей. Аргумент код - кодовое число, определяющее тип поверхности. Код может быть также задан с помощью функции SCOD.
Пример:
SURFTYPE j + 1, SCOD("STANDARD")
B$ = "EVENASPH"
SURFTYPE 5, SCOD(B$)
THIC
Назначение:
THIC используется для установки толщины указанной поверхности.
Синтаксис:
THIC (поверхность) = (новое_значение)
Глава 24: ЯЗЫК ПРОГРАММИРОВАНИЯ ZEMAX 24-49
Обсуждение:
Это ключевое слово требует два выражения: одно для определения номера поверхности и другое для определения нового значения. Выражение поверхность вычисляется и затем округляется до меньшего целого числа, которое и определяет номер поверхности. Если вычисленный номер поверхности окажется меньше нуля или будет больше числа заданных в схеме поверхностей, то эта команда просто игнорируется. Во всех других случая вычисляется выражение новое значение и устанавливается новая величина толщины указанной поверхности.
Пример:
THIC i+m = THIC (i+n) - 1
Связанные слова:
UPDATE
TIMER
Назначение:
Устанавливает внутренние часы. Эта команда используется вместе с функцией ETIMQ для отсчета времени с момента выполнения последней команды TIMER.
Синтаксис:
TIMER
Обсуждение:
Команды TIMER и ETIMQ используются в основном для проверки эффективности ZPL интерпретатора и различных архитектур программ.
Пример:
i=0
TIMER
LABEL 1
x = RAND(1OOO)
i = i + 1
if i<10000 then GOTO 1
FORMAT.1
PRINT "Elapsed time: ", ETIM(), " Seconds"
UPDATE
Назначение:
По этой команде происходит обновление положения зрачка, показателей преломления, параксиальных констант, полудиаметров, максимальных нормированных значений поля и функций solve. Слово UPDATEдолжно использоваться перед трассировкой лучей или перед анализом системы, если параметры схемы (такие как радиусы и толщины) были изменены с момента вызова последней команды UPDATE. Если команда UPDATE сопровождается словом "ALL", то обновлены будут все открытые окна.
Синтаксис:
UPDATE
UPDATE ALL
24 -50 Chapter 24: ZEMAX PROGRAMMING LANGUAGE
Пример:
THIC 5 = ТН1С(5)-1
UPDATE