private static void AddDataSpecification(AdminShellV20.AdministrationShellEnv env, AdminShellV20.SubmodelElement submodelElement, Iec61360Data data) { var cd = CreateConceptDescription(env, data); // cd should already contain IEC61360Spec; add data spec // TODO (Robin, 2020-09-03): MIHO is not sure, if the data spec reference is correct; please check var eds = cd.IEC61360DataSpec; if (eds != null) { eds.dataSpecification = new AdminShellV20.DataSpecificationRef(cd.GetReference()); } submodelElement.semanticId = new AdminShellV20.SemanticId(cd.GetReference()); }
private static void InitSubmodelElement(AdminShellV20.AdministrationShellEnv env, AdminShellV20.SubmodelElement submodelElement, Iec61360Data data) { AddDescriptions(submodelElement, data); AddDataSpecification(env, submodelElement, data); }
private static string CreateSubmodelElement(AdminShellV20.SubmodelElement element) { UAObject elem = new UAObject(); elem.BrowseName = "1:" + element.idShort; elem.NodeId = "ns=1;i=" + masterID.ToString(); masterID++; List <Reference> refs = new List <Reference>(); refs.Add(CreateHasTypeDefinition("1:AASSubmodelElementType")); refs.Add( CreateReference( "HasProperty", CreateProperty(element.category, "PropertyType", "Category", "String"))); refs.Add(CreateReference("HasComponent", CreateSemanticId(element.semanticId))); //add Referable & //add Description if it exists if (element.description == null) { refs.Add(CreateReference("HasInterface", CreateReferable(element.category, null))); } else { refs.Add( CreateReference( "HasInterface", CreateReferable(element.category, element.description.langString))); } //add Kind if it exists if (element.kind != null) { refs.Add( CreateReference( "HasProperty", CreateProperty(element.kind.kind, "1:AASModelingKindDataType", "ModellingKind", "String"))); } //add Qualifier if it exists if (element.qualifiers != null) { foreach (AdminShellV20.Qualifier qualifier in element.qualifiers) { refs.Add( CreateReference( "HasComponent", CreateAASQualifier(qualifier.type, qualifier.value, qualifier.valueId))); } } //Set Elementspecific Data string type = element.GetElementName(); switch (type) { case "SubmodelElementCollection": AdminShellV20.SubmodelElementCollection coll = (AdminShellV20.SubmodelElementCollection)element; refs.Add(CreateReference("HasComponent", CreateSubmodelElementCollection(coll))); break; case "Property": AdminShellV20.Property prop = (AdminShellV20.Property)element; refs.Add(CreateReference("HasComponent", CreatePropertyType(prop.value, prop.valueId))); break; case "Operation": AdminShellV20.Operation op = (AdminShellV20.Operation)element; refs.Add(CreateReference("HasComponent", CreateAASOperation(op.inputVariable, op.outputVariable))); break; case "Blob": AdminShellV20.Blob blob = (AdminShellV20.Blob)element; refs.Add(CreateReference("HasComponent", CreateAASBlob(blob.value, blob.mimeType))); break; case "File": AdminShellV20.File file = (AdminShellV20.File)element; refs.Add(CreateReference("HasComponent", CreateAASFile(file.value, file.mimeType))); break; case "RelationshipElement": AdminShellV20.RelationshipElement rela = (AdminShellV20.RelationshipElement)element; refs.Add( CreateReference( "HasComponent", CreateAASRelationshipElement(rela.first.ToString(), rela.second.ToString()))); break; case "ReferenceElement": AdminShellV20.ReferenceElement refe = (AdminShellV20.ReferenceElement)element; refs.Add(CreateReference("HasComponent", CreateReferenceElement(refe.value.ToString()))); break; } elem.References = refs.ToArray(); root.Add((UANode)elem); return(elem.NodeId); }