示例#1
0
 private void InitializeGridViewDataForIdealEngine()
 {
     this.dataGridView_IdealEngine.Rows.Add(
         DEFAULT_VALUE_N1, DEFAULT_VALUE_N2, DEFAULT_VALUE_LAMBDA, String.Empty,
         String.Empty, String.Empty, String.Empty, String.Empty
         );
     FormDiagramProcessOfCylinder.AutosizeGridView(dataGridView_DataForDiagram);
 }
示例#2
0
        private void ShowTorqueUniformities(List <TorqueUniformity> torqueUniformities, DataGridView dataGridView)
        {
            int iter = 0;

            torqueUniformities.ForEach(torqueUniformity =>
            {
                dataGridView.Rows.Add(iter + 1, Round(torqueUniformity.Mmax, 3), Round(torqueUniformity.Mmin, 3), Round(torqueUniformity.Mu, 3));
                iter++;
            });
            FormDiagramProcessOfCylinder.AutosizeGridView(dataGridView);
        }
示例#3
0
 private void InitializeGridViewDataForDiagram()
 {
     for (int i = 0; i < COUNT_CYLINDER_ENGINE; i++)
     {
         this.dataGridView_DataForDiagram.Rows.Add(
             i + 1, DEFAULT_VALUE_N1, DEFAULT_VALUE_N2, DEFAULT_VALUE_LAMBDA, String.Empty,
             String.Empty, String.Empty, String.Empty, String.Empty
             );
     }
     FormDiagramProcessOfCylinder.AutosizeGridView(dataGridView_DataForDiagram);
 }
