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); }
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); }
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); } }
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); }