г. Москва, ул. Азовская, 14
+7 (495) 310-97-15
Пн-пт: с 9.00 до 18.00
Заказать звонок
Обратный звонок
Ваше имя*
Ваш телефон*
Ваш Email*
Перезвоните мне
ООП методы программирования современных контроллеров

ООП для ПЛК. Codesys и Стратегия

Стратегия  — это поведенческий паттерн проектирования, который определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять прямо во время исполнения программы.
Вот такое определение мы скопируем и вставим, чтобы начать наше повествование. И уже после прочтения определения закрадывается мысль, а как на ПЛК можно реализовать объектно-объективное программирование (ООП)?

По факту легко. И очень много подобных паттернов можно переложить на рельсы промышленного программирования.
Для реализации этого безумства нам потребуется Codesys 3.x ибо он немного, да научился в ООП. Преступим.

РЕАЛИЗАЦИЯ
Что нам предлагают умные статьи в интернетах?
Паттерн Стратегия предлагает определить семейство схожих алгоритмов, которые часто изменяются или расширяются, и вынести их в собственные классы, называемые стратегиями .
Вместо того, чтобы изначальный класс сам выполнял тот или иной алгоритм, он будет играть роль контекста, ссылаясь на одну из стратегий и делегируя ей выполнение работы. Чтобы сменить алгоритм, вам будет достаточно подставить в контекст другой объект-стратегию.
Важно, чтобы все стратегии имели общий интерфейс. Используя этот интерфейс, контекст будет независимым от конкретных классов стратегий. С другой стороны, вы сможете изменять и добавлять новые виды алгоритмов, не трогая код контекста.

ИНТЕРФЕЙС
Интерфейс, согласно документации Codesys - это средство объектно-ориентированного программирования. Объект ITF("Интерфейс") описывает набор прототипов методов и свойств. В этом контексте прототип означает, что методы и свойства содержат только объявления и не содержат реализации.
Это значит, что в интерфейсе мы описываем методы. Даем им имена, перечень входных и выходных данных, но никак не трогаем реализацию.
1.png 
Создание интерфейса
Для создания интерфейса жмем ПКМ->Добавление объекта->Интерфейс, далее задаем ему имя. У меня это будет "StrategyInt".
Затем добавляем метод. Назовем его GetSTR. Для добавления также правая кнопка мыши и добавить метод интерфейса.
Прописываем там лишь одну выходную переменную.

  2.png
Описание переменных метода интерфейса.

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

КОНТЕКСТ
Это тот функциональный блок, который и будет у нас вызывать различные "стратегии".
Создаем обычный функциональный блок.

  3.png
Функциональный блок, который играет роль контекста.
На вход функционального блока мы можем отправить любой объект, который будет унаследован от интерфейса StrategyInt. В реализации мы видим,что при вызове данного функционального блока, мы будем взывать метод GetSTR,а результат возвращать в выходную переменную Result.

СТРАТЕГИИ
Следующий шаг - реализация стратегий. Для начала сделаем две. Они не будет ничем отличаться кроме как возвращать разные значения.
Создаем функциональный блок и наследуем его от нашего интерфейса.

  4.png
Окно создания функционального блока.

Имя можете указать любое, у меня просто кончилась фантазия.
Я создал два таких блока, которые и будут играть роль наших стратегий.

  5.png
Созданные стратегии

В каждом есть два метода, реализацию которых необходимо написать.

  6.png


Реализация первой стратегии

  7.png
Реализация второй стратегии.

Да можно напрямую возвращать значения через метод, но я так не хочу.

СБОРКА
А теперь собираем это все вместе.
 8.png
Сборка всех компонентов.

Я тут немного разбил по шагам. Для реализации нам понадобится:

Объект, который играет роль контекста - 1 шт. Наши стратегии. Тут я их включил в блок переменных, но можно и сделать указатель на объект нужной нам стратегии, а уже в коде создать через __NEW. Ну и переменные Out_1 и Out_2 для наглядности.
Код работает следующим образом. На первом шаге мы даем на вход MyProc переменной Object нашу стратеги POU_1.

Затем происходит вызов контекста и он отрабатывает, записывая результат своей работы в переменную Out_1.
Затем мы даем на вход того же контекста стратегию POU_2, с последующим выводом, результат пишется в переменную Out_2.
Включаем эмуляцию.

9.png 
Результат выполнения.

Таким образом можно разносить логику работы объектов, которые похожи, но немного отличаются в реализации. Возврат строковой переменой тут просто для примера)

Дополнительно, для поддержки данной статьи, оплатил статический IP и создал на роутере Mikrotik схему проброса портов. Можете подключаться и пользоваться

10.jpg

Для подключению к контроллеру ПЛК210 (89.23.36.110) можно по ссылкам, предварительно скачав дистрибутив Codesys и архив проекта:

CODESYS V3.5 SP14 Patch 3


Архив проекта ПЛК210 - Nov_190621s.projectarchive

На архиве установлен пароль - 159

Автор статьи: Александр Судалин - sudalin.kms@gmail.com


#ООП, #CODESYS, #Пример онлайн, #ПЛК210, #Стратегия, #Проектирования

Vyacheslav Lapshin

15.10.2021

Архитектуру современных ПЛК можно разделить на три типа: 1. На основе МК (PIC, Atmel, STM и ряд менее популярных вендоров) 2. На основе SOC - система на кристалле 3. На основе мобильных CPU + SRAM + emmc (Cortex и иже с ними) В п.3 обычно используется linux, как ОС. На пп.1 и 2 RTOS - операционные системы реального времени
Ваш комментарий добавлен
Оставьте Вашу заявку и получите ответ в самые короткие сроки!