Ejemplo n.º 1
0
        public void SetAnalysisMode(AnalysisMode mode)
        {
            ObserverController.Mode = mode;
            var agents = ObserverController.Agents;

            switch (mode)
            {
            case AnalysisMode.TolerableFaults:
                agents.Select(agent => agent.ConfigurationUpdateFailed).SuppressActivations();
                Workpieces.Select(workpiece => workpiece.IncorrectlyPositionedFault).SuppressActivations();
                Workpieces.Select(workpiece => workpiece.ToolApplicationFailed).SuppressActivations();
                Robots.Select(robot => robot.SwitchToWrongToolFault).SuppressActivations();
                Carts.Select(cart => cart.Lost).SuppressActivations();
                ObserverController.ReconfigurationFailure.SuppressActivation();
                break;

            case AnalysisMode.IntolerableFaults:
                Faults.SuppressActivations();
                agents.Select(agent => agent.ConfigurationUpdateFailed).MakeNondeterministic();
                Workpieces.Select(workpiece => workpiece.IncorrectlyPositionedFault).MakeNondeterministic();
                Workpieces.Select(workpiece => workpiece.ToolApplicationFailed).MakeNondeterministic();
                Robots.Select(robot => robot.SwitchToWrongToolFault).MakeNondeterministic();
                Carts.Select(cart => cart.Lost).MakeNondeterministic();
                ObserverController.ReconfigurationFailure.MakeNondeterministic();
                break;

            case AnalysisMode.AllFaults:
                return;

            default:
                throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }
        }
Ejemplo n.º 2
0
        private void CreateWorkpieces(int count, params Capability[] capabilities)
        {
            if (capabilities.Length > MaxProductionSteps)
            {
                throw new InvalidOperationException($"Too many production steps; increase '{MaxProductionSteps}'.");
            }

            var task = new Task(capabilities);

            Tasks.Add(task);

            for (var i = 0; i < count; ++i)
            {
                var workpiece = new Workpiece(capabilities.OfType <ProcessCapability>().Select(c => c.ProductionAction).ToArray())
                {
                    Name = $"W{Workpieces.Count}",
                    IncorrectlyPositionedFault = { Name = $"W{Workpieces.Count}.IncorrectlyPositioned" },
                    ToolApplicationFailed      = { Name = $"W{Workpieces.Count}.ToolApplicationFailed" },
                };

                Workpieces.Add(workpiece);
                Resources.Add(new Resource(task, workpiece));
            }
        }