Опрос множества функциональных блоков. Codesys 3.5

Имеем: Много одинаковых объектов управления.

Задача: Надо опрашивать все блоки.

Многие подумают про массив функциональных блоков или про функция и массив структур, или еще что-то. Мы же пойдем по сложному пути.

У нас есть какой-то функциональный блок со своей логикой.

Это функциональный блок просто инкрементит переменную до значения максимального значения, как значение переваливает за максимальное скидывает на стандартное.

На вход функции передаем ссылку на структуру где и описаны наше дефолтное и максимальное значение.

Если кто-то задавался вопросом почему я часто пишу REFERENCE в VAR_INPUT , то это просто VAR_IN_OUT так получается.

Сам объект

Вторая вещь, почему я не инкапсулирую все значения структуру в функциональный блок, так это потому что мне теоретически с ними работать, а я не особо хочу описывать выходные переменные.

Теперь допустим у нас вот таких объектов с инкрементацией несколько, а конкретно этим утром завезли 3. Значит мы используем 3 экземпляра функционального блока и 3 экземпляра структуры.

И тут можно заметить, что раз пошло такое разбрасывание памяти, то можно было бы MaxVar и Default инкапсулировать внутрь ФБ. Ответ да можно, но мы так не делаем…

Далее для опроса создаем структуру из 3-х объектов функционального блока.

Вот в эту структуру будут добавляться и удаляться объекты в ходе изменения программы.

А дальше выделяем память под это все дело и сразу инициализируем значения в полях объекта.

Следующий функциональный блок это как раз таки цикл опроса.

Он просто будет обходить структуру по кругу, как и положено и вызывать каждый фб из этой структуру.

Также нам еще нужен метод FB_Init() который будет у нас присваивать нужные значения. Про метод читаем тут

Готово.

Дальше оформляем вызов функционального блока в программе.

И теперь для добавления еще одной позиции нам потребуется:

1)Добавить экзмепляр фб в структуру с очередью опроса.

2)Добавить экземпляр структуры со значениями

3)В методе FB_Init привязать.

Этот способ чуть сложнее стандартного цикла, но зато у нас все подписано и мы знаем что за что отвечает.

Ответить