From b7c37b4c487f88d6b98042b0119a5c9f01fca464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6tz=20G=C3=B6risch?= Date: Wed, 26 Apr 2023 10:23:18 +0000 Subject: [PATCH] feat(GMS): Bring features of FullGMS to BasicGMS --- GMS/BasicGMS.cpp | 67 ++++++++++++++++++++++++++++++++++++++++- GMS/BasicGMS.hpp | 7 +++-- GMS/InstantiatedGMS.hpp | 1 + 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/GMS/BasicGMS.cpp b/GMS/BasicGMS.cpp index e597fb89..add3b90f 100644 --- a/GMS/BasicGMS.cpp +++ b/GMS/BasicGMS.cpp @@ -3,16 +3,20 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2022 (c) Sebastian Friedl, ISW University of Stuttgart (for VDMA e.V.) + * Copyright 2022 (c) Alen Galinec */ #include "BasicGMS.hpp" +#include #include +#include #include "../TypeDefinition/GMS/Constants.hpp" #include "../TypeDefinition/GMS/GMSType.hpp" +#include "../TypeDefinition/TypeDefinition.hpp" -BasicGMS::BasicGMS(UA_Server *pServer) : InstantiatedMachineTool(pServer) { +BasicGMS::BasicGMS(UA_Server *pServer) : InstantiatedGMS(pServer) { MachineName = "BasicGMS"; CreateObject(); } @@ -42,8 +46,10 @@ void BasicGMS::CreateObject() { InstantiateIdentification(); InstantiateMonitoring(); InstantiateProduction(); + InstantiateEquipment(); InstantiateTools(); InstantiateResultManagement(); + InstantiateNotification(); InstantiateOptional(mt.Notification->Prognoses, m_pServer, n); InstantiateOptional(mt.Notification->Prognoses->Calibration, m_pServer, n); @@ -179,6 +185,65 @@ void BasicGMS::InstantiateTools() { } } +void BasicGMS::InstantiateEquipment() { + InstantiateOptional(gms.Equipment->Tools, m_pServer, n); + + auto &sensor1 = InstantiateSensor("Sensor1"); + sensor1.Class->Value = 2; /* TactileTouchTrigger */ + sensor1.ControlIdentifier1 = 11; + sensor1.ControlIdentifier2 = 3; + sensor1.ControlIdentifierInterpretation = UA_ToolManagement::UA_TOOLMANAGEMENT_GROUPBASED; + sensor1.Locked->Value = true; + sensor1.Locked->ReasonForLocking = UA_ToolLocked::UA_TOOLLOCKED_BYOPERATOR; + sensor1.Name = "T11_P3"; + InstantiateOptional(sensor1.ControlIdentifier2, m_pServer, n); + InstantiateOptional(sensor1.Name, m_pServer, n); + + // Additional SensorType members + InstantiateOptional(sensor1.Alignment, m_pServer, n); + sensor1.Alignment = UA_ToolAlignmentState::UA_TOOLALIGNMENTSTATE_INDEXED; + + // TODO: What is the correct format of the "Axes" property according to the spec? + InstantiateOptional(sensor1.Axes, m_pServer, n); + sensor1.Axes->push_back("X"); + sensor1.Axes->push_back("Y"); + + InstantiateOptional(sensor1.Capabilities, m_pServer, n); + sensor1.Capabilities->push_back(UA_ToolCapabilities::UA_TOOLCAPABILITIES_PTMEAS); + + InstantiateOptional(sensor1.IsQualifiedStatus, m_pServer, n); + sensor1.IsQualifiedStatus = UA_ToolIsQualifiedStatus::UA_TOOLISQUALIFIEDSTATUS_QUALIFIED; + + // EUInformation for Days according to CEFACT + const UmatiServerLib::EUInformation_t EU_Days{ + .NamespaceUri = "http://www.opcfoundation.org/UA/units/un/cefact", .UnitId = 4473177, .DisplayName = {"", "d"}, .Description = {"", "days"}}; + + sensor1.ToolLife->Qualified->EngineeringUnits = EU_Days; + sensor1.ToolLife->Qualified->IsCountingUp = true; + sensor1.ToolLife->Qualified->StartValue = 0; + sensor1.ToolLife->Qualified->WarningValue = 5; + sensor1.ToolLife->Qualified->LimitValue = 7; + sensor1.ToolLife->Qualified->Value = 1; + InstantiateOptional(sensor1.ToolLife, m_pServer, n); + InstantiateOptional(sensor1.ToolLife->Qualified, m_pServer, n); + InstantiateOptional(sensor1.ToolLife->Qualified->Value, m_pServer, n); + InstantiateOptional(sensor1.ToolLife->Qualified->StartValue, m_pServer, n); + InstantiateOptional(sensor1.ToolLife->Qualified->WarningValue, m_pServer, n); + InstantiateOptional(sensor1.ToolLife->Qualified->LimitValue, m_pServer, n); +} + +void BasicGMS::InstantiateNotification() { + InstantiateOptional(gms.Notification->Prognoses, m_pServer, n); + InstantiateOptional(gms.Notification->Prognoses->Calibration, m_pServer, n); + gms.Notification->Prognoses->Calibration.value.Calibrated = true; + InstantiateOptional(gms.Notification->Prognoses->Calibration->CalibrationCertificate, m_pServer, n); + { + std::stringstream ss; + ss << "https://www.ptb.de/dcc/#" << MachineName; + gms.Notification->Prognoses->Calibration.value.CalibrationCertificate->push_back(ss.str()); + } +} + void BasicGMS::Simulate() { ++m_simStep; int i = m_simStep; diff --git a/GMS/BasicGMS.hpp b/GMS/BasicGMS.hpp index cb2f444f..7b5c55e7 100644 --- a/GMS/BasicGMS.hpp +++ b/GMS/BasicGMS.hpp @@ -3,13 +3,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2022 (c) Sebastian Friedl, ISW University of Stuttgart (for VDMA e.V.) +* Copyright 2022 (c) Alen Galinec */ #pragma once -#include "../MachineTools/InstantiatedMachineTool.hpp" +#include "InstantiatedGMS.hpp" #include "../TypeDefinition/GMS/GMSType.hpp" -class BasicGMS : public InstantiatedMachineTool { +class BasicGMS : public InstantiatedGMS { public: BasicGMS(UA_Server *pServer); @@ -25,6 +26,8 @@ class BasicGMS : public InstantiatedMachineTool { void InstantiateMonitoring(); void InstantiateProduction(); void InstantiateTools(); + void InstantiateEquipment() override; + void InstantiateNotification() override; int m_simStep = 0; void initCorrection(GMS::CorrectionType_t &corr, std::string Identifier, std::string CharacteristicIdentifier, double value); diff --git a/GMS/InstantiatedGMS.hpp b/GMS/InstantiatedGMS.hpp index 177ef0b5..0ab4f2de 100644 --- a/GMS/InstantiatedGMS.hpp +++ b/GMS/InstantiatedGMS.hpp @@ -12,6 +12,7 @@ #include #include +#include "../MachineTools/InstantiatedMachineTool.hpp" #include "../MachineTools/SimulatedInstance.hpp" #include "../TypeDefinition/GMS/GMSType.hpp" #include "../UmatiServerLib/NodesMaster.hpp"