Example #1
0
        /// <summary>
        /// Формирование массива значений оси Y
        /// </summary>
        private static double[] getYArrayLine(double[] xValue, string Line, SettingForESP setEsp)
        {
            double freq = setEsp.Frequency;
            int    numS = setEsp.NumberStages;

            int size = xValue.Length;

            double[] arr = new double[size];

            for (int i = 0; i < size; i++)
            {
                double Q = xValue[i];

                switch (Line)
                {
                case "Напор":
                    arr[i] = setEsp.CalcHead(Q, freq, numS);
                    break;

                case "КПД":
                    arr[i] = setEsp.CalcEfficiency(Q, freq);
                    break;

                case "Мощность":
                    arr[i] = setEsp.CalcPower(Q, freq, numS);
                    break;

                default:
                    MessageBox.Show("Ошибка при выводе графика ЭЦН", "Ошибка!");
                    return(null);
                }
            }

            return(arr);
        }
Example #2
0
        /// <summary>
        /// Формирование массива значений оси Х
        /// </summary>
        private static double[] getXArrayGasQ(SettingForESP setEsp)
        {
            double freq = setEsp.Frequency;
            double a    = setEsp.MinAvailRate;
            double b    = setEsp.MaxAvailRate;
            double dx   = 1;
            double x    = a;
            int    size = Convert.ToInt32(Math.Floor((b - a) / dx));

            double[] arr = new double[size];


            for (int i = 0; i < size; i++)
            {
                arr[i] = a;
                a     += dx;
            }
            return(arr);
        }
Example #3
0
        /// <summary>
        /// Загрузка графика найстоенного ЭЦН
        /// </summary>
        public static void DrawEspChart(Chart Chart_ESP, SettingForESP settings)
        {
            Chart_ESP.ChartAreas.Clear();
            Chart_ESP.Legends.Clear();
            Chart_ESP.Series.Clear();
            var Area = new ChartArea("Area");

            Area.Position          = new ElementPosition(10, 10, 91, 85);
            Area.InnerPlotPosition = new ElementPosition(12, 0, 75, 90);
            Chart_ESP.ChartAreas.Add(Area);
            Chart_ESP.Legends.Add(new Legend("Legend"));
            Chart_ESP.Palette = ChartColorPalette.Bright;
            Chart_ESP.ChartAreas["Area"].AxisY.Maximum = 100;
            Chart_ESP.ChartAreas["Area"].AxisY2.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
            Chart_ESP.ChartAreas["Area"].AxisY2.MajorGrid.LineColor     = Color.Gray;
            Chart_ESP.ChartAreas["Area"].AxisY.MajorGrid.LineDashStyle  = ChartDashStyle.Dash;
            Chart_ESP.ChartAreas["Area"].AxisY.MajorGrid.LineColor      = Color.Gray;
            Chart_ESP.ChartAreas["Area"].AxisX.MajorGrid.LineDashStyle  = ChartDashStyle.Dash;
            Chart_ESP.ChartAreas["Area"].AxisX.MajorGrid.LineColor      = Color.Gray;

            //Добавим линию R
            Chart_ESP.Series.Add(new Series("R"));
            Chart_ESP.Series["R"].IsVisibleInLegend = false;
            Chart_ESP.Series["R"].Color             = Color.PaleGreen;
            Chart_ESP.Series["R"].Color             = Color.FromArgb(70, Color.Green);
            Chart_ESP.Series["R"].ChartType         = SeriesChartType.Column;
            Chart_ESP.Series["R"].YAxisType         = AxisType.Primary;
            Chart_ESP.Series["R"]["PointWidth"]     = ((int)(settings.MaxRecRate - settings.MinRecRate)).ToString();
            List <double> xR = new List <double>()
            {
                (settings.MaxRecRate + settings.MinRecRate) / 2
            };
            List <double> yR = new List <double>()
            {
                100
            };

            Chart_ESP.Series["R"].Points.DataBindXY(xR, yR);

            // Добавим линию напора
            Chart_ESP.Series.Add(new Series("Напор"));
            Chart_ESP.Series["Напор"].ChartArea = "Area";
            Chart_ESP.Series["Напор"].Legend    = "Legend";
            Chart_ESP.Series["Напор"].ChartType = SeriesChartType.Line;

            // Добавим линию КПД
            Chart_ESP.Series.Add(new Series("КПД"));
            Chart_ESP.Series["КПД"].ChartArea = "Area";
            Chart_ESP.Series["КПД"].Legend    = "Legend";
            Chart_ESP.Series["КПД"].ChartType = SeriesChartType.Line;
            Chart_ESP.Series["КПД"].YAxisType = AxisType.Primary;

            // Добавим линию Мощность
            Chart_ESP.Series.Add(new Series("Мощность"));
            Chart_ESP.Series["Мощность"].ChartArea = "Area";
            Chart_ESP.Series["Мощность"].Legend    = "Legend";
            Chart_ESP.Series["Мощность"].ChartType = SeriesChartType.Line;
            Chart_ESP.Series["Мощность"].YAxisType = AxisType.Secondary;

            // Добавим данные линии
            double[] xArrayGasQ = getXArrayGasQ(settings);
            double[] yArrayHead = getYArrayLine(xArrayGasQ, Chart_ESP.Series["Напор"].Name, settings);;
            Chart_ESP.Series["Напор"].Points.DataBindXY(xArrayGasQ, yArrayHead);
            Chart_ESP.Series["Напор"].BorderWidth = 3;

            double[] yArrayEfficiency = getYArrayLine(xArrayGasQ, Chart_ESP.Series["КПД"].Name, settings);
            Chart_ESP.Series["КПД"].Points.DataBindXY(xArrayGasQ, yArrayEfficiency);
            Chart_ESP.Series["КПД"].BorderWidth = 3;

            double[] yArrayPower = getYArrayLine(xArrayGasQ, Chart_ESP.Series["Мощность"].Name, settings);;
            Chart_ESP.Series["Мощность"].Points.DataBindXY(xArrayGasQ, yArrayPower);
            Chart_ESP.Series["Мощность"].BorderWidth = 3;

            // Дополнительные шкалы для графиков
            CreateYAxis(Chart_ESP, Area, Chart_ESP.Series["Напор"], 6, 17, 18, true);

            Axis areaAxisAxisY = Area.AxisY;

            areaAxisAxisY.IsStartedFromZero = Area.AxisY.IsStartedFromZero;
            areaAxisAxisY.LabelStyle.Font   = Area.AxisY.LabelStyle.Font;
            areaAxisAxisY.Title             = Chart_ESP.Series["КПД"].Name + ", %";
            areaAxisAxisY.TitleForeColor    = Color.DarkCyan;
            areaAxisAxisY.Minimum           = 0;
            areaAxisAxisY.LineWidth         = 3;
            areaAxisAxisY.LineColor         = Chart_ESP.Series["КПД"].Color;

            Axis areaAxisAxisY2 = Area.AxisY2;

            areaAxisAxisY2.IsStartedFromZero = Area.AxisY2.IsStartedFromZero;
            areaAxisAxisY2.LabelStyle.Font   = Area.AxisY2.LabelStyle.Font;
            areaAxisAxisY2.Title             = Chart_ESP.Series["Мощность"].Name + ", кВт";
            areaAxisAxisY2.TitleForeColor    = Color.DarkCyan;
            areaAxisAxisY2.Maximum           = yArrayPower.Last() * 2;
            areaAxisAxisY2.Minimum           = 0;
            areaAxisAxisY2.LineWidth         = 3;
            areaAxisAxisY2.LineColor         = Chart_ESP.Series["Мощность"].Color;
            areaAxisAxisY2.LabelStyle.Format = "0.000";

            Axis areaAxisAxisX = Area.AxisX;

            areaAxisAxisX.IsStartedFromZero = Area.AxisX.IsStartedFromZero;
            areaAxisAxisX.LabelStyle.Font   = Area.AxisX.LabelStyle.Font;
            areaAxisAxisX.Title             = "Расход, м³/сут";
            areaAxisAxisX.Minimum           = 0;
            areaAxisAxisX.TitleForeColor    = Color.DarkCyan;

            //Добавим линию R1
            Chart_ESP.Series.Add(new Series("R1"));
            Chart_ESP.Series["R1"].IsVisibleInLegend = false;
            Chart_ESP.Series["R1"].ChartType         = SeriesChartType.StepLine;
            Chart_ESP.Series["R1"].YAxisType         = AxisType.Primary;
            Chart_ESP.Series["R1"].BorderDashStyle   = ChartDashStyle.Dash;
            Chart_ESP.Series["R1"].Color             = Color.FromArgb(48, 30, 12);
            Chart_ESP.Series["R1"].BorderWidth       = 2;
            double[] xR1 = new double[] { settings.NomRate, settings.NomRate };
            double[] yR1 = new double[] { 100, 0 };
            Chart_ESP.Series["R1"].Points.DataBindXY(xR1, yR1);
        }