static void Main(string[] args) { Console.WriteLine("Hello World!"); AssetAdministrationShell aas = SimpleAssetAdministrationShell.GetAssetAdministrationShell(); ISubmodel testSubmodel = aas.Submodels["TestSubmodel"]; ServerSettings submodelServerSettings = ServerSettings.CreateSettings(); submodelServerSettings.ServerConfig.Hosting.ContentPath = "Content"; submodelServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5222"); SubmodelHttpServer submodelServer = new SubmodelHttpServer(submodelServerSettings); ISubmodelServiceProvider submodelServiceProvider = testSubmodel.CreateServiceProvider(); submodelServer.SetServiceProvider(submodelServiceProvider); submodelServiceProvider.UseAutoEndpointRegistration(submodelServerSettings.ServerConfig); Task runSubmodelTask = submodelServer.RunAsync(); ServerSettings aasServerSettings = ServerSettings.CreateSettings(); aasServerSettings.ServerConfig.Hosting.ContentPath = "Content"; aasServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5111"); IAssetAdministrationShellServiceProvider serviceProvider = aas.CreateServiceProvider(true); serviceProvider.SubmodelRegistry.RegisterSubmodelServiceProvider(testSubmodel.IdShort, submodelServiceProvider); serviceProvider.UseAutoEndpointRegistration(aasServerSettings.ServerConfig); AssetAdministrationShellHttpServer aasServer = new AssetAdministrationShellHttpServer(aasServerSettings); aasServer.SetServiceProvider(serviceProvider); aasServer.Run(); }
public static AssetAdministrationShell GetAssetAdministrationShell() { AssetAdministrationShell aas = new AssetAdministrationShell() { IdShort = "SimpleAAS", Identification = new Identifier("http://basys40.de/shells/SimpleAAS/" + Guid.NewGuid().ToString(), KeyType.IRI), Description = new LangStringSet() { new LangString("de-DE", "Einfache VWS"), new LangString("en-US", "Simple AAS") }, Administration = new AdministrativeInformation() { Version = "1.0", Revision = "120" }, Asset = new Asset() { IdShort = "SimpleAsset", Identification = new Identifier("http://basys40.de/assets/SimpleAsset/" + Guid.NewGuid().ToString(), KeyType.IRI), Kind = AssetKind.Instance, Description = new LangStringSet() { new LangString("de-DE", "Einfaches Asset"), new LangString("en-US", "Simple Asset") } } }; Submodel testSubmodel = GetTestSubmodel(); aas.Submodels.Add(testSubmodel); return(aas); }
private static void LoadSingleShell() { AssetAdministrationShell aas = SimpleAssetAdministrationShell.SimpleAssetAdministrationShell.GetAssetAdministrationShell(); ISubmodel testSubmodel = aas.Submodels["TestSubmodel"]; ServerSettings submodelServerSettings = ServerSettings.CreateSettings(); submodelServerSettings.ServerConfig.Hosting.ContentPath = "Content"; submodelServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5222"); SubmodelHttpServer submodelServer = new SubmodelHttpServer(submodelServerSettings); ISubmodelServiceProvider submodelServiceProvider = testSubmodel.CreateServiceProvider(); submodelServer.SetServiceProvider(submodelServiceProvider); submodelServiceProvider.UseAutoEndpointRegistration(submodelServerSettings.ServerConfig); submodelServer.RunAsync(); ServerSettings aasServerSettings = ServerSettings.CreateSettings(); aasServerSettings.ServerConfig.Hosting.ContentPath = "Content"; aasServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5111"); IAssetAdministrationShellServiceProvider aasServiceProvider = aas.CreateServiceProvider(true); aasServiceProvider.SubmodelRegistry.RegisterSubmodelServiceProvider(testSubmodel.IdShort, submodelServiceProvider); aasServiceProvider.UseAutoEndpointRegistration(aasServerSettings.ServerConfig); AssetAdministrationShellHttpServer aasServer = new AssetAdministrationShellHttpServer(aasServerSettings); aasServer.SetServiceProvider(aasServiceProvider); aasServer.ApplicationStopping = () => { registryClient.DeleteAssetAdministrationShell(aas.Identification.Id); }; aasServer.RunAsync(); registryClient.CreateAssetAdministrationShell(new AssetAdministrationShellDescriptor(aas, aasServiceProvider.ServiceDescriptor.Endpoints)); registryClient.CreateSubmodel(aas.Identification.Id, new SubmodelDescriptor(testSubmodel, submodelServiceProvider.ServiceDescriptor.Endpoints)); }
private static void ConvertToAssetAdministrationShell(AssetAdministrationShellEnvironment_V2_0 environment) { foreach (var envAsset in environment.EnvironmentAssets) { Asset asset = new Asset { Administration = envAsset.Administration, Category = envAsset.Category, Description = envAsset.Description, Identification = envAsset.Identification, IdShort = envAsset.IdShort, Kind = envAsset.Kind, AssetIdentificationModel = envAsset.AssetIdentificationModelReference?.ToReference_V2_0 <ISubmodel>() }; environment.Assets.Add(asset); } foreach (var envConceptDescription in environment.EnvironmentConceptDescriptions) { ConceptDescription conceptDescription = new ConceptDescription() { Administration = envConceptDescription.Administration, Category = envConceptDescription.Category, Description = envConceptDescription.Description, Identification = envConceptDescription.Identification, IdShort = envConceptDescription.IdShort, IsCaseOf = envConceptDescription.IsCaseOf?.ConvertAll(c => c.ToReference_V2_0()), EmbeddedDataSpecifications = (envConceptDescription.EmbeddedDataSpecification?.DataSpecificationContent?.DataSpecificationIEC61360 != null) ? new List <DataSpecificationIEC61360>() : null }; if (conceptDescription.EmbeddedDataSpecifications != null) { DataSpecificationIEC61360 dataSpecification = envConceptDescription .EmbeddedDataSpecification .DataSpecificationContent .DataSpecificationIEC61360 .ToDataSpecificationIEC61360(); (conceptDescription.EmbeddedDataSpecifications as List <DataSpecificationIEC61360>).Add(dataSpecification); } environment.ConceptDescriptions.Add(conceptDescription); } foreach (var envSubmodel in environment.EnvironmentSubmodels) { Submodel submodel = new Submodel() { Administration = envSubmodel.Administration, Category = envSubmodel.Category, Description = envSubmodel.Description, Identification = envSubmodel.Identification, IdShort = envSubmodel.IdShort, Kind = envSubmodel.Kind, Parent = string.IsNullOrEmpty(envSubmodel.Parent) ? null : new Reference( new Key(KeyElements.AssetAdministrationShell, KeyType.IRI, envSubmodel.Parent, true)), SemanticId = envSubmodel.SemanticId?.ToReference_V2_0(), ConceptDescription = null, }; List <ISubmodelElement> smElements = envSubmodel.SubmodelElements.ConvertAll(c => c.submodelElement?.ToSubmodelElement(environment.ConceptDescriptions)); foreach (var smElement in smElements) { submodel.SubmodelElements.Add(smElement); } environment.Submodels.Add(submodel); } foreach (var envAssetAdministrationShell in environment.EnvironmentAssetAdministationShells) { AssetAdministrationShell assetAdministrationShell = new AssetAdministrationShell() { Administration = envAssetAdministrationShell.Administration, Category = envAssetAdministrationShell.Category, DerivedFrom = envAssetAdministrationShell.DerivedFrom?.ToReference_V2_0 <IAssetAdministrationShell>(), Description = envAssetAdministrationShell.Description, Identification = envAssetAdministrationShell.Identification, IdShort = envAssetAdministrationShell.IdShort }; IAsset asset = environment.Assets.Find(a => a.Identification.Id == envAssetAdministrationShell.AssetReference?.Keys?.FirstOrDefault()?.Value); assetAdministrationShell.Asset = asset; foreach (var envSubmodelRef in envAssetAdministrationShell.SubmodelReferences) { ISubmodel submodel = environment.Submodels.Find(s => s.Identification.Id == envSubmodelRef.Keys?.FirstOrDefault()?.Value); if (submodel != null) { assetAdministrationShell.Submodels.Add(submodel); } } environment.AssetAdministrationShells.Add(assetAdministrationShell); } }
static void Main(string[] args) { ServerSettings aasRepositorySettings = ServerSettings.CreateSettings(); aasRepositorySettings.ServerConfig.Hosting.ContentPath = "Content"; aasRepositorySettings.ServerConfig.Hosting.Urls.Add("http://+:5999"); MultiAssetAdministrationShellHttpServer server = new MultiAssetAdministrationShellHttpServer(aasRepositorySettings); AssetAdministrationShellRepositoryServiceProvider repositoryService = new AssetAdministrationShellRepositoryServiceProvider(); for (int i = 0; i < 10; i++) { AssetAdministrationShell aas = new AssetAdministrationShell() { IdShort = "MultiAAS_" + i, Identification = new Identifier("http://basys40.de/shells/MultiAAS/" + Guid.NewGuid().ToString(), KeyType.IRI), Description = new LangStringSet() { new LangString("de-DE", i + ". VWS"), new LangString("en-US", i + ". AAS") }, Administration = new AdministrativeInformation() { Version = "1.0", Revision = "120" }, Asset = new Asset() { IdShort = "Asset_" + i, Identification = new Identifier("http://basys40.de/assets/MultiAsset/" + Guid.NewGuid().ToString(), KeyType.IRI), Kind = AssetKind.Instance, Description = new LangStringSet() { new LangString("de-DE", i + ". Asset"), new LangString("en-US", i + ". Asset") } } }; aas.Submodels.Create(new Submodel() { Identification = new Identifier("http://basys40.de/submodels/" + Guid.NewGuid().ToString(), KeyType.IRI), IdShort = "TestSubmodel", SubmodelElements = new ElementContainer <ISubmodelElement>() { new Property <string>() { IdShort = "Property_" + i } } }); var aasServiceProvider = aas.CreateServiceProvider(true); repositoryService.RegisterAssetAdministrationShellServiceProvider(aas.IdShort, aasServiceProvider); } List <HttpEndpoint> endpoints = server.Settings.ServerConfig.Hosting.Urls.ConvertAll(c => new HttpEndpoint(c.Replace("+", "127.0.0.1"))); repositoryService.UseDefaultEndpointRegistration(endpoints); server.SetServiceProvider(repositoryService); server.Run(); }
private static void LoadMultipleShells() { ServerSettings aasRepositorySettings = ServerSettings.CreateSettings(); aasRepositorySettings.ServerConfig.Hosting.ContentPath = "Content"; aasRepositorySettings.ServerConfig.Hosting.Urls.Add("http://+:5999"); MultiAssetAdministrationShellHttpServer multiServer = new MultiAssetAdministrationShellHttpServer(aasRepositorySettings); AssetAdministrationShellRepositoryServiceProvider repositoryService = new AssetAdministrationShellRepositoryServiceProvider(); for (int i = 0; i < 3; i++) { AssetAdministrationShell aas = new AssetAdministrationShell() { IdShort = "MultiAAS_" + i, Identification = new Identifier("http://basyx.de/shells/MultiAAS/" + i, KeyType.IRI), Description = new LangStringSet() { new LangString("de-DE", i + ". VWS"), new LangString("en-US", i + ". AAS") }, Administration = new AdministrativeInformation() { Version = "1.0", Revision = "120" }, Asset = new Asset() { IdShort = "Asset_" + i, Identification = new Identifier("http://basyx.de/assets/MultiAsset/" + i, KeyType.IRI), Kind = AssetKind.Instance, Description = new LangStringSet() { new LangString("de-DE", i + ". Asset"), new LangString("en-US", i + ". Asset") } } }; aas.Submodels.Create(new Submodel() { Identification = new Identifier("http://basyx.de/submodels/" + i, KeyType.IRI), IdShort = "TestSubmodel", SubmodelElements = new ElementContainer <ISubmodelElement>() { new Property <string>() { IdShort = "Property_" + i, Value = "TestValue_" + i }, new SubmodelElementCollection() { IdShort = "Coll_" + i, Value = new ElementContainer <ISubmodelElement>() { new Property <string>() { IdShort = "SubProperty_" + i, Value = "TestSubValue_" + i } } } } }); var aasServiceProvider = aas.CreateServiceProvider(true); repositoryService.RegisterAssetAdministrationShellServiceProvider(aas.IdShort, aasServiceProvider); } List <HttpEndpoint> endpoints = multiServer.Settings.ServerConfig.Hosting.Urls.ConvertAll(c => new HttpEndpoint(c.Replace("+", "127.0.0.1"))); repositoryService.UseDefaultEndpointRegistration(endpoints); multiServer.SetServiceProvider(repositoryService); multiServer.ApplicationStopping = () => { foreach (var aasDescriptor in repositoryService.ServiceDescriptor.AssetAdministrationShellDescriptors) { registryClient.DeleteAssetAdministrationShell(aasDescriptor.Identification.Id); } }; multiServer.RunAsync(); foreach (var aasDescriptor in repositoryService.ServiceDescriptor.AssetAdministrationShellDescriptors) { registryClient.CreateAssetAdministrationShell(aasDescriptor); } }
public override IAssetAdministrationShell GenerateAssetAdministrationShell() { AssetAdministrationShell aas = new AssetAdministrationShell(); aas.IdShort = "HelloAAS"; aas.Identification = new Identifier("http://basys40.de/shells/HelloAAS/" + Guid.NewGuid().ToString(), KeyType.IRI); aas.Description = new LangStringSet() { new LangString("en-US", "This is an exemplary Asset Administration Shell for starters") }; aas.Asset = new Asset() { Description = new LangStringSet() { new LangString("en-US", "This is an exemplary Asset reference from the Asset Administration Shell") }, IdShort = "HelloAsset", Identification = new Identifier("http://basys40.de/assets/HelloAsset/" + Guid.NewGuid().ToString(), KeyType.IRI), Kind = AssetKind.Instance, SemanticId = new Reference(new GlobalKey(KeyElements.Asset, KeyType.IRI, "urn:basys:org.eclipse.basyx:assets:HelloAsset:1.0.0")) }; Submodel helloSubmodel = new Submodel { Description = new LangStringSet() { new LangString("en-US", "This is an exemplary Submodel") }, IdShort = "HelloSubmodel", Identification = new Identifier("http://basys40.de/submodels/HelloSubmodel/" + Guid.NewGuid().ToString(), KeyType.IRI), Kind = ModelingKind.Instance, SemanticId = new Reference(new GlobalKey(KeyElements.Submodel, KeyType.IRI, "urn:basys:org.eclipse.basyx:submodels:HelloSubmodel:1.0.0")) }; helloSubmodel.SubmodelElements = new ElementContainer <ISubmodelElement>(); helloSubmodel.SubmodelElements.Add(new Property <string>() { Description = new LangStringSet() { new LangString("en-US", "This is an exemplary property") }, IdShort = "HelloProperty", Kind = ModelingKind.Instance, Value = "TestValue", SemanticId = new Reference(new GlobalKey(KeyElements.Property, KeyType.IRI, "urn:basys:org.eclipse.basyx:dataElements:HelloProperty:1.0.0")) }); helloSubmodel.SubmodelElements.Add(new File() { Description = new LangStringSet() { new LangString("en-US", "This is an exemplary file attached to the Asset Administration Shell") }, IdShort = "HelloFile", Kind = ModelingKind.Instance, MimeType = "application/pdf", Value = "/HelloAssetAdministrationShell.pdf" }); var helloOperation_ConceptDescription = new ConceptDescription() { Identification = new Identifier("urn:basys:org.eclipse.basyx:dataSpecifications:EndpointSpecification:1.0.0", KeyType.IRI), EmbeddedDataSpecifications = new List <IEmbeddedDataSpecification>() { new EndpointSpecification( new EndpointSpecificationContent() { Endpoints = new List <IEndpoint>() { new OpcUaEndpoint("opc.tcp://127.0.0.1:4840/Objects/1:HelloAAS/1:SERVICE/1:TestOperation") } }) } }; helloSubmodel.SubmodelElements.Add(new Operation() { Description = new LangStringSet() { new LangString("en-US", "This is an exemplary operation returning the input argument with 'Hello' as prefix") }, IdShort = "HelloOperation", InputVariables = new OperationVariableSet() { new Property <string>() { IdShort = "Text" } }, OutputVariables = new OperationVariableSet() { new Property <string>() { IdShort = "ReturnValue" } }, ConceptDescription = helloOperation_ConceptDescription }); helloSubmodel.SubmodelElements.Add(new Event() { Description = new LangStringSet() { new LangString("en-US", "This is an exemplary event with only one property as event payload") }, IdShort = "HelloEvent", Kind = ModelingKind.Template, DataElements = new ElementContainer <ISubmodelElement>() { new Property <string>() { IdShort = "HelloEvent_Property", Kind = ModelingKind.Template } } }); aas.Submodels = new ElementContainer <ISubmodel>(); aas.Submodels.Add(helloSubmodel); var assetIdentificationSubmodel = new Submodel(); assetIdentificationSubmodel.IdShort = "AssetIdentification"; assetIdentificationSubmodel.Identification = new Identifier(Guid.NewGuid().ToString(), KeyType.Custom); assetIdentificationSubmodel.Kind = ModelingKind.Instance; assetIdentificationSubmodel.Parent = new Reference <IAssetAdministrationShell>(aas); var productTypeProp = new Property <string>() { IdShort = "ProductType", Kind = ModelingKind.Instance, SemanticId = new Reference( new GlobalKey( KeyElements.Property, KeyType.IRDI, "0173-1#02-AAO057#002")), Value = "HelloAsset_ProductType" }; ConceptDescription orderNumberCD = new ConceptDescription() { Identification = new Identifier("0173-1#02-AAO689#001", KeyType.IRDI), EmbeddedDataSpecifications = new List <IEmbeddedDataSpecification>() { new DataSpecificationIEC61360(new DataSpecificationIEC61360Content() { PreferredName = new LangStringSet { new LangString("EN", "identifying order number") }, Definition = new LangStringSet { new LangString("EN", "unique classifying number that enables to name an object and to order it from a supplier or manufacturer") }, DataType = DataTypeIEC61360.STRING }) } }; var orderNumber = new Property <string>() { IdShort = "OrderNumber", Kind = ModelingKind.Instance, SemanticId = new Reference( new GlobalKey( KeyElements.Property, KeyType.IRDI, "0173-1#02-AAO689#001")), Value = "HelloAsset_OrderNumber", ConceptDescription = orderNumberCD }; var serialNumber = new Property <string>() { IdShort = "SerialNumber", Kind = ModelingKind.Instance, Value = "HelloAsset_SerialNumber" }; assetIdentificationSubmodel.SubmodelElements.Add(productTypeProp); assetIdentificationSubmodel.SubmodelElements.Add(orderNumber); assetIdentificationSubmodel.SubmodelElements.Add(serialNumber); (aas.Asset as Asset).AssetIdentificationModel = new Reference <ISubmodel>(assetIdentificationSubmodel); aas.Submodels.Add(assetIdentificationSubmodel); return(aas); }