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