Инструкция по программе Nova
.pdf
Глава 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
Глава 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
Глава 5. Элементы макроязыка
5.10. Подключение библиотек
При большом количестве пользовательских функций и процедур код скрипта становится сложно читаемым. В этом случае следует сохранить описание функций и процедур в отдельном файле (т.н. библиотеке) и указать в основном скрипте путь к этой библиотеке с помощью директивы Include:
include "<Путь_к_файлу_библиотеки>\My_Lib.txt" end include
#ПРИМЕЧАНИЕ. С библиотеками в программировании часто ассоциируются файлы *.lib и *.dll. В данном случае речь идет о текстовых файлах, содержащих описания функций и процедур.
Таким образом, функции и процедуры, описанные в “My_Lib.txt”, будут доступны для использования в основном скрипте.
3-29
Глава 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
Глава 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