示例#4
0
        private void btnDrawDiagram_Click(object sender, EventArgs e)
        {
            //закрываем и очищаем предыдущие окна рассчетов и рассчеты
            ResetOldCalcFormProcess();
            CalcSpecificForcesOfCylinders.Clear();

            double pk = 0.0;

            try
            {
                pk = double.Parse(textBox_Pk.Text);
            }
            catch
            {
                MessageBox.Show("Неверный формат данных для Pk.");
                return;
            }

            for (int i = 0; i < COUNT_CYLINDER_ENGINE; i++)
            {
                FormDiagramProcessOfCylinder formCreateDiagramProcess;
                try
                {
                    formCreateDiagramProcess = new FormDiagramProcessOfCylinder(pk,
                                                                                double.Parse(this.dataGridView_DataForDiagram.Rows[i].Cells[1].Value.ToString()),
                                                                                double.Parse(this.dataGridView_DataForDiagram.Rows[i].Cells[2].Value.ToString()),
                                                                                double.Parse(dataGridView_DataForDiagram.Rows[i].Cells[3].Value.ToString())
                                                                                );
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Помилка в заданому значенні", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }


                FormsDiagrOfCylinderProcesses.Add(formCreateDiagramProcess);
                formCreateDiagramProcess.Text += " " + (i + 1);
                formCreateDiagramProcess.LabelDataForCreateDiagr.Text += " " + (i + 1) + "-го " + "циліндра.";
                CalcSpecificForcesOfCylinders.Add(formCreateDiagramProcess.CalcSpecificForces);
                formCreateDiagramProcess.Show();
                formCreateDiagramProcess.CalcAndBuildDiagr();
            }

            //  calc data ideal engine
            CalcDataOfIdealEngine();

            this.TopMost = true;
            this.TopMost = false;
        }
示例#5
0
        private void CalcDataOfIdealEngine()
        {
            //close and reset old data
            if (FormDiagrOfIdealEngine != null)
            {
                FormDiagrOfIdealEngine.Close();
                FormDiagrOfIdealEngine = null;
            }

            double pk = 0.0;

            try
            {
                pk = double.Parse(textBox_Pk.Text);
            }
            catch
            {
                MessageBox.Show("Неверный формат данных для Pk.");
                return;
            }

            try
            {
                FormDiagrOfIdealEngine = new FormDiagramProcessOfCylinder(pk,
                                                                          double.Parse(this.dataGridView_IdealEngine.Rows[0].Cells[0].Value.ToString()),
                                                                          double.Parse(this.dataGridView_IdealEngine.Rows[0].Cells[1].Value.ToString()),
                                                                          double.Parse(this.dataGridView_IdealEngine.Rows[0].Cells[2].Value.ToString())
                                                                          );
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Помилка в заданому значенні", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            FormDiagrOfIdealEngine.Text = "Ідеальний двигун";
            FormDiagrOfIdealEngine.LabelDataForCreateDiagr.Text += " ідеального " + "двигуна.";
            CalcSpecificForcesIdealEngine = FormDiagrOfIdealEngine.CalcSpecificForces;
            FormDiagrOfIdealEngine.Show();
            FormDiagrOfIdealEngine.CalcAndBuildDiagr();
        }
示例#6
0
        private void ShowSpecificForcesAndTorqueEngineOnGridView(DataGridView dataGridView)
        {
            // remove records in calculations of data specific forces with first angle == 360, and left next record with 360(left record with pressure expansion)
            CalcSpecificForcesOfCylinders.ForEach(calcSpecForces =>
            {
                int indexRecordWith360Degree = calcSpecForces.DataSpecificForces.Angles.BinarySearch(360);
                if (calcSpecForces.DataSpecificForces.Angles[indexRecordWith360Degree + 1] == 360) // data for 360 degree was remmoved
                {
                    calcSpecForces.DataSpecificForces.Angles.RemoveAt(indexRecordWith360Degree);
                    calcSpecForces.DataSpecificForces.T.RemoveAt(indexRecordWith360Degree);
                }
            });

            //CalcSpecificForcesOfCylinders[FIRST_CYLINDER].
            //reset total torque
            TotalTorqueOfCylinders = new List <double>();
            //create bearing index of T in 6 cylinder for going along T in data specif forces
            int bearingIndexT1 = CalcSpecificForcesOfCylinders[FIRST_CYLINDER].DataSpecificForces.Angles.BinarySearch(START_ANGLE_T1);
            int bearingIndexT2 = CalcSpecificForcesOfCylinders[SECOND_CYLINDER].DataSpecificForces.Angles.BinarySearch(START_ANGLE_T2);
            int bearingIndexT3 = CalcSpecificForcesOfCylinders[THIRD_CYLINDER].DataSpecificForces.Angles.BinarySearch(START_ANGLE_T3);
            int bearingIndexT4 = CalcSpecificForcesOfCylinders[FOURTH_CYLINDER].DataSpecificForces.Angles.BinarySearch(START_ANGLE_T4);
            int bearingIndexT5 = CalcSpecificForcesOfCylinders[FIFTH_CYLINDER].DataSpecificForces.Angles.BinarySearch(START_ANGLE_T5);
            int bearingIndexT6 = CalcSpecificForcesOfCylinders[SIXTH_CYLINDER].DataSpecificForces.Angles.BinarySearch(START_ANGLE_T6);

            int lengthInternalObjectsInDataSpecForces = CalcSpecificForcesOfCylinders[FIRST_CYLINDER].DataSpecificForces.LengthInternalObject;


            for (int iterT = 0; iterT < lengthInternalObjectsInDataSpecForces - 1; iterT++) // go along DataSpecificForces for get T of differentcylinder
            {
                double T1   = CalcSpecificForcesOfCylinders[FIRST_CYLINDER].DataSpecificForces.T[bearingIndexT1];
                double T2   = CalcSpecificForcesOfCylinders[SECOND_CYLINDER].DataSpecificForces.T[bearingIndexT2];
                double T3   = CalcSpecificForcesOfCylinders[THIRD_CYLINDER].DataSpecificForces.T[bearingIndexT3];
                double T4   = CalcSpecificForcesOfCylinders[FOURTH_CYLINDER].DataSpecificForces.T[bearingIndexT4];
                double T5   = CalcSpecificForcesOfCylinders[FIFTH_CYLINDER].DataSpecificForces.T[bearingIndexT5];
                double T6   = CalcSpecificForcesOfCylinders[SIXTH_CYLINDER].DataSpecificForces.T[bearingIndexT6];
                double Tsum = Round(T1 + T2 + T3 + T4 + T5 + T6, 3);
                //Mi = 1000 * TSum * Fn * R
                double totalTorque = Round(1000 * Tsum * FormsDiagrOfCylinderProcesses[FIRST_CYLINDER].CalcPolitrops.Fn * CalcPolitrops.R, 3);
                TotalTorqueOfCylinders.Add(totalTorque);

                //save max totalTorque and min totalTorque
                if (iterT == 0)
                {
                    this.maxTotalTorque = totalTorque;
                    this.minTotalTorque = totalTorque;
                }
                else
                {
                    if (totalTorque > maxTotalTorque)
                    {
                        this.maxTotalTorque = totalTorque;
                    }
                    if (totalTorque < minTotalTorque)
                    {
                        this.minTotalTorque = totalTorque;
                    }
                }

                dataGridView.Rows.Add(CalcSpecificForcesOfCylinders[FIRST_CYLINDER].DataSpecificForces.Angles[iterT], T1, T2, T3, T4, T5, T6, Tsum, totalTorque);
                //increase index
                bearingIndexT1++;
                bearingIndexT2++;
                bearingIndexT3++;
                bearingIndexT4++;
                bearingIndexT5++;
                bearingIndexT6++;
                //lengthInternalObjectsInDataSpecForces-1 cause value in 720 degree is the same as 0 degree
                if (bearingIndexT1 == lengthInternalObjectsInDataSpecForces - 1) //index in end - go from start,
                {
                    bearingIndexT1 = 0;
                }

                if (bearingIndexT2 == lengthInternalObjectsInDataSpecForces - 1) //index in end - go from start
                {
                    bearingIndexT2 = 0;
                }

                if (bearingIndexT3 == lengthInternalObjectsInDataSpecForces - 1) //index in end - go from start
                {
                    bearingIndexT3 = 0;
                }

                if (bearingIndexT4 == lengthInternalObjectsInDataSpecForces - 1) //index in end - go from start
                {
                    bearingIndexT4 = 0;
                }

                if (bearingIndexT5 == lengthInternalObjectsInDataSpecForces - 1) //index in end - go from start
                {
                    bearingIndexT5 = 0;
                }

                if (bearingIndexT6 == lengthInternalObjectsInDataSpecForces - 1) //index in end - go from start
                {
                    bearingIndexT6 = 0;
                }
            }

            //save average total torque
            this.averageTotalTorque = (this.maxTotalTorque + this.minTotalTorque) / 2;
            FormDiagramProcessOfCylinder.AutosizeGridView(dataGridView);
        }
示例#7
0
        private void btnTotalTorqueEngine_Click(object sender, EventArgs e)
        {
            //checked calculation data for cylinder
            if (CalcSpecificForcesOfCylinders.Count == 0)
            {
                MessageBox.Show("Дані для циліндрів не були розраховані.");
                return;
            }
            //minimize other windows
            //foreach (var formCylinderProc in FormsCylinderProcesses)
            //{
            //    if (formCylinderProc != null)
            //    {
            //        formCylinderProc.WindowState = FormWindowState.Minimized;
            //    }
            //}

            //check - are calculated data for all cylinders
            for (int i = 0; i < CalcSpecificForcesOfCylinders.Count; i++)
            {
                if (CalcSpecificForcesOfCylinders[i] == null || CalcSpecificForcesOfCylinders[i].DataSpecificForces == null ||                                 //данные не существуют
                    (FormsDiagrOfCylinderProcesses[i].TaskCalcSpecificForces != null && !FormsDiagrOfCylinderProcesses[i].TaskCalcSpecificForces.IsCompleted)) //данные вычислены полностью
                {
                    DialogResult dialogResult = MessageBox.Show("Дані для циліндра " + (i + 1) + " не були розраховані.");
                    return;
                }

                if (CalcSpecificForcesIdealEngine == null || CalcSpecificForcesIdealEngine.DataSpecificForces == null ||                   //данные не существуют
                    (FormDiagrOfIdealEngine.TaskCalcSpecificForces != null && !FormDiagrOfIdealEngine.TaskCalcSpecificForces.IsCompleted)) //данные вычислены не полностью
                {
                    DialogResult dialogResult = MessageBox.Show("Дані для ідеального не були розраховані.");
                    return;
                }
            }

            // add calculating data to datagrid view
            AddExtraCalculatingDataToGridViewOfCylinders();
            AddExtraCalculatingDataToGridViewOfIdealEngine();

            //розрахувати сумарний обертальний момент ідеального двигуна
            CalcTotalTorqueOfIdealEngine();
            //очистить старый график для идеального двигателя
            try
            {
                chart_IdealEngine.Series.Remove(chart_IdealEngine.Series["TotalToqueForIdealEngine"]);
            }
            catch (ArgumentException) { /*NOP*/ }
            //построить график для идеального двигателя
            BuildChartTotalToqueForIdealEngine(chart_IdealEngine);
            //очистити таблицю від старих питомі сили циліндрів та сумарний обертальний момент двигуна
            FormDiagramProcessOfCylinder.ClearGridView(dataGridView_TiAndMi);
            //показати питомі сили циліндрів та сумарний обертальний момент двигуна
            ShowSpecificForcesAndTorqueEngineOnGridView(dataGridView_TiAndMi);
            //очистити графік залежності обертального моменту від кута
            try
            {
                chartTotalToque.Series.Remove(chartTotalToque.Series["TotalToque"]);
            }
            catch (ArgumentException) { /*NOP*/ }
            //побудувати графік залежності обертального моменту від кута
            BuildChartTotalToque(chartTotalToque);
            //очистить старый график для идеального двигателя
            try
            {
                chartTotalToque.Series.Remove(chartTotalToque.Series["TotalToqueForIdealEngine"]);
            }
            catch (ArgumentException) { /*NOP*/ }
            //построить график для идеального двигателя
            BuildChartTotalToqueForIdealEngine(chartTotalToque);
            ////очистити таблицю від старих оэффициентов неравномерности крутящего момента для всех цилиндров
            FormDiagramProcessOfCylinder.ClearGridView(dataGridView_TorqueUniformity);
            // показати табцицю коэффициентов неравномерности крутящего момента для всех цилиндров
            ShowTorqueUniformities(CalcTorqueUniformities(TotalTorqueOfCylinders), dataGridView_TorqueUniformity);
        }