Предложение хорошее, добавили себе в бэклог
Вид для печати
Предложение хорошее, добавили себе в бэклог
Здравствуйте, вчера обновился до вер. 2.7.350.0.
В принципе, это неудобство было и ранее - ST-ФБ или ST-функция, расположенные на холсте, после редакции не просятся обновиться. Попытки сделать это через обновление всех встречающихся мест использования также результатов не дает. Поэтому приходится стирать на холсте и ставить его из панели справа. Соответственно, все входы/выходы по новой нужно накидывать. Не проверял однозначно, должен ли для этого быть подключен девайс. Во всяком случае, когда прибор не подключен, имею что имею. В остальном все вроде норм.
P.S. А так конечно хотелось, чтобы ST в OwenLogic был побогаче - не хватает много )), что может язык.
Х.З. У меня просят
Вложение 76347
На предыдущей странице ответ со скрином https://owen.ru/forum/showthread.php...39&page=52#514
Спасибо. Заработало. ))
Блин, уже миллион раз обсуждали, что если блок не участвует в алгоритме, то лоджик его игнорирует
Приветствую. Не понял можно ли в функциональном блоке указать переменную как константу? Если да ,то как правильно ее объявить?
А вот и небольшой косячок на ST: слово constant не является зарезервированным, но редактор почему-то его выделяет как служебное и, при этом, обрабатывает как переменную
Вложение 76571
Добрый день.
Допустим, в ФБ, написанном на ST, я объявляю и затем в тексте кода вызываю системный блок RTRIG. Понятно, что это детектор переднего фронта, который при высоком уровне на входе формирует на выходе импульс длительностью в один цикл.
Код в ST выполняется построчно. Вопрос: внутри моего ФБ какую длительность будет иметь этот импульс - до конца кода ФБ или до момента, когда выполнение снова дойдёт до этой строки с вызовом детектора, то есть сделает полный круг? Или другими словами, насколько важно, в каком месте кода вызывается этот детектор?
Спасибо вам!
Ну, если полный круг, то важность места размещения детектора внутри кода сильно падает. ))) Вот если бы импульс действовал только до конца текста...
Благодарю, очень помогли.
Спасибо, уже понял принцип работы. Мне нужно было именно уяснить принцип. Я имел в виду, что если бы импульс действовал только до конца текста, то на код, расположенный выше вызова, он бы не влиял. В этом случае место расположения имело бы большое значение. Ну а поскольку импульс работает полный круг, так тут и обсуждать уже нечего, по сути. Где ни размести, результат будет один. В моей программе, по крайней мере.
Я всегда думал что до окончания подпрограммы триггер работает... Может в лоджике и не так...
Надо проверить, поставить до и после условие сравнения и суммирование переменной и по ней определиться.
Функциональный блок работает только в момент его вызова. Все остальное время мы пользуемся результатом его работы.
Например
Здесь триггер взведется по фронту Е и останется таким навсегда (ну, или пока мы его где-нибудь в другом месте опять не вызовем)Код:var_input //объявление входных переменных
E : bool;
end_var
var_output //объявление выходных переменных
Q : bool;
end_var
var //объявление локальных переменных
RTrig : SYS.RTRIG;
end_var
RTrig.I := E;
if not RTrig.Q then RТrig(); end_if
Q := RTrig.Q;
Был грешен... Вы мне открыли глаза.
Проверил на codesys 3.5, выход триггера остаётся взведенным до его повторного вызова. Я всегда думал, что он работает до окончания цикла программы/подпрограммы. Т.е. по циклу программы он сбросится только когда снова в него упрется...
Или я знал это раньше, или не знал и забыл)
Надо это всё переосмыслить. Так знал я это или нет...
Камрады-новички (я без иронии). Я вот вас читаю и понимаю, что надо у себя на сайте, что ли, написать простую статью о том, чем Функциональнй Блок от Функции отличается... Прям этот вопрос заново возник у кучи народа на форуме.
А я и правда думал, что триггер возведён до конца цикла именно подпрограммы. Везде на диаграммах указан период работы - цикл. Но этот цикл не до окончания подпрограммы, а до того места, пока код в программе опять не увидит этот триггер.
Да, я туп оказался. Позор на мои седины.
Ну, если по серьёзному, без шуточек, то мнемонически можно запомнить, что во всей программе/задаче ПЛК цикл - это всё-всё целиком. Причём сначала считываются входы, обрабатывается программа, потом выдаются значения на выходы.
Наверное когда-нибудь я про это напишу всё же, так как сам тупил: думал что FB - автономны, и какой-нибудь таймер сам по себе будет считать, если его не вызывать в коде
Вообще, для понимания лучше всего написать, например, тот же RTRIG, с моего вопроса о котором этот разговор начался, самому. И тогда вопросов никаких не остаётся. Сразу видно, что он просто не может по другому отработать. Если бы я это сделал сразу, одним глупым вопросом здесь было бы меньше. ))
hawkey Да. Согласен. Только я душнила и долгострой. Идея классная, но напишу, наверное, через месяц, когда всем, кому интересно, будет нафиг не нужно =)
Добрый день.
Системная функция Get_Time возвращает значение переменной, содержащей время, прошедшее с момента включения прибора, в миллисекундах. Переменная четырёхбайтовая. Что происходит с её значением, если прибор находится во включённом состоянии более 50 дней? Обнуляется и начинает новый круг?
Смотря что мы сравниваем. Если продолжительность, т.е. разницу между конечным временем и начальным, то не нарушит (если продолжительность меньше 50 дней)
Вложение 76725
Камрады! Я тут ночку посидел, не спя, и написал пост про, который говорил: https://cs-cs.net/funkciya-fun-i-fun...esys-owenlogic
Это пост про Функции и Функциональные блоки. Описал я то, как они работают, как создавать, как вызывать. И некоторые приёмы для CodeSys (для OwenLogic не подойдут).
Если кому полезно - читайте на здоровье!