有使用 OPC UA 规范第 14 部分 Pub/Sub 的示例吗?

问题描述 投票:0回答:2

我正在寻找使用 OPC UA 第 14 部分创建应用程序的程序。目前,我正在使用 python 进行编码。我当前的程序使用第 4 部分订阅来在每次更改时在模拟 PLC 中获取变量的值,然后使用 MQTT 的 PubSub 模型发布一个包含新值的字符串,该字符串在另一个程序中读取并打印它。

我知道有一种方法可以创建 OPC UA PubSub 模型,但我不知道该怎么做。而且,我看到有一种方法可以构建要发布的信息(映射?),但我不知道是否有一个函数可以自动执行此操作,以及这种方法的优点是什么。

我想知道我的做法是否正确,或者我在互联网搜索时是否遗漏了某些内容。你知道是否有可以启发我的例子吗?

python mqtt publish-subscribe opc-ua opc
2个回答
0
投票

有以下OPC基金会的例子: https://github.com/OPCFoundation/UA-IIoT-StarterKit

也许这对你有帮助。


0
投票

以下是如何使用 QuickOPC 通过 MQTT 订阅 OPC UA PubSub 消息:

    # This example shows how to subscribe to all dataset messages on an OPC-UA PubSub connection with MQTT JSON mapping using
    # TCP.
    #
    import opclabs_quickopc
    import opclabs_mqttnet
    import time
    
    # Import .NET namespaces.
    from OpcLabs.EasyOpc.UA.PubSub import *
    from OpcLabs.EasyOpc.UA.PubSub.Engine import *
    from OpcLabs.EasyOpc.UA.PubSub.OperationModel import *
    
    
    def dataSetMessage(sender, e):
        # Display the dataset.
        if e.Succeeded:
            # An event with null DataSetData just indicates a successful connection.
            if e.DataSetData is not None:
                print('')
                print('Dataset data: ', e.DataSetData, sep='')
                for pair in e.DataSetData.FieldDataDictionary:
                    print(pair)
        else:
            print('')
            print('*** Failure: ', e.ErrorMessageBrief, sep='')
            print('*** Failure: ', e.Exception, sep='')
    
    
    # Define the PubSub connection we will work with. Uses implicit conversion from a string.
    # Default port with MQTT is 1883.
    pubSubConnectionDescriptor = UAPubSubConnectionDescriptor.op_Implicit('mqtt://opcua-pubsub.demo-this.com')
    # Specify the transport protocol mapping.
    
    # Define the arguments for subscribing to the dataset, specifying the MQTT topic name.
    subscribeDataSetArguments = UASubscribeDataSetArguments(pubSubConnectionDescriptor)
    subscribeDataSetArguments.DataSetSubscriptionDescriptor.CommunicationParameters.BrokerDataSetReaderTransportParameters.\
        QueueName = 'opcuademo/json'
    
    # Instantiate the subscriber object and hook events.
    subscriber = EasyUASubscriber()
    subscriber.DataSetMessage += dataSetMessage
    
    print('Subscribing...')
    IEasyUASubscriberExtension.SubscribeDataSet(subscriber, subscribeDataSetArguments)
    
    print('Processing dataset message events for 20 seconds...')
    time.sleep(20)
    
    print('Unsubscribing...')
    subscriber.UnsubscribeAllDataSets()
    
    print('Waiting for 1 second...')
    # Unsubscribe operation is asynchronous, messages may still come for a short while.
    time.sleep(1)
    
    subscriber.DataSetMessage -= dataSetMessage
    
    print('Finished.')

关于PubSub信息模型的使用,它也可以用来解析连接/订阅信息

© www.soinside.com 2019 - 2024. All rights reserved.