Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАММИРОВАНИЕ ПРОМЫШЛЕННЫХ КОНТРОЛЛЕРОВ В СИСТЕМЕ PROSYS.doc
Скачиваний:
107
Добавлен:
01.05.2014
Размер:
306.69 Кб
Скачать

6.2.4. Формирование фронта сигнала

В большинстве логических операций обрабатывается только изменение входного сигнала - фронта. Имеются несколько программных возможностей, чтобы реализовать такое формирование фронта. Все варианты имеют общую особенность: каждое распознавание фронта требует собственную 1-битную ячейку памяти для промежуточного хранения последнего состояния. Наиболее оптимальное решение для положительного фронта, т.е. изменения от 0 до 1, следующее:

LDAA N I 000

PRS F 010

EORA F 010

RST F 010

I 000... адрес контролируемого входа

F 010...адрес 1-битной памяти, не изменяемой в программе

После этих четырех программных строк в AA имеется 1, если входное значение изменяется от 0 до 1 (появляется положительный фронт). Иначе содержимое AA равно 0.

Следующий пример позволяет реализовать двухсекундную задержку включения от момента нажатия кнопки старта:

T00 002"00 инициализация временного интервала

программного таймера 0 в 2 с

LDAA N I 000 положительный фронт кнопки старта

PRS F 000 положительный фронт

EORA F 000 положительный фронт

RST F 000 положительный фронт ( да ... AA=1 )

PRS S D00 да установить флаг запуска таймера

LDAA I 001 действует аварийное выключение?

RST S D00 да очистить флаг запуска таймера

LDAA T D00 программное время вышло (T D00 =1)?

STAA O 0F0 да установить выход

END

Решение для отрицательного фронта, т.е. изменения от 1 до 0, реализуется следующим образом:

LDAA I 000

PRS F 010

EORA F 010

RST F 010

6.2.5. Последовательности шагов

Рис.6.1

Существует еще одна особенность программирования ПЛК. Часто бывает необходимо программировать зависящие от времени управляющие циклы. В этом случае используется так называемое программирование последовательности шагов. Части программы, которые обрабатываются в зависимости от переменной, называются шагами. В каждом шаге контролируется состояние переменной. Контроль выполнения называется последовательностью шагов, переменная называется номером шага (рис.6.1).

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

Переменная = 0 ... выполняется программная часть 0

Переменная = 1 ... выполняется программная часть 1

...

Переменная = 85 ... выполняется программная часть 85

В STL задатчик последовательности шагов реализуется следующим образом.

8-битная ячейка памяти содержит номер шага; если используется ячейка памяти, которая очищается при сбросе (R 0000 - R 0019), то последовательность шагов начинается с шага 0 после сброса. Однако если была использована одна из других

8-битных ячеек памяти, то последовательность шагов начнется после сброса с точки, в которой она была прервана. Отдельный шаг реализуется так, как изображено на блок-схеме, приведенной на рис.6.2.

Рис.6.2

Пример:

S1 ...

... любая часть программы

LDAA YYY условие выхода

BEQ R1 возврат, если условие выхода не выполняется

... подготовка к следующему шагу (выполняется один раз)

INC R XXX увеличение номера шага

R1 RTS

Необходимое ветвление к отдельным шагам, зависящее от номера, выполняется с помощью подпрограммы SSEQ (переключатель шагов):

SSEQ LDAB # 003 загрузить длину команды

MUL вычислить смещение

PULX загрузить из стека адрес возврата

PSHX восстановить стек

ABX установить индексный регистр

JMP X 003 перейти со смещением 3

Шаги могут быть вызваны из основной программы в качестве подпрограмм:

LDAA R 0001 номер шага

JSR SSEQ вызов переключателя шагов

JMP EXIT продолжение при EXIT

JMP S0 шаг 0

JMP S1 шаг 1

...

JMP Sn шаг n

...

EXIT NOP

Отдельные шаги обрабатываются как подпрограммы, т.е. они заканчиваются командой RTS. S0 выполняется, если регистр шагов равен 0; S1, - если он равен 1, и т.д. После выполнения соответствующего шага программа переходит на метку EXIT.