Exemple #1
0
        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);
        }
Exemple #3
0
        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));
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
        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();
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        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);
        }