2 #include "boost/bind/bind.hpp" 4 #define _USE_MATH_DEFINES 8 #define isnan(x) _isnan(x) 9 #define isinf(x) (!_finite(x)) 10 #define fpu_error(x) (isinf(x) || isnan(x)) 290 UaControlVariable(
name, uaId, pNodeConfig, dv, pSharedMutex), m_pNodeManager(pNodeConfig),m_pParent(parent)
297 string nname = citem.
name();
299 m_cExists = citem.
when().present();
300 m_sFormul = citem.
value();
302 m_sExists = citem.
status().present();
306 for (UaControlVariableMap::const_iterator vit = cvs.begin(); vit != cvs.end(); vit++)
308 string nn = (*vit).first;
309 UaControlVariable *uac = (*vit).second;
312 if (m_sFormul.find(nn) != string::npos)
313 pushDataVariable(nn, uac);
315 m_formul.EnableOptimizer(
false);
316 m_formul.DefineConst(
"pi", M_PI);
317 m_formul.DefineConst(
"e", M_E);
318 m_formul.DefineFun(
"pow", PowFunc);
320 m_formul.SetVarFactory(getValueFromItem,
this);
321 m_formul.SetExpr(m_sFormul);
324 m_sWhenCondition = citem.
when().get();
326 for (UaControlVariableMap::const_iterator vit = cvs.begin(); vit != cvs.end(); vit++)
328 string nn = (*vit).first;
329 UaControlVariable *uac = (*vit).second;
330 if (m_sWhenCondition.find(nn) != string::npos)
331 pushConditionVariable(nn, uac);
333 m_whenCondition.EnableOptimizer(
false);
334 m_whenCondition.DefineConst(
"pi", M_PI);
335 m_whenCondition.DefineConst(
"e", M_E);
336 m_whenCondition.DefineFun(
"pow", PowFunc);
338 m_whenCondition.SetVarFactory(getValueFromWhenItem,
this);
339 m_whenCondition.SetExpr(m_sWhenCondition);
343 m_sStatusCondition = citem.
status().get();
344 for (UaControlVariableMap::const_iterator vit = cvs.begin(); vit != cvs.end(); vit++)
346 string nn = (*vit).first;
347 UaControlVariable *uac = (*vit).second;
348 if (m_sStatusCondition.find(nn) != string::npos)
349 pushStatusVariable(nn, uac);
351 m_statusFormula.EnableOptimizer(
false);
352 m_statusFormula.DefineConst(
"pi", M_PI);
353 m_statusFormula.DefineConst(
"e", M_E);
354 m_statusFormula.DefineFun(
"pow", PowFunc);
356 m_statusFormula.SetVarFactory(getValueFromStatusItem,
this);
357 m_statusFormula.SetExpr(m_sStatusCondition);
360 setValueHandling(UaVariable_Value_CacheIsSource);
376 UaDataValue dataValue;
378 UaStatus Status = OpcUa_Good;
379 OpcUa_StatusCode when_status;
380 OpcUa_StatusCode val_status;
381 OpcUa_StatusCode status_status;
397 if (when_status != OpcUa_Good)
406 if (val_status != OpcUa_Good) {
407 sDiag =
"Sensor is bad";
408 Status.setStatus(val_status, sDiag);
418 if (status_status != OpcUa_Good) {
419 sDiag =
"Status sensor is bad";
420 Status.setStatus(status_status, sDiag);
427 sDiag =
"Condition is false";
428 Status.setStatus(OpcUa_Bad, sDiag);
433 Status.setStatus(OpcUa_Good, sDiag);
440 Status.setStatus(OpcUa_Good, sDiag);
447 sDiag =
"Calculation Error";
448 Status.setStatus(OpcUa_BadUnexpectedError,sDiag);
452 udt = dValue.sourceTimestamp();
453 sdt = UaDateTime::now();
458 dataValue.setDataValue(val, OpcUa_False, OpcUa_BadUnexpectedError, udt, sdt);
461 dataValue.setDataValue(val, OpcUa_False, Status.code(), udt, sdt);
474 Status =
setValue(pSession, dataValue, checkAccessLevel);
480 UaDataValue dataValue;
482 UaStatus Status = OpcUa_Good;
563 LOG(
Log::INF) <<
"Variable " << ind <<
" is not found!";
591 LOG(
Log::INF) <<
"Variable " << ind <<
" is not found!";
613 LOG(
Log::INF) <<
"Variable " << ind <<
" is not found!";