Простой пример использования в ПЛК нейросетевого контроллера. codesys 3.. codesys 3. openai gym.. codesys 3. openai gym. python.. codesys 3. openai gym. python. pyton.. codesys 3. openai gym. python. pyton. PyTorch.. codesys 3. openai gym. python. pyton. PyTorch. Инженерные системы.. codesys 3. openai gym. python. pyton. PyTorch. Инженерные системы. Промышленное программирование.

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

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

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

Автор: Cheshire12

Источник

Рейтинг@Mail.ru
Rambler's Top100