Просмотр полной версии : Проблема вызова функционального блока в теле условия из другого функц. блока
qwertyn123456
06.11.2023, 16:23
Привет, не вызывается адекватно функциональный блок 1 (ST) в теле условия (условие соблюдается) из другого функционального блока 2, при этом, если функциональный блок 1 находится не в теле условия функционального блока 2, то всё хорошо. Owen logic Версия 2.5.337.0, ПР205.
вызываемый блок:
function_block funct
var_input //объявление входных переменных
in:bool;
end_var
var_output //объявление выходных переменных
out : bool;
end_var
var //объявление локальных переменных
ab:bool;
end_var
ab:=in;
out:=ab;
end_function_block
Нерабочий вариант:
if DI1 then
qwe(in:=true, out=>DO5);
end_if;
При этом слышно кратковременный слабый дребезг релюхи внутри. Само программируемое реле полностью исправно.
Это так и должно быть, или я чего то не понимаю?
DO5 - это что? Выходная переменная ФБ2, связанная с выходным реле?
Приведите хоть полностью код из ФБ2.
Может проблема не в самом вызове ФБ1, а в том, что ещё написано в ФБ2.
Так должно быть.
Ты забыл о том, что функциональный блок - это тоже программа, и она должна ВСЕГДА выполняться.
Например, вызов какого-нибудь таймера типа IF (lalala) THEN ton1(IN := true) не приведёт к тому, что таймер потом будет считать. Чтобы таймер считал - надо чтобы он всегда вызывался.
Поэтому это условие тебе надо внести в твой FB и обрабатывать там.
qwertyn123456
07.11.2023, 02:42
DO5 - это что? Выходная переменная ФБ2, связанная с выходным реле?
Приведите хоть полностью код из ФБ2.
Может проблема не в самом вызове ФБ1, а в том, что ещё написано в ФБ2.
DI вход, DO выход программируемого реле с соответствующими номерами. В независимости от предыдущего кода результат один и тот же, пробовал вообще на пустом проекте.
qwertyn123456
07.11.2023, 02:43
Так должно быть.
Ты забыл о том, что функциональный блок - это тоже программа, и она должна ВСЕГДА выполняться.
Например, вызов какого-нибудь таймера типа IF (lalala) THEN ton1(IN := true) не приведёт к тому, что таймер потом будет считать. Чтобы таймер считал - надо чтобы он всегда вызывался.
Поэтому это условие тебе надо внести в твой FB и обрабатывать там.
А почему в вашем примере таймер не будет вызываться при трушном lalala? Условный переход ведь выполняется.
А почему в вашем примере таймер не будет вызываться при трушном lalala? Условный переход ведь выполняется.
Пока условие TRUE - будет вызываться. А как только условие станет FALSE - всё. Таймер зависнет в том состоянии, в котором был последний вызов. И, пока его не вызовешь, он ничего не досчитает никогда.
qwertyn123456
07.11.2023, 13:06
Пока условие TRUE - будет вызываться. А как только условие станет FALSE - всё. Таймер зависнет в том состоянии, в котором был последний вызов. И, пока его не вызовешь, он ничего не досчитает никогда.
Согласен, но в моём случае ничего не происходит, на DI1 всегда подаётся 24В перемычкой с питания, а не "импульсно".
Это уже не важно: сам концепт вызова FB неверный. Если учиться - то правильно, а не криво.
qwertyn123456
07.11.2023, 14:13
Это уже не важно: сам концепт вызова FB неверный. Если учиться - то правильно, а не криво.
Как не важно - то, вы же сами писали, что должно вызываться и "тело условия" должно выполняться пока условие трушно, у меня не вызывается или вызывается но криво (отладчика для st в этой среде нет).
Как не важно - то, вы же сами писали, что должно вызываться и "тело условия" должно выполняться пока условие трушно, у меня не вызывается или вызывается но криво (отладчика для st в этой среде нет).
Что значит криво? Чего вы ожидали и что получилось?
kondor3000
07.11.2023, 15:27
вызывается но криво (отладчика для st в этой среде нет).
Если хотите отладить код, поставьте Codesys 2.3, есть небольшие отличия от Лоджика, но не принципиальные. Для наглядности тут пример в Лоджике и в среде Codesys 2.3.
Там есть и вызовы таймеров, триггеров, работа с массивами и циклами.
https://owen.ru/forum/showthread.php?t=38453&page=10#93
qwertyn123456
07.11.2023, 16:44
Что значит криво? Чего вы ожидали и что получилось?
Криво значит не так как должно быть. Я ожидал выполнение ФБ.
qwertyn123456
07.11.2023, 16:47
Если хотите отладить код, поставьте Codesys 2.3, есть небольшие отличия от Лоджика, но не принципиальные. Для наглядности тут пример в Лоджике и в среде Codesys 2.3.
Там есть и вызовы таймеров, триггеров, работа с массивами и циклами.
https://owen.ru/forum/showthread.php?t=38453&page=10#93
Я правильно понимаю, что Owen Logic криво работает с ST, и там лучше использовать графический режим?
Я правильно понимаю, что Owen Logic криво работает с ST, и там лучше использовать графический режим?
Скажем так, есть нюансы :D
Криво значит не так как должно быть. Я ожидал выполнение ФБ.
Когда DI есть, он выполняется, когда DI нет - не выполняется. Всё делается как и написано
qwertyn123456
07.11.2023, 17:24
Когда DI есть, он выполняется, когда DI нет - не выполняется. Всё делается как и написано
Вы у себя на реальной железке проверяли, если да, то можно узнать версию OL и прошивки ПРки?
qwertyn123456
07.11.2023, 17:34
Скажем так, есть нюансы :D
Нюансы документированы?
Вы у себя на реальной железке проверяли, если да, то можно узнать версию OL и прошивки ПРки?
Нет, на реальной не проверял, тем более примера проекта с кривой работой не было
Нюансы документированы?
Некоторые (https://owen.ru/uploads/392/release_notes_owen_logic_2.5.pdf)
Всё-же нужно учитывать, что OL довольно новая система, а ST в ней вообще недавно появился
kondor3000
07.11.2023, 18:04
Я правильно понимаю, что Owen Logic криво работает с ST, и там лучше использовать графический режим?
ФБ на ST только недавно появились, требовать сейчас идеала рано, ST в процессе разработки. Но у меня все вопросы были решены на ST и всё работает и не только у меня. Много тем, где люди просто счастливы)))
Лично мне нравится работать на ST, а как писать программу решать вам.
Я так понял что тут заседание медиумов. Обсуждение проблемы которую видел 1 человек у себя.
А можно я тоже с проблемой ? Вот тоже кусочек кода :
x := 7;
А выход ПР - щелкает !!! А ведь всё правильно, в x - семь. А выход все равно щелкает.
То есть неважно что подается на выход, главное x=7 и выход не должен щелкать? ;)
То есть неважно что подается на выход, главное x=7 и выход не должен щелкать? ;)
Ну да. То же самое и в п#1. Или Вы тоже медиум? По невнятным строчкам сразу весь проект видите? Тогда объясните - почему щёлкает?
qwertyn123456
08.11.2023, 00:34
Ну да. То же самое и в п#1. Или Вы тоже медиум? По невнятным строчкам сразу весь проект видите? Тогда объясните - почему щёлкает?
Я же писал, что на пустом проекте тоже самое, тело условия не выполняется, к этому я пришёл упрощая проблемное место в силу отсутствия отладчика в ол. Вы лучше скажите, условие должно выполняться или будутт проблемы.
qwertyn123456
08.11.2023, 00:42
Когда DI есть, он выполняется, когда DI нет - не выполняется. Всё делается как и написано
Вы использовали в своих проектах вызов фб из тела условия и у вас всё работало?
Я же писал, что на пустом проекте тоже самое, тело условия не выполняется, к этому я пришёл упрощая проблемное место в силу отсутствия отладчика в ол. Вы лучше скажите, условие должно выполняться или будутт проблемы.
Счетчики воткните во все места (даже в невызываемый фб) и выведите их все на посмотреть (поля фб доступны всегда)
Вы исключили траблы с физикой или на перемычку свою надеетесь?
Вы использовали в своих проектах вызов фб из тела условия и у вас всё работало?
Можно я заместо? Я использовал вызов фб внутрях if и все работает (а не работало) ожидаемо.
Ну так что там с проблемой вызова ФБ по условию ?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot