Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Я так понимаю не понятен вопрос?
Могу пояснить его с другой стороны.
Сейчас я представляю себе структуру программы на CoDeSys следующим образом.
Создаются различные ФБ и функции - они содержат логику программы.
Создаются экземпляры ФБ (где? - мы как раз и пытаемся решить) - они содержат данные системы (настройки, текущие состояния и пр.).
ФБ и функции вызываются в программах. В простейшем случае - это одна программа PLC_PRG.
Здесь важно, что кроме вызова функций и ФБ, программа, в идеальном случае, вообще не должна содержать логики.
А где в этом случае лучше размещать экземпляры ФБ мне пока не ясно.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
а может перестать думать как сименсовод, в КДС как только объявил в ПОУ какой либо ФБ, система за Вас уже создаст экземпляр и хранить его в глобальных переменных нет смысла. Там Вы только храните свою структуру по семоновски это UDT, можете туда из любого куска кода читать/писать данные, только это всёравно не экземпляр ФБ
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Не мучайте себя. Размещайте где хотите.
В смысле PLC_PRG ? Тогда лично я так и делаю. Она - только список вызовов процессов + привязки физических io. В этом случае делать экземпляры внутри PLC_PRG просто неудобно если в других POU используются поля этих ФБ :кроме вызова функций и ФБ, программа, в идеальном случае, вообще не должна содержать логики.
PLC_PRG.Station1.Pump2 ... как-то неуютно.
Если в глобальных - то просто :
Station1.Pump2..
Но никто не запрещает пихнуть все станции в отдельный ФБ/ПРОГРАММ и обращатся
Stations.Station1.Pump2..
Очень даже ООП'эшно и самодокументируемо
PS
Инкапсуляция !!
Последний раз редактировалось Валенок; 06.08.2015 в 14:49. Причина: слово вспомнил
Я пытаюсь перестать думать как сименсовод, но внятных ответов не получаю.
Peterа, предложенная мною структура организации всего кода применима и не "в простейшем случае".
Важно, то что в программах, я просто вызываю функции и ФБ. Более там никакого кода не должно быть.
В этом случае программа превращается просто в место вызова ФБ и функций. Так же как, например, в С вы должны вызвать все свои функции, методы и прочее в функции main().
Так какая разница где я размещу экземпляры ФБ?
Валенок, Ваш ответ прочел после своего сообщения.
Вот наверное единственное отличие:
Отличия мест объявления.jpg
Переменные доступны либо в рамках данного ПОУ, либо во всех ПОУ.
Ну переводила технический текст девочка из мхата. Читайте между строк:
%СТРОКА% = где угодно и откуда угодно если они не перекрыты локальными переменными
1.
ФБ разместить можно где угодно :
В PROGRAM, в другом ФБ, в функции, в области обмена, в динамической памяти, в строке, в области входов/выходов...
2.
При размещении ФБ в функции (ее переменные в КДС2 единственные с автоматически ограниченным сроком жизни) при её каждом вызове ФБ заново инициализируется задаными значениями.
3.
Экземпляры ФБ доступны для вызова %СТРОКА%.
4.
Экземпляры ФБ и их поля доступны для чтения %СТРОКА%.
5.
Экземпляры ФБ доступны для записи %СТРОКА% и во всей цепочке вложений являются var_input
6.
Поля экземпляров ФБ доступны для записи %СТРОКА% и во всей цепочке вложений являются var_input
7.
п.5 и п.6 не одно и тоже
Последний раз редактировалось Валенок; 06.08.2015 в 16:31. Причина: По нашему. По бразильски