OPCUA Python Client Socket закрытое соединение - PullRequest
0 голосов
/ 19 января 2019

Я использую библиотеку FreeOpcUa для python в Ubuntu, точнее, в следующем примере: https://github.com/FreeOpcUa/python-opcua/blob/master/examples/client-example.py

Через некоторое время (~ 5-10 минут) я получаю сообщение в окне Python:

ИНФОРМАЦИЯ: opcua.client.ua_client.Socket: Сокет закрыл соединение ИНФОРМАЦИЯ: opcua.client.ua_client.Socket: Тема закончена

Что вызывает это и как я могу это исправить? Сервер работает на ПЛК. В результате очевидно, что подписка на изменение данных больше не работает.

Мой код Python:

#! /usr/bin/python3
import sys
sys.path.insert(0, "..")
import logging
import time

import os

try:
    from IPython import embed
except ImportError:
    import code

    def embed():
        vars = globals()
        vars.update(locals())
        shell = code.InteractiveConsole(vars)
        shell.interact()


from opcua import Client
from opcua import ua


class SubHandler(object):

    """
    Subscription Handler. To receive events from server for a subscription
    data_change and event methods are called directly from receiving thread.
    Do not do expensive, slow or network operation there. Create another 
    thread if you need to do such a thing
    """

    def datachange_notification(self, node, val, data):
        #print("Python: New data change event", node, val)
        os.system("~/brightness.sh " + str(val))

    def event_notification(self, event):
        print("Python: New event", event)

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO)
    #logger = logging.getLogger("KeepAlive")
    #logger.setLevel(logging.DEBUG)

    client = Client("opc.tcp://192.168.1.10:4840")

    try:
        client.connect()

        myvar = client.get_node("ns=4;s=|var|WAGO 750-8102 PFC100 2ETH RS.Application.PLC_PRG.bVisuDimmer")

        # subscribing to a variable node
        handler = SubHandler()
        sub = client.create_subscription(100, handler)
        handle = sub.subscribe_data_change(myvar)
        time.sleep(0.1)

        #sub.subscribe_events()

        embed()
    finally:
        client.disconnect()
...