Qt OPC-UA - 访问 Trend/Historical 数据

Qt OPC-UA - Accessing Trend/Historical Data

我将 Qt 5.11.1 与 Qt OPC Ua 和 Open62541 后端一起使用来创建 OPC 客户端应用程序。

是否可以使用 Qt OPC UA 模块请求历史数据?例如。获取这两次之间此变量(节点)的值。

我的服务器应用程序具有此功能 (FreeOpcUa),因为我可以将变量设置为 'historized' 并查看以前存储的值。但是我看不到在客户端轻松访问此数据的明显解决方案。

目前我正在考虑在我的服务器上为每个变量公开一个函数,该函数将接受开始和结束时间戳并手动收集值并将它们格式化为字符串或某个对象以供客户端使用。

有没有人对更好的方法有任何想法或想法? 我对 OPC-UA 或 Qt 不是很熟悉,所以可能只是遗漏了一些明显的东西。

要使用 OPC UA 历史功能,您的 OPC UA 客户端和服务器都应支持 HistoryRead/HistoryWrite 服务。

我不知道您服务器的功能状态,但对于您的客户端 (Open62541),这些服务还没有完全发挥作用。从他们的 GitHub here

查看 FEATURES 文档

显然,这些功能应该会在下一个 0.4 版本中完全发挥作用。

Freeopcua-Server 支持历史化(https://python-opcua.readthedocs.io/en/latest/server.html)。

您必须启用每个节点的历史化(即您要历史化的每个变量):

historize_node_data_change(node, period=datetime.timedelta(7), count=0)

Start historizing supplied nodes

Args:

node: node or list of nodes that can be historized (variables/properties)

period: time delta to store the history; older data will be deleted from the storage

count: number of changes to store in the history

例如如果你想提供温度的历史记录,你必须使用“server.historize_node_data_change(Temp, period=datetime.timedelta(7), count=0)”(在服务器启动后):

[Python]:

from opcua import Server
from random import randint
import datetime
import time

server = Server()

server.set_endpoint("opc.tcp://192.168.178.20:443")
addspace = server.register_namespace("OPCUA_BurkhardsTemperatureSensor")

node = server.get_objects_node()

Param = node.add_object(addspace, "Thermometer_1")

Temp = Param.add_variable(addspace, "Temperature", 0)
Temp.set_writable()

Time = Param.add_variable(addspace, "Time", 0)
Time.set_writable()

SerialNr = Param.add_variable(addspace, "SerialNr.", "2323784628346")

server.start()

server.historize_node_data_change(Temp, period=datetime.timedelta(7), count=0)

while True:
    Temperature = randint (10,50)
    TIME = datetime.datetime.now()
    
    print (Temperature,TIME)

    Temp.set_value(Temperature)
    Time.set_value(TIME)
    
    time.sleep (2)