Это не инструкция.
Можно я попробую на примере рассказать? Я когда-то сам тупил, учился, и мне было проще понять на своих примерах.
FB - это аналог какой-то штуки, которая целостна и внутри запоминает состояние переменных. Если брать физический мир - то это реле, таймер, выключатель. Таких штук мы можем поставить несколько - и каждая из них будет иметь своё отдельное состояние и настройки.
Например, одно "реле времени" будет настроено на 5 секунд, другое на 20 секунд, третье - выключено. Но все эти реле будут одного типа.
Вот это - FB. То есть FB - это некая хреновина, которая имеет одну и ту же логику, может сохранять своё состояние и что-то делать во время работы ПЛК, и их можно насоздавать (объявить разные переменные) сколько надо штук.
Функция - это аналог обычной функции в любом языке программирования. У неё нет никаких запоминания состояний, она ОДИН РАЗ что-то делает в момент вызова.
Например, может быть функция преобразования значения: ей на вход дали значение с датчика, а она вернула строку вида "0,23 bar" или "Err" в случае ошибки. Функция всегда выполняется на лету, как есть. Поэтому если мы объявим внутри неё FB - их значения не будут сохраняться между вызовами функции.
Где что применять - наверное ясно из описания, если у меня получилось помочь.
а) Функции - только там, где нужно разные однократные вычисления БЕЗ запоминания состояния: обработка числа, данных, строк, однотипные математические расчёты.
б) FB - во всех случаях, когда нужно запоминать состояния и что-то делать с ними: логика управления объектами (например FB управления насосом, и объявить его пять штук для пяти насосов).
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Обо всём по порядку.
1) Не совсем ясно где взята информация про ROM и RAM в сотнях Mb. Но вот к примеру для ПЛК (заказной 6AG1 215-1AG40-5XB0) читаем из спецификации "program/data memory 125 KB"
2) Крутизной никто не собирался меряться, не до того.
3) Благодарю всех, что напомнили разницу между ФБ и ФЦ, это как раз не вызывает трудностей.
4) Напомню истоки темы - смотрите первый пост.
Почему так сложно: потому что до сих пор не сталкивался с проблемой разницы между локальной и временной памятью (ещё и локальной и статической); потому что фб и фц можно было вызывать откуда угодно; потому что определение фронта можно выполнить из блока любого типа; и ещё много почему.
Благодарю всех за помощь и поддержку!
Последний раз редактировалось Frants; 11.03.2022 в 19:42.
В ПЛК200 и ПЛК210
https://owen.ru/product/plk200
https://owen.ru/product/plk210
Последний раз редактировалось kondor3000; 11.03.2022 в 17:17.
Frants На современных ПЛК110, СПК1хх, ПЛК2хх про память можно не думать. Лучше думать про быстродействие в плане скорости опроса, выполнения задач...
И просьба описать точнее вопросы, потому что про "А шо откудова вызывать" можно лекцию написать часа на два. Это явно не то.
В CodeSys действует стандартное правило для всех языков программирования - про локальные и глобальные переменные.
Что нужно пояснить?
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Прошу простить за некоторые вольности. Просто зубы режутся, вот и больно.
Присказки долго рассказывать, да придётся.
Вот, например, экран среды разработки
screen1.png
Слева ФЦ, справа ФБ. Глядя на интерфейс блоков, видно какие разделы описания переменных есть. Ни отнять ни добавить.
Видно так же, что механика вызова ФБ иная чем в Codesys.
Читая про Codesys, пока не нашёл полной спецификации на объявление ФЦ, ФБ, программы.
Поэтому и вопросы (детские).
Какие разделы описания переменных в каждом из типов блоков допустимы?
Вот выяснилось про ограничения вызова ФБ из ФЦ, прочитать бы подробнее, может ещё какие особенности есть.
Что мешает описать экземпляр в глобальных переменных и вызывать ФБ из ФЦ (а что, совсем-совсем нельзя так)?
Вот, например, VAR сохраняют свои значения между вызовами ФБ/программы.
Так VAR_STAT тоже сохраняют свои значения.
А у функций VAR являются временными. Тогда почему в одних типах блоков они сохраняют значения, а в других нет?
Области VAR_STAT и VAR_TEMP ясно говорят о своем назначении и поведении. Для чего тут VAR?
Читаешь справку, понять в чём разница, из того что там написано, я вывод сделать не смог.
Понятно, что программы здесь пишутся и работают, нужно просто накопить информации чтобы разобраться.
Было бы лучше, чтобы в первых шагах разобрали такие вот моменты, использование, особенности разных блоков.
А где читаешь? А то ж у ОВЕНа есть огромный PDF на сотни страниц с подробным описанием всего и вся: https://owen.ru/product/codesys_v3/documentationЧитая про Codesys, пока не нашёл полной спецификации на объявление ФЦ, ФБ, программы
А для всяких кунг-фу есть Онлайн-FAQ: https://owen.ru/forum/showthread.php?t=28167
Мы все рады, что ты рассказал как в Сименсе. Но ты щас на ОВЕНе, а тут по другому всё.Тогда почему в одних типах блоков они сохраняют значения, а в других нет?
Скажи пожалуйста: программировал ли ты на обычных, компьютерных языках?
В курсе ли ты о том, что такое область видимости переменных (ссылка на википедию)?
У тебя проблемы не с функциями и FB, а с областью видимости переменных - ты в ней запутался.
Последний раз редактировалось Cs-Cs; 11.03.2022 в 19:29.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net