Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 19 из 19

Тема: Инициализация вложенных ФБ

  1. #11
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Цитата Сообщение от SKV Посмотреть сообщение
    Вопрос про инициализацию закрыт.
    Вопрос о размещении экземпляров блока данных открыт.
    Соглашусь с Валенком, в Вашем случае разницы никакой.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  2. #12
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Я так понимаю не понятен вопрос?

    Могу пояснить его с другой стороны.
    Сейчас я представляю себе структуру программы на CoDeSys следующим образом.
    Создаются различные ФБ и функции - они содержат логику программы.
    Создаются экземпляры ФБ (где? - мы как раз и пытаемся решить) - они содержат данные системы (настройки, текущие состояния и пр.).
    ФБ и функции вызываются в программах. В простейшем случае - это одна программа PLC_PRG.
    Здесь важно, что кроме вызова функций и ФБ, программа, в идеальном случае, вообще не должна содержать логики.

    А где в этом случае лучше размещать экземпляры ФБ мне пока не ясно.

  3. #13
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Цитата Сообщение от SKV Посмотреть сообщение
    Я так понимаю не понятен вопрос?

    Могу пояснить его с другой стороны.
    Сейчас я представляю себе структуру программы на CoDeSys следующим образом.
    Создаются различные ФБ и функции - они содержат логику программы.
    Создаются экземпляры ФБ (где? - мы как раз и пытаемся решить) - они содержат данные системы (настройки, текущие состояния и пр.).
    ФБ и функции вызываются в программах. В простейшем случае - это одна программа PLC_PRG.
    Здесь важно, что кроме вызова функций и ФБ, программа, в идеальном случае, вообще не должна содержать логики.

    А где в этом случае лучше размещать экземпляры ФБ мне пока не ясно.
    Вопрос понятен.
    Если "в простейшем случае - это одна программа PLC_PRG" ни какой разницы нет.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #14
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,257

    По умолчанию

    Цитата Сообщение от SKV Посмотреть сообщение
    Я так понимаю не понятен вопрос?

    Могу пояснить его с другой стороны.
    Сейчас я представляю себе структуру программы на CoDeSys следующим образом.
    Создаются различные ФБ и функции - они содержат логику программы.
    Создаются экземпляры ФБ (где? - мы как раз и пытаемся решить) - они содержат данные системы (настройки, текущие состояния и пр.).
    ФБ и функции вызываются в программах. В простейшем случае - это одна программа PLC_PRG.
    Здесь важно, что кроме вызова функций и ФБ, программа, в идеальном случае, вообще не должна содержать логики.

    А где в этом случае лучше размещать экземпляры ФБ мне пока не ясно.
    а может перестать думать как сименсовод, в КДС как только объявил в ПОУ какой либо ФБ, система за Вас уже создаст экземпляр и хранить его в глобальных переменных нет смысла. Там Вы только храните свою структуру по семоновски это UDT, можете туда из любого куска кода читать/писать данные, только это всёравно не экземпляр ФБ
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #15
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    Не мучайте себя. Размещайте где хотите.
    кроме вызова функций и ФБ, программа, в идеальном случае, вообще не должна содержать логики.
    В смысле PLC_PRG ? Тогда лично я так и делаю. Она - только список вызовов процессов + привязки физических io. В этом случае делать экземпляры внутри PLC_PRG просто неудобно если в других POU используются поля этих ФБ :
    PLC_PRG.Station1.Pump2 ... как-то неуютно.

    Если в глобальных - то просто :
    Station1.Pump2..

    Но никто не запрещает пихнуть все станции в отдельный ФБ/ПРОГРАММ и обращатся
    Stations.Station1.Pump2..
    Очень даже ООП'эшно и самодокументируемо

    PS
    Инкапсуляция !!
    Последний раз редактировалось Валенок; 06.08.2015 в 14:49. Причина: слово вспомнил

  6. #16
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Я пытаюсь перестать думать как сименсовод, но внятных ответов не получаю.
    Peterа, предложенная мною структура организации всего кода применима и не "в простейшем случае".
    Важно, то что в программах, я просто вызываю функции и ФБ. Более там никакого кода не должно быть.
    В этом случае программа превращается просто в место вызова ФБ и функций. Так же как, например, в С вы должны вызвать все свои функции, методы и прочее в функции main().

    Так какая разница где я размещу экземпляры ФБ?

  7. #17
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Валенок, Ваш ответ прочел после своего сообщения.

  8. #18
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Вот наверное единственное отличие:
    Отличия мест объявления.jpg

    Переменные доступны либо в рамках данного ПОУ, либо во всех ПОУ.

  9. #19
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    Цитата Сообщение от SKV Посмотреть сообщение
    Вот наверное единственное отличие:
    Отличия мест объявления.jpg
    Ну переводила технический текст девочка из мхата. Читайте между строк:

    %СТРОКА% = где угодно и откуда угодно если они не перекрыты локальными переменными

    1.
    ФБ разместить можно где угодно :
    В PROGRAM, в другом ФБ, в функции, в области обмена, в динамической памяти, в строке, в области входов/выходов...

    2.
    При размещении ФБ в функции (ее переменные в КДС2 единственные с автоматически ограниченным сроком жизни) при её каждом вызове ФБ заново инициализируется задаными значениями.

    3.
    Экземпляры ФБ доступны для вызова %СТРОКА%.

    4.
    Экземпляры ФБ и их поля доступны для чтения %СТРОКА%.

    5.
    Экземпляры ФБ доступны для записи %СТРОКА% и во всей цепочке вложений являются var_input

    6.
    Поля экземпляров ФБ доступны для записи %СТРОКА% и во всей цепочке вложений являются var_input

    7.
    п.5 и п.6 не одно и тоже
    Последний раз редактировалось Валенок; 06.08.2015 в 16:31. Причина: По нашему. По бразильски

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Инициализация контроллера плк100
    от xГеоргийx в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 30.12.2011, 11:17
  2. тонкости вложенных шагов Sfc
    от Kiselev в разделе ПЛК1хх
    Ответов: 13
    Последнее сообщение: 25.12.2011, 12:39
  3. инициализация массива структур
    от drvlas в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 16.12.2010, 18:31
  4. инициализация программы
    от Old_Lucky в разделе ПЛК1хх
    Ответов: 18
    Последнее сообщение: 04.06.2010, 15:54
  5. Инициализация ПЛК
    от Gnom666 в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 11.03.2009, 05:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •