3 #include "variablehandleuanode.h" 4 #include <opcua_dataitemtype.h> 13 #include "uadatetime.h" 15 #include "opcua_builtintypes.h" 19 #include <boost/xpressive/xpressive.hpp> 32 NmBuildingAutomation::NmBuildingAutomation(shared_ptr<UserDevice::ControlInterface> conInterf,
const UaString nameOfServer): NodeManagerBase(nameOfServer)
45 if ((pNode != NULL) && (pNode->nodeId().identifierType() == OpcUa_IdentifierType_String)) {
46 nTmp = UaString(
"%1.%2").arg(pNode->nodeId().toString()).arg(
name);
50 OpcUa_Int16 nidx = getNameSpaceIndex();
51 uNodeId = UaNodeId(nTmp,nidx);
62 string nTmp = pNode->nodeId().toString().toUtf8();
63 int nbus = nTmp.copy(
buffer, nTmp.find_first_of(
'.'),0);
65 UaString bus = UaString(
buffer);
66 uNodeId = UaNodeId(bus,getNameSpaceIndex());
74 string nTmp = pNode->nodeId().toString().toUtf8();
75 int lastpos = nTmp.find_last_of(
'.');
76 buffer = nTmp.substr(0,lastpos);
77 UaString sNode = UaString(
buffer.c_str());
79 uNodeId = UaNodeId(sNode,getNameSpaceIndex());
95 UaStatus ret = OpcUa_Good;
246 UaStatus ret = OpcUa_Good;
248 OpcUa_UInt32 count = arrUaVariables.length();
249 UaDateTime timeStamp = UaDateTime::now();
252 arrDataValues.create(count);
254 for (i=0; i<count; i++)
257 arrDataValues[i].setServerTimestamp(timeStamp);
258 UaVariable* pVariable = arrUaVariables[i];
261 UaNodeId uu = pVariable->typeDefinitionId();
265 arrDataValues[i] = pVariable->value(0);
270 arrDataValues[i] = pVariable->value(0);
271 arrDataValues[i].setStatusCode(ret.statusCode());
280 UaStatus gret = OpcUa_Good,ret = OpcUa_Good;
283 OpcUa_UInt32 count = arrUaVariables.length();
286 arrStatusCodes.create(count);
288 for (i=0; i<count; i++)
290 UaVariable* pVariable = arrUaVariables[i];
298 pVariable->setValue(0,*arrpDataValues[i] ,
false);
306 OpcUa_BuiltInType cvtype = (OpcUa_BuiltInType)pVariable->dataType().identifierNumeric();
307 OpcUa_Variant tData,sData;
309 OpcUa_DataValue dValue = *arrpDataValues[i];
310 sData = dValue.Value;
314 dValue.Value = tData;
316 pVariable->setValue(0, udttmp,
false);
317 udttmp = pVariable->value(0);
321 arrStatusCodes[i] = OpcUa_BadDataEncodingInvalid;
343 iom = NodeManagerBase::getIOManager(pUaNode,attributeId);
359 if ( (
nodeid == NULL) || (
nodeid->NamespaceIndex != m_nNamespaceIndex) )
363 VariableHandle* pVariableHandle = NULL;
365 if (pVariableHandle == NULL)
366 pVariableHandle = NodeManagerBase::getVariableHandle(session,serviceType,
nodeid,attributeId);
411 return pVariableHandle;
422 OpcUa_Int32 nMatched = 0;
423 UaReference *pRefList = (UaReference *)pParObj->pTargetNodes();
424 UaString fPatten = UaString(
"%1.%2").arg(pParObj->getKey().toString()).arg(pattern.c_str());
425 string fullpatten = fPatten.toUtf8();
428 pRefList = pRefList->pNextForwardReference();
441 OpcUa_Int32 nMatched = 0;
442 boost::xpressive::sregex expression = boost::xpressive::sregex::compile(pattern);
444 if (pNode->nodeClass() == OpcUa_NodeClass_Variable) {
445 UaNodeId
nodeid = pNode->getKey();
446 if (
nodeid.identifierType() == OpcUa_IdentifierType_String) {
447 boost::xpressive::smatch what;
448 string sName =
nodeid.toString().toUtf8();
449 if (boost::xpressive::regex_match(sName,what,expression)) {
456 if (pNode->nodeClass() == OpcUa_NodeClass_Object) {
457 UaReference *pRefList = (UaReference *)pNode->getUaReferenceLists()->pTargetNodes();
460 pRefList = pRefList->pNextForwardReference();