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



我正在使用Qt 5.11.1和Qt OPC UA和Open62541后端来创建OPC客户端应用程序。

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

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

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

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

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

我不知道您的服务器的功能状态,但对于您的客户端 (Open62541(,这些服务尚未完全正常运行。在此处查看其GitHub上的功能文档

显然,这些应该在下一个 0.4 版本中功能齐全。

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

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

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

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

参数:

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

周期:用于存储历史记录的时间增量;较旧 数据将从存储中删除

计数:更改次数 存储在历史记录中

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

[蟒蛇]:

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)

最新更新