Как стать автором
Обновить

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

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров3.1K

Современный мир движется к объединению технологий: промышленной автоматизации и искусственного интеллекта. Но для меня, занимающегося программированием в сфере АСУ ТП, было трудно понять, как на ПЛК, с его скромными техническими характеристиками и средой 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.
Метод SetWeights.

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

Метод Predict.
Метод Predict.

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

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

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

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

Теги:
Хабы:
+9
Комментарии6

Публикации

Истории

Работа

Data Scientist
49 вакансий

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
22 апреля
VK Видео Meetup 2025
МоскваОнлайн
23 апреля
Meetup DevOps 43Tech
Санкт-ПетербургОнлайн
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область