Skip to content

Commit

Permalink
Corrected an error that caused HasComponent references to not be adde…
Browse files Browse the repository at this point in the history
…d to the parent UAObject
  • Loading branch information
thomasfruehwirth committed Dec 3, 2020
1 parent 72da5ef commit 769fa30
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,18 @@ mapping UML::InstanceSpecification::instanceSpecification2OPCUAObject(inout node

var classifier := self.classifier->any(true); // should only have one classifier

assert warning (self.classifier->size() <= 1) with log("Element specifies more than one classifier. Only the first value is used");
_references := object OPCUA::ListOfReferences{};
_references.reference += object OPCUA::Reference{referenceType := getIdOrAlias("HasTypeDefinition"); value := classifier.createNodeId()};
_references.reference += object OPCUA::Reference{referenceType := getIdOrAlias("Organizes"); value := getIdOrAlias("ObjectsFolder"); isForward := false};

// transform property slots of the Instance
nodeset.uAVariable += self.ownedElement->selectByType(UML::Slot)->select(slot | slot.definingFeature.oclIsTypeOf(UML::Property))->map transformPropertySlot2UAVariable(result);

// TODO: transform properties of the class that are not defined as slot
log("number of slots not defined in the instance: " + classifier.ownedElement->selectByType(UML::Property)->select(p | self.slot.definingFeature->excludes(p))->size().toString());
nodeset.uAVariable += classifier.ownedElement->selectByType(UML::Property)->select(p | self.slot.definingFeature->excludes(p))->map transformClassifierProperty2UAVariable(result);

assert warning (self.classifier->size() <= 1) with log("Element specifies more than one classifier. Only the first value is used");
_references := object OPCUA::ListOfReferences{};
_references.reference += object OPCUA::Reference{referenceType := getIdOrAlias("HasTypeDefinition"); value := classifier.createNodeId()};
_references.reference += object OPCUA::Reference{referenceType := getIdOrAlias("Organizes"); value := getIdOrAlias("ObjectsFolder"); isForward := false};
}

mapping UML::Slot::transformPropertySlot2UAVariable(inout parent : OPCUA::UANode) : OPCUA::UAVariable {
Expand Down
56 changes: 30 additions & 26 deletions Uml2OpcuaTransformationTests/InstanceWithSlots.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,38 @@
<Uri>InstanceWithSlots</Uri>
</NamespaceUris>
<Aliases>
<Alias Alias="ObjectsFolder">i=85</Alias>
<Alias Alias="Organizes">i=35</Alias>
<Alias Alias="String">i=12</Alias>
<Alias Alias="ModellingRule_Mandatory">i=78</Alias>
<Alias Alias="HasComponent">i=47</Alias>
<Alias Alias="BaseObjectType">i=58</Alias>
<Alias Alias="HasTypeDefinition">i=40</Alias>
<Alias Alias="BaseDataVariableType">i=63</Alias>
<Alias Alias="HasModellingRule">i=37</Alias>
<Alias Alias="HasSubtype">i=45</Alias>
<Alias Alias="HasModellingRule">i=37</Alias>
<Alias Alias="String">i=12</Alias>
<Alias Alias="ModellingRule_Mandatory">i=78</Alias>
<Alias Alias="Int32">i=6</Alias>
<Alias Alias="Organizes">i=35</Alias>
<Alias Alias="BaseObjectType">i=58</Alias>
<Alias Alias="ObjectsFolder">i=85</Alias>
<Alias Alias="HasComponent">i=47</Alias>
</Aliases>
<UAVariable BrowseName="SN" NodeId="ns=1;i=1002" ParentNodeId="ns=1;i=1000" DataType="String">
<DisplayName>SN</DisplayName>
<UAVariable BrowseName="Manufacturer" NodeId="ns=1;i=1002" ParentNodeId="ns=1;i=1000" DataType="String">
<DisplayName>Manufacturer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">BaseDataVariableType</Reference>
<Reference ReferenceType="HasModellingRule">ModellingRule_Mandatory</Reference>
<Reference IsForward="false" ReferenceType="HasComponent">ns=1;i=1000</Reference>
</References>
<Value>
<types:String>#000000</types:String>
<types:String>ABB</types:String>
</Value>
</UAVariable>
<UAVariable BrowseName="Manufacturer" NodeId="ns=1;i=1003" ParentNodeId="ns=1;i=1000" DataType="String">
<DisplayName>Manufacturer</DisplayName>
<UAVariable BrowseName="Axes" NodeId="ns=1;i=1003" ParentNodeId="ns=1;i=1000" DataType="Int32">
<DisplayName>Axes</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">BaseDataVariableType</Reference>
<Reference ReferenceType="HasModellingRule">ModellingRule_Mandatory</Reference>
<Reference IsForward="false" ReferenceType="HasComponent">ns=1;i=1000</Reference>
</References>
<Value>
<types:String>ABB</types:String>
<types:Int32>6</types:Int32>
</Value>
</UAVariable>
<UAVariable BrowseName="Description" NodeId="ns=1;i=1001" ParentNodeId="ns=1;i=1000" DataType="String">
Expand All @@ -46,15 +46,15 @@
<Reference IsForward="false" ReferenceType="HasComponent">ns=1;i=1000</Reference>
</References>
</UAVariable>
<UAVariable BrowseName="Axes" NodeId="ns=1;i=1004" ParentNodeId="ns=1;i=1000" DataType="Int32">
<DisplayName>Axes</DisplayName>
<UAVariable BrowseName="SN" NodeId="ns=1;i=1004" ParentNodeId="ns=1;i=1000" DataType="String">
<DisplayName>SN</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">BaseDataVariableType</Reference>
<Reference ReferenceType="HasModellingRule">ModellingRule_Mandatory</Reference>
<Reference IsForward="false" ReferenceType="HasComponent">ns=1;i=1000</Reference>
</References>
<Value>
<types:Int32>6</types:Int32>
<types:String>#000000</types:String>
</Value>
</UAVariable>
<UAObjectType BrowseName="RobotType" NodeId="ns=1;i=1000">
Expand All @@ -67,34 +67,34 @@
<Reference ReferenceType="HasComponent">ns=1;i=1004</Reference>
</References>
</UAObjectType>
<UAVariable BrowseName="Manufacturer" NodeId="ns=1;i=1006" ParentNodeId="ns=1;i=1005" DataType="String">
<DisplayName>Manufacturer</DisplayName>
<UAVariable BrowseName="Description" NodeId="ns=1;i=1008" ParentNodeId="ns=1;i=1005" DataType="String">
<DisplayName>Description</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">BaseDataVariableType</Reference>
<Reference ReferenceType="HasModellingRule">ModellingRule_Mandatory</Reference>
<Reference IsForward="false" ReferenceType="HasComponent">ns=1;i=1005</Reference>
</References>
<Value>
<types:String>ABB</types:String>
</Value>
</UAVariable>
<UAVariable BrowseName="Description" NodeId="ns=1;i=1008" ParentNodeId="ns=1;i=1005" DataType="String">
<DisplayName>Description</DisplayName>
<UAVariable BrowseName="SN" NodeId="ns=1;i=1006" ParentNodeId="ns=1;i=1005" DataType="String">
<DisplayName>SN</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">BaseDataVariableType</Reference>
<Reference ReferenceType="HasModellingRule">ModellingRule_Mandatory</Reference>
<Reference IsForward="false" ReferenceType="HasComponent">ns=1;i=1005</Reference>
</References>
<Value>
<types:String>#005001</types:String>
</Value>
</UAVariable>
<UAVariable BrowseName="SN" NodeId="ns=1;i=1007" ParentNodeId="ns=1;i=1005" DataType="String">
<DisplayName>SN</DisplayName>
<UAVariable BrowseName="Manufacturer" NodeId="ns=1;i=1007" ParentNodeId="ns=1;i=1005" DataType="String">
<DisplayName>Manufacturer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">BaseDataVariableType</Reference>
<Reference ReferenceType="HasModellingRule">ModellingRule_Mandatory</Reference>
<Reference IsForward="false" ReferenceType="HasComponent">ns=1;i=1005</Reference>
</References>
<Value>
<types:String>#005001</types:String>
<types:String>ABB</types:String>
</Value>
</UAVariable>
<UAVariable BrowseName="Axes" NodeId="ns=1;i=1009" ParentNodeId="ns=1;i=1005" DataType="Int32">
Expand All @@ -113,6 +113,10 @@
<References>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1000</Reference>
<Reference IsForward="false" ReferenceType="Organizes">ObjectsFolder</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1006</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1007</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1008</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1009</Reference>
</References>
</UAObject>
</UANodeSet>

0 comments on commit 769fa30

Please sign in to comment.