Описание системы команд скриптов 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

Управление средой:
cmd count
cmd remap
cmd ms
cmd restart
cmd show
cmd hide
cmd bkgnd
cmd set_lpt_port_addr_in_decimal_at_owners_risk

cmd priority

cmd switch_to_music

cmd enable_music

cmd music_preset

cmd enable_clock

cmd clock_timings

Сравнение:
test

 

Паузы:
sleep
sleeps
wait
delay
speed

 

Изменение по маске:

+, -, ~

Расшифровка обозначений аргументов

Команды принимают следующие параметры в качестве данных:

<маска>
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] - в абсолютных (в миллисекундах).

Ссылки

English version

http://www.codeplex.com/wndlpt

https://sourceforge.net/projects/wndlpt/

Подключение 12 светодиодов к LPT порту



// GUID: {987A951E-427B-4e41-8CA2-8436C754F921}