Простой пример использования в ПЛК нейросетевого контроллера — АСУ ТП: сообщество инженеров

Простой пример использования в ПЛК нейросетевого контроллера

Коротко о статье

Статья описывает перенос обученной на Python нейросети в ПЛК для управления задачей CartPole. Читатель может повторить связку Modbus TCP сервер с CartPole и ПЛК, реализующий нейросетевой контроллер.

Главное
  • Автор обучил нейросеть на PyTorch с пакетом DEAP для задачи CartPole из OpenAI Gym.
  • Структура контроллера: вход — позиция, скорость тележки, угол шеста, угловая скорость; выход — 0 или 1.
  • Модель в PyTorch: nn.Sequential с Linear, ReLU, Linear и Sigmoid.
  • На Python написан Modbus TCP сервер, который запускает CartPole, пишет данные в регистры и принимает управляющий сигнал.
  • Программа на ПЛК содержит FB с методами SetWeights и Predict, а также главную программу PLC_PRG.
  • Итоговая связка: Modbus TCP сервер с CartPole ↔ ПЛК, где ПЛК управляет тележкой.
Термины и технологии
  • ПЛК
  • Codesys
  • TIA Portal
  • OpenAI Gym
  • CartPole
  • PyTorch
  • DEAP
  • Modbus TCP

Кому полезно: Инженеры АСУ ТП, интересующиеся применением ИИ на ПЛК.

Первоисточник: habr.com

Выжимка составлена редакцией сайта с помощью ИИ по тексту статьи.

Современный мир движется к объединению технологий: промышленной автоматизации и искусственного интеллекта. Но для меня, занимающегося программированием в сфере АСУ ТП, было трудно понять, как на ПЛК, с его скромными техническими характеристиками и средой Codesys или TIA Portal можно применить технологии ИИ. На форумах готового решения не нашел, но проникся мыслью, что лучше обучить нейросеть на Python, а затем готовые веса и структуру перенести в Codesys. Я решил использовать OpenAI Gym, задачу CartPole. Это классическая задача обучения с подкреплением, где цель агента состоит в том, чтобы удерживать шест в вертикальном положении, выбирая действия (движение влево 0 или вправо 1), на основе текущего состояния системы. План действий: для получения весов написать класс нейросети на PyTorch с использованием пакет DEAP. После этого написать Modbus TCP сервер на Python с окружающей средой CartPole, подсоединиться к нему с помощью ПЛК. Полученные данные обрабатывать в ПЛК и передавать сигнал, который будет управлять тележкой, на сервер.

Структура нейросетевого контроллера выглядит так:

На вход подается: позиция, скорость тележки, угол шеста, угловая скорость. На выходе управляющий сигнал 0 (шаг тележки влево) или 1 (вправо). В PyTorch получилась такая модель:

nn.Sequential(
nn.Linear(self.input_size, self.hidden_size),
nn.ReLU(),
nn.Linear(self.hidden_size, self.output_size),
nn.Sigmoid()
)

Полный код можно посмотреть на https://github.com/Cheshire22/PyTorch-and-GA.

После получения весов, написал Modbus TCP сервер, который запускает CartPole, записывает данные в регистры, принимает управляющий сигнал с ПЛК и передает в CartPole. Код сервера можно посмотреть на https://github.com/Cheshire22/Codesys-and-AI.

Программа на ПЛК, несмотря на все опасения, оказалась очень простой. Написал FB с двумя методами. Установка весов SetWeights:

Метод SetWeights.

Вычисление управляющего сигнала Predict:

Метод Predict.

И главная программа PLC_PRG:

Главная программа

В итоге получилась связка Modbus TCP сервер (с включенной средой CartPole) ↔ ПЛК. Где ПЛК управляет тележкой.

Проект можно посмотреть на https://github.com/Cheshire22/Codesys-and-AI.

Источник: https://habr.com/ru/articles/902460/

Источник: статья в сообществе ВКонтакте

Оставьте комментарий

Войти

Зарегистрироваться

Сбросить пароль

Пожалуйста, введите ваше имя пользователя или эл. адрес, вы получите письмо со ссылкой для сброса пароля.

Прокрутить вверх