Qt OPC-UA-访问趋势/历史数据

时间:2018-09-12 16:36:51

标签: qt opc-ua qtopcua

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

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

我的服务器应用程序具有此功能(FreeOpcUa),因为我可以将变量设置为“历史化”并查看以前存储的值。但是我看不到一个显而易见的解决方案,可以在客户端轻松地访问这些数据。

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

有人会对更好的方法有任何想法或想法吗? 我对OPC-UA或Qt不太熟悉,因此可能只是缺少一些明显的东西。

2 个答案:

答案 0 :(得分:0)

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

我不知道您的服务器的功能状态,但是对于您的客户端(Open62541),这些服务尚不完全正常。从其GitHub here

中查看FEATURES文档

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

答案 1 :(得分:0)

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

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

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

开始对提供的节点进行历史记录

Args:

node:可以被历史化的节点或节点列表 (变量/属性)

期间:存储历史记录的时间增量;年长的 数据将从存储中删除

count:更改的数量 存储在历史记录中

例如如果要提供温度历史记录,则必须使用“ 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)