1 #ifndef __UACONTROLVARIABLE_H__ 2 #define __UACONTROLVARIABLE_H__ 4 #include "uaobjecttypes.h" 5 #include "uabasenodes.h" 6 #include <opcua_dataitemtype.h> 7 #include <opcua_basedatavariabletype.h> 9 #include "boost/bind.hpp" 10 #include "boost/signals2.hpp" 15 #include <opcua_baseobjecttype.h> 19 class NmBuildingAutomation;
24 class UaControlVariable :
25 public OpcUa::BaseDataVariableType
39 NmBuildingAutomation* pNodeManager,
41 UaMutexRefCounted* pSharedMutex
46 const UaNodeId& newNodeId,
47 NmBuildingAutomation* pNodeManager,
49 UaMutexRefCounted* pSharedMutex
66 virtual UaStatus
write(UaDataValue &udv) {
82 virtual UaStatus
setValue(Session *pSession,
const UaDataValue& dataValue,OpcUa_Boolean checkAccessLevel)
87 ret = OpcUa::BaseDataVariableType::setValue(pSession, dataValue, checkAccessLevel);
99 virtual UaStatus
setValueOnChange(Session *pSession,
const UaDataValue& dataValue, OpcUa_Boolean checkAccessLevel)
105 ret = OpcUa::BaseDataVariableType::setValue(pSession, dataValue, checkAccessLevel);
106 TRACE1_DATA(SERVER_CORE, UA_T
"<-- UaControlDevicetem::setItem %s", browseName().toString().toUtf8());
107 valueChange(pSession, dataValue, checkAccessLevel);
116 TRACE2_DATA(SERVER_CORE, UA_T
"<-- UaControlDevicetem::connectItem %s %s", browseName().toString().toUtf8(), item->browseName().toString().toUtf8());
132 boost::signals2::signal<void(Session *pSession, const UaDataValue& dataValue, OpcUa_Boolean checkAccessLevel) >
valueChange;
138 const OpcUa_Variant *val = dataValue.value();
140 switch (val->Datatype) {
141 case OpcUaType_Boolean:
144 case OpcUaType_SByte:
150 case OpcUaType_Int16:
153 case OpcUaType_UInt16:
156 case OpcUaType_Int32:
159 case OpcUaType_UInt32:
162 case OpcUaType_Int64:
163 curValue = (double)val->Value.Int64;
165 case OpcUaType_UInt64:
166 curValue = (
double)val->Value.UInt64;
168 case OpcUaType_Float:
171 case OpcUaType_Double:
192 class UaControlDeviceItem :
193 public UaControlVariable
212 NmBuildingAutomation* pNodeManager,
213 UaVariable *instance,
216 UaMutexRefCounted* pSharedMutex
231 const UaString&
name,
232 const UaNodeId& newNodeId,
233 NmBuildingAutomation* pNodeManager,
235 UaVariableType *instance,
238 UaMutexRefCounted* pSharedMutex
241 virtual UaStatus
write(UaDataValue &udv);
244 virtual UaStatus
read();
250 virtual UaStatus
read(IOVariableCallback *iom);
256 setValueHandling(UaVariable_Value_CacheIsSource);
257 setAccessLevel(Ua_AccessLevel_CurrentRead );
260 setValueHandling(UaVariable_Value_Cache);
261 setAccessLevel(Ua_AccessLevel_CurrentWrite);
264 setValueHandling(UaVariable_Value_Cache);
265 setAccessLevel(Ua_AccessLevel_CurrentRead | Ua_AccessLevel_CurrentWrite);
272 std::vector<OpcUa::BaseMethod*>
m_pMethod;