Описание системы команд скриптов WndLpt
Список команд
Вывод по маске:
mask
111111111111
000000000000
xxxxxxxxxxxx
!!!!!!!!!!!!
111000xxx!!!
1010
Циклы:
try, for, while
repz, rep
do
loop |
Команды ветвления:
goto, jump, jmp
gosub, call
sub, psub, func
return, ret
jz, jnz
callz, callnz
Логические операции:
on
off
nop
and, &
or, +
xor, eor, inv, ~
clr, -
|
Логические операции:
lsl
lsr
asl
asr
rol
ror
ssl
ssr
nsl
nsr
not
inc
dec
mul
div
shift
|
Расшифровка обозначений аргументов
Команды принимают следующие параметры в
качестве данных:
- <маска>
- 1) Последовательность 0 - нулей и 1 - единиц,
например 111000111000, таким образом, маска
представляет собой двоичное число.
2) Альтернативный способ задания маски - указание
в скобках порядковых номеров битов, в которых
записана единица, например (1), (2,3,4) или (8,12,5,11), что равносильно записям 100000000000, 011100000000 и 000010010011,
соответственно. Нумерация битов начинается с 1,
что соответствует крайнему левому биту.
Внимание! Младший бит записывается слева,
старший - справа! Такая форма записи необычна, тем
не менее, она является наиболее удобной в данном
применении.
- [кол-во]
- Десятичное число от 2 до 100 указывает сколько раз
необходимо повторить заданную команду.
- [число]
- Десятичное число от 1 до 100, является аргументом
функции.
- <метка>
- Имя метки. Может состоять из букв, цифр, и знака
подчёркивания. В принципе, имя метки не должно
начинаться с цифры (согласно общепринятым
правилам именования меток, функций, переменных),
однако в данном случае, это допустимо. Имена
<меток> и имена <функций> могут совпадать.
Допускается использование одних и тех же имён,
как для меток, так и для функций.
- <функция>
- Имя функции. Может состоять из букв, цифр, и
знака подчёркивания. В принципе, имя функции не
должно начинаться с цифры (согласно общепринятым
правилам именования меток, функций, переменных),
однако в данном случае, это допустимо.
Допускается использование одних и тех же имён,
как для меток, так и для функций.
- [ миллисекунды [ секунды [ минуты [часы] ] ] ]
- Числа, задающие количество миллисекунд, секунд,
минут, часов. Данная запись означает, например,
что невозможно задать секунды, не задав
количество миллисекунд; минуты и часы при этом
задавать не обязательно. Примеры
соответствующих команд:
sleep 500 ; Пауза 500 мс
sleep 30 100 ; Пауза 100 с плюс 30 мс
sleep 0 0 20 1 ; Пауза 1 час, 20 минут
wait 0 0 10 8 ; Пауза до тех пор, пока
системное время не превысит 8 часов, 10 минут.
Вывод по маске
- mask 111000xxx!!!
- Установка дискретных выходов в соответствии со
схемой: 1 - логическая единица, 0 - логический ноль,
x - не менять состояние, ! - инвертировать
состояние. Данные обозначения имеют синонимы,
т.е. символы в следующих наборах эквивалентны:
«1o», «0.», «xX*». Таким образом, допустимая запись oooo....oo.. аналогична записи 111100001100 и, возможно, более
наглядна. Команду mask можно и желательно опускать.
- mask 1010
- Короткая форма записи. Если описано менее 12-ти
разрядов, считается, что остальные содержат
значение последнего разряда. Например, 1010 преобразуется в 101000000000, 01!x преобразуется в 01!xxxxxxxxx.
- 111111111111
- Установка дискретных выходов. В данном случае
на всех выходах установятся логические единицы.
Аналог команды on.
- 000000000000
- Сброс дискретных выходов. В данном случае на
всех выходах установятся логические нули. Аналог
команды off.
- xxxxxxxxxxxx
- Оставить состояние выходов прежним. Аналог
команды nop.
- !!!!!!!!!!!!
- Инвертировать состояние дискретных выходов.
Аналог команды not.
- 111000xxx!!!
- Сбросить/установить/не изменять/инвертировать
соответствующие выходы.
- 1010
- Короткая форма записи. Если описано менее 12-ти
разрядов, считается, что остальные содержат
значение последнего разряда. Например, 1010 преобразуется в 101000000000, 01!x преобразуется в 01!xxxxxxxxx
Изменение по маске
Некоторые команды имеют более короткие и
простые эквивалентные записи, перечисленные
здесь же.
- or [<маска> [кол-во]]
+ [<маска> [кол-во]]
- Установка указанных выходов в состояние
логической 1. Операция логического ИЛИ над
текущим состоянием и заданной маской.
Использование команды без параметров аналогично
команде on.
- clr [<маска> [кол-во]]
- [<маска> [кол-во]]
- Установка указанных выходов в состояние
логического 0. Операция логического И над текущим
состоянием и инверсией заданной маски.
Использование команды без параметров аналогично
команде off.
- inv [<маска> [кол-во]]
xor [<маска> [кол-во]]
eor [<маска> [кол-во]]
~ [<маска> [кол-во]]
- Инверсия указанных выходов. Операция
исключающего ИЛИ над текущим состоянием и
заданной маской. Использование команды без
параметров аналогично команде not.
- and [<маска> [кол-во]]
& [<маска> [кол-во]]
- Операция логического И над текущим состоянием и
заданной маски.
- nop [кол-во]
- Никаких действий не выполняется.
- lsl [кол-во]
- Логический сдвиг влево. http://ru.wikipedia.org/wiki/Битовый_сдвиг
- lsr [кол-во]
- Логический сдвиг вправо. http://ru.wikipedia.org/wiki/Битовый_сдвиг
- rlc [кол-во]
rol [кол-во]
- Циклический сдвиг влево. http://ru.wikipedia.org/wiki/Битовый_сдвиг
- rrc [кол-во]
ror [кол-во]
- Циклический сдвиг вправо. http://ru.wikipedia.org/wiki/Битовый_сдвиг
- asl [кол-во]
- Арифметический сдвиг влево. http://ru.wikipedia.org/wiki/Битовый_сдвиг
- asr [кол-во]
- Арифметический сдвиг вправо. http://ru.wikipedia.org/wiki/Битовый_сдвиг
- ssl [кол-во]
- Циклический сдвиг влево с приоритетом 1.
(Логическое ИЛИ текущего состояния с результатом
циклического сдвига влево)
- ssr [кол-во]
- Циклический сдвиг вправо с приоритетом 1.
(Логическое ИЛИ текущего состояния с результатом
циклического сдвига вправо)
- nsl [кол-во]
- Циклический сдвиг влево с приоритетом 0.
(Логическое И текущего состояния с результатом
циклического сдвига влево)
- nsr [кол-во]
- Циклический сдвиг вправо с приоритетом 0.
(Логическое И текущего состояния с результатом
циклического сдвига вправо)
- not [кол-во]
- Инверсия состояния всех выходов.
- on [кол-во]
- Инверсия состояния всех выходов.
- off [кол-во]
- Инверсия состояния всех выходов.
- inc [число]
- Прибавляет к значению, выводимому в порт,
заданное число.
- dec [число]
- Вычитает из значения, выводимого в порт,
заданное число.
- mul [число]
- Умножает значение, выводимое в порт на заданное
число.
- div [число]
- Делит значение, выводимое в порт на заданное
число.
- shift [ = | + | - ] [число] [количество]
- Циклический сдвиг всех битов. Работает аналогичео "cmd remap". Перед выводом в LPT порт все биты будут сдвигаются на заданное количество позиций:
shift =1 // Биты сдвигаются на 1 позицию вправо
shift =-3 // Биты сдвигаются на 3 позиции влево
shift +1 // Биты сдвигаются на 1 позицию вправо относительно предыдущей позиции
shift -2 // Биты сдвигаются на 2 позиции влево относительно предыдущей позиции
shift +1 6 // Команда повторяется 6 раз - получаем пошаговый сдвиг на 6 позиций
Циклы
- while <кол-во>
for <кол-во>
try <кол-во>
- Выполняет следующую команду заданное
количество раз. При необходимости выполнить не
одну, а несколько команд - последние заключаются
в скобки { }.
- rep <кол-во>
repz <кол-во>
- Выполняет следующую команду заданное
количество раз, при этом, пауза между выводами в
порт не выполняется. При необходимости выполнить
не одну, а несколько команд - последние
заключаются в скобки { }.
- {
- Открывающая скобка. Обязательно должна стоять в
отдельной строке.
- }
- Закрывающая скобка. Обязательно должна стоять в
отдельной строке.
- do <кол-во>
- Устаревшая команда, оставлена для
совместимости со старой версией программы.
Выполняет блок команд, заключённых между do и loop заданное кол-во раз. Может быть
использована со скобками { }, в этом
случае команду loop использовать не
следует.
- loop
- Устаревшая команда, оставлена для
совместимости со старой версией программы.
Используется совместно с командой do, в
случае, если та не использована со скобками.
Команды ветвления
- goto <метка>
- Выполняет переход на заданную метку. Если
указанная метка не обнаружена - выполняется
следующая команда.
- jump <метка>
jmp <метка>
- Выполняет переход на заданную метку. Если
указанная метка не обнаружена - выполнение
скрипта останавливается с ошибкой.
- label <метка>
:<метка>
<метка>:
- Объявляет метку для использования с командами
goto/jump/jmp.
- gosub <функция>
- Выполняет вызов указанной функции. Если
указанная функция не обнаружена - выполняется
следующая команда.
- call <функция>
- Выполняет вызов указанной функции. Если
указанная функция не обнаружена - выполнение
скрипта останавливается с ошибкой.
- psub <функция>
func <функция>
sub <функция>
- Объявляет начало функции/подпрограммы для
использования с командами gosub/call.
- return
ret
- Выполняет возврат из функции/подпрограммы.
- jz <метка>
- Выполняет переход на заданную метку в случае, если результат предыдущей команды сравнения РАВЕН нулю.
- jnz <метка>
- Выполняет переход на заданную метку в случае, если результат предыдущей команды сравнения НЕ равен нулю.
- callz <метка>
- Выполняет вызов указанной функции, если результат предыдущей команды сравнения РАВЕН нулю.
- callnz <метка>
- Выполняет вызов указанной функции, если результат предыдущей команды сравнения НЕ равен нулю.
Управление окружением
- cmd count [число]
- Установка количества используемых разрядов
(разрядность). Например, для управления шаговым
двигателем - 4, для светодиодной панели обычно 8
или 12. По-умолчанию параметр равен 12. Допустимая
разрядность от 1 до 30. При указании других чисел -
команда будет проигнорирована на этапе
компиляции. При использовании команды без
указании числа - будет установлено значение
по-умолчанию равное 12.
- cmd remap [число] [число] ... [число]
- Установка соответствия логических и физических
битов. Например:
remap 2 1 4 3 6 5 8 7 10 9 12 11
приведёт к тому, что число 101001011010 будет физически выводиться как 010110100101.
Иными словами, функция помогает исправить
ошибки, допущенные разводке пинов порта.
Количество чисел, указанных в команде должно
быть равно, либо превышать установку команды cmd
count, иначе реально выводимое количество
разрядов будет ограничиваться командой cmd
remap. При использовании команды без
параметров - будет установлено значение
по-умолчанию: cmd remap 1 2 3 4 5 6 7 8 9 10 11 12.
- cmd ms [число]
- Устаревшая команда. Не рекомендуется к использованию. Установка множителя скорости (в миллисекундах).
Допустимый диапазон значений: [10...500]. При
использовании значения выходящего за пределы
допустимого диапазона, команда игнорируется на
этапе компиляции. При использовании команды без
указания числа - значение принимается равным 10
(по-умолчанию). Число, указываемое в команде speed,
умножается на количество миллисекунд, заданных
командой cmd ms, полученное значение
определяет стандартное значение паузы между
выводами нового состояния в порт.
- cmd restart
- Перезапуск выполнения скрипта.
- cmd show
- Показать окно WndLpt. Автоматически выполняется по
команде stop, а также при ошибках, приводящих к
останову.
- cmd bkgnd
cmd hide
- Спрятать окно WndLpt.
- cmd set_lpt_port_addr_in_decimal_at_owners_risk [число]
- Установить произвольный адрес порта LPT. Адрес
указывается в десятичной системе. Указание числа
отличного от адреса реально существующего LPT
порта может привести к непредсказуемым
результатам: зависанию, краху системы, потере
данных. Правильность задания порта не
проверяется - используйте эту функцию на свой
страх и риск. :) Хотя, на самом деле, не всё так
страшно... При использовании команды без указания
числа - будет выполнено стандартное обнаружение
порта: поиск адреса в ключе в реестра, иначе
использование стандартного адреса 0x378 (888).
- cmd priority [число]
- Установка приоритета потока/нити (thread),
выполняющего вычисления и вывод в значений в
порт. Приоритет может принимать значения от 1 до 7
(1 - соответствует минимальному приоритету, 7 -
максимальному). При использовании иных значений
команда будет проигнорирована на этапе
компиляции. При использовании команды без
указания параметров - будет установлено значение
по-умолчанию, равное 7.
- cmd enable_music [1 | 0]
- Запуск визуализации музыки во время выполнения скрипта. 1 — включает светомузыку, 0 — выключает светомузыку.
- cmd music_preset [=] [ + | – ] <число>
- Смена светомузыкального эффекта. Используйте знак '=' для указания порядкового номера эффекта, иначе <число> будет воспринято как указание порядкового номера требуемого относительно текущего. На данный момент существует всего 4 эффекта с порядковыми номерами от 0 до 3. Указание номера 4 будет воспринято как 0, 5 — как 1, и т.д. Аналогично в отрицательные сторону: –1 — как 3, –2 — как 2.
cmd music_preset =1 ; Переключить на эффект №1
cmd music_preset =0 ; Переключить на эффект №0
cmd music_preset +1 ; Переключить на следующий эффект
cmd music_preset 1 ; Переключить на следующий эффект
cmd music_preset –1 ; Переключить на предыдущий эффект
- cmd switch_to_music
- Переход на вкладку «Music». Начиная с версии wndlpt-v0.2.4, выполнение скрипта при этом останавливается.
- cmd enable_clock [1 | 0]
- Включает/выключает часы с часовой и минутной стрелкой. Актуально только при использовании круглой панели на 12 светодиодов.
- cmd clock_timings [мс [мс [мс [мс [мс] ] ] ] ]
- Настраивает длительность полупериода миганий минутной стрелки. Первое число - для первой минуты, второе для второй и т.д. ... до пятой минуты.
Команды сравнения
- test < i | q | pin > <num>
- Тестирует указанный вход, выход или пин LPT порта. В порту имеется 12 выходов, 5 входов и всего 25 пинов (см. вкладку Pins). Команда используется совместно с командами ветвления jz, jnz, callz, callnz.
Паузы
- sleeps [ миллисекунды [ секунды [ минуты
[часы] ] ] ]
- Указание времени, которое следует выдерживать
между выводом в порт результата работы команд
(речь идёт о командах, выводящих данные в порт).
Команда sleeps отменяет действие паузы,
установленной с помощью speed/cmd ms/sleep/wait.
Команда skip, указанная по соседству со sleeps отменяет действие последней.
- sleep [ миллисекунды [ секунды [ минуты
[часы] ] ] ]
- Указание времени, которое следует выдержать
между выводом в порт результата работы
предыдущей и последующей команды (речь идёт о
командах, выводящих данные в порт). Команда sleep отменяет действие паузы, установленной с помощью speeds/cmd ms/wait. Команда skip,
указанная по соседству со sleep отменяет
действие последней.
- wait [ миллисекунды [ секунды [ минуты
[часы] ] ] ]
- Указание времени (по системным часам), которого
следует дождаться перед выполнением следующего
вывода значения в порт. Команда skip,
указанная по соседству с wait отменяет
действие последней.
- skip
- Однократно отменяет действие любых пауз (speed/sleep/sleeps/wait)
между предыдущей и последующей командой,
совершающими вывод в порт.
- delay [ миллисекунды [ секунды [ минуты
[часы] ] ] ]
- Приостанавливает выполнение скрипта на указанный период времени, дополнительно отменяет действие любых пауз (speed/sleep/sleeps/wait)
между предыдущей и последующей командой,
совершающими вывод в порт.
- speed [число]
- Устаревшая команда. Не рекомендуется к использованию. Установить скорость выполнения (паузу между
выводами состояний в порт). Допустимый диапазон
значений: [1...500]. При использовании других
значений команда игнорируется на этапе
компиляции. При использовании без числа -
устанавливается значение по-умолчанию, равное 10.
Число, указываемое в команде speed умножается на
количество миллисекунд, заданных командой cmd
ms (по-умолчанию 50), полученное значение
определяет стандартное значение паузы между
выводами нового состояния в порт. Команда speed отменяет действие паузы, установленной с помощью sleep/sleeps/wait. Команда skip однократно отменяет паузу заданную командой speed.
Команды speed и sleeps, по сути,
эквивалентны. Отличие лишь в том, что первая [speed]
устанавливает паузу в относительных единицах, а
вторая [sleeps] - в абсолютных (в
миллисекундах). |