public override Model Generate(string id, string type, SpiceSharpParser.Models.Netlist.Spice.Objects.ParameterCollection parameters, ICircuitContext context) { BipolarJunctionTransistorModel model = new BipolarJunctionTransistorModel(id); if (type.ToLower() == "npn") { model.SetParameter("npn", true); } else if (type.ToLower() == "pnp") { model.SetParameter("pnp", true); } SetParameters(context, model, parameters); return(new Model(id, model, model.Parameters)); }
public override IEntity Generate(string componentIdentifier, string originalName, string type, SpiceSharpParser.Models.Netlist.Spice.Objects.ParameterCollection parameters, ICircuitContext context) { // Errors switch (parameters.Count) { case 0: context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Error, $"Node expected for component {componentIdentifier}", parameters.LineInfo)); return(null); case 1: case 2: case 3: context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Error, $"Node expected", parameters.LineInfo)); return(null); case 4: context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Error, $"Model name expected", parameters.LineInfo)); return(null); } // Get the model and generate a component for it SpiceSharp.Components.Component mosfet = null; var modelNameParameter = parameters.Get(4); var model = context.ModelsRegistry.FindModel(modelNameParameter.Image); if (model == null) { context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Error, $"Could not find model {modelNameParameter.Image} for mosfet {originalName}", parameters.LineInfo)); return(null); } if (Mosfets.ContainsKey(model.GetType())) { var mosfetDetails = Mosfets[model.GetType()].Invoke(componentIdentifier); mosfet = mosfetDetails.Mosfet; context.SimulationPreparations.ExecuteActionBeforeSetup((simulation) => { context.ModelsRegistry.SetModel( mosfetDetails.Mosfet, simulation, modelNameParameter, $"Could not find model {modelNameParameter.Image} for mosfet {componentIdentifier}", mosfetDetails.SetModelAction, context.Result); }); } else { context.Result.Validation.Add( new ValidationEntry( ValidationEntrySource.Reader, ValidationEntryLevel.Error, $"Invalid model {model.GetType()} for {componentIdentifier}", parameters.LineInfo)); return(null); } // The rest is all just parameters context.CreateNodes(mosfet, parameters); SetParameters(context, mosfet, parameters.Skip(5), true); return(mosfet); }