Существуют ли функциональные блоки ПЛК МЭК 61131 / МЭК 61499, которые используют OPA UA для передачи данных? - PullRequest
3 голосов
/ 07 ноября 2019

У меня есть приложение для машинного обучения и расширенного управления в Python (TensorFlow + Gekko), которое мне нужно интегрировать с программируемым логическим контроллером (ПЛК), который обеспечивает сбор данных и контроль конечных элементов. Могу ли я использовать установленный в стойку Linux (предпочтительно) или Windows Server в качестве вычислительного механизма с передачей данных через OPC-UA (OLE для управления процессами - универсальная архитектура)?

Существует Python OPC-UA / IEC 62541 клиент (и сервер) и пакет Python MODBUS , который я использовал в других проектах при подключении к распределенным системам управления (DCS), таким как Emerson DeltaV, Honeywell Experion / TDC3000и Йокогава DCS. Могу ли я сделать то же самое с функциональными блоками ПЛК, такими как Siemens Simatic S7-300? Siemens имеет более новые ПЛК с поддержкой TensorFlow, такие как модуль SIMATIC S7-1500 NPU (Neural Processing Unit), но существует множество причин, по которым внешний сервер желателен. Стандарт МЭК 61131 и стандарт PROFINET CBA поддерживаются (стандарт МЭК 61499 для Siemens) в S7-300.

Ниже приведен минимальный функциональный блок, который я хотел бы использовать для связи с функциональным блоком.

from opcua import Client
client = Client("Matrikon.OPC.Simulation")
try:
    client.connect()
    root = client.get_root_node()
    # Get a variable node using browse path
    myvar = root.get_child(["0:Objects", "1:MyObject", "2:MyVariable"])
    print('Variable is ', myvar)
finally:
    client.disconnect()

1 Ответ

1 голос
/ 13 ноября 2019

У меня был опыт, что сервер ABB harmony OPC также не поддерживал 'opcua'. Итак, я использовал пакет «OpenOPC» вместо «opcua», как предложил Джон в комментарии. Но я не уверен, что конкретный бренд OPC совместим с «opcua» или «OpenOPC».

Пожалуйста, посмотрите код, который я использовал для тестирования пакета OpenOPC.

import OpenOPC
import time
import pywintypes

pywintypes.datatime = pywintypes.TimeType
opc = OpenOPC.client()
opc.servers()
opc.connect('Matrikon.OPC.Simulation.1')
tags = ['Random.Int1', 'Random.Real4']

while True:
      try:
          value = OPC.read(tags,group='Simulation Items',update=1)
          print (value)
      except OpenOPC.TimeoutError:
          print ("TimeoutError ocured")

      time.sleep(1)
...