C# winform应用程序--生成数字并添加到列表中,然后绘制成图表。

问题描述 投票:0回答:1

我在Python中也有一个类似的应用程序,但我很难用C#实现它,因为我是语言和语法的新手。

我想使用一个数学模型来模拟一个物理过程。我将使用WinForm应用程序在图表中绘制数据,过程数据由数学模型模拟生成。这个数学模型作为一个独立的类来实现,在主类 "Form1.cs "中,将使用一个Timer对象有规律的间隔调用,通过调用过程类的方法来检索新的值。

到目前为止,我的主要问题对于这里比较有经验的人来说应该是比较基础的,我需要一个方法接收一个输入控制信号u(变量,不是常数),用它来计算新的值(使用列表中的前一个值),然后将新的过程值添加到列表中,同时返回新的列表进行绘制,并将新的过程值保存到数据库中(插入一个新的条目)。

下面的代码是我目前的情况。

namespace Process
{
    class Simulator
    {
        public List<double> TemperatureList { get; set; }
        public double ControlSignal { get; set; }

        /// Process parameters:
        static private double Kh = 3.5;
        static private double theta_constant = 23.0;
        static private double theta_delay = 3.0;
        static private double temp_env = 20.0;
        static private double t_step = 1;


        //private double u_signal { get { return ControlSignal; } }

        public double Temperature()
        {
            this.ControlSignal = u_signal;
            public double T_k = TemperatureList[TemperatureList.Count - 1];
            // Euler forward integration (Euler step):
            public double calc = (1 / theta_constant) * ((temp_env) + Kh * u_signal);
            // Calculate next point
            public double T_kp1 = T_k + t_step*calc;

            TemperatureList.Add(T_kp1);

            return T_kp1;

        }
    }
}

上面的类方法 "温度 "抛出了一堆错误。有什么指点,如何正确结构代码,使其表现出我需要的样子?我的主要思路是,当调用给定类实例的 "温度 "方法时,它将计算出下一个过程值(温度),并将其添加到之前计算的温度列表中,然后返回最新的值。然后,List也可以用来在图表中绘制数据。

ControlSignal的double也是一个变量,会被另一个类(控制器)改变,所以不知道如何将其用于方法。

c#
1个回答
1
投票

问题在于你的方法中变量的范围声明。 你不能在方法块中使用公共关键字。

public double Temperature()
{
    double T_k = TemperatureList.Last();
    double calc = (temp_env + Kh * u_signal) / theta_constant;
    double T_kp1 = T_k + t_step * calc;
    TemperatureList.Add(T_kp1);
    return T_kp1;
}
© www.soinside.com 2019 - 2024. All rights reserved.