Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Инструкция по программе Nova

.pdf
Скачиваний:
138
Добавлен:
28.05.2015
Размер:
27.02 Mб
Скачать

Глава 5. Элементы макроязыка

Можно вызывать Redim несколько раз в коде одного скрипта, но следует учесть, что данные, записанные в массив, будут стерты после очередного вызова Redim. Чтобы этого не произошло, используйте ключевое слово Preserve:

ReDim Preserve Array_Name(размер-1)

*ВНИМАНИЕ! Не следует обращаться к элементам динамического массива, пока ему не задан размер (функция Redim ни разу не вызывалась).

5.8.3.Заполнение массивов

Массив заполняется явным образом с помощью функции Array:

Array_Name = Array(1,2,3)

Array_Name = Array("red","green","blue")

Но чаще всего это делается в цикле. Приведённый выше пример реализуется следующим образом:

Dim MyArray(3) For i = 0 to 3

MyArray(i) = 2^i

Next a=MyArray(2)

MsgBox "MyArray(2) = "&a

3-25

ЧАСТЬ 3. Макроязык “Nova PowerScript”

5.8.4.Размер массива

Для того, чтобы узнать размер массива, используют функцию UBound:

Size = UBound(MyArray)+1

Функция UBound возвращает не размер массива, а индекс его последнего элемента, что чаще используется на практике.

Пример работы с массивом:

Требуется задать массив случайной длины (от 0 до 9) из случайных чисел и найти из них максимальное.

'Объявление динамического массива

Dim MyArray()

'Вычисление случайной длины массива MyArray

S = Round(RND*10)

'Заполнение массива MyArray случайными числами

For i = 0 to S

ReDim Preserve MyArray(i) MyArray(i) = RND

Next

'Значение последнего индекса массива MyArray

Size = Ubound(MyArray)

'Для начала считаем, что нулевой элемент массива

'наибольший

Max=MyArray(0)

' Нахождение максимального элемента массива MyArray

For i = 0 to Size

If Max < MyArray(i) Then Max = MyArray(i) Next

MsgBox "Maximum Value = "&Max

5.9.Процедуры и функции

Представьте себе, что нужно произвести операцию несколько раз. Например, сложить два числа и вывести на экран их сумму. Можно написать структуру, выполняющую данное действие, и включить её в скрипт. Но если это действие повторяется много раз, следует создать собственную процедуру.

3-26

Глава 5. Элементы макроязыка

5.9.1.Синтаксис описания процедуры

Синтаксис описания процедуры выглядит следующим образом: sub <название> (<входные параметры>)

' Код процедуры <Код>

end sub

Пример:

Напишем процедуру MyAdder, складывающую 2 числа:

Sub MyAdder (Value1, Value2) Result = Value1 + Value2

MsgBox Value1&" + "&Value2&" = "&Result End Sub

MyAdder 3,4

5.9.2.Синтаксис описания функции

Инструкция Function используется для описания имени, аргументов и исходного текста программы, составляющего тело функции.

Синтаксис описания функции выглядит следующим образом:

Function <название> (<входные параметры>) ' Код функции

<Код> end Function

Единственное отличие функции от процедуры заключается в том, что в конце кода функции нужно присвоить результат, который должна возвращать функция переменной, с тем же именем, что и функция, например:

Function MyAdder(Value1, Value2) MyAdder = Value1 + Value2

End Function

3-27

ЧАСТЬ 3. Макроязык “Nova PowerScript”

a = MyAdder(3,4)

MsgBox "Result = "&a

Пример создания функции:

Имеется массив чисел. Нужно посчитать среднее арифметическое данных массива.

' Описание функции MyAverage

Function MyAverage(Arr) Size = Ubound(Arr) Sum = 0

For i = 0 to Size

Sum = Sum + Arr(i)

Next

MyAverage = Sum/(Size+1) End Function

'Задание массива

Data = Array(1,2,3,4)

'Вычисление среднего арифметического массива Data 'c помощью функции MyAverage

Average = MyAverage(Data)

'Вывод результата на экран

MsgBox "Average = "&Average

*ВНИМАНИЕ! Если имя Вашей функции совпадает с именем функции макроязыка Nova PowerScript, то Ваша функция заменяет ее.

3-28

Глава 5. Элементы макроязыка

5.10. Подключение библиотек

При большом количестве пользовательских функций и процедур код скрипта становится сложно читаемым. В этом случае следует сохранить описание функций и процедур в отдельном файле (т.н. библиотеке) и указать в основном скрипте путь к этой библиотеке с помощью директивы Include:

include "<Путь_к_файлу_библиотеки>\My_Lib.txt" end include

#ПРИМЕЧАНИЕ. С библиотеками в программировании часто ассоциируются файлы *.lib и *.dll. В данном случае речь идет о текстовых файлах, содержащих описания функций и процедур.

Таким образом, функции и процедуры, описанные в “My_Lib.txt”, будут доступны для использования в основном скрипте.

3-29

ЧАСТЬ 3. Макроязык “Nova PowerScript”

5.11. Функции “VBScript”

Список встроенных в “VBScript”функций приведен в Табл. 5-4.

 

Табл. 5-4. Встроенные функции “VBScript”

 

 

 

Математические функции

 

 

 

Abs

Возвращает абсолютное значение

 

 

 

 

Atn

Арктангенс

 

 

 

 

Cos

Косинус

 

 

 

 

Exp

Экспонента

 

 

 

 

Fix

Возвращает целую часть числа

 

 

 

 

Hex

Возвращает шестнадцатеричное значение десятичного числа

 

 

 

 

Int

Возвращает целую часть числа

 

 

 

 

Log

Натуральный логарифм

 

 

 

 

Oct

Возвращает восьмеричное значение десятичного числа

 

 

 

 

Rnd

Возвращает случайное число в диапазоне 0..1

 

 

 

 

Sgn

Возвращает знак числа

 

 

 

 

Sin

Синус

 

 

 

 

Sqr

Квадратный корень

 

 

 

 

Tan

Тангенс

 

 

 

 

Round

Округляет число

 

 

 

 

Функции задания/

вывода

 

 

 

 

InputBox

Выводит диалоговое окно с полями ввода

 

 

 

 

MsgBox

Выводит окно с сообщением

 

 

 

 

Функции работы с переменными

 

 

 

 

IsEmpty

Проверяет, проинициализирована ли данная переменная

 

 

(Boolean)

 

 

 

 

IsNull

Проверяет, хранится ли в переменной значение (Boolean)

 

 

 

 

IsNumeric

Проверяет, является ли переменная числом (Boolean)

 

 

 

 

IsObject

Проверяет, является ли переменная объектом (Boolean)

 

 

 

 

VarType

Возвращает тип переменной

 

 

 

 

Функции работы с массивами

 

 

 

 

LBound

Возвращает наименьший индекс массива

 

 

 

 

UBound

Возвращает наибольший индекс массива

 

 

 

 

Функции преобразования

 

 

 

 

Chr

Возвращает символ, имеющий заданный код ASCII.

 

 

 

 

3-30

Глава 5. Элементы макроязыка

5.12. Функции “Nova PowerScript”

Для получения информации о параметрах, функциях и процедурах

Nova PowerScript используйте раздел справки Nova Automation Functions.

Далее приведено описание функций, управляющих параметрами.

5.12.1. Функция GetParam

Функция GetParam возвращает значение параметра контроллера. Синтаксис:

Value=GetParam(ParamName)

Описание: ParamName состоит из имени группы параметров (Smena, Resonance, Approach, Scan, Curves, Thermo150) и имени параметра, разделенных точкой. Описание групп параметров находится в разделе Group of parameters раздела

Nova Automation Functions.

Пример:

' Возвращает значение параметра “FastCount” из группы

“Scan”

MyVar = GetParam("Scan.FastCount")

' Отображает значение параметра в окне сообщения

MsgBox MyVar

5.12.2. Функция SetParam

Функция SetParam устанавливает значение параметра контроллера. Синтаксис:

SetParam ParamName,Value

Описание: ParamName состоит из имени группы параметров (Smena, Resonance,

Approach, Scan, Curves, Thermo150) и имени параметра, разделенных точкой.Value

– устанавливаемое значение параметра.

Пример:

' Присваивает значение "Kelvin Probe" параметру “SPMMode” из группы “Scan”

SetParam "Scan.SPMMode", "Kelvin Probe"

3-31

ЧАСТЬ 3. Макроязык “Nova PowerScript”

5.12.3. Функция HardParamsBackOff

Функция HardParamsBackOff присваивает параметрам первоначальные значения.

Синтаксис:

HardParamsBackOff

Пример:

SetParam "Smena.Hard_Laser_State", True

' Установка параметров “железа” перед нахождением резонанса

SetParam "Smena.Hard_FB_Input", 2

SetParam "Smena.Hard_Mod_Amp", 207

SetParam "Smena.Hard_Mod_Gain", 0

'Нахождение резонанса

FindResonance

'Присваивание параметрам первоначального значения

HardParamsBackOff

5.13. Пример скрипта

Ниже приведен пример работы с прибором.

В примере реализован следующий алгоритм работы с прибором (подготовка к сканированию):

1.Включить лазер.

2.Осуществить поиск резонанса.

3.Выбрать высоту резонансного пика около 10 nA. (Если амплитуда мала – увеличить коэффициент усиления синхродетектора. Если велика – уменьшить амплитуду генератора).

4.Включить обратную связь.

5.Произвести процедуру подвода.

6.Перейти в окно сканирования.

3-32

Глава 5. Элементы макроязыка

Текст скрипта.

ChangeOperationMode "Aiming"

' Переход в окно "Aiming"

SetParam "Smena.Hard_Laser_State", True

' Включение лазера

Sleep 1000

' Задержка 1 сек

ChangeOperationMode "Resonance"

' Переход в окно "Resonance"

SetParam "Smena.Hard_Mod_Output", 1

' Включение генератора на зонд

FindResonance

' Поиск резонансного пика

Sleep 1000

' Задержка

MagScale = 0.001526

' Калибровка для сигнала Mag

Mag = ADCGet(13)*MagScale

' Измерение сигнала Mag с (13 канал АЦП)

If Mag < 10 Then

' Если значение Mag < 10

Factor = 10/Mag

'Вычисление коэффициента для увеличения усиления синхродетектора

SDGain = GetParam( "Smena.Hard_SD_Gain")

' Получение текущее значение усиления синхродетектора

SDGain = SDGain * Factor

' Вычисление нового значения усиления

SetParam "Smena.Hard_SD_Gain", SDGain

' Задание нового усиления

FindResonance

' Повторный поиск резонансного пика

Sleep 500

' Задержка

Mag = ADCGet(13)*MagScale

' Повторное измерение значения сигнала Mag

End If

 

 

If Mag > 30 Then

' Если значение сигнала Mag > 30

Factor = 10/Mag

' Вычисление коэффициента для уменьшения амплитуды генератора

Amp = GetParam( "Smena.Hard_Mod_Amp" )

' Получение текущего значения амплитуды генератора

Amp = Amp * Factor

' Вычисление нового значения амплитуды генератора

SetParam "Smena.Hard_Mod_Amp", Amp

' Задание новой амплитуды генератора

FindResonance

' Повторный поиск резонансного пика

Sleep 500

' Задержка

Mag = ADCGet(13) * MagScale

' Повторное измерение значения сигнала Mag

End If

 

 

SetPoint = Mag * 0.7

' Вычисление значения SetPoint

SetParam "Smena.Hard_FB_SetPoint_Float ", SetPoint

' Задание значения SetPoint

SetParam "Smena.Hard_FB_State", "On"

' Включение обратной связи

Sleep 1000

' Задержка 1 сек

ChangeOperationMode "Approach"

' Переход в окно "Approach"

Sleep 1000

' Задержка 1 сек

ApprDoLand

' Запуск автоматической процедуры подвода

Sleep 1000

' Задержка 1 сек

ChangeOperationMode "Scan"

' Переход в окно "Scan"

MsgBox "SPM is ready for Scanning!"

' Вывод сообщения о готовности

В текст скрипта включены паузы (Sleep) для удобства самостоятельного изучения

3-33

ЧАСТЬ 3. Макроязык “Nova PowerScript”

6. Каталог скриптов

Встроенные скрипты, поставляемые в составе программы управления Nova, подразделяются на несколько классов, сформированных по функциональному принципу:

Стандартные. Предназначены для автоматизации рутинных задач (например, настройка фазы);

Служебные. Предназначены для автоматизации служебных задач (например, проверка работоспособности контроллера);

Шаблонные. Предназначены для использования в качестве примеров;

Измерительные. Предназначены для автоматизации измерений;

Специальные. Предназначены для автоматизации различных задач при нестандартной конфигурации прибора.

Далее приведено описание скриптов программы Nova.

Стандартные скрипты

При помощи скрипта Contact_SP_Correction_v1.TXT корректируется значение SetPoint в контактной методике согласно введённому пользователем значению постоянного смещения DFL.

При помощи скрипта Phase_Auto_Adjustment_1_5.TXT выставляется фаза генератора таким образом, чтобы значение сигнала Phase было равно 90º (положительный склон ФЧХ).

При помощи скрипта Res_Liq_Find.TXT производится поиск резонансного пика при работе в жидкости.

Служебные скрипты

При помощи скрипта ADCDACCalibration_1_7.TXT калибруется АЦП Z относительно ЦАП Z. Данный скрипт следует запускать либо при переустановке программного обеспечения либо при смене контроллера. Посредством скрипта обеспечивается корректная работа двухпроходных методик и спектроскопии от высоты.

При помощи скрипта P8_tst.TXT производится тест контроллера NTEGRA. Измерительные скрипты

При помощи скрипта Q_Factor_v_1_1.TXT строится резонансная кривая и высчитывается добротность пика.

При помощи скрипта DFL to Force.TXT осуществляется перевод единиц измерения сигнала DFL из относительных (nA) в nN.

При помощи скрипта Matrix Scan_1_2.TXT осуществляется разбиение площади сканируемого образца на меньшие площади с перекрытием и последующее сканирование меньших площадей (требуется при сканировании большой площади с высоким разрешением).

3-34