Здравствуйте! Подскажите пожалуйста: в чем отличие макросов от функциональных блоков в OwenLogik?
Вид для печати
Здравствуйте! Подскажите пожалуйста: в чем отличие макросов от функциональных блоков в OwenLogik?
В Лоджике есть справка, вызывается по F1
Макросы на языке FBD (схема квадратиками), а ФБ на языке ST (текстовый язык), примеры на ST ниже
https://owen.ru/forum/showthread.php...=9&p=429061#81
Вот библиотечный ФБ
Вложение 87633
Вот пользовательский ФБ на языке ST
Вложение 87634
Вот макрос
Вложение 87635
А, вот справка Лоджика
Вложение 87636
Prosto tak лучше посмотрите справку CodeSys - собственно разница между макросом и FB кратко можно описать так - для первого выделяется память для каждого блока, для второго нет, так как он выполняет только вычисления (пришли данные, обработал, выкинул результат, забыл про данные и так по кругу), первый же может сохранить промежуточные данные, так как ПО для него выделяет память, часто незаметно для вас.
kondor3000 TON по вашему что? уж точно не функция
Внутри макросов вы можете использовать энергонезависимые переменные - но вот тут ОЛ будет в заднице, потому что вы не сможете делать копии своих макросов.
А на ST вроде тут только функции, потому что иначе ОЛ с ними не умеет работать.
А человеку, я думаю, надо понять принцип, а не что и на чем в этом чуде ОЛ можно делать, думаю дальше он сам разберется.
kondor3000 перечитаю, когда что-то не будет получаться, не переживайте так. Лучше правильно донесите человеку разницу между тем и тем и нюансами в ОЛ. Потому что это во всех ПО подобного рода практически одинаково.
Cs-Cs ну так я о чем? под Функциональный Блок ПО "должно" выделять память для их переменных. Правда не в ОЛ, тут все чуточку шатко :) но в целом это и есть отличие блоков от функций. и вот эти принципы нужно донести человеку, с указанием нюансов ОЛ. Тогда он сможет разобраться с любым ПО.
хорошо быть дебилом, ни какой ответственности, про функцию ни кто не упоминал, но нужно "топить" за неё что она отличается от других элементов
Вот это функциональный блок
Вложение 87643
А это уже макрос
Вложение 87644
Добрый день.
Можно ли как-то получить значение оставшегося времени из Blink? Хоть в самом ОЛ, хоть в SYS.BLINK в ST, любой вариант подойдет. Панель ИПП120.
Только свой Blink нарисовать
.Код:function_block Blink
var_input
I : bool;
Tl, Th : udint;
end_var
var_output
Q : bool;
T : udint;
end_var
var
stamp : udint := 0;
end_var
T := time_to_udint(get_time()) - stamp;
if Not I Or T >= Tl + Th Then
stamp := time_to_udint(get_time()); T := 0;
end_if
Q := T >= Tl; T := Tl + Th - T;
end_function_block
Вложение 87653
Спасибо, использую!
melky Так он не про то спрашивал.
Мне это всё анекдот напоминает когда студент ответы на один билет выучил, про блох, а ему попался билет про рыб, вот он начинает: если бы у рыб была бы шерсть, у них завелись бы блохи и давай всё про блох толкать!
хороший анекдот :) у нас на проекте сейчас тоже анекдот, как в 9 МВт запихнуть 12 :), соответственно все мозги там....
Добрый день
В макросе используется таймер TOF. На холсте стоят несколько экземпляров этого макроса. Как в экземплярах макроса задать разные уставки таймера TOF, или это невозможно сделать.
Хм, вот это должно помочь
Вложение 87667
Только через входные переменные.
Вложение 87668
Тогда:
Вложение 87669
Здесь Вы ошибаетесь, можно в свойства макроса вынести уставки, только не забыть их подписать по разному, чтобы отличать:
Вложение 87670
Вложение 87671
У меня возникло впечатление неудобности такого способа - главный недостаток в настройке только на этапе программирования, а не исполнения. Пример - аналоговый ПИД из компонентов имеет параметр "период пересчёта", который невозможно изменить при настройке - только угадать при создании.
Т.е. это не сильно хорошая особенность макросов - на мой взгляд.
А для UserTOF уже не доступна Write to FB? Странно?
Получается, что это возможность просто не плодить константы.
Запись из переменных доступна через "Write to FB" только для системных ФБ.
Получается создание входной переменной - универсальный подход?
И если пользовательский макрос будет вложен в новый макрос, то такая способность теряется?
Кстати, уставки в свойства макроса можно и другим способом добавить, в смысле, через энергонезависимую переменную и блок записи в ФБ:
Вложение 87673
Вложение 87672
Т.е. локальная энергонезависимая переменная может быть объявлена как свойство пользовательского ФБ.
Однако "Write to FB" всё равно не работает?
Хотя, наверное, какой смысл рисовать отдельно "Write to FB", если всё равно значение переменной передаёшь в свой ФБ.
Пусть передаётся через входную переменную, чтобы не искать этот "Write to FB" по всему огороду (холсту).
Для больших и сложных макросов, где много именно констант на этапе проектирования - пойдет!
Сделал простенький проект. Пытаюсь проверить работу макроса в симуляторе. Щелкаю по переменной _1, а она не хочет переключаться в 1. Значения на входах и выходах макроса при запуске симуляции почему-то не отображаются. В чем причина ?
Компилятор выкинул неиспользуемый код
Я не смог найти ФБ "Макрос11"?
Вложение 87679
Специально для Вас я нашёл в справке объяснение, как задавать уставку.
В принципе, в Вашем макросе правильно реализовано.
Но тестовая программа не работает, т.к. компилятор выбросил код, который не воздействует на выходы/сетевые переменные/энергонезависимые переменные.
Решение - переменную _B связать с физическим выходом ПР.
Или _B сделать энергонезависимой.
И ещё, при записи через write to FB единицы измерения не секунды, а милисекунды.
Для секунд - внутри макроса перед write умножайте на 1000
Вот исправленный