- BrainTools - https://www.braintools.ru -
Современный мир движется к объединению технологий: промышленной автоматизации и искусственного интеллекта [1]. Но для меня, занимающегося программированием в сфере АСУ ТП, было трудно понять, как на ПЛК, с его скромными техническими характеристиками и средой Codesys или TIA Portal можно применить технологии ИИ. На форумах готового решения не нашел, но проникся мыслью, что лучше обучить нейросеть на Python, а затем готовые веса и структуру перенести в Codesys. Я решил использовать OpenAI Gym, задачу CartPole. Это классическая задача обучения [2] с подкреплением [3], где цель агента состоит в том, чтобы удерживать шест в вертикальном положении, выбирая действия (движение влево 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 [4].
После получения весов, написал Modbus TCP сервер, который запускает CartPole, записывает данные в регистры, принимает управляющий сигнал с ПЛК и передает в CartPole. Код сервера можно посмотреть на https://github.com/Cheshire22/Codesys-and-AI [5].
Программа на ПЛК, несмотря на все опасения, оказалась очень простой. Написал FB с двумя методами. Установка весов SetWeights:
Вычисление управляющего сигнала Predict:
И главная программа PLC_PRG:
В итоге получилась связка Modbus TCP сервер (с включенной средой CartPole) ↔ ПЛК. Где ПЛК управляет тележкой.

Проект можно посмотреть на https://github.com/Cheshire22/Codesys-and-AI [5].
Автор: Cheshire12
Источник [6]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/14419
URLs in this post:
[1] интеллекта: http://www.braintools.ru/article/7605
[2] обучения: http://www.braintools.ru/article/5125
[3] подкреплением: http://www.braintools.ru/article/5528
[4] https://github.com/Cheshire22/PyTorch-and-GA: https://github.com/Cheshire22/PyTorch-and-GA
[5] https://github.com/Cheshire22/Codesys-and-AI: https://github.com/Cheshire22/Codesys-and-AI
[6] Источник: https://habr.com/ru/articles/902460/?utm_source=habrahabr&utm_medium=rss&utm_campaign=902460
Нажмите здесь для печати.