реализация кнопки с самофиксацией на языке релейно-контакных схем. |
Ответить |
Автор | |
Новичок Присоединился: 02 Апрель 2007 Категория: Russian Federation Online Status: Offline Публикации: 6 |
Опубликовано: 22 Январь 2008 13:14 |
столкнулся с проблемой перенесения своих программных нарабодок в codesys на ПЛК Delta DVP со своей фирменной средой разработки, поддрерживающей лишь LD, IL и SFC. Суть проблемы в следующем: есть программная реализация, позволяющая использовать кнопку без самофикации как кнопку с самофиксацией (первое нажатие замыкает ее контакты, втрое размыкает). Ниже приведен текст на ST
FUNCTION_BLOCK self_fix_button VAR_INPUT bX: BOOL; (*входной импульсный сигнал *) END_VAR VAR_OUTPUT bQ: BOOL; (*выходной фиксированный сигнал. Сбрасывается по повторному входному сигналу*) END_VAR VAR Rise_in: R_TRIG; END_VAR _ _ _ _ _ _ _ _ Rise_in(CLK:=bX); (*передний фронт входного сигнала *) IF Rise_in.Q THEN IF NOT bQ THEN bQ:=TRUE; ELSE bQ :=FALSE; END_IF END_IF Вопрос: как реализовать нечто подобное на LD? т.к. там не возможнотси использовать конструкции типа IF_THEN_ELSE. Варианты есть, но слишком громоздкие. |
|
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
|
Дык замечательный оператор return в LD есть, переводим в лоб: |
|
Igor Petrov
|
|
Новичок Присоединился: 02 Апрель 2007 Категория: Russian Federation Online Status: Offline Публикации: 6 |
|
интересно...просто еще не разобрался с операторами в среде разработки для ПЛК Delta DVP. Вот мой вариант в Кодесис:
|
|
Новичок Присоединился: 02 Апрель 2007 Категория: Russian Federation Online Status: Offline Публикации: 6 |
|
to IP
Игорь, немного запутался :-) как работает ваша схема? Насколько я понял: нижняя строчка реализует бесконечный генератор импульсов с частотой , равной периоду выполнения пользовательской программы. по верхней строчке (когда пользователь нажимает на кнопку) подпрограмма прерывается и сигнал не генерится. я правильно вас понял? |
|
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
|
Первая строчка: детектор фронта с инвертором. Он постоянно дает 1 если нет фронта = нет нажатия кнопки. При этом сразу происходит возврат. (Возврат - return в ф. блоке как и в любой другой подпрограмме равносилен переходу в конец.) Ваш вариант красивее с точки зрения LD программиста – классика. Я же в лоб сохранил логику ST программы с пропуском выполнения части кода, когда делать ничего не надо: нет импульса = сразу уходим. |
|
Igor Petrov
|
|
Новичок Присоединился: 02 Апрель 2007 Категория: Russian Federation Online Status: Offline Публикации: 6 |
|
Игорь, а что на Ваш взгляд предпочительнее, если предполагается использовать данный фрагмент неоднократно в программе (т.е. создавать несколько экземляров данного Функционального блока), которая пишется на одном "листе" причем исключительно на LD (т.е. среда разработки не позволяет подобно Кодесис делать многоуровневые вкладки (Задачи->программы->функциональные блоки (стандартные и пользовательские)->функции)?
|
|
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
|
Практически нет никакой разницы. Блок очень маленький. Создание экземпляра приводит только к выделению памяти данных под детектор фронта. Программный код все экземпляры используют общий. С return этот блок будет работать немного быстрее, поскольку не выполняются лишние инструкции, когда они не нужны. Обычно рабочий цикл ПЛК стабилизируется системой исполнения, поэтому реального смысла в такой оптимизации по быстродействию нет. |
|
Igor Petrov
|
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |