Моделирование работы плоского механизма
Министерство образования и науки
Российской Федерации
Федеральное государственное бюджетное
образовательное учреждение
высшего профессионального образования
«Южно-Уральский государственный
университет»
Факультет «Приборостроительный»
Кафедра «Информационно-измерительная
техника»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОЙ
РАБОТЕ
по дисциплине «Информатика»
МОДЕЛИРОВАНИЕ РАБОТЫ ПЛОСКОГО
МЕХАНИЗМА
Автор проекта
студент группы
Я.С. Загоскин
Челябинск 2014
Аннотация
Загоскин Я.С. Моделирование работы плоского механизма. Пояснительная
записка к курсовой работе. - Челябинск: ЮУрГУ, ПС-136, 26с., 3 ил., 1 табл.,
библиогр. список - 1 наим.
Цель курсовой работы: создание оболочки моделирования работы
кривошипно-шатунного механизма.
Задачи курсовой работы:
· описание параметров механизма;
· исследование кинематики механизма;
· представление схемы и анимации движения механизма;
· построение графика движения основных точек механизма;
· представление таблицы с результатами расчетов.
Для решения поставленных задач была рассмотрена, изучена и подробно
описана схема работы кривошипно-шатунного механизма, приведенная в задании, и
его математическая модель.
Курсовая работа выполнена с помощью методов объектно-ориентированного
программирования в среде Microsoft Visual Studio 2013 C++.
Оглавление
Аннотация
Оглавление
Введение
1. Математическая модель
механизма
1.1 Кинематика точки B
1.2 Кинематика точек C и M
2. Алгоритм программы
3. Код программы
4. Результаты расчетов
Заключение
Библиографический список
Введение
Цель курсовой работы - создание программы, моделирующей движение
кривошипно-шатунного механизма.
Согласно заданию в работе необходимо представить: параметры механизма;
схему, анимацию движения механизма; график движения основных точек механизма;
таблицу результатов.
Для достижения поставленной цели необходимо решить следующие задачи:
· проанализировать схему данного механизма и исходные данные;
· составить математическую модель механизма;
· создать проект оболочки моделирования механизма в среде Microsoft Visual Studio 2013 C++.
Представленная в техническом задании схема механизма позволяет выделить
основные его части:
· шарнир цилиндрический A,
неподвижный, закрепленный;
· кривошип AB;
· шарнир цилиндрический B;
· шатун BC;
· шарнир цилиндрический C;
· кривошип CD;
· шарнир цилиндрически D, неподвижный, закрепленный.
Из-за того, что все звенья механизма связаны между собой цилиндрическими
шарнирами, механизм совершает движение только в плоскости - XoY.
Из условия задания видно, что кривошип AB имеет положительную угловую скорость, поэтому он вращается
против часовой стрелки.
1. Математическая модель механизма
Для построения математической модели кривошипно-шатунного механизма
необходимо и достаточно изучить движение его основных трех точек: B, C и M.
Исходными данными для исследования кинематики точек являются: координаты
точек A и D, длины кривошипов AB и CD и шатуна BC, длина отрезка BM, угловая скорость кривошипа AB.
1.1 Кинематика точки B
Из рисунка 1:
Рисунок 1 - Схема механизма
Из ∆ABH:
Таким образом, мы имеем:
1.2 Кинематика точек C и M
Для исследования кинематики точек C и M
определим коэффициенты:
Используя рассчитанные коэффициенты, определим координаты точки C:
Координаты точки M:
Также была поставлена задача о скорости движения точки M.
Проекция скорости точки на ось-это производная по времени от
соответствующей координаты:
Таким образом, получаем следующие зависимости:
2.
Алгоритм программы
Приведем
алгоритм программы:
1) Создаем оконное приложение. В подпрограммы #pragma once -описываем элементы оконного приложения: Label, Timer, TextBox,
PictureBox, Button, DataGridView. Приводим их к нужному нам виду, заносим в них исходные значения и т.д.
2) В подпрограмме #pragma endregion
объявляем все переменные и классы, используемые в требующихся функциях.
) Описываем функцию void Calculation1(), в
которую записывается математическая модель кривошипно-шатунного механизма;
) Описываем функцию void Animation1(),
которая реализует анимацию движения механизма.
) Добавляем обработчик событий private: System::Void button1_Click,
который при нажатии на кнопку «Старт» включает секундомер и активирует функцию ToFile1();
6) private: System::Voidbutton2_Click - обработчик событий, который при нажатии на кнопку
«Стоп» останавливает секундомер;
7) private: System::Voidtimer1_Tick - обработчик событий, который активирует функцииCalculation1(),
Animation1(), Graphic(), Table();
) voidAnimation1() - функция, которая реализует анимацию движения механизма;
9) voidGraphic() - функция, которая отвечает за построение графиков
движения основных точек механизма;
10) private: System::VoidForm1_Load - обработчик событий, который при запуске программы
активирует инструменты прорисовки анимации и графиков движения точек механизма;
11) voidVelocity() - функция, вычисляющая скорость точки M;
12) voidTable() - функция, заполняющая таблицу (элемент DataGridView) искомыми данными;
13) voidToFile1() - функция записи результатов в отдельный файл формата .txt
3. Код программы
#pragma onceKursovaya {namespace System;namespace
System::ComponentModel;namespace System::Collections;namespace
System::Windows::Forms;namespace System::Data;namespace System::Drawing;
/// <summary>
/// Сводка для Form1
///
/// Внимание! При изменении имени этого класса
необходимо также изменить
/// свойство имени файла ресурсов
("ResourceFileName") для средства компиляции управляемого ресурса,
/// связанного со всеми файлами с расширением .resx, от
которых зависит данный класс. В противном случае,
/// конструкторы не смогут правильно работать с
локализованными
/// ресурсами, сопоставленными данной форме.
/// </summary>ref class Form1 : public
System::Windows::Forms::Form
{:(void)
{();
//
//TODO: добавьтекодконструктора
//
}:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~Form1()
{(components)
{components;
}
}: : System::Windows::Forms::PictureBox^
pictureBox1;: : System::Windows::Forms::Timer^ timer6;:
System::Windows::Forms::PictureBox^ pictureBox2;:
System::Windows::Forms::DataGridView^ dataGridView1;: System::Windows::Forms::Label^
label105;: System::Windows::Forms::Label^ label88;:
System::Windows::Forms::Label^ label89;: System::Windows::Forms::TextBox^
textBox41;: System::Windows::Forms::Label^ label90;:
System::Windows::Forms::Label^ label91;: System::Windows::Forms::TextBox^
textBox42;: System::Windows::Forms::Button^ button11;:
System::Windows::Forms::Label^ label92;: System::Windows::Forms::Label^
label93;: System::Windows::Forms::Label^ label94;:
System::Windows::Forms::Label^ label95;: System::Windows::Forms::Label^
label96;: System::Windows::Forms::Label^ label97;:
System::Windows::Forms::Label^ label98;: System::Windows::Forms::Label^
label99;: System::Windows::Forms::Label^ label100;:
System::Windows::Forms::Label^ label101;: System::Windows::Forms::Label^ label102;:
System::Windows::Forms::Label^ label103;: System::Windows::Forms::Label^
label104;: System::Windows::Forms::TextBox^ textBox43;:
System::Windows::Forms::TextBox^ textBox44;: System::Windows::Forms::TextBox^
textBox45;: System::Windows::Forms::TextBox^ textBox46;:
System::Windows::Forms::TextBox^ textBox47;: System::Windows::Forms::TextBox^
textBox48;: System::Windows::Forms::Button^ button12;:
System::Windows::Forms::TextBox^ textBox1;: System::Windows::Forms::Label^
label1;: System::Windows::Forms::Label^ label2;: : : :
System::ComponentModel::IContainer^ components;
private:
/// <summary>
/// Требуется переменная конструктора.
/// </summary>
#pragma region Windows Form Designer
generated code
/// <summary>
/// Обязательный метод для поддержки конструктора - не
изменяйте
/// содержимое данного метода при помощи редактора кода.
{>components = (gcnew
System::ComponentModel::Container());>pictureBox1 = (gcnew
System::Windows::Forms::PictureBox());>timer6 = (gcnew System::Windows::Forms::Timer(this->components));>pictureBox2
= (gcnew System::Windows::Forms::PictureBox());>dataGridView1 = (gcnew
System::Windows::Forms::DataGridView());>label105 = (gcnew
System::Windows::Forms::Label());>label88 = (gcnew System::Windows::Forms::Label());>label89
= (gcnew System::Windows::Forms::Label());>textBox41 = (gcnew
System::Windows::Forms::TextBox());>label90 = (gcnew
System::Windows::Forms::Label());>label91 = (gcnew
System::Windows::Forms::Label());>textBox42 = (gcnew System::Windows::Forms::TextBox());>button11
= (gcnew System::Windows::Forms::Button());>label92 = (gcnew
System::Windows::Forms::Label());>label93 = (gcnew
System::Windows::Forms::Label());>label94 = (gcnew
System::Windows::Forms::Label());>label95 = (gcnew System::Windows::Forms::Label());>label96
= (gcnew System::Windows::Forms::Label());>label97 = (gcnew
System::Windows::Forms::Label());>label98 = (gcnew
System::Windows::Forms::Label());>label99 = (gcnew
System::Windows::Forms::Label());>label100 = (gcnew System::Windows::Forms::Label());>label101
= (gcnew System::Windows::Forms::Label());>label102 = (gcnew
System::Windows::Forms::Label());>label103 = (gcnew
System::Windows::Forms::Label());>label104 = (gcnew
System::Windows::Forms::Label());>textBox43 = (gcnew System::Windows::Forms::TextBox());>textBox44
= (gcnew System::Windows::Forms::TextBox());>textBox45 = (gcnew
System::Windows::Forms::TextBox());>textBox46 = (gcnew
System::Windows::Forms::TextBox());>textBox47 = (gcnew
System::Windows::Forms::TextBox());>textBox48 = (gcnew
System::Windows::Forms::TextBox());>button12 = (gcnew
System::Windows::Forms::Button());>textBox1 = (gcnew
System::Windows::Forms::TextBox());>label1 = (gcnew
System::Windows::Forms::Label());>label2 = (gcnew System::Windows::Forms::Label());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox2))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->dataGridView1))->BeginInit();>SuspendLayout();
//
// pictureBox1
// >pictureBox1->BackColor =
System::Drawing::SystemColors::Window;>pictureBox1->Location =
System::Drawing::Point(511, 12);>pictureBox1->Name =
L"pictureBox1";>pictureBox1->Size = System::Drawing::Size(588,
354);>pictureBox1->SizeMode =
System::Windows::Forms::PictureBoxSizeMode::Zoom;>pictureBox1->TabIndex =
1;>pictureBox1->TabStop = false;
//
// timer6
// >timer6->Interval =
50;>timer6->Tick += gcnew System::EventHandler(this, &Form1::timer6_Tick);
//
// pictureBox2
// >pictureBox2->BackColor =
System::Drawing::SystemColors::Window;>pictureBox2->Location =
System::Drawing::Point(511, 391);>pictureBox2->Name =
L"pictureBox2";>pictureBox2->Size = System::Drawing::Size(588,
354);>pictureBox2->TabIndex = 2;>pictureBox2->TabStop = false;
//
// dataGridView1
//
>dataGridView1->ColumnHeadersHeightSizeMode =
System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;>dataGridView1->Location
= System::Drawing::Point(12, 391);>dataGridView1->Name =
L"dataGridView1";>dataGridView1->Size =
System::Drawing::Size(480, 354);>dataGridView1->TabIndex = 3;
//
// label105
// >label105->AutoSize =
true;>label105->Font = (gcnew System::Drawing::Font(L"Symbol",
8.25F, System::Drawing::FontStyle::Regular,
System::Drawing::GraphicsUnit::Point,_cast<System::Byte>(2)));>label105->Location
= System::Drawing::Point(38, 255);>label105->Name =
L"label105";>label105->Size = System::Drawing::Size(14,
13);>label105->TabIndex = 197;>label105->Text = L"a";
//
// label88
// >label88->AutoSize =
true;>label88->Location = System::Drawing::Point(229,
256);>label88->Name = L"label88";>label88->Size =
System::Drawing::Size(36, 13);>label88->TabIndex =
193;>label88->Text = L", град";
//
// label89
// >label89->AutoSize =
true;>label89->Location = System::Drawing::Point(9,
255);>label89->Name = L"label89";>label89->Size =
System::Drawing::Size(32, 13);>label89->TabIndex =
192;>label89->Text = L"Угол";
//
// textBox41
// >textBox41->Location = System::Drawing::Point(135,
248);>textBox41->Margin = System::Windows::Forms::Padding(3, 10, 3,
3);>textBox41->Name = L"textBox41";>textBox41->Size =
System::Drawing::Size(80, 20);>textBox41->TabIndex =
191;>textBox41->Text = L"-20";
//
// label90
// >label90->AutoSize =
true;>label90->Location = System::Drawing::Point(229,
223);>label90->Name = L"label90";>label90->Size =
System::Drawing::Size(27, 13);>label90->TabIndex =
190;>label90->Text = L", см";
//
// label91
// >label91->AutoSize =
true;>label91->Location = System::Drawing::Point(9,
223);>label91->Name = L"label91";>label91->Size =
System::Drawing::Size(83, 13);>label91->TabIndex =
189;>label91->Text = L"Координата xD";
//
// textBox42
// >textBox42->Location =
System::Drawing::Point(135, 215);>textBox42->Margin =
System::Windows::Forms::Padding(3, 10, 3, 3);>textBox42->Name =
L"textBox42";>textBox42->Size = System::Drawing::Size(80,
20);>textBox42->TabIndex = 188;>textBox42->Text = L"2";
//
// button11
// >button11->Location =
System::Drawing::Point(312, 103);>button11->Name =
L"button11";>button11->Size = System::Drawing::Size(115,
33);>button11->TabIndex = 187;>button11->Text = L"Стоп";>button11->UseVisualStyleBackColor
= true;>button11->Click += gcnew System::EventHandler(this,
&Form1::button11_Click);
//
// label92
// >label92->AutoSize =
true;>label92->Location = System::Drawing::Point(229,
189);>label92->Name = L"label92";>label92->Size =
System::Drawing::Size(30, 13);>label92->TabIndex =
186;>label92->Text = L", 1/с";
//
// label93
// >label93->AutoSize =
true;>label93->Location = System::Drawing::Point(229,
156);>label93->Name = L"label93";>label93->Size =
System::Drawing::Size(27, 13);>label93->TabIndex =
185;>label93->Text = L", см";
//
// label94
// >label94->AutoSize =
true;>label94->Location = System::Drawing::Point(229,
123);>label94->Name = L"label94";>label94->Size =
System::Drawing::Size(27, 13);>label94->TabIndex =
184;>label94->Text = L", см";
//
// label95
// >label95->AutoSize = true;>label95->Location
= System::Drawing::Point(229, 90);>label95->Name =
L"label95";>label95->Size = System::Drawing::Size(27,
13);>label95->TabIndex = 183;>label95->Text = L", см";
//
// label96
// >label96->AutoSize =
true;>label96->Location = System::Drawing::Point(229,
57);>label96->Name = L"label96";>label96->Size =
System::Drawing::Size(27, 13);>label96->TabIndex =
182;>label96->Text = L", см";
//
// label97
// >label97->AutoSize =
true;>label97->Location = System::Drawing::Point(229,
21);>label97->Name = L"label97";>label97->Size =
System::Drawing::Size(27, 13);>label97->TabIndex =
181;>label97->Text = L", см";
//
// label98
// >label98->AutoSize =
true;>label98->Font = (gcnew System::Drawing::Font(L"Symbol",
8.25F, System::Drawing::FontStyle::Regular,
System::Drawing::GraphicsUnit::Point,_cast<System::Byte>(2)));>label98->Location
= System::Drawing::Point(106, 190);>label98->Name =
L"label98";>label98->Size = System::Drawing::Size(15,
13);>label98->TabIndex = 180;>label98->Text = L"w";
//
// label99
// >label99->AutoSize =
true;>label99->Location = System::Drawing::Point(9,
189);>label99->Name = L"label99";>label99->Size =
System::Drawing::Size(100, 13);>label99->TabIndex =
179;>label99->Text = L"Угловая скорость";
//
// label100
// >label100->AutoSize =
true;>label100->Location = System::Drawing::Point(9,
156);>label100->Name = L"label100";>label100->Size =
System::Drawing::Size(82, 13);>label100->TabIndex =
178;>label100->Text = L"Координата yA";
//
// label101
// >label101->AutoSize =
true;>label101->Location = System::Drawing::Point(9,
123);>label101->Name = L"label101";>label101->Size =
System::Drawing::Size(82, 13);>label101->TabIndex =
177;>label101->Text = L"Координата xA";
// label102
// >label102->AutoSize =
true;>label102->Location = System::Drawing::Point(9,
90);>label102->Name = L"label102";>label102->Size =
System::Drawing::Size(59, 13);>label102->TabIndex =
176;>label102->Text = L"Длина BM";
//
// label103
// >label103->AutoSize =
true;>label103->Location = System::Drawing::Point(9,
57);>label103->Name = L"label103";>label103->Size =
System::Drawing::Size(57, 13);>label103->TabIndex =
175;>label103->Text = L"Длина BC";
//
// label104
// >label104->AutoSize =
true;>label104->Location = System::Drawing::Point(9,
24);>label104->Name = L"label104";>label104->Size =
System::Drawing::Size(57, 13);>label104->TabIndex =
174;>label104->Text = L"Длина AB";
//
// textBox43
// >textBox43->Location =
System::Drawing::Point(135, 182);>textBox43->Margin =
System::Windows::Forms::Padding(3, 10, 3, 3);>textBox43->Name =
L"textBox43";>textBox43->Size = System::Drawing::Size(80,
20);>textBox43->TabIndex = 173;>textBox43->Text = L"2";
//
// textBox44
// >textBox44->Location =
System::Drawing::Point(135, 149);>textBox44->Margin =
System::Windows::Forms::Padding(3, 10, 3, 3);>textBox44->Name =
L"textBox44";>textBox44->Size = System::Drawing::Size(80,
20);>textBox44->TabIndex = 172;>textBox44->Text = L"0";
//
// textBox45
// >textBox45->Location =
System::Drawing::Point(135, 116);>textBox45->Margin =
System::Windows::Forms::Padding(3, 10, 3, 3);>textBox45->Name =
L"textBox45";>textBox45->Size = System::Drawing::Size(80,
20);>textBox45->TabIndex = 171;>textBox45->Text = L"-2";
//
// textBox46
// >textBox46->Location =
System::Drawing::Point(135, 83);>textBox46->Margin =
System::Windows::Forms::Padding(3, 10, 3, 3);>textBox46->Name =
L"textBox46";>textBox46->Size = System::Drawing::Size(80,
20);>textBox46->TabIndex = 170;>textBox46->Text = L"6";
//
// textBox47
// >textBox47->Location =
System::Drawing::Point(135, 50);>textBox47->Margin =
System::Windows::Forms::Padding(3, 10, 3, 3);>textBox47->Name =
L"textBox47";>textBox47->Size = System::Drawing::Size(80,
20);>textBox47->TabIndex = 169;>textBox47->Text = L"11";
//
// textBox48
// >textBox48->Location =
System::Drawing::Point(135, 17);>textBox48->Margin =
System::Windows::Forms::Padding(3, 10, 3, 3);>textBox48->Name =
L"textBox48";>textBox48->Size = System::Drawing::Size(80,
20);>textBox48->TabIndex = 168;>textBox48->Text = L"5";
//
// button12
// >button12->Location =
System::Drawing::Point(312, 37);>button12->Name =
L"button12";>button12->Size = System::Drawing::Size(115,
33);>button12->TabIndex = 167;>button12->Text = L"Старт";>button12->UseVisualStyleBackColor
= true;>button12->Click += gcnew System::EventHandler(this,
&Form1::button12_Click);
//
// textBox1
// >textBox1->Location =
System::Drawing::Point(135, 287);>textBox1->Name =
L"textBox1";>textBox1->Size = System::Drawing::Size(80, 20);>textBox1->TabIndex
= 198;>textBox1->Text = L"0";
//
// label1
// >label1->AutoSize =
true;>label1->Location = System::Drawing::Point(9,
290);>label1->Name = L"label1";>label1->Size =
System::Drawing::Size(83, 13);>label1->TabIndex = 199;>label1->Text
= L"Координата
yD";
//
// label2
// >label2->AutoSize =
true;>label2->Location = System::Drawing::Point(229,
294);>label2->Name = L"label2";>label2->Size =
System::Drawing::Size(27, 13);>label2->TabIndex = 200;>label2->Text
= L", см";
//
// Form1
// >AutoScaleDimensions =
System::Drawing::SizeF(6, 13);>AutoScaleMode =
System::Windows::Forms::AutoScaleMode::Font;>ClientSize =
System::Drawing::Size(1136,
750);>Controls->Add(this->label2);>Controls->Add(this->label1);>Controls->Add(this->textBox1);>Controls->Add(this->label105);>Controls->Add(this->label88);>Controls->Add(this->label89);>Controls->Add(this->textBox41);>Controls->Add(this->label90);>Controls->Add(this->label91);>Controls->Add(this->textBox42);>Controls->Add(this->button11);>Controls->Add(this->label92);>Controls->Add(this->label93);>Controls->Add(this->label94);>Controls->Add(this->label95);>Controls->Add(this->label96);>Controls->Add(this->label97);>Controls->Add(this->label98);>Controls->Add(this->label99);>Controls->Add(this->label100);>Controls->Add(this->label101);>Controls->Add(this->label102);>Controls->Add(this->label103);>Controls->Add(this->label104);>Controls->Add(this->textBox43);>Controls->Add(this->textBox44);>Controls->Add(this->textBox45);>Controls->Add(this->textBox46);>Controls->Add(this->textBox47);>Controls->Add(this->textBox48);>Controls->Add(this->button12);>Controls->Add(this->dataGridView1);>Controls->Add(this->pictureBox2);>Controls->Add(this->pictureBox1);>DoubleBuffered
= true;>Name = L"Form1";>Text = L"Механизмы";>Load
+= gcnew System::EventHandler(this, &Form1::Form1_Load);
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->EndInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox2))->EndInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->dataGridView1))->EndInit();>ResumeLayout(false);>PerformLayout();
}
#pragma endregionAB, BC, BM, CD;xA, yA, xB,
yB, xC, yC, xM, yM, xD, yD;w, l, alfa, R;a, b, c, d, k, h;t, delta_t;j; xC_now,
yC_now, xB_now, yB_now, xM_now, yM_now, xC_before, yC_before, xB_before,
yB_before, xM_before, yM_before;VxC, VyC, VxB, VyB, wBC;^canvas; ^canvas1;
^colour;^pen;::Drawing::Font ^font;^img;^br; ::IO::FileInfo
^Info;::IO::StreamWriter ^Writer;: System::Void Form1_Load(System::Object^
sender, System::EventArgs^ e) { = this->pictureBox1->CreateGraphics();
canvas1 =
this->pictureBox2->CreateGraphics();= gcnew Color(); = gcnew
Pen(colour->Blue);= gcnew
System::Drawing::Font(System::Drawing::FontFamily::GenericSansSerif,12,System::Drawing::FontStyle::Regular);>pictureBox1->Image
= img->FromFile("Image.bmp");>dataGridView1->ColumnCount =
8;
j = 0;
}Calculation() { {=
Double::Parse(this->textBox48->Text);=
Double::Parse(this->textBox47->Text); = Convert::ToDouble(this->textBox46->Text);
= Double::Parse(this->textBox45->Text);=
Double::Parse(this->textBox44->Text);=
Double::Parse(this->textBox43->Text);=
Double::Parse(this->textBox42->Text);=
Double::Parse(this->textBox1->Text);= Double::Parse(this->textBox41->Text);
}(System::FormatException ^e)
{>timer6->Enabled = false;::Show("Ошибка ввода.", "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::None);
}=
alfa*3.14/180;= xA+AB*Math::Cos(w*t);= yA+AB*Math::Sin(w*t);= Math::Tan(alfa);=
1+k*k;= -k*xD;= 2*(k*(h-yB)-xB);= xB*xB-BC*BC+(h-yB)*(h-yB);= b*b-4*a*c;(d <
0) {>timer6->Enabled = false; >textBox48->Text =
"5";>textBox47->Text = "11";>textBox46->Text =
"6";>textBox45->Text = "-2";>textBox44->Text =
"0";>textBox43->Text = "2";>textBox42->Text =
"2";>textBox41->Text = "-20";>textBox1->Text =
"0";::Show("Некорректные данные.", "Ошибка", MessageBoxButtons::OK,
MessageBoxIcon::None); ;
}=
(-b+Math::Sqrt(d))/(2*a);= k*xC+h;= (BM/BC)*(xC-xB)+xB;= (BM/BC)*(yC-yB)+yB;
}Animation()
{= Brushes::Black;>DrawLine(pen,50,0,50,this->pictureBox1->Height);
>DrawLine(pen,0,200,this->pictureBox1->Width,200);
>DrawString("0",font,br,50,200);
>DrawString("y",font,br,50,0);>DrawString("x",font,br,this->pictureBox1->Width-20,200);
//Оси и подписи.>DrawLine(pen,(xA*20)+50,(-yA*20)+200,(xA*20)+45,(-yA*20)+210);>DrawLine(pen,(xA*20)+45,(-yA*20)+210,(xA*20)+55,(-yA*20)+210);>DrawLine(pen,(xA*20)+55,(-yA*20)+210,(xA*20)+50,(-yA*20)+200);
//Крепление точки А.>DrawLine(pen,(xA*20)+50,(-yA*20)+200,(xB*20)+50,(-yB*20)+200);>DrawLine(pen,(xB*20)+50,(-yB*20)+200,(xC*20)+50,(-yC*20)+200);
//Саммеханизм.
canvas->DrawRectangle(pen,(xC*20)+35,-(yC*20)+193,30.0,14.0);
//Рисуем прямоугольник текущим пером по координатам верхнего левого угла,
ширины и высоты.
canvas->DrawString("A",font,br,(xA*20)+50,(-yA*20)+200);>DrawString("B",font,br,(xB*20)+50,(-yB*20)+200);>DrawString("C",font,br,(xC*20)+50,(-yC*20)+200);>DrawString("M",font,br,(xM*20)+50,(-yM*20)+200);
// Подписи точек.=
Brushes::Red;>FillEllipse(br,(xC*20)+48,(-yC*20)+198,4.0,4.0);=
Brushes::Green;>FillEllipse(br,(xB*20)+48,(-yB*20)+198,4.0,4.0);=
Brushes::Purple;>FillEllipse(br,(xM*20)+48,(-yM*20)+198,4.0,4.0); //Точки.
}Graphic()
{++; ->DrawLine(pen,50,0,50,this->pictureBox1->Height);
->DrawLine(pen,0,200,this->pictureBox1->Width,200);
->DrawString("0",font,br,50,200);
->DrawString("y",font,br,50,0);->DrawString("x",font,br,this->pictureBox1->Width-20,200);
//Оси и подписи.=
Brushes::Red;->FillEllipse(br,(xC*20)+48,(-yC*20)+198,4.0,4.0);=
Brushes::Green;->FillEllipse(br,(xB*20)+48,(-yB*20)+198,4.0,4.0);= Brushes::Purple;->FillEllipse(br,(xM*20)+48,(-yM*20)+198,4.0,4.0);(j
== 78 ) {->Clear(colour->White);= 0;
}
}Velocity()
{= (xB_now-xB_before)/delta_t;= (yB_now-yB_before)/delta_t;=
(xC_now-xC_before)/delta_t;= (yC_now-yC_before)/delta_t;=
(xC-xB)*(VyC-VyB)-(yC-yB)*(VxC-VxB);
}Table()
{_t = 1;(t <= (2*Math::PI/w)+1)
{>dataGridView1->Rows[0]->Cells[0]->Value =
"t";>dataGridView1->Rows[0]->Cells[1]->Value =
"xB";>dataGridView1->Rows[0]->Cells[2]->Value =
"yB";>dataGridView1->Rows[0]->Cells[3]->Value =
"xC";>dataGridView1->Rows[0]->Cells[4]->Value =
"yC";>dataGridView1->Rows[0]->Cells[5]->Value =
"xM";>dataGridView1->Rows[0]->Cells[6]->Value =
"yM";>dataGridView1->Rows[0]->Cells[7]->Value = "wBC";>dataGridView1->Rows[t]->Cells[0]->Value
= Convert::ToString(Math::Round(t,4));>dataGridView1->Rows[t]->Cells[1]->Value
=
Convert::ToString(Math::Round(xB,4));>dataGridView1->Rows[t]->Cells[2]->Value
=
Convert::ToString(Math::Round(yB,4));>dataGridView1->Rows[t]->Cells[3]->Value
= Convert::ToString(Math::Round(xC,4));>dataGridView1->Rows[t]->Cells[4]->Value
=
Convert::ToString(Math::Round(yC,4));>dataGridView1->Rows[t]->Cells[5]->Value
=
Convert::ToString(Math::Round(xM,4));>dataGridView1->Rows[t]->Cells[6]->Value
= Convert::ToString(Math::Round(yM,4));(t >= 2) {_now = Convert::ToDouble(this->dataGridView1->Rows[t]->Cells[3]->Value);_before
=
Convert::ToDouble(this->dataGridView1->Rows[t-1]->Cells[3]->Value);_now
=
Convert::ToDouble(this->dataGridView1->Rows[t]->Cells[4]->Value);_before
= Convert::ToDouble(this->dataGridView1->Rows[t-1]->Cells[4]->Value);_now
=
Convert::ToDouble(this->dataGridView1->Rows[t]->Cells[1]->Value);_before
=
Convert::ToDouble(this->dataGridView1->Rows[t-1]->Cells[1]->Value);_now
= Convert::ToDouble(this->dataGridView1->Rows[t]->Cells[2]->Value);_before
= Convert::ToDouble(this->dataGridView1->Rows[t-1]->Cells[2]->Value);();>dataGridView1->Rows[t-1]->Cells[7]->Value
= Convert::ToString(Math::Round(wBC,4));
}
}
}ToFile()
{= gcnew
System::IO::FileInfo(Application::StartupPath+"\\File.txt");=
Info->CreateText();= 0;();_before = xB;_before = yB;_before = xC;_before =
yC;_before = xM;_before = yM;_t =
(2*Math::PI/w)/1000;>WriteLine("t" + " | " +
"xB" + " | " + "yB" + " | " +
"xC" + " | " + "yC" + " | " +
"xM" + " | " + "yM" + " | " +
"wBC");(t = delta_t; t <= 2*Math::PI/w; t = t+delta_t) {();_now =
xC;_now = yC;_now = xB;_now = yB;_now = xM;_now =
yM;();>WriteLine(Convert::ToString(Math::Round(t-delta_t,4)) + " |
" + Convert::ToString(Math::Round(xB_before,4))
+
" | " + Convert::ToString(Math::Round(yB_before,4)) + " | "
+ Convert::ToString(Math::Round(xC_before,4))
+
" | " + Convert::ToString(Math::Round(yC_before,4)) + " | "
+ Convert::ToString(Math::Round(xM_before,4))
+
" | " + Convert::ToString(Math::Round(yM_before,4)) + " | "
+ Convert::ToString(Math::Round(wBC,4)));_before = xC;_before = yC;_before =
xB;_before = yB;_before = xM;_before = yM;
}>Close();
}:
System::Void button12_Click(System::Object^ sender, System::EventArgs^ e)
{>timer6->Enabled = true;();>dataGridView1->RowCount =
Math::Truncate(2*Math::PI/w)+2;
canvas1->Clear(colour->White);
t
= 0;
}:
System::Void timer6_Tick(System::Object^ sender, System::EventArgs^ e)
{>Clear(Color::White);++;();();();();
}
};
}
4.
Результаты расчетов
Таблица 1 - Результаты
расчетов
t
|
xB
|
yB
|
xC
|
yC
|
xM
|
yM
|
wBC
|
0
|
3
|
0
|
13,2154
|
-4,0798
|
8,5721
|
-2,2254
|
-103,308
|
0,0031
|
2,9999
|
0,0314
|
13,2043
|
-4,0758
|
8,566
|
-2,2089
|
-103,0779
|
0,0063
|
2,9996
|
0,0628
|
13,193
|
-4,0717
|
8,5597
|
-2,1924
|
-102,842
|
0,0094
|
2,9991
|
0,0942
|
13,1815
|
-4,0675
|
8,5531
|
-2,1758
|
-102,6045
|
0,0126
|
2,9984
|
0,1257
|
13,1696
|
-4,0632
|
8,5464
|
-2,1592
|
-102,3641
|
0,0157
|
2,9975
|
0,1571
|
13,1576
|
-4,0588
|
8,5394
|
-2,1425
|
-102,1174
|
0,0188
|
2,9964
|
0,1885
|
13,1453
|
-4,0543
|
8,5322
|
-2,1258
|
-101,8708
|
0,022
|
0,2198
|
13,1327
|
-4,0498
|
8,5248
|
-2,109
|
-101,6201
|
0,0251
|
2,9937
|
0,2512
|
13,12
|
-4,0451
|
8,5171
|
-2,0922
|
-101,3632
|
0,0283
|
2,992
|
0,2826
|
13,1069
|
-4,0404
|
8,5092
|
-2,0754
|
-101,1046
|
3,1071
|
2,9881
|
-0,345
|
13,3207
|
-4,1181
|
8,6241
|
-2,4031
|
-105,6267
|
3,1102
|
2,9902
|
-0,3136
|
13,3124
|
-4,1151
|
8,6205
|
-2,3872
|
-105,4328
|
3,1133
|
2,992
|
-0,2823
|
13,3038
|
-4,112
|
8,6166
|
-2,3712
|
-105,2357
|
3,1165
|
2,9937
|
-0,2509
|
13,295
|
-4,1088
|
8,6126
|
-2,3552
|
-105,036
|
3,1196
|
2,9952
|
-0,2195
|
13,2859
|
-4,1055
|
8,6083
|
-2,3391
|
-104,8311
|
3,1228
|
2,9965
|
-0,1881
|
13,2766
|
-4,1021
|
8,6038
|
-2,323
|
-104,6223
|
2,9975
|
-0,1567
|
13,267
|
-4,0986
|
8,5991
|
-2,3068
|
-104,4135
|
3,1291
|
2,9984
|
-0,1253
|
13,2572
|
-4,095
|
8,5941
|
-2,2906
|
-104,1984
|
3,1322
|
2,9991
|
-0,0939
|
13,2471
|
-4,0913
|
8,5889
|
-2,2743
|
-103,9802
|
3,1353
|
2,9996
|
-0,0625
|
13,2367
|
-4,0876
|
8,5835
|
-2,258
|
-103,7602
|
кривошипный кинематика программа
Заключение
Создана оболочка моделирования работы кривошипно-шатунного механизма
методами объектно-ориентированного программирования:
Рисунок 2 - Оболочка моделирования работы кривошипно-шатунного механизма
в среде Visual Studio 2013 C++
На основании исследованной кинематики и параметров механизма была
приведена схема механизма, создана анимация его движения и график движения
основных точек:
Рисунок 3 - Параметры и схема механизма, анимация движения механизма,
график движения точек В, С, М.
В пояснительной записке приведена таблица с требующимися данными:
координаты точек В, С, и М, скорость точки М.
Следовательно, поставленные задачи решены.
Библиографический список
Моделирование движения плоского механизма /сост. А.А. Лысова.
- Челябинск: Изд. ЮУрГУ, 2013. - 170 с.