реализация кнопки с самофиксацией на языке релейно-контакных схем.
столкнулся с проблемой перенесения своих программных нарабодок в codesys на ПЛК Delta DVP со своей фирменной средой разработки, поддрерживающей лишь LD, IL и SFC. Суть проблемы в следующем: есть программная реализация, позволяющая использовать кнопку без самофикации как кнопку с самофиксацией (первое нажатие замыкает ее контакты, втрое размыкает). Ниже приведен текст на ST
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. Варианты есть, но слишком громоздкие.
Дык замечательный оператор return в LD есть, переводим в лоб:
Igor Petrov
интересно...просто еще не разобрался с операторами в среде разработки для ПЛК Delta DVP. Вот мой вариант в Кодесис:
to IP
Игорь, немного запутался :-) как работает ваша схема? Насколько я понял: нижняя строчка реализует бесконечный генератор импульсов с частотой , равной периоду выполнения пользовательской программы. по верхней строчке (когда пользователь нажимает на кнопку) подпрограмма прерывается и сигнал не генерится. я правильно вас понял?
Первоначально опубликовано kiselev
to IP Игорь, немного запутался :-) как работает ваша схема?...
Первая строчка: детектор фронта с инвертором. Он постоянно дает 1 если нет фронта = нет нажатия кнопки. При этом сразу происходит возврат. (Возврат - return в ф. блоке как и в любой другой подпрограмме равносилен переходу в конец.) Т.е. вторая строка выполняется только в случае если обнаружен импульс. Она просто переключает кнопку и текущего состояние в другое.
Ваш вариант красивее с точки зрения LD программиста – классика. Я же в лоб сохранил логику ST программы с пропуском выполнения части кода, когда делать ничего не надо: нет импульса = сразу уходим.
Igor Petrov
Игорь, а что на Ваш взгляд предпочительнее, если предполагается использовать данный фрагмент неоднократно в программе (т.е. создавать несколько экземляров данного Функционального блока), которая пишется на одном "листе" причем исключительно на LD (т.е. среда разработки не позволяет подобно Кодесис делать многоуровневые вкладки (Задачи->программы->функциональные блоки (стандартные и пользовательские)->функции)?
Первоначально опубликовано kiselev
Игорь, а что на Ваш взгляд предпочительнее...
Практически нет никакой разницы. Блок очень маленький. Создание экземпляра приводит только к выделению памяти данных под детектор фронта. Программный код все экземпляры используют общий. С return этот блок будет работать немного быстрее, поскольку не выполняются лишние инструкции, когда они не нужны. Обычно рабочий цикл ПЛК стабилизируется системой исполнения, поэтому реального смысла в такой оптимизации по быстродействию нет.
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме