コード例 #1
0
        /// <summary>
        /// Creates the node managers for the server.
        /// </summary>
        /// <remarks>
        /// This method allows the sub-class create any additional node managers which it uses. The SDK
        /// always creates a CoreNodesManager which handles the built-in nodes defined by the specification.
        /// Any additional NodeManagers are expected to handle application specific nodes.
        /// </remarks>
        protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration)
        {
            var nodeManagers = new List <INodeManager>();

            if (!string.IsNullOrEmpty(NodesFileName) && !File.Exists(NodesFileName))
            {
                string errorMessage = $"The user node configuration file {NodesFileName} does not exist.";
                Logger.Error(errorMessage);
                throw new Exception(errorMessage);
            }

            // Add encodable complex types.
            server.Factory.AddEncodeableTypes(Assembly.GetExecutingAssembly());

            PlcNodeManager = new PlcNodeManager(server, configuration, NodesFileName);
            nodeManagers.Add(PlcNodeManager);

            if (PlcSimulation.AddSimpleEventsSimulation)
            {
                SimpleEventsNodeManager = new SimpleEventsNodeManager(server, configuration);
                nodeManagers.Add(SimpleEventsNodeManager);
            }

            if (PlcSimulation.AddAlarmSimulation)
            {
                AlarmNodeManager = new AlarmConditionServerNodeManager(server, configuration);
                nodeManagers.Add(AlarmNodeManager);
            }
            var masterNodeManager = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray());

            return(masterNodeManager);
        }
コード例 #2
0
        /// <summary>
        /// Creates the node managers for the server.
        /// </summary>
        /// <remarks>
        /// This method allows the sub-class create any additional node managers which it uses. The SDK
        /// always creates a CoreNodeManager which handles the built-in nodes defined by the specification.
        /// Any additional NodeManagers are expected to handle application specific nodes.
        /// </remarks>
        protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration)
        {
            PlcNodeManager = new PlcNodeManager(server, configuration);
            List <INodeManager> nodeManagers = new List <INodeManager>
            {
                PlcNodeManager
            };

            return(new MasterNodeManager(server, configuration, null, nodeManagers.ToArray()));
        }
コード例 #3
0
        /// <summary>
        /// Creates the node managers for the server.
        /// </summary>
        /// <remarks>
        /// This method allows the sub-class create any additional node managers which it uses. The SDK
        /// always creates a CoreNodesManager which handles the built-in nodes defined by the specification.
        /// Any additional NodeManagers are expected to handle application specific nodes.
        /// </remarks>
        protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration)
        {
            var nodeManagers = new List <INodeManager>();

            if (!string.IsNullOrEmpty(NodesFileName) && !File.Exists(NodesFileName))
            {
                string errorMessage = $"The user node configuration file {NodesFileName} does not exist.";
                Logger.Error(errorMessage);
                throw new Exception(errorMessage);
            }
            PlcNodeManager = new PlcNodeManager(server, configuration, NodesFileName);
            nodeManagers.Add(PlcNodeManager);
            var masterNodeManager = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray());

            return(masterNodeManager);
        }
コード例 #4
0
        /// <summary>
        /// Creates the node managers for the server.
        /// </summary>
        /// <remarks>
        /// This method allows the sub-class create any additional node managers which it uses. The SDK
        /// always creates a CoreNodesManager which handles the built-in nodes defined by the specification.
        /// Any additional NodeManagers are expected to handle application specific nodes.
        /// </remarks>
        protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration)
        {
            var nodeManagers = new List <INodeManager>();

            if (!string.IsNullOrEmpty(NodesFileName) && !File.Exists(NodesFileName))
            {
                string errorMessage = $"The user node configuration file {NodesFileName} does not exist.";
                Logger.Error(errorMessage);
                throw new Exception(errorMessage);
            }

            // Add encodable complex types.
            server.Factory.AddEncodeableTypes(Assembly.GetExecutingAssembly());
            string targetNamespace = Opc.Ua.Namespaces.OpcUa;

            if (CompiledModels != null)
            {
                Assembly loadedAssembly = Assembly.LoadFile(CompiledModels);
                Logger.Information($"Loaded assembly {loadedAssembly.FullName}");
                server.Factory.AddEncodeableTypes(loadedAssembly);

                foreach (var t in loadedAssembly.DefinedTypes)
                {
                    if (t.FullName.EndsWith(".Namespaces"))
                    {
                        foreach (var f in t.GetFields())
                        {
                            Logger.Information($"Namespace {f.Name} {f.GetRawConstantValue()}");
                            targetNamespace = f.GetRawConstantValue() as string;
                        }
                    }
                }
                PlcNodeManager = new PlcNodeManager(server, configuration, loadedAssembly, targetNamespace, NodesFileName);
            }
            else
            {
                PlcNodeManager = new PlcNodeManager(server, configuration, NodesFileName);
            }
            nodeManagers.Add(PlcNodeManager);
            var masterNodeManager = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray());

            return(masterNodeManager);
        }
コード例 #5
0
        /// <summary>
        /// Creates the node managers for the server.
        /// </summary>
        /// <remarks>
        /// This method allows the sub-class create any additional node managers which it uses. The SDK
        /// always creates a CoreNodeManager which handles the built-in nodes defined by the specification.
        /// Any additional NodeManagers are expected to handle application specific nodes.
        /// </remarks>
        protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration)
        {
            if (!String.IsNullOrEmpty(Program.NodesFile) && File.Exists(Program.NodesFile))
            {
                PlcNodeManager = new PlcNodeManagerFromFile(server, configuration, Program.NodesFile);
            }
            else
            {
                PlcNodeManager = new PlcNodeManager(server, configuration);
            }

            List <INodeManager> nodeManagers = new List <INodeManager>
            {
                PlcNodeManager,
            };

            MasterNodeManager masterNodeManager = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray());

            return(masterNodeManager);
        }