Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНТРОЛЛЕР по руски .docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
255.63 Кб
Скачать

6. Маэстро языка сценариев

Скрипт представляет собой последовательность команд, которая выполняется на Маэстро. Команды можно установить серво цели, скорости и ускорения, получить входные значения, а также выполнять математические вычисления. Основные управляющие структуры - циклы и условные - доступны для использования в принятии сложные скрипты. Язык скриптов Maestro является простой стек-ориентированный язык очень похож на слово, и скрипты компилировать в компактном байт-код, в котором команды и вызовов подпрограмм друг взять только один байт. Простой редактор / отладчик доступен на вкладке Script приложения Maestro Control Center.

6.A. Маэстро скрипта Основы языка

Команды и стек

Программа на языке сценариев Маэстро состоит из последовательности команд , которые действуют на стек значений. Значения в стеке являются целыми числами от -32768 до +32767. На микро-Maestro 6-канального сервоконтроллера, есть место для до 32 значений в стеке, в то время как на сервопреобразователей Мини Maestro есть зал вместимостью до 126 значений в стеке.Команды всегда действовать на самых верхних значений в стеке и оставить свои результаты на вершине стека. Простейшим видом команд литералы , числовые значения, которые размещаются непосредственно в стек. Например, программа "-10 20 35 0" выводит значения -10, 20, 35 и 0 последовательно в стек, так что это выглядит так:

 

значение

3

0

2

35

1

20

0

-10

Более сложный команда является командой PLUS, который добавляет два верхних номера, оставив результат на вершине стека.Пусть числа 1, 2, 4 и 7 последовательно помещается в стек, а команда PLUS выполняется. В следующей таблице показан результат:

 

до

после

3

7

 

2

4

11

1

2

2

0

1

1

Обратите внимание, что команда ПЛЮС всегда уменьшает размер стека на единицу. Это до вас, чтобы убедиться, что у вас достаточно значения в стеке для завершения команды, которые вы хотите запустить!

Рассмотрим более сложный пример: предположим, мы хотим вычислить значение (1 - 3) × 4, с использованием МИНУС и команды размножаться. Способ написать это вычисление как сценарий является "1 3 МИНУС 4 РАЗА".

Комментарии, случай, пробелы, а также переводы строк

Все части скриптового языка Маэстро не чувствительны к регистру, и вы можете использовать любой вид пробелов (пробелы, табуляции и новой строки) для разделения команд. Комментарии обозначаются знаком фунта "#" - все от # до конца линии будут игнорироваться компилятором. Например, указанное вычисление можно записать в виде:

?

1 2 3

1 3  минус 4  # это комментарий!   раз

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

Управляющие структуры

Язык скриптов Maestro имеет несколько управляющих структур, которые позволяют произвольно сложные программы для записи. В отличие от подпрограмм, нет никаких ограничений на уровне вложенности управляющих структур, поскольку все они в конечном счете на основе команд GOTO (см. ниже) и простой ветвление. До сих пор наиболее полезно структура управления НАЧАТЬ ... ПОВТОР бесконечный цикл, пример которого приведен ниже:

?

1 2 3 4 5 6 7

# Переход серво 1 и обратно с периодом 1 секунду начать   8000 1 сервопривода   500 задержки   4000 1 сервопривода   500 задержки повтора

Это бесконечный цикл будет продолжаться вечно. Если вы хотите петлю, ограниченная в некотором роде, ключевое слово ПОКА, вероятно, будет полезно. ПОКА потребляет верхнюю число в стеке и переходит к концу цикла, если и только если оно является нулевым. Например, предположим, что мы хотим повторить этот цикл ровно 10 раз:

?

1 2 3 4 5 6 7 8 9 10

10 # начать с 10 в стеке начать   DUP      # скопировать номер в стеке - копия будет потребляться WHILE   а    # перейти в конец, если количество достигает 0   8000 1 сервопривода   500 задержки   4000 1 сервопривода   500 задержки   1 минус # вычесть 1 из числа раз оставшийся повторного

Обратите внимание, что начинать ... ПОКА ... REPEAT петли похожи на то время петель многих других языках. Но, как и все остальное в скриптового языка Maestro, В ТО ВРЕМЯ КАК приходит после аргумента.

Для условных действий, ЕСЛИ ... ELSE ... ENDIF структура полезна. Предположим, что мы строим систему с датчиком на канале 3, и мы хотим, чтобы установить сервопривод 5 до 6000 (1,5 мс), если входное значение меньше 512 (около 2,5 В). В противном случае, мы установим сервопривод до 7000 (1,75 мс). Следующий код выполняет эту относительно сложную задачу:

?

1 2 3 4 5 6 7

3 get_position   # получить значение входа 3 в виде числа от 0 до 1023 512 less_than    # теста является ли это менее 512 -> 1, если оно истинно, 0, если ложно , если   6000 5 серво    # эта часть выполняется при INPUT3 <512 еще   7000 5 серво    # эта часть выполняется при вход3> = 512 ENDIF

Как и в большинстве языков, в разделе ELSE не является обязательным. Отметим еще раз, что это кажется на первый взгляд назад относительно других языках, так как ЕСЛИ приходит после теста.

В ТО ВРЕМЯ КАК и ЕСЛИ структуры достаточно, чтобы создать практически любой вид скрипта. Тем не менее, бывают случаи, когда это просто не удобно думать о том, что вы пытаетесь сделать с точки зрения цикла или филиала. Если вы просто хотите, чтобы перейти непосредственно из одной части кода на другой, вы можете использовать GOTO. Вот как это работает:

?

1 2 3 4 5

перейти MyLabel  # ... любой код здесь пропускается ... 4000 1 сервопривода MyLabel: # программа продолжается здесь 4000 2 серво

В этом примере, только серво 2 будет получить набор до 4000, в то время как серво 1 не изменится.

Подпрограммы

Это может быть полезно использовать ту же последовательность команд много раз на протяжении всей программы.Подпрограммы используются, чтобы сделать это проще и пространственно-эффективный. Например, предположим, что вы часто нужно установить сервопривод 1 и сервопривод 2 обратно в свои нейтральных позициях 6000 (1,5 мс), используя последовательность "6000 1 сервопривода 6000 2 серво". Можно инкапсулировать это в подпрограмме следующим образом:

?

1 2 3 4

суб нейтральной   6000 1 сервопривода   6000 2 серво   возврат

Тогда, когда вы хотите отправить эти два сервоприводы к нейтральной, а вы можете просто использовать «нейтраль» как команду.Более продвинутые подпрограммы принимать значения из стека. Например, подпрограмма

?

1 2 3

суб set_servos   2 серво 1 серво   возврат

установит канал 2 на значение на вершине стека и канал 1 к следующему значению. Так что, если вы пишете "4000 6000 set_servos", ваш сценарий будет установлен канал 1 к 4000 и канал 2 до 6000.

Подпрограммы может вызывать другие подпрограммы, до предела 10 уровней рекурсии. Например, подпрограмма "нейтрального" выше, могут быть реализованы с помощью вызова set_servos:

?

1 2 3

суб нейтральной   6000 6000 set_servos   возврат