/// <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); }
/// <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); }
/// <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); }