public MainViewModel() { First = new ResistorModel { Value = 0, IsEnable = true }; Second = new ResistorModel { Value = 0, IsEnable = true }; Third = new ResistorModel { Value = 0, IsEnable = true }; FirstElement = new ElementModel { Value = 0, }; SecondElement = new ElementModel { Value = 0, }; }
// GET: Resistor public async Task <ActionResult> Index(ResistorViewModel viewModel) { ResistorOhmRequest request; ResistorOhmResponse respone; if (viewModel.btnResistorOhm != null) { request = new ResistorOhmRequest() { bandAColor = viewModel.bandAColor, bandBColor = viewModel.bandBColor, bandCColor = viewModel.bandCColor }; var model = new ResistorModel(_DataAccess); respone = await model.GetOhmValue(request); if (respone.Success) { viewModel.Ohm = respone.Ohm.ToString(); } else { ViewBag.Error = respone.Error; } } return(View(viewModel)); }
public IActionResult Index(ResistorModel model) { if ((_ResistorModel.ColorBandA != model.ColorBandA) || (_ResistorModel.ColorBandB != model.ColorBandB) || (_ResistorModel.ColorBandC != model.ColorBandC) || (_ResistorModel.ColorBandD != model.ColorBandD)) { _ResistorModel.ColorBandA = model.ColorBandA; _ResistorModel.ColorBandB = model.ColorBandB; _ResistorModel.ColorBandC = model.ColorBandC; _ResistorModel.ColorBandD = model.ColorBandD; if (null != _IOhmValueCalculator) { // Calculate the resistance value var results = _IOhmValueCalculator.CalculateOhmValue( _ResistorModel.ColorBandA, _ResistorModel.ColorBandB, _ResistorModel.ColorBandC, _ResistorModel.ColorBandD); if (results[0] > 0 && results[1] > 0) { _ResistorModel.SetResistanceValue(results[0]); _ResistorModel.SetToleranceValue(results[1]); } } } return(View(_ResistorModel)); }
public void When_Documentation_Expect_NoException() { // <example_EntityDocumentation> var entity = new ResistorModel("RM1"); // using SpiceSharp.Reflection; foreach (var parameter in entity.Parameters()) { Console.Write(string.Join(", ", parameter.Names)); Console.WriteLine($" : {parameter.Description} ({parameter.Member.Name}, {parameter.BaseType.Name})"); } // </example_EntityDocumentation> Console.WriteLine(); // <example_SimulationDocumentation> var simulation = new Transient("tran"); // using SpiceSharp.Reflection; foreach (var parameter in simulation.Parameters()) { Console.Write(string.Join(", ", parameter.Names)); Console.WriteLine($" : {parameter.Description} ({parameter.Member.Name}, {parameter.BaseType.Name})"); } // </example_SimulationDocumentation> Console.WriteLine(); // <example_BehaviorDocumentation> var op = new OP("op"); var ckt = new Circuit( new VoltageSource("V1", "in", "0", 1), new Resistor("R1", "in", "0", 1e3)); op.AfterSetup += (sender, args) => { // Behaviors are created when executing a simulation, // so we need to register for the event to have access to them. // using SpiceSharp.Reflection; foreach (var parameter in op.EntityBehaviors["V1"].Parameters()) { Console.Write(string.Join(", ", parameter.Names)); Console.WriteLine($" : {parameter.Description} ({parameter.Member.Name}, {parameter.BaseType.Name})"); } }; op.Run(ckt); // </example_BehaviorDocumentation> }
public static double ResultI2(ResistorModel R1, ResistorModel R2, ResistorModel R3, ElementModel E1, ElementModel E2) { double I2 = 0; double r0 = 0.0001; if ((R1.IsEnable) && (R2.IsEnable) && (R3.IsEnable)) { I2 = (E2.Value - R3.Value * ((R2.Value * E1.Value + E2.Value * R1.Value) / (R1.Value * R2.Value + R2.Value * R3.Value + R1.Value * R3.Value))) / R2.Value; } else if ((R1.IsEnable) && (!R2.IsEnable) && (R3.IsEnable)) { I2 = (E2.Value - R3.Value * ((r0 * E1.Value + E2.Value * R1.Value) / (R1.Value * r0 + r0 * R3.Value + R1.Value * R3.Value))) / r0; } else if ((!R1.IsEnable) && (R2.IsEnable) && (R3.IsEnable)) { I2 = (E2.Value - R3.Value * ((R2.Value * E1.Value + E2.Value * r0) / (r0 * R2.Value + R2.Value * R3.Value + r0 * R3.Value))) / R2.Value; } else if ((R1.IsEnable) && (R2.IsEnable) && (!R3.IsEnable)) { I2 = E2.Value / R2.Value; } else if ((!R1.IsEnable) && (!R2.IsEnable) && (R3.IsEnable)) { I2 = (E2.Value - R3.Value * ((r0 * E1.Value + E2.Value * r0) / (r0 * r0 + r0 * R3.Value + r0 * R3.Value))) / r0; } else if ((!R1.IsEnable) && (R2.IsEnable) && (!R3.IsEnable)) { I2 = E2.Value / R2.Value; } else if ((R1.IsEnable) && (!R2.IsEnable) && (!R3.IsEnable)) { I2 = E1.Value / r0; } else if ((!R1.IsEnable) && (!R2.IsEnable) && (!R3.IsEnable)) { I2 = 0; } return(I2); }
public static double ResultI3(ResistorModel R1, ResistorModel R2, ResistorModel R3, ElementModel E1, ElementModel E2) { double I3 = 0; double r0 = 0.0001; if ((R1.IsEnable) && (R2.IsEnable) && (R3.IsEnable)) { I3 = (R2.Value * E1.Value + E2.Value * R1.Value) / (R1.Value * R2.Value + R2.Value * R3.Value + R1.Value * R3.Value); } else if ((R1.IsEnable) && (!R2.IsEnable) && (R3.IsEnable)) { I3 = (r0 * E1.Value + E2.Value * R1.Value) / (R1.Value * r0 + r0 * R3.Value + R1.Value * R3.Value); } else if ((!R1.IsEnable) && (R2.IsEnable) && (R3.IsEnable)) { I3 = (R2.Value * E1.Value + E2.Value * r0) / (r0 * R2.Value + R2.Value * R3.Value + r0 * R3.Value); } else if ((R1.IsEnable) && (R2.IsEnable) && (!R3.IsEnable)) { I3 = (E1.Value / R1.Value) + (E2.Value / R2.Value); } else if ((!R1.IsEnable) && (!R2.IsEnable) && (R3.IsEnable)) { I3 = (r0 * E1.Value + E2.Value * r0) / (r0 * r0 + r0 * R3.Value + r0 * R3.Value); } else if ((!R1.IsEnable) && (R2.IsEnable) && (!R3.IsEnable)) { I3 = (E1.Value / r0) + (E2.Value / R2.Value); } else if ((R1.IsEnable) && (!R2.IsEnable) && (!R3.IsEnable)) { I3 = (E1.Value / R1.Value) + E1.Value / r0; } else if ((!R1.IsEnable) && (!R2.IsEnable) && (!R3.IsEnable)) { I3 = 0; } return(I3); }
public override Context.Models.Model Generate(string id, string type, ParameterCollection parameters, ICircuitContext context) { switch (type.ToLower()) { case "res": case "r": var model = new ResistorModel(id); SetParameters(context, model, parameters); return(new Context.Models.Model(id, model, model.Parameters)); case "c": var model2 = new CapacitorModel(id); SetParameters(context, model2, parameters); return(new Context.Models.Model(id, model2, model2.Parameters)); } return(null); }
public void When_ResistorModel_Expect_Reference() { // Bug found by Marcin Golebiowski ResistorModel model; Resistor res; var ckt = new Circuit( new CurrentSource("I1", "0", "a", 1), model = new ResistorModel("RM1"), res = new Resistor("R1", "a", "0", "RM1")); model.Parameters.DefaultWidth = 0.5e-6; model.Parameters.Narrow = 0.1e-6; model.Parameters.SheetResistance = 20; res.Parameters.Length = 5e-6; var op = new OP("op"); var exports = new IExport <double>[] { new RealVoltageExport(op, "a") }; var references = new[] { 245.0 }; AnalyzeOp(op, ckt, exports, references); DestroyExports(exports); }
public override SpiceSharp.Components.Model Generate(string id, string type, ParameterCollection parameters, ICircuitContext context) { SpiceSharp.Components.Model model = null; switch (type.ToLower()) { case "res": case "r": model = new ResistorModel(id); break; case "c": model = new CapacitorModel(id); break; } if (model != null) { SetParameters(context, model, parameters); } return(model); }
public ActionResult Index(ResistorModel resistor) { // colors are now CSS values string v1 = resistor.bandAColor; string v2 = resistor.bandBColor; string v3 = resistor.bandCColor; string v4 = resistor.bandDColor; ViewBag.ResistorOhms = "0 ohms"; // first setting ViewBag.ResistorTolerance = "0% tolerance"; if (v1 != null) { // may need to convert to string on exit ViewBag.ResistorOhms = ResistorModel.CalculateOhmValue(v1, v2, v3, v4); ViewBag.ResistorTolerance = ResistorModel.CalculateToleranceValue(v1, v2, v3, v4); // how refresh the text boxes with background colors? ViewBag.vb_BandA_Color = resistor.bandAColor; ViewBag.vb_BandB_Color = resistor.bandBColor; ViewBag.vb_BandC_Color = resistor.bandCColor; ViewBag.vb_BandD_Color = resistor.bandDColor; } else { ViewBag.vb_BandA_Color = "white"; ViewBag.vb_BandB_Color = "white"; ViewBag.vb_BandC_Color = "white"; ViewBag.vb_BandD_Color = "white"; } return(View()); // refresh is done here }
/// <summary> /// Generate resistor. /// </summary> /// <param name="name">Name of resistor to generate.</param> /// <param name="parameters">Parameters and pins for resistor.</param> /// <param name="context">Reading context.</param> /// <returns> /// A new instance of resistor. /// </returns> protected IEntity GenerateRes(string name, ParameterCollection parameters, ICircuitContext context) { if (parameters.Count == 3) { var evalContext = context.Evaluator.GetEvaluationContext(); // RName Node1 Node2 something var something = parameters[2]; string expression = null; if (something is AssignmentParameter asp) { expression = asp.Value; } else { expression = something.Image; } if (evalContext.HaveSpiceProperties(expression) || evalContext.HaveFunctions(expression)) { BehavioralResistor behavioralResistor = new BehavioralResistor(name); context.CreateNodes(behavioralResistor, parameters.Take(BehavioralResistor.BehavioralResistorPinCount)); behavioralResistor.Parameters.Expression = expression; behavioralResistor.Parameters.ParseAction = (expression) => { var parser = new ExpressionParser(context.Evaluator.GetEvaluationContext(null), false, context.CaseSensitivity); return(parser.Resolve(expression)); }; if (evalContext.HaveFunctions(expression)) { context.SimulationPreparations.ExecuteActionBeforeSetup((simulation) => { behavioralResistor.Parameters.Expression = expression.ToString(); behavioralResistor.Parameters.ParseAction = (expression) => { var parser = new ExpressionParser(context.Evaluator.GetEvaluationContext(simulation), false, context.CaseSensitivity); return(parser.Resolve(expression)); }; }); } return(behavioralResistor); } } Resistor res = new Resistor(name); context.CreateNodes(res, parameters); if (parameters.Count == 3) { // RName Node1 Node2 something var something = parameters[2]; // Check if something is a model name if ((something is WordParameter || something is IdentifierParameter) && context.ModelsRegistry.FindModel(parameters.Get(2).Image) != null) { // RName Node1 Node2 modelName context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"R parameter needs to be specified", parameters.LineInfo)); return(null); } // Check if something can be resistance if (!(something is WordParameter || something is IdentifierParameter || something is ValueParameter || something is ExpressionParameter || (something is AssignmentParameter ap && (ap.Name.ToLower() == "r" || ap.Name.ToLower() == "resistance")))) { context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"Third parameter needs to represent resistance of resistor", parameters.LineInfo)); return(null); } // Set resistance if (something is AssignmentParameter asp) { context.SetParameter(res, "resistance", asp, true, false); } else { context.SetParameter(res, "resistance", something, true, false); } } else { var resistorParameters = new List <Parameter>(parameters.Skip(Resistor.ResistorPinCount).ToArray()); // RName Node1 Node2 something param1 ... if (resistorParameters.Count == 0) { context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"Resistor doesn't have at least 3 parameters", parameters.LineInfo)); return(null); } var something = resistorParameters[0]; // Check if something is a model name bool hasModelSyntax = (something is WordParameter || something is IdentifierParameter) && context.ModelsRegistry.FindModel(something.Image) != null; bool hasTcParameter = parameters.Any( p => p is AssignmentParameter ap && ap.Name.Equals( "tc", false ? StringComparison.CurrentCulture : StringComparison.CurrentCultureIgnoreCase)); AssignmentParameter tcParameter = null; if (hasTcParameter) { tcParameter = (AssignmentParameter)parameters.Single( p => p is AssignmentParameter ap && ap.Name.Equals( "tc", false ? StringComparison.CurrentCulture : StringComparison.CurrentCultureIgnoreCase)); resistorParameters.Remove(tcParameter); } if (hasModelSyntax) { var modelNameParameter = resistorParameters[0]; // Ignore tc parameter on resistor ... context.SimulationPreparations.ExecuteActionBeforeSetup((simulation) => { context.ModelsRegistry.SetModel( res, simulation, modelNameParameter, $"Could not find model {modelNameParameter} for resistor {name}", (Context.Models.Model model) => res.Model = model.Name, context.Result); }); resistorParameters.RemoveAt(0); if (resistorParameters.Count > 0 && (resistorParameters[0] is WordParameter || resistorParameters[0] is IdentifierParameter || resistorParameters[0] is ValueParameter || resistorParameters[0] is ExpressionParameter)) { context.SetParameter(res, "resistance", resistorParameters[0].Image, true, false); resistorParameters.RemoveAt(0); } } else { if (hasTcParameter) { var model = new ResistorModel(res.Name + "_default_model"); if (tcParameter.Values.Count == 2) { context.SetParameter(model, "tc1", tcParameter.Values[0]); context.SetParameter(model, "tc2", tcParameter.Values[1]); } else { context.SetParameter(model, "tc1", tcParameter.Value); } context.ModelsRegistry.RegisterModelInstance(new Context.Models.Model(model.Name, model, model.Parameters)); res.Model = model.Name; context.Result.AddEntity(model); } // Check if something can be resistance var resistanceParameter = resistorParameters[0]; if (!(resistanceParameter is WordParameter || resistanceParameter is IdentifierParameter || resistanceParameter is ValueParameter || resistanceParameter is ExpressionParameter || (resistanceParameter is AssignmentParameter ap && (ap.Name.ToLower() == "r" || ap.Name.ToLower() == "resistance")))) { context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"Invalid value for resistance", parameters.LineInfo)); return(null); } if (resistanceParameter is AssignmentParameter asp) { context.SetParameter(res, "resistance", asp.Value, true, false); } else { context.SetParameter(res, "resistance", resistanceParameter.Image, true, false); } resistorParameters.RemoveAt(0); } foreach (var parameter in resistorParameters) { if (parameter is AssignmentParameter ap) { try { context.SetParameter(res, ap.Name, ap.Value); } catch (Exception e) { context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Error, $"Can't set parameter for resistor: '{parameter.Image}'", parameters.LineInfo, exception: e)); return(null); } } else { context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Error, $"Invalid parameter for resistor: '{parameter.Image}'", parameters.LineInfo)); return(null); } } } return(res); }
public ResistorOhm_MVC_Client_Test() { StubDataAccess dataAccess = new StubDataAccess(); _Model = new ResistorModel(dataAccess); }
/// <summary> /// Generate resistor. /// </summary> /// <param name="name">Name of resistor to generate.</param> /// <param name="parameters">Parameters and pins for resistor.</param> /// <param name="context">Reading context.</param> /// <returns> /// A new instance of resistor. /// </returns> protected SpiceSharp.Components.Component GenerateRes(string name, ParameterCollection parameters, ICircuitContext context) { Resistor res = new Resistor(name); var dynamicParameter = parameters.FirstOrDefault(p => p.Image == "dynamic"); if (dynamicParameter != null) { parameters.Remove(dynamicParameter); } bool isDynamic = dynamicParameter != null || context.Result?.SimulationConfiguration?.DynamicResistors == true; if (isDynamic) { context.SimulationPreparations.ExecuteTemperatureBehaviorBeforeLoad(res); } context.CreateNodes(res, parameters); if (parameters.Count == 3) { // RName Node1 Node2 something var something = parameters[2]; // Check if something is a model name if ((something is WordParameter || something is IdentifierParameter) && context.ModelsRegistry.FindModel <ResistorModel>(parameters.Get(2).Image) != null) { // RName Node1 Node2 modelName context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"R parameter needs to be specified", parameters.LineInfo)); return(null); } // Check if something can be resistance if (!(something is WordParameter || something is IdentifierParameter || something is ValueParameter || something is ExpressionParameter || (something is AssignmentParameter ap && (ap.Name.ToLower() == "r" || ap.Name.ToLower() == "resistance")))) { context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"Third parameter needs to represent resistance of resistor", parameters.LineInfo)); return(null); } // Set resistance if (something is AssignmentParameter asp) { context.SetParameter(res, "resistance", asp, true, isDynamic); } else { context.SetParameter(res, "resistance", something, true, isDynamic); } } else { var resistorParameters = new List <Parameter>(parameters.Skip(Resistor.ResistorPinCount).ToArray()); // RName Node1 Node2 something param1 ... if (resistorParameters.Count == 0) { context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"Resistor doesn't have at least 3 parameters", parameters.LineInfo)); return(null); } var something = resistorParameters[0]; // Check if something is a model name bool hasModelSyntax = (something is WordParameter || something is IdentifierParameter) && context.ModelsRegistry.FindModel <ResistorModel>(something.Image) != null; bool hasTcParameter = parameters.Any( p => p is AssignmentParameter ap && ap.Name.Equals( "tc", context.CaseSensitivity.IsEntityParameterNameCaseSensitive ? StringComparison.CurrentCulture : StringComparison.CurrentCultureIgnoreCase)); AssignmentParameter tcParameter = null; if (hasTcParameter) { tcParameter = (AssignmentParameter)parameters.Single( p => p is AssignmentParameter ap && ap.Name.Equals( "tc", context.CaseSensitivity.IsEntityParameterNameCaseSensitive ? StringComparison.CurrentCulture : StringComparison.CurrentCultureIgnoreCase)); resistorParameters.Remove(tcParameter); } if (hasModelSyntax) { var modelNameParameter = resistorParameters[0]; // Ignore tc parameter on resistor ... context.SimulationPreparations.ExecuteActionBeforeSetup((simulation) => { context.ModelsRegistry.SetModel( res, simulation, modelNameParameter, $"Could not find model {modelNameParameter} for resistor {name}", (ResistorModel model) => res.Model = model.Name, context.Result); }); resistorParameters.RemoveAt(0); if (resistorParameters.Count > 0 && (resistorParameters[0] is WordParameter || resistorParameters[0] is IdentifierParameter || resistorParameters[0] is ValueParameter || resistorParameters[0] is ExpressionParameter)) { context.SetParameter(res, "resistance", resistorParameters[0].Image, true); resistorParameters.RemoveAt(0); } } else { if (hasTcParameter) { var model = new ResistorModel(res.Name + "_default_model"); if (tcParameter.Values.Count == 2) { context.SetParameter(model, "tc1", tcParameter.Values[0]); context.SetParameter(model, "tc2", tcParameter.Values[1]); } else { context.SetParameter(model, "tc1", tcParameter.Value); } context.ModelsRegistry.RegisterModelInstance(model); res.Model = model.Name; context.Result.AddEntity(model); } // Check if something can be resistance var resistanceParameter = resistorParameters[0]; if (!(resistanceParameter is WordParameter || resistanceParameter is IdentifierParameter || resistanceParameter is ValueParameter || resistanceParameter is ExpressionParameter || (resistanceParameter is AssignmentParameter ap && !(ap.Name.ToLower() == "r" || ap.Name.ToLower() == "resistance")))) { context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"Invalid value for resistance", parameters.LineInfo)); return(null); } if (resistanceParameter is AssignmentParameter asp) { context.SetParameter(res, "resistance", asp.Value, true, isDynamic); } else { context.SetParameter(res, "resistance", resistanceParameter.Image, true, isDynamic); } resistorParameters.RemoveAt(0); } foreach (var parameter in resistorParameters) { if (parameter is AssignmentParameter ap) { try { context.SetParameter(res, ap.Name, ap.Value); } catch (Exception e) { context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"Can't set parameter for resistor: '{parameter.Image}'", parameters.LineInfo)); return(null); } } else { context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, $"Invalid parameter for resistor: '{parameter.Image}'", parameters.LineInfo)); return(null); } } } return(res); }