diff options
Diffstat (limited to 'tests/open62541-testserver/testserver.cpp')
-rw-r--r-- | tests/open62541-testserver/testserver.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/tests/open62541-testserver/testserver.cpp b/tests/open62541-testserver/testserver.cpp index 46a8135..b3b2448 100644 --- a/tests/open62541-testserver/testserver.cpp +++ b/tests/open62541-testserver/testserver.cpp @@ -237,6 +237,10 @@ bool TestServer::init() success = createInsecureServerConfig(m_config); #endif + m_gathering = UA_HistoryDataGathering_Default(1); + m_config->historyDatabase = UA_HistoryDatabase_default(m_gathering); + + if (!success || !m_config) return false; @@ -356,7 +360,7 @@ UA_NodeId TestServer::addVariableWithWriteMask(const UA_NodeId &folder, const QS } UA_NodeId TestServer::addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &name, const QVariant &value, - QOpcUa::Types type, QList<quint32> arrayDimensions, int valueRank) + QOpcUa::Types type, QList<quint32> arrayDimensions, int valueRank, bool enableHistorizing, quint32 historyNumValuesPerNode) { UA_NodeId variableNodeId = Open62541Utils::nodeIdFromQString(variableNode); @@ -367,8 +371,13 @@ UA_NodeId TestServer::addVariable(const UA_NodeId &folder, const QString &variab attr.valueRank = valueRank; attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", name.toUtf8().constData()); attr.dataType = attr.value.type ? attr.value.type->typeId : UA_TYPES[UA_TYPES_BOOLEAN].typeId; - attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE; + if (enableHistorizing) { + attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE | UA_ACCESSLEVELMASK_HISTORYREAD; + } else { + attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE; + } attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData()); + attr.historizing = enableHistorizing; if (arrayDimensions.size()) { attr.arrayDimensionsSize = arrayDimensions.size(); @@ -394,6 +403,18 @@ UA_NodeId TestServer::addVariable(const UA_NodeId &folder, const QString &variab attr.arrayDimensions = nullptr; attr.arrayDimensionsSize = 0; + if (enableHistorizing) { + UA_HistorizingNodeIdSettings setting; + setting.historizingBackend = UA_HistoryDataBackend_Memory(1, 10); + setting.maxHistoryDataResponseSize = historyNumValuesPerNode; + setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_VALUESET; + result = m_gathering.registerNodeId(m_server, m_gathering.context, &resultId, setting); + if (result != UA_STATUSCODE_GOOD) { + qWarning() << "Could not register node for historical data:" << result << "for node" << variableNode; + return UA_NODEID_NULL; + } + } + UA_NodeId_deleteMembers(&variableNodeId); UA_VariableAttributes_deleteMembers(&attr); |