Это моя первая статья. Так что заранее извиняюсь за возможные ошибки. Любые предложения приветствуются.

Я работаю в мануфактурной компании.
В прошлом году руководство приняло решение купить несколько машин.
Для повышения производительности и интеграции с производственным процессом информационная система должна иметь возможность взаимодействовать с машинами.< br /> Например, интересно отправить настройку прямо на станок для следующего производства или контролировать выполнение работы из офиса.

Многие машины состоят из ПЛК, часто Siemens S7.
Для машин, которые мне пришлось анализировать, ПЛК SIemens был моделью 1200.

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

В основном мое приложение использует Django и Postgres, но в этой статье я хотел бы описать использование Python для связи с ПЛК с библиотекой python-snap7.

Сейчас я опишу простой пример связи между ПК и ПЛК через Python с библиотекой python-snap7.
Предположим, что Python и pip уже установлены на вашем ПК.

Давайте установим библиотеку.

pip install python-snap7

Хорошо! Мы готовы.

Например, ПЛК в машине имеет IP-адрес: 192.168.50.50.

Давайте напишем простую программу на Python для чтения и записи некоторых переменных внутри ПЛК.

Импортировать библиотеку

>>> import snap7
>>> from snap7 import util

Я создаю экземпляр клиента для подключения к ПЛК

>>> client = snap7.client.Client()
>>> client.connect('192.168.50.50',0,0)

Я могу проверить, действительно ли я подключен к ПЛК

>>> client.get_connected()
True

Если вы зашли так далеко, вы правы.

Теперь вам нужно выяснить, какой db (область памяти) вы можете читать или записывать в ПЛК.
Например, давайте прочитаем базу данных номер 5, от байта 0 до байта 18.

>>> client.db_read(5, 0, 18)
bytearray(b'\xc4\x9d\xc0\x00\xc2\xfcff\xff~\xc3\x02\x00\x00\xc3\x01\x00\x00')

Идеально. Теперь давайте прочитаем, например, переменную типа real.

>>> db = client.db_read(5, 0, 4)
>>> t = util.get_real(db, 0)
>>> print(t)
-1102.0

Для записи шаги такие же.

>>> db = client.db_read(5, 0, 4)
>>> util.set_real(db, 0, 2.1)

Молодец!
Просто, правда?

Теперь наслаждайтесь. Оставляю ссылки на библиотеки