コード例 #1
0
        internal static void DoStepping()
        {
            string path = Path.Combine(
                Tools.GetBaseFolder(new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath,
                                    nameof(Femyou)), "FMU", "bin", "dist");

            using IModel model = Model.Load($"{path}/BouncingBall.fmu");
            Console.WriteLine("Loaded the model!");
            using IInstance instance = model.CreateCoSimulationInstance("instance1", new ConsoleCallbacks());
            Console.WriteLine("Created an instance of the model!");
            IVariable velocity = model.Variables["v"];

            instance.WriteReal(velocity, 10);

            Console.WriteLine($"v = {instance.ReadReal(velocity)} at time: {instance.CurrentTime}");
            instance.StartTime();
            instance.AdvanceTime(1f);
            Console.WriteLine($"v = {instance.ReadReal(velocity)} at time: {instance.CurrentTime}");
            instance.AdvanceTime(1f);
            Console.WriteLine($"v = {instance.ReadReal(velocity)} at time: {instance.CurrentTime}");
        }
コード例 #2
0
        internal static void RunExample()
        {
            string path = Path.Combine(
                Tools.GetBaseFolder(new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath,
                                    nameof(Femyou)), "FMU", "bin", "dist");

            using IModel model = Model.Load($"{path}/Feedthrough.fmu");
            Console.WriteLine("Loaded the model!");
            using IInstance instance = model.CreateCoSimulationInstance("instance1", new ConsoleCallbacks());
            Console.WriteLine("Created an instance of the model!");

            Console.WriteLine("Reading a variable and then changing it's values and reading it again.");
            IVariable exampleString = model.Variables["string_param"];

            Console.WriteLine($"default string_param value = {instance.ReadString(exampleString)}");
            instance.WriteString((exampleString, "10.0 Fellows"));
            Console.WriteLine($"New value for string_param = {instance.ReadString(exampleString)}");
            Console.WriteLine("Reading and writing over.\n\n");


            Console.WriteLine("Printing all input variables and their values.");
            foreach ((string key, IVariable value) in model.Variables.Where(pair =>
                                                                            pair.Value.Causality == Causality.Input))
            {
                switch (value.VariableType.VariableType)
                {
                case VariableType.Real:
                    Console.WriteLine($"{key} - {value.Description} - {instance.ReadReal(value)}");
                    break;

                case VariableType.Integer:
                    Console.WriteLine($"{key} - {value.Description} - {instance.ReadInteger(value)}");
                    break;

                case VariableType.String:
                    Console.WriteLine($"{key} - {value.Description} - {instance.ReadString(value)}");
                    break;

                case VariableType.Boolean:
                    Console.WriteLine($"{key} - {value.Description} - {instance.ReadBoolean(value)}");
                    break;

                case VariableType.Enumeration:
                case VariableType.Unknown:
                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            Console.WriteLine("Done printing variables.");
        }
コード例 #3
0
        internal static void CreateGIF()
        {
            var info   = new SKImageInfo(400, 400);
            var r      = 70;
            var h      = (double)(info.Height - r * 2);
            var v      = 0.0;
            var hCoord = new SKPoint(0, 20);
            var vCoord = new SKPoint(0, 40);
            var paint  = new SKPaint {
                Color       = SKColors.Red,
                IsAntialias = true,
                Style       = SKPaintStyle.Fill,
                TextSize    = 16
            };

            using IModel model       = Model.Load(Path.Combine(FmuFolder, "BouncingBall.fmu"));
            using IInstance instance = Tools.CreateInstance(model, "demo");
            IVariable altitude = model.Variables["h"];
            IVariable velocity = model.Variables["v"];

            instance.WriteReal((altitude, h));
            instance.WriteReal((velocity, v));
            using var gif = new AnimatedGifCreator("BouncingBall.gif");
            instance.StartTime(0.0);
            while (h > 0 || Math.Abs(v) > 0)
            {
                IEnumerable <double> variables = instance.ReadReal(altitude, velocity);
                h = variables.First();
                v = variables.Last();
                AddFrame(gif, info, canvas => {
                    canvas.Clear(SKColors.WhiteSmoke);
                    canvas.DrawText($"h = {h:F2} m", hCoord, paint);
                    canvas.DrawText($"v = {v:F2} m/s", vCoord, paint);
                    canvas.DrawCircle(info.Width / 2, info.Height - (int)h - r, r, paint);
                });
                instance.AdvanceTime(0.1);
            }
        }