Привет, уважаемый читатель!

Хочу немного поведать тебе как через Python в локальной сети можно подключиться к PLC от Allen Bradley.

В свое время перепробовал кучу разных библиотек, но в один прекрасный день нашлась та самая "pycomm3".

И так, PyComm3 имеет три драйвера: SLCDriver, LogixDriver и универсальный CIPDriver. (Почти все семейства контроллеров общаются по CIP, чтобы понять какой драйвер вам нужен, можно прочитать документацию на офф сайте)

Мне повезло и мое семейство контроллеров общалась на "LogixDriver".

Первое что необходимо сделать, установить библиотеку PyComm3 через pip:

pip install pycomm3

Далее создаем наш документ main.py и импортируем в него нашу библиотеку:

from pycomm3 import LogixDriver

Создаем переменную PLC и присваиваем ей параметры подключения в следующем виде - LogixDriver('IP нашего плк в локальной сети')

plc = LogixDriver('192.168.0.1')

Затем создаем функцию подключения к нашему PLC:

def Connection_to_plc():
    try:
        plc.open() #Открываем подключение
        print(plc) #Выводим информацию об PLC
    except:
        print('Error')
        pass

Если мы вызовем функцию Connection_to_plc() и у нас правильно указан IP-адрес, мы получим следующий ответ (Имя программы и редакцию):

Program Name: CONTROL_8510, Revision: {'major': 32, 'minor': 11}

ВАЖНО!

Для опроса конкретных тегов вам нужен проект от PLC и понимание того, что вы делаете!

Не пытайтесь менять значение тегов если вы не уверены в последствиях!

Создадим функцию опроса тэга:

def PollingTag():
    resultRead = plc.read('AL_POS[17].6')
    result = resultRead[1]

При ее вызове в "resultRead" мы получим список вида:

{'value=TRUE', 'tag='AL_POS[17].6'', 'type='BOOL'', 'error=None'}


Для построения какой либо логики нас интересует значение "value", его мы получаем выдергивая первый элемент из списка.

Если мы выполним:

print(result)

Мы получим значение "TRUE"!

В целом, этого базиса должно быть достаточно для понимания основ.

Код целиком:

from pycomm3 import LogixDriver
import time
plc = LogixDriver('IP твоего PLC')

def Connection_to_plc():
    try:
        plc.open()
        print(plc)
        time.sleep(10)
    except:
        print('Error')
        pass

def PollingTag():
    resultRead = plc.read('Вставь свой тег сюда!')
    result = resultRead[1]
    print(result)
    time.sleep(10)

def main():
    Connection_to_plc()
    while True:
        PollingTag()

main()

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

При помощи функции "plc.write" можно менять значение тегов в зависимости от типов данных и удаленно управлять оборудованием если это необходимо.

Спасибо за прочтение!

Комментарии (5)


  1. sav13
    29.12.2023 02:29
    +1

    Читая такие статьи начинает казаться, что разработчике на питоне только и умеют, что подключать готовые библиотеки и кичиться своей крутостью.

    А если бы не было готовой библиотеки?


    1. economist75
      29.12.2023 02:29
      +3

      Вы правы, питонисты умеют и всегда используют чужие готовые либы, и не только написанные на питоне, но и на любых других языках ("обертки").

      А причина, по которой чужие либы используются в python едва ли не чаще собственных - это почти 500k свободных бесплатных либ на все случаи жизни, огромное число примеров кода и крайне благожелательное комьюнити. Добродушие этой среды просто поражает и, видимо, проистекает из легкости заимствования чужого труда (и дележа своим).

      Если нет какой-то готовой библиотеки - ее кто-нибудь обязательно напишет, неважно на чем. И едва эта либа появится - питонисты напишут к ней "обертку" для Python. Это паразитизм, но он добрый, а главное - он продуктивный. Можно сказать это "симбиоз". Ведь питонистов много, это реальные пользователи, бесплатные бета-тестеры, общительные "смузихлебы-копипастеры" - они часто дают обратную связь и способствуют развитию либы, на чем бы и кем бы она ни была написана. Torch, cv итд - многим сложным либам python-сообщество дало важную информацию, повод и стимул для развития.


      1. sav13
        29.12.2023 02:29

        В чем тогда ценность статьи? Умению пользоваться поиском и хелпами?

        А причина, по которой чужие либы используются в python едва ли не чаще собственных - это почти 500k свободных бесплатных либ на все случаи жизни, огромное число примеров кода и крайне благожелательное комьюнити.

        К сожалению, не весь код хорошего качества. В мире OpenSource многое пишется "под себя" и "на коленках", толком не отлаживается и зачастую проще самому все реализовать, особенно когда дело касается ПЛК.

        Если нет какой-то готовой библиотеки - ее кто-нибудь обязательно напишет, неважно на чем. 

        Вот они современные программисты. Вместо того чтобы написать программу, ждут манны небесной ).


        1. glazko
          29.12.2023 02:29
          +1

          В чем тогда ценность статьи?

          Чем больше статей на стыке ИТ и АСУТП - тем лучше и тем больше молодых ИТ-шников придет работать в отрасль. Вы же хотите что бы профессия разработчика АСУТП становилась престижной и уважаемой в нашей стране


          1. sav13
            29.12.2023 02:29

            Двумя руками за молодых специалистов АСУТП. Главное, чтобы они что-то могли сделать и без готовой питоновской библиотеки.