step |
state |
event |
action |
next |
<0 |
pressed = 0 top = 1 bottom = 0 |
0 |
||
0 |
btn_start = 1 pressed = 0 top = 1 bottom = 0 |
1 |
||
1 |
pressed = 0 top = 1 bottom = 0 |
btn_start = 0 |
clamp := 1 |
2 |
2 |
top = 1 bottom = 0 |
pressed = 1 |
rotate := 1 mv_down := 1 |
3 |
3 |
bottom = 0 pressed = 1 |
top = 0 |
liquid := switch_liquid (включение или невключение СОЖ в зависимости от положения переключателя режима) |
4 |
4 |
top = 0 pressed = 1 |
bottom = 1 |
mv_down := 0; начало паузы 1–2 сек |
5 |
5 |
bottom = 1 top = 0 pressed = 1 |
завершение паузы |
mv_up := 1 |
6 |
6 |
top = 0 pressed = 1 |
bottom = 0 |
liquid := 0 |
7 |
7 |
bottom = 0 pressed = 1 |
top = 1 |
mv_up := 0 clamp := 0 |
8 |
8 |
top = 1 bottom = 0 |
pressed = 0 |
обнуление qb0 (выключение всего) |
0 |
Для каждого шага в графе event указано изменение состояния, ожидаемое в результате действия, запущенного на предыдущем шаге. Состояние, указанное в state, уже достигнуто (на предыдущих шагах) и должно сохраняться. Например, условие pressed = 1 на шаге 3 указано в event, а на последующих шагах — в state. Это означает, что зажим тисков, ожидаемый на шаге 3, на последующих шагах будет постоянно проверяться — деталь должна быть зажата до конца обработки.
В табл. 4 приведены значения таймаутов. В первой колонке указано событие, запускающее отсчет времени, в следующей колонке — ожидаемое событие, а в последней — предельно допустимый промежуток времени (до наступления ожидаемого события).
Таблица 4. Значения таймаутов
start_event |
stop_event |
time_limit |
clamp := 1 (зажим тисков) |
pressed = 1 (тиски зажаты) |
3 сек |
clamp := 0 (разжим тисков) |
pressed = 0 (тиски разжаты) |
3 сек |
mv_down := 1 (вкл. движения Z+) |
mv_down := 0 (выкл. движения Z+) |
8 сек |
mv_up = 1 (вкл. движения Z–) |
mv_up = 0 (выкл. движения Z–) |
8 сек |
4. Структура программы
Программа реализована в виде нескольких функций без параметров, они вызываются последовательно (по возрастанию номеров) из OB1. Эти функции перечислены в табл. 5.
Таблица 5. Основные программные блоки
№ FC |
Имя |
Назначение |
Условие вызова из OB1 |
1 |
sequencer |
Реализует последовательное управление, описанное в табл. 3 в графах {step, event, action, next}. Замечание: Не контролирует ни state, ни таймаут |
|
2 |
state_ctrl |
Контроль достигнутого состояния (см. state в табл. 3) в зависимости от номера шага. Если текущее состояние не совпадает с указанным в state, вызывает функцию stop. |
^m2.2 |
3 |
time_ctrl |
Контролирует таймауты согласно табл. 4. Если ожидаемое событие не наступает за указанное время, вызывает функцию stop. |
^m2.3 |
4 |
stop |
Обнуляет выходные сигналы и делает номер шага отрицательным: step := – abs(step); вызывается также из функций state_ctrl и time_ctrl |
btn_stop |
5 |
panel |
Пультовый режим (движения по кнопкам). Замечание: вызов функции запрограммирован, но сама функция пока что пустая |
step <= 0 |
Вызовы контрольных функций state_ctrl и time_ctrl по умолчанию включены (поскольку после старта m2.2 = m2.3 = 0). Они могут быть отключены (за счет установки в 1 битов m2.2 и m2.3) при помощи Watch table или с панели оператора. Эта возможность упрощает наладку и тестирование.
Глобальные данные приведены в табл. 6. Нулевая начальная величина означает, что данные нужно либо поместить в несохраняемую (non-retain) память, либо явно обнулить в стартовом OB.
Таблица 6. Глобальные данные
Адрес |
Имя |
Назначение |
Начальное значение (при рестарте) |
mw0 |
step |
Номер шага циклограммы (см. табл. 1) |
0 |
m2.2 |
Единица блокирует вызов функции state_ctrl |
0 |
|
m2.3 |
Единица блокирует вызов функции time_ctrl |
0 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.