public static Fault ReadFault(BinaryReader reader)
        {
            var   name             = reader.ReadString();
            var   type             = reader.ReadInt32();
            var   identifier       = reader.ReadInt32();
            var   probabilityValue = reader.ReadDouble();
            Fault fault;

            if (type == 1)
            {
                fault = new TransientFault();
            }
            else if (type == 2)
            {
                fault = new PermanentFault();
            }
            else
            {
                throw new Exception("Not implemented yet");
            }
            fault.Name       = name;
            fault.Identifier = identifier;
            // ReSharper disable once CompareOfFloatsByEqualityOperator
            fault.ProbabilityOfOccurrence =
                probabilityValue == -1.0 ? null : (Probability?)new Probability(probabilityValue);
            return(fault);
        }
Example #2
0
        public DeadReckoningComponent()
        {
            FF = new TransientFault();
            FF.ProbabilityOfOccurrence = new Probability(0.4);

            FC = new TransientFault();
            FC.ProbabilityOfOccurrence = new Probability(0.01);

            FS = new PermanentFault();
            FS.ProbabilityOfOccurrence = new Probability(0.05);
        }
Example #3
0
        public void Parametric()
        {
            Formula invariant = new LustrePressureBelowThreshold();
            Formula hazard    = new UnaryFormula(invariant, UnaryOperator.Not);

            LustrePressureBelowThreshold.threshold = 60;
            var faultK1 = new PermanentFault()
            {
                Name = "fault_k1", Identifier = 1, ProbabilityOfOccurrence = new Probability(3.0E-6)
            };
            var faultK2 = new PermanentFault()
            {
                Name = "fault_k2", Identifier = 2, ProbabilityOfOccurrence = new Probability(3.0E-6)
            };
            var faultSensor = new PermanentFault()
            {
                Name = "fault_sensor", Identifier = 4, ProbabilityOfOccurrence = new Probability(1.0E-5)
            };
            var faults = new[] { faultK1, faultK2, faultSensor };

            var parameter = new QuantitativeParametricAnalysisParameter
            {
                StateFormula = hazard,
                Bound        = null,
                From         = 3.0E-7,
                To           = 3.0E-5,
                Steps        = 25,
            };

            using (var fileWriter = new StreamWriter(Path.Combine(AssemblyDirectory, "pressureTank_varyK1.csv"), append: false))
            {
                parameter.UpdateParameterInModel = value => { faultK1.ProbabilityOfOccurrence = new Probability(value); };
                var result = LustreModelChecker.ConductQuantitativeParametricAnalysis(Path.Combine(AssemblyDirectory, "pressureTank.lus"), "TANK", faults, parameter);
                result.ToCsv(fileWriter);
            }

            using (var fileWriter = new StreamWriter(Path.Combine(AssemblyDirectory, "pressureTank_varyK2.csv"), append: false))
            {
                parameter.UpdateParameterInModel = value => { faultK2.ProbabilityOfOccurrence = new Probability(value); };
                var result = LustreModelChecker.ConductQuantitativeParametricAnalysis(Path.Combine(AssemblyDirectory, "pressureTank.lus"), "TANK", faults, parameter);
                result.ToCsv(fileWriter);
            }

            using (var fileWriter = new StreamWriter(Path.Combine(AssemblyDirectory, "pressureTank_varySensor.csv"), append: false))
            {
                parameter.UpdateParameterInModel = value => { faultSensor.ProbabilityOfOccurrence = new Probability(value); };
                var result = LustreModelChecker.ConductQuantitativeParametricAnalysis(Path.Combine(AssemblyDirectory, "pressureTank.lus"), "TANK", faults, parameter);
                result.ToCsv(fileWriter);
            }
        }
Example #4
0
        public EvaluationTests()
        {
            LustrePressureBelowThreshold.threshold = 60;
            var faultK1 = new PermanentFault()
            {
                Name = "fault_k1", Identifier = 1, ProbabilityOfOccurrence = new Probability(3.0E-6)
            };
            var faultK2 = new PermanentFault()
            {
                Name = "fault_k2", Identifier = 2, ProbabilityOfOccurrence = new Probability(3.0E-6)
            };
            var faultSensor = new PermanentFault()
            {
                Name = "fault_sensor", Identifier = 4, ProbabilityOfOccurrence = new Probability(1.0E-5)
            };

            _faults = new[] { faultK1, faultK2, faultSensor };

            _createModel = LustreExecutableModel.CreateExecutedModelFromFormulasCreator(Path.Combine(AssemblyDirectory, "pressureTank.lus"), "TANK", _faults);
        }