Skip to content

Commit b7c37b4

Browse files
committed
feat(GMS): Bring features of FullGMS to BasicGMS
1 parent 6070def commit b7c37b4

File tree

3 files changed

+72
-3
lines changed

3 files changed

+72
-3
lines changed

GMS/BasicGMS.cpp

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@
33
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
44
*
55
* Copyright 2022 (c) Sebastian Friedl, ISW University of Stuttgart (for VDMA e.V.)
6+
* Copyright 2022 (c) Alen Galinec
67
*/
78

89
#include "BasicGMS.hpp"
910

11+
#include <sstream>
1012
#include <string>
13+
#include <unordered_map>
1114

1215
#include "../TypeDefinition/GMS/Constants.hpp"
1316
#include "../TypeDefinition/GMS/GMSType.hpp"
17+
#include "../TypeDefinition/TypeDefinition.hpp"
1418

15-
BasicGMS::BasicGMS(UA_Server *pServer) : InstantiatedMachineTool(pServer) {
19+
BasicGMS::BasicGMS(UA_Server *pServer) : InstantiatedGMS(pServer) {
1620
MachineName = "BasicGMS";
1721
CreateObject();
1822
}
@@ -42,8 +46,10 @@ void BasicGMS::CreateObject() {
4246
InstantiateIdentification();
4347
InstantiateMonitoring();
4448
InstantiateProduction();
49+
InstantiateEquipment();
4550
InstantiateTools();
4651
InstantiateResultManagement();
52+
InstantiateNotification();
4753

4854
InstantiateOptional(mt.Notification->Prognoses, m_pServer, n);
4955
InstantiateOptional(mt.Notification->Prognoses->Calibration, m_pServer, n);
@@ -179,6 +185,65 @@ void BasicGMS::InstantiateTools() {
179185
}
180186
}
181187

188+
void BasicGMS::InstantiateEquipment() {
189+
InstantiateOptional(gms.Equipment->Tools, m_pServer, n);
190+
191+
auto &sensor1 = InstantiateSensor("Sensor1");
192+
sensor1.Class->Value = 2; /* TactileTouchTrigger */
193+
sensor1.ControlIdentifier1 = 11;
194+
sensor1.ControlIdentifier2 = 3;
195+
sensor1.ControlIdentifierInterpretation = UA_ToolManagement::UA_TOOLMANAGEMENT_GROUPBASED;
196+
sensor1.Locked->Value = true;
197+
sensor1.Locked->ReasonForLocking = UA_ToolLocked::UA_TOOLLOCKED_BYOPERATOR;
198+
sensor1.Name = "T11_P3";
199+
InstantiateOptional(sensor1.ControlIdentifier2, m_pServer, n);
200+
InstantiateOptional(sensor1.Name, m_pServer, n);
201+
202+
// Additional SensorType members
203+
InstantiateOptional(sensor1.Alignment, m_pServer, n);
204+
sensor1.Alignment = UA_ToolAlignmentState::UA_TOOLALIGNMENTSTATE_INDEXED;
205+
206+
// TODO: What is the correct format of the "Axes" property according to the spec?
207+
InstantiateOptional(sensor1.Axes, m_pServer, n);
208+
sensor1.Axes->push_back("X");
209+
sensor1.Axes->push_back("Y");
210+
211+
InstantiateOptional(sensor1.Capabilities, m_pServer, n);
212+
sensor1.Capabilities->push_back(UA_ToolCapabilities::UA_TOOLCAPABILITIES_PTMEAS);
213+
214+
InstantiateOptional(sensor1.IsQualifiedStatus, m_pServer, n);
215+
sensor1.IsQualifiedStatus = UA_ToolIsQualifiedStatus::UA_TOOLISQUALIFIEDSTATUS_QUALIFIED;
216+
217+
// EUInformation for Days according to CEFACT
218+
const UmatiServerLib::EUInformation_t EU_Days{
219+
.NamespaceUri = "http://www.opcfoundation.org/UA/units/un/cefact", .UnitId = 4473177, .DisplayName = {"", "d"}, .Description = {"", "days"}};
220+
221+
sensor1.ToolLife->Qualified->EngineeringUnits = EU_Days;
222+
sensor1.ToolLife->Qualified->IsCountingUp = true;
223+
sensor1.ToolLife->Qualified->StartValue = 0;
224+
sensor1.ToolLife->Qualified->WarningValue = 5;
225+
sensor1.ToolLife->Qualified->LimitValue = 7;
226+
sensor1.ToolLife->Qualified->Value = 1;
227+
InstantiateOptional(sensor1.ToolLife, m_pServer, n);
228+
InstantiateOptional(sensor1.ToolLife->Qualified, m_pServer, n);
229+
InstantiateOptional(sensor1.ToolLife->Qualified->Value, m_pServer, n);
230+
InstantiateOptional(sensor1.ToolLife->Qualified->StartValue, m_pServer, n);
231+
InstantiateOptional(sensor1.ToolLife->Qualified->WarningValue, m_pServer, n);
232+
InstantiateOptional(sensor1.ToolLife->Qualified->LimitValue, m_pServer, n);
233+
}
234+
235+
void BasicGMS::InstantiateNotification() {
236+
InstantiateOptional(gms.Notification->Prognoses, m_pServer, n);
237+
InstantiateOptional(gms.Notification->Prognoses->Calibration, m_pServer, n);
238+
gms.Notification->Prognoses->Calibration.value.Calibrated = true;
239+
InstantiateOptional(gms.Notification->Prognoses->Calibration->CalibrationCertificate, m_pServer, n);
240+
{
241+
std::stringstream ss;
242+
ss << "https://www.ptb.de/dcc/#" << MachineName;
243+
gms.Notification->Prognoses->Calibration.value.CalibrationCertificate->push_back(ss.str());
244+
}
245+
}
246+
182247
void BasicGMS::Simulate() {
183248
++m_simStep;
184249
int i = m_simStep;

GMS/BasicGMS.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
44
*
55
* Copyright 2022 (c) Sebastian Friedl, ISW University of Stuttgart (for VDMA e.V.)
6+
* Copyright 2022 (c) Alen Galinec
67
*/
78

89
#pragma once
9-
#include "../MachineTools/InstantiatedMachineTool.hpp"
10+
#include "InstantiatedGMS.hpp"
1011
#include "../TypeDefinition/GMS/GMSType.hpp"
1112

12-
class BasicGMS : public InstantiatedMachineTool {
13+
class BasicGMS : public InstantiatedGMS {
1314
public:
1415
BasicGMS(UA_Server *pServer);
1516

@@ -25,6 +26,8 @@ class BasicGMS : public InstantiatedMachineTool {
2526
void InstantiateMonitoring();
2627
void InstantiateProduction();
2728
void InstantiateTools();
29+
void InstantiateEquipment() override;
30+
void InstantiateNotification() override;
2831
int m_simStep = 0;
2932

3033
void initCorrection(GMS::CorrectionType_t &corr, std::string Identifier, std::string CharacteristicIdentifier, double value);

GMS/InstantiatedGMS.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <cstdint>
1313
#include <unordered_map>
1414

15+
#include "../MachineTools/InstantiatedMachineTool.hpp"
1516
#include "../MachineTools/SimulatedInstance.hpp"
1617
#include "../TypeDefinition/GMS/GMSType.hpp"
1718
#include "../UmatiServerLib/NodesMaster.hpp"

0 commit comments

Comments
 (0)