Моделирование работы плоского механизма
Проект оболочки моделирования кривошипно-шатунного механизма в среде MS Visual Studio. Разработка его математической модели. Исследование кинематики точек В, С, М. Алгоритм и код программы. Анимация движения механизма и график движения основных точек.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 13.03.2016 |
Размер файла | 422,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Южно-Уральский государственный университет»
Факультет «Приборостроительный»
Кафедра «Информационно-измерительная техника»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОЙ РАБОТЕ
по дисциплине «Информатика»
МОДЕЛИРОВАНИЕ РАБОТЫ ПЛОСКОГО МЕХАНИЗМА
Автор проекта
студент группы
Я.С. Загоскин
Челябинск 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 объявляем все переменные и классы, используемые в требующихся функциях.
3) Описываем функцию void Calculation1(), в которую записывается математическая модель кривошипно-шатунного механизма;
4) Описываем функцию void Animation1(), которая реализует анимацию движения механизма.
5) Добавляем обработчик событий private: System::Void button1_Click, который при нажатии на кнопку «Старт» включает секундомер и активирует функцию ToFile1();
6) private: System::Voidbutton2_Click - обработчик событий, который при нажатии на кнопку «Стоп» останавливает секундомер;
7) private: System::Voidtimer1_Tick - обработчик событий, который активирует функцииCalculation1(), Animation1(), Graphic(), Table();
8) voidAnimation1() - функция, которая реализует анимацию движения механизма;
9) voidGraphic() - функция, которая отвечает за построение графиков движения основных точек механизма;
10) private: System::VoidForm1_Load - обработчик событий, который при запуске программы активирует инструменты прорисовки анимации и графиков движения точек механизма;
11) voidVelocity() - функция, вычисляющая скорость точки M;
12) voidTable() - функция, заполняющая таблицу (элемент DataGridView) искомыми данными;
13) voidToFile1() - функция записи результатов в отдельный файл формата .txt
3. Код программы
#pragma once
namespace Kursovaya {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для Form1
///
/// Внимание! При изменении имени этого класса необходимо также изменить
/// свойство имени файла ресурсов ("ResourceFileName") для средства компиляции управляемого ресурса,
/// связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
/// конструкторы не смогут правильно работать с локализованными
/// ресурсами, сопоставленными данной форме.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: добавьтекодконструктора
//
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
protected:
public: System::Windows::Forms::PictureBox^ pictureBox1;
private:
private: System::Windows::Forms::Timer^ timer6;
public: System::Windows::Forms::PictureBox^ pictureBox2;
private: System::Windows::Forms::DataGridView^ dataGridView1;
private: System::Windows::Forms::Label^ label105;
private: System::Windows::Forms::Label^ label88;
private: System::Windows::Forms::Label^ label89;
private: System::Windows::Forms::TextBox^ textBox41;
private: System::Windows::Forms::Label^ label90;
private: System::Windows::Forms::Label^ label91;
private: System::Windows::Forms::TextBox^ textBox42;
private: System::Windows::Forms::Button^ button11;
private: System::Windows::Forms::Label^ label92;
private: System::Windows::Forms::Label^ label93;
private: System::Windows::Forms::Label^ label94;
private: System::Windows::Forms::Label^ label95;
private: System::Windows::Forms::Label^ label96;
private: System::Windows::Forms::Label^ label97;
private: System::Windows::Forms::Label^ label98;
private: System::Windows::Forms::Label^ label99;
private: System::Windows::Forms::Label^ label100;
private: System::Windows::Forms::Label^ label101;
private: System::Windows::Forms::Label^ label102;
private: System::Windows::Forms::Label^ label103;
private: System::Windows::Forms::Label^ label104;
private: System::Windows::Forms::TextBox^ textBox43;
private: System::Windows::Forms::TextBox^ textBox44;
private: System::Windows::Forms::TextBox^ textBox45;
private: System::Windows::Forms::TextBox^ textBox46;
private: System::Windows::Forms::TextBox^ textBox47;
private: System::Windows::Forms::TextBox^ textBox48;
private: System::Windows::Forms::Button^ button12;
private: System::Windows::Forms::TextBox^ textBox1;
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::Label^ label2;
public:
public:
private:
private: System::ComponentModel::IContainer^ components;
private:
/// <summary>
/// Требуется переменная конструктора.
/// </summary>
#pragma region Windows Form Designer generated code
/// <summary>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое данного метода при помощи редактора кода.
/// </summary>
void InitializeComponent(void)
{
this->components = (gcnew System::ComponentModel::Container());
this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
this->timer6 = (gcnew System::Windows::Forms::Timer(this->components));
this->pictureBox2 = (gcnew System::Windows::Forms::PictureBox());
this->dataGridView1 = (gcnew System::Windows::Forms::DataGridView());
this->label105 = (gcnew System::Windows::Forms::Label());
this->label88 = (gcnew System::Windows::Forms::Label());
this->label89 = (gcnew System::Windows::Forms::Label());
this->textBox41 = (gcnew System::Windows::Forms::TextBox());
this->label90 = (gcnew System::Windows::Forms::Label());
this->label91 = (gcnew System::Windows::Forms::Label());
this->textBox42 = (gcnew System::Windows::Forms::TextBox());
this->button11 = (gcnew System::Windows::Forms::Button());
this->label92 = (gcnew System::Windows::Forms::Label());
this->label93 = (gcnew System::Windows::Forms::Label());
this->label94 = (gcnew System::Windows::Forms::Label());
this->label95 = (gcnew System::Windows::Forms::Label());
this->label96 = (gcnew System::Windows::Forms::Label());
this->label97 = (gcnew System::Windows::Forms::Label());
this->label98 = (gcnew System::Windows::Forms::Label());
this->label99 = (gcnew System::Windows::Forms::Label());
this->label100 = (gcnew System::Windows::Forms::Label());
this->label101 = (gcnew System::Windows::Forms::Label());
this->label102 = (gcnew System::Windows::Forms::Label());
this->label103 = (gcnew System::Windows::Forms::Label());
this->label104 = (gcnew System::Windows::Forms::Label());
this->textBox43 = (gcnew System::Windows::Forms::TextBox());
this->textBox44 = (gcnew System::Windows::Forms::TextBox());
this->textBox45 = (gcnew System::Windows::Forms::TextBox());
this->textBox46 = (gcnew System::Windows::Forms::TextBox());
this->textBox47 = (gcnew System::Windows::Forms::TextBox());
this->textBox48 = (gcnew System::Windows::Forms::TextBox());
this->button12 = (gcnew System::Windows::Forms::Button());
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->label1 = (gcnew System::Windows::Forms::Label());
this->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();
this->SuspendLayout();
//
// pictureBox1
//
this->pictureBox1->BackColor = System::Drawing::SystemColors::Window;
this->pictureBox1->Location = System::Drawing::Point(511, 12);
this->pictureBox1->Name = L"pictureBox1";
this->pictureBox1->Size = System::Drawing::Size(588, 354);
this->pictureBox1->SizeMode = System::Windows::Forms::PictureBoxSizeMode::Zoom;
this->pictureBox1->TabIndex = 1;
this->pictureBox1->TabStop = false;
//
// timer6
//
this->timer6->Interval = 50;
this->timer6->Tick += gcnew System::EventHandler(this, &Form1::timer6_Tick);
//
// pictureBox2
//
this->pictureBox2->BackColor = System::Drawing::SystemColors::Window;
this->pictureBox2->Location = System::Drawing::Point(511, 391);
this->pictureBox2->Name = L"pictureBox2";
this->pictureBox2->Size = System::Drawing::Size(588, 354);
this->pictureBox2->TabIndex = 2;
this->pictureBox2->TabStop = false;
//
// dataGridView1
//
this->dataGridView1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;
this->dataGridView1->Location = System::Drawing::Point(12, 391);
this->dataGridView1->Name = L"dataGridView1";
this->dataGridView1->Size = System::Drawing::Size(480, 354);
this->dataGridView1->TabIndex = 3;
//
// label105
//
this->label105->AutoSize = true;
this->label105->Font = (gcnew System::Drawing::Font(L"Symbol", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(2)));
this->label105->Location = System::Drawing::Point(38, 255);
this->label105->Name = L"label105";
this->label105->Size = System::Drawing::Size(14, 13);
this->label105->TabIndex = 197;
this->label105->Text = L"a";
//
// label88
//
this->label88->AutoSize = true;
this->label88->Location = System::Drawing::Point(229, 256);
this->label88->Name = L"label88";
this->label88->Size = System::Drawing::Size(36, 13);
this->label88->TabIndex = 193;
this->label88->Text = L", град";
//
// label89
//
this->label89->AutoSize = true;
this->label89->Location = System::Drawing::Point(9, 255);
this->label89->Name = L"label89";
this->label89->Size = System::Drawing::Size(32, 13);
this->label89->TabIndex = 192;
this->label89->Text = L"Угол";
//
// textBox41
//
this->textBox41->Location = System::Drawing::Point(135, 248);
this->textBox41->Margin = System::Windows::Forms::Padding(3, 10, 3, 3);
this->textBox41->Name = L"textBox41";
this->textBox41->Size = System::Drawing::Size(80, 20);
this->textBox41->TabIndex = 191;
this->textBox41->Text = L"-20";
//
// label90
//
this->label90->AutoSize = true;
this->label90->Location = System::Drawing::Point(229, 223);
this->label90->Name = L"label90";
this->label90->Size = System::Drawing::Size(27, 13);
this->label90->TabIndex = 190;
this->label90->Text = L", см";
//
// label91
//
this->label91->AutoSize = true;
this->label91->Location = System::Drawing::Point(9, 223);
this->label91->Name = L"label91";
this->label91->Size = System::Drawing::Size(83, 13);
this->label91->TabIndex = 189;
this->label91->Text = L"Координата xD";
//
// textBox42
//
this->textBox42->Location = System::Drawing::Point(135, 215);
this->textBox42->Margin = System::Windows::Forms::Padding(3, 10, 3, 3);
this->textBox42->Name = L"textBox42";
this->textBox42->Size = System::Drawing::Size(80, 20);
this->textBox42->TabIndex = 188;
this->textBox42->Text = L"2";
//
// button11
//
this->button11->Location = System::Drawing::Point(312, 103);
this->button11->Name = L"button11";
this->button11->Size = System::Drawing::Size(115, 33);
this->button11->TabIndex = 187;
this->button11->Text = L"Стоп";
this->button11->UseVisualStyleBackColor = true;
this->button11->Click += gcnew System::EventHandler(this, &Form1::button11_Click);
//
// label92
//
this->label92->AutoSize = true;
this->label92->Location = System::Drawing::Point(229, 189);
this->label92->Name = L"label92";
this->label92->Size = System::Drawing::Size(30, 13);
this->label92->TabIndex = 186;
this->label92->Text = L", 1/с";
//
// label93
//
this->label93->AutoSize = true;
this->label93->Location = System::Drawing::Point(229, 156);
this->label93->Name = L"label93";
this->label93->Size = System::Drawing::Size(27, 13);
this->label93->TabIndex = 185;
this->label93->Text = L", см";
//
// label94
//
this->label94->AutoSize = true;
this->label94->Location = System::Drawing::Point(229, 123);
this->label94->Name = L"label94";
this->label94->Size = System::Drawing::Size(27, 13);
this->label94->TabIndex = 184;
this->label94->Text = L", см";
//
// label95
//
this->label95->AutoSize = true;
this->label95->Location = System::Drawing::Point(229, 90);
this->label95->Name = L"label95";
this->label95->Size = System::Drawing::Size(27, 13);
this->label95->TabIndex = 183;
this->label95->Text = L", см";
//
// label96
//
this->label96->AutoSize = true;
this->label96->Location = System::Drawing::Point(229, 57);
this->label96->Name = L"label96";
this->label96->Size = System::Drawing::Size(27, 13);
this->label96->TabIndex = 182;
this->label96->Text = L", см";
//
// label97
//
this->label97->AutoSize = true;
this->label97->Location = System::Drawing::Point(229, 21);
this->label97->Name = L"label97";
this->label97->Size = System::Drawing::Size(27, 13);
this->label97->TabIndex = 181;
this->label97->Text = L", см";
//
// label98
//
this->label98->AutoSize = true;
this->label98->Font = (gcnew System::Drawing::Font(L"Symbol", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(2)));
this->label98->Location = System::Drawing::Point(106, 190);
this->label98->Name = L"label98";
this->label98->Size = System::Drawing::Size(15, 13);
this->label98->TabIndex = 180;
this->label98->Text = L"w";
//
// label99
//
this->label99->AutoSize = true;
this->label99->Location = System::Drawing::Point(9, 189);
this->label99->Name = L"label99";
this->label99->Size = System::Drawing::Size(100, 13);
this->label99->TabIndex = 179;
this->label99->Text = L"Угловая скорость";
//
// label100
//
this->label100->AutoSize = true;
this->label100->Location = System::Drawing::Point(9, 156);
this->label100->Name = L"label100";
this->label100->Size = System::Drawing::Size(82, 13);
this->label100->TabIndex = 178;
this->label100->Text = L"Координата yA";
//
// label101
//
this->label101->AutoSize = true;
this->label101->Location = System::Drawing::Point(9, 123);
this->label101->Name = L"label101";
this->label101->Size = System::Drawing::Size(82, 13);
this->label101->TabIndex = 177;
this->label101->Text = L"Координата xA";
//
// label102
//
this->label102->AutoSize = true;
this->label102->Location = System::Drawing::Point(9, 90);
this->label102->Name = L"label102";
this->label102->Size = System::Drawing::Size(59, 13);
this->label102->TabIndex = 176;
this->label102->Text = L"Длина BM";
//
// label103
//
this->label103->AutoSize = true;
this->label103->Location = System::Drawing::Point(9, 57);
this->label103->Name = L"label103";
this->label103->Size = System::Drawing::Size(57, 13);
this->label103->TabIndex = 175;
this->label103->Text = L"Длина BC";
//
// label104
//
this->label104->AutoSize = true;
this->label104->Location = System::Drawing::Point(9, 24);
this->label104->Name = L"label104";
this->label104->Size = System::Drawing::Size(57, 13);
this->label104->TabIndex = 174;
this->label104->Text = L"Длина AB";
//
// textBox43
//
this->textBox43->Location = System::Drawing::Point(135, 182);
this->textBox43->Margin = System::Windows::Forms::Padding(3, 10, 3, 3);
this->textBox43->Name = L"textBox43";
this->textBox43->Size = System::Drawing::Size(80, 20);
this->textBox43->TabIndex = 173;
this->textBox43->Text = L"2";
//
// textBox44
//
this->textBox44->Location = System::Drawing::Point(135, 149);
this->textBox44->Margin = System::Windows::Forms::Padding(3, 10, 3, 3);
this->textBox44->Name = L"textBox44";
this->textBox44->Size = System::Drawing::Size(80, 20);
this->textBox44->TabIndex = 172;
this->textBox44->Text = L"0";
//
// textBox45
//
this->textBox45->Location = System::Drawing::Point(135, 116);
this->textBox45->Margin = System::Windows::Forms::Padding(3, 10, 3, 3);
this->textBox45->Name = L"textBox45";
this->textBox45->Size = System::Drawing::Size(80, 20);
this->textBox45->TabIndex = 171;
this->textBox45->Text = L"-2";
//
// textBox46
//
this->textBox46->Location = System::Drawing::Point(135, 83);
this->textBox46->Margin = System::Windows::Forms::Padding(3, 10, 3, 3);
this->textBox46->Name = L"textBox46";
this->textBox46->Size = System::Drawing::Size(80, 20);
this->textBox46->TabIndex = 170;
this->textBox46->Text = L"6";
//
// textBox47
//
this->textBox47->Location = System::Drawing::Point(135, 50);
this->textBox47->Margin = System::Windows::Forms::Padding(3, 10, 3, 3);
this->textBox47->Name = L"textBox47";
this->textBox47->Size = System::Drawing::Size(80, 20);
this->textBox47->TabIndex = 169;
this->textBox47->Text = L"11";
//
// textBox48
//
this->textBox48->Location = System::Drawing::Point(135, 17);
this->textBox48->Margin = System::Windows::Forms::Padding(3, 10, 3, 3);
this->textBox48->Name = L"textBox48";
this->textBox48->Size = System::Drawing::Size(80, 20);
this->textBox48->TabIndex = 168;
this->textBox48->Text = L"5";
//
// button12
//
this->button12->Location = System::Drawing::Point(312, 37);
this->button12->Name = L"button12";
this->button12->Size = System::Drawing::Size(115, 33);
this->button12->TabIndex = 167;
this->button12->Text = L"Старт";
this->button12->UseVisualStyleBackColor = true;
this->button12->Click += gcnew System::EventHandler(this, &Form1::button12_Click);
//
// textBox1
//
this->textBox1->Location = System::Drawing::Point(135, 287);
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(80, 20);
this->textBox1->TabIndex = 198;
this->textBox1->Text = L"0";
//
// label1
//
this->label1->AutoSize = true;
this->label1->Location = System::Drawing::Point(9, 290);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(83, 13);
this->label1->TabIndex = 199;
this->label1->Text = L"Координата yD";
//
// label2
//
this->label2->AutoSize = true;
this->label2->Location = System::Drawing::Point(229, 294);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(27, 13);
this->label2->TabIndex = 200;
this->label2->Text = L", см";
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(1136, 750);
this->Controls->Add(this->label2);
this->Controls->Add(this->label1);
this->Controls->Add(this->textBox1);
this->Controls->Add(this->label105);
this->Controls->Add(this->label88);
this->Controls->Add(this->label89);
this->Controls->Add(this->textBox41);
this->Controls->Add(this->label90);
this->Controls->Add(this->label91);
this->Controls->Add(this->textBox42);
this->Controls->Add(this->button11);
this->Controls->Add(this->label92);
this->Controls->Add(this->label93);
this->Controls->Add(this->label94);
this->Controls->Add(this->label95);
this->Controls->Add(this->label96);
this->Controls->Add(this->label97);
this->Controls->Add(this->label98);
this->Controls->Add(this->label99);
this->Controls->Add(this->label100);
this->Controls->Add(this->label101);
this->Controls->Add(this->label102);
this->Controls->Add(this->label103);
this->Controls->Add(this->label104);
this->Controls->Add(this->textBox43);
this->Controls->Add(this->textBox44);
this->Controls->Add(this->textBox45);
this->Controls->Add(this->textBox46);
this->Controls->Add(this->textBox47);
this->Controls->Add(this->textBox48);
this->Controls->Add(this->button12);
this->Controls->Add(this->dataGridView1);
this->Controls->Add(this->pictureBox2);
this->Controls->Add(this->pictureBox1);
this->DoubleBuffered = true;
this->Name = L"Form1";
this->Text = L"Механизмы";
this->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();
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
float AB, BC, BM, CD;
float xA, yA, xB, yB, xC, yC, xM, yM, xD, yD;
float w, l, alfa, R;
float a, b, c, d, k, h;
float t, delta_t;
int j;
float xC_now, yC_now, xB_now, yB_now, xM_now, yM_now, xC_before, yC_before, xB_before, yB_before, xM_before, yM_before;
float VxC, VyC, VxB, VyB, wBC;
Graphics ^canvas;
Graphics ^canvas1;
Color ^colour;
Pen ^pen;
System::Drawing::Font ^font;
Image ^img;
Brush ^br;
System::IO::FileInfo ^Info;
System::IO::StreamWriter ^Writer;
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
canvas = this->pictureBox1->CreateGraphics();
canvas1 = this->pictureBox2->CreateGraphics();
colour = gcnew Color();
pen = gcnew Pen(colour->Blue);
font = gcnew System::Drawing::Font(System::Drawing::FontFamily::GenericSansSerif,12,System::Drawing::FontStyle::Regular);
this->pictureBox1->Image = img->FromFile("Image.bmp");
this->dataGridView1->ColumnCount = 8;
j = 0;
}
void Calculation() {
try {
AB = Double::Parse(this->textBox48->Text);
BC = Double::Parse(this->textBox47->Text);
BM = Convert::ToDouble(this->textBox46->Text);
xA = Double::Parse(this->textBox45->Text);
yA = Double::Parse(this->textBox44->Text);
w = Double::Parse(this->textBox43->Text);
xD = Double::Parse(this->textBox42->Text);
yD = Double::Parse(this->textBox1->Text);
alfa = Double::Parse(this->textBox41->Text);
}
catch (System::FormatException ^e) {
this->timer6->Enabled = false;
MessageBox::Show("Ошибка ввода.", "Ошибка", MessageBoxButtons::OK, MessageBoxIcon::None);
}
alfa = alfa*3.14/180;
xB = xA+AB*Math::Cos(w*t);
yB = yA+AB*Math::Sin(w*t);
k = Math::Tan(alfa);
a = 1+k*k;
h = -k*xD;
b = 2*(k*(h-yB)-xB);
c = xB*xB-BC*BC+(h-yB)*(h-yB);
d = b*b-4*a*c;
if (d < 0) {
this->timer6->Enabled = false;
this->textBox48->Text = "5";
this->textBox47->Text = "11";
this->textBox46->Text = "6";
this->textBox45->Text = "-2";
this->textBox44->Text = "0";
this->textBox43->Text = "2";
this->textBox42->Text = "2";
this->textBox41->Text = "-20";
this->textBox1->Text = "0";
MessageBox::Show("Некорректные данные.", "Ошибка", MessageBoxButtons::OK, MessageBoxIcon::None);
return;
}
xC = (-b+Math::Sqrt(d))/(2*a);
yC = k*xC+h;
xM = (BM/BC)*(xC-xB)+xB;
yM = (BM/BC)*(yC-yB)+yB;
}
void Animation() {
br = Brushes::Black;
canvas->DrawLine(pen,50,0,50,this->pictureBox1->Height);
canvas->DrawLine(pen,0,200,this->pictureBox1->Width,200);
canvas->DrawString("0",font,br,50,200);
canvas->DrawString("y",font,br,50,0);
canvas->DrawString("x",font,br,this->pictureBox1->Width-20,200); //Оси и подписи.
canvas->DrawLine(pen,(xA*20)+50,(-yA*20)+200,(xA*20)+45,(-yA*20)+210);
canvas->DrawLine(pen,(xA*20)+45,(-yA*20)+210,(xA*20)+55,(-yA*20)+210);
canvas->DrawLine(pen,(xA*20)+55,(-yA*20)+210,(xA*20)+50,(-yA*20)+200); //Крепление точки А.
canvas->DrawLine(pen,(xA*20)+50,(-yA*20)+200,(xB*20)+50,(-yB*20)+200);
canvas->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);
canvas->DrawString("B",font,br,(xB*20)+50,(-yB*20)+200);
canvas->DrawString("C",font,br,(xC*20)+50,(-yC*20)+200);
canvas->DrawString("M",font,br,(xM*20)+50,(-yM*20)+200); // Подписи точек.
br = Brushes::Red;
canvas->FillEllipse(br,(xC*20)+48,(-yC*20)+198,4.0,4.0);
br = Brushes::Green;
canvas->FillEllipse(br,(xB*20)+48,(-yB*20)+198,4.0,4.0);
br = Brushes::Purple;
canvas->FillEllipse(br,(xM*20)+48,(-yM*20)+198,4.0,4.0); //Точки.
}
void Graphic() {
j++;
canvas1->DrawLine(pen,50,0,50,this->pictureBox1->Height);
canvas1->DrawLine(pen,0,200,this->pictureBox1->Width,200);
canvas1->DrawString("0",font,br,50,200);
canvas1->DrawString("y",font,br,50,0);
canvas1->DrawString("x",font,br,this->pictureBox1->Width-20,200); //Оси и подписи.
br = Brushes::Red;
canvas1->FillEllipse(br,(xC*20)+48,(-yC*20)+198,4.0,4.0);
br = Brushes::Green;
canvas1->FillEllipse(br,(xB*20)+48,(-yB*20)+198,4.0,4.0);
br = Brushes::Purple;
canvas1->FillEllipse(br,(xM*20)+48,(-yM*20)+198,4.0,4.0);
if (j == 78 ) {
canvas1->Clear(colour->White);
j = 0;
}
}
void Velocity() {
VxB = (xB_now-xB_before)/delta_t;
VyB = (yB_now-yB_before)/delta_t;
VxC = (xC_now-xC_before)/delta_t;
VyC = (yC_now-yC_before)/delta_t;
wBC = (xC-xB)*(VyC-VyB)-(yC-yB)*(VxC-VxB);
}
void Table() {
delta_t = 1;
if (t <= (2*Math::PI/w)+1) {
this->dataGridView1->Rows[0]->Cells[0]->Value = "t";
this->dataGridView1->Rows[0]->Cells[1]->Value = "xB";
this->dataGridView1->Rows[0]->Cells[2]->Value = "yB";
this->dataGridView1->Rows[0]->Cells[3]->Value = "xC";
this->dataGridView1->Rows[0]->Cells[4]->Value = "yC";
this->dataGridView1->Rows[0]->Cells[5]->Value = "xM";
this->dataGridView1->Rows[0]->Cells[6]->Value = "yM";
this->dataGridView1->Rows[0]->Cells[7]->Value = "wBC";
this->dataGridView1->Rows[t]->Cells[0]->Value = Convert::ToString(Math::Round(t,4));
this->dataGridView1->Rows[t]->Cells[1]->Value = Convert::ToString(Math::Round(xB,4));
this->dataGridView1->Rows[t]->Cells[2]->Value = Convert::ToString(Math::Round(yB,4));
this->dataGridView1->Rows[t]->Cells[3]->Value = Convert::ToString(Math::Round(xC,4));
this->dataGridView1->Rows[t]->Cells[4]->Value = Convert::ToString(Math::Round(yC,4));
this->dataGridView1->Rows[t]->Cells[5]->Value = Convert::ToString(Math::Round(xM,4));
this->dataGridView1->Rows[t]->Cells[6]->Value = Convert::ToString(Math::Round(yM,4));
if (t >= 2) {
xC_now = Convert::ToDouble(this->dataGridView1->Rows[t]->Cells[3]->Value);
xC_before = Convert::ToDouble(this->dataGridView1->Rows[t-1]->Cells[3]->Value);
yC_now = Convert::ToDouble(this->dataGridView1->Rows[t]->Cells[4]->Value);
yC_before = Convert::ToDouble(this->dataGridView1->Rows[t-1]->Cells[4]->Value);
xB_now = Convert::ToDouble(this->dataGridView1->Rows[t]->Cells[1]->Value);
xB_before = Convert::ToDouble(this->dataGridView1->Rows[t-1]->Cells[1]->Value);
yB_now = Convert::ToDouble(this->dataGridView1->Rows[t]->Cells[2]->Value);
yB_before = Convert::ToDouble(this->dataGridView1->Rows[t-1]->Cells[2]->Value);
Velocity();
this->dataGridView1->Rows[t-1]->Cells[7]->Value = Convert::ToString(Math::Round(wBC,4));
}
}
}
void ToFile() {
Info = gcnew System::IO::FileInfo(Application::StartupPath+"\\File.txt");
Writer = Info->CreateText();
t = 0;
Calculation();
xB_before = xB;
yB_before = yB;
xC_before = xC;
yC_before = yC;
xM_before = xM;
yM_before = yM;
delta_t = (2*Math::PI/w)/1000;
Writer->WriteLine("t" + " | " + "xB" + " | " + "yB" + " | " + "xC" + " | " + "yC" + " | " + "xM" + " | " + "yM" + " | " + "wBC");
for (t = delta_t; t <= 2*Math::PI/w; t = t+delta_t) {
Calculation();
xC_now = xC;
yC_now = yC;
xB_now = xB;
yB_now = yB;
xM_now = xM;
yM_now = yM;
Velocity();
Writer->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)));
xC_before = xC;
yC_before = yC;
xB_before = xB;
yB_before = yB;
xM_before = xM;
yM_before = yM;
}
Writer->Close();
}
private: System::Void button12_Click(System::Object^ sender, System::EventArgs^ e) {
this->timer6->Enabled = true;
ToFile();
this->dataGridView1->RowCount = Math::Truncate(2*Math::PI/w)+2;
canvas1->Clear(colour->White);
t = 0;
}
private: System::Void timer6_Tick(System::Object^ sender, System::EventArgs^ e) {
canvas->Clear(Color::White);
t++;
Calculation();
Animation();
Graphic();
Table();
}
private: System::Void button11_Click(System::Object^ sender, System::EventArgs^ e) {
this->timer6->Enabled = false;
}
};
}
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 |
2,9952 |
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 |
|
3,1259 |
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 с.
Размещено на Allbest.ru
Подобные документы
Разработка программы, моделирующей работу сложного механизма, состоящего из двух кривошипов, шатунов и ползуна, в среде Delphi 7. Описание алгоритма работы программы и расчет ускорения точек механизма. Обзор уравнения сложности и руководства пользователя.
курсовая работа [143,3 K], добавлен 07.08.2013Разработка программы, выводящей на экран механизм с возможностью изменения масштаба, скорости вращения звена, сохранения и считывания входных данных из файла в среде разработки MS Visual C#. Блок-схема ее работы. Принцип работы движущихся элементов.
курсовая работа [860,6 K], добавлен 27.06.2013Динамическая и математическая модели движения иглы в замке вязального механизма. Форма заключающего клина. Синтез закона движения иглы. Упрощенное изображение вязального механизма однофонтурной вязальной машины. Математическое моделирование движения иглы.
курсовая работа [1,5 M], добавлен 03.03.2015Технология разработки и тестирования программного обеспечения в среде Visual Studio на примере создания программы моделирования систем массового обслуживания. Аналитические и имитационные методы моделирования с разными дисциплинами обслуживания заявок.
дипломная работа [1,1 M], добавлен 09.09.2012Теоретические основы моделирования систем в среде имитационного моделирования AnyLogic. Средства описания поведения объектов. Анимация поведения модели, пользовательский интерфейс. Модель системы обработки информации в среде компьютерного моделирования.
курсовая работа [1,5 M], добавлен 15.05.2014- Разработка компьютерной программы для моделирования спектров излучения и расчета экспозиционной дозы
Физические основы рентгеновского излучения. Конструкция современных рентгеновских трубок. Расчет дозы и спектра рентгеновского излучения. Моделирование спектров излучения на языке C# в среде Microsoft Visual Studio Express, описание и алгоритм программы.
дипломная работа [2,9 M], добавлен 26.02.2012 Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.
курсовая работа [585,5 K], добавлен 24.03.2009Понятие математической модели, свойства и классификация. Характеристика элементов системы Mathcad. Алгоритмический анализ задачи: описание математической модели, графическая схема алгоритма. Реализация базовой модели и описание исследований MathCAD.
реферат [1,0 M], добавлен 20.03.2014Изучение применения трёхмерного моделирования и анимации при создании статической рекламы, динамических заставок для телеканалов, моделирования катастроф, в компьютерных играх. Характеристика создания моделей с помощью модификаторов Edit Poly, Edit Mesh.
практическая работа [4,0 M], добавлен 29.09.2011Разработка автоматизированной системы реализации модели движения тела переменной массы на примере движения одноступенчатой ракеты, расчет времени и скорости полета. Описание формы загрузки программы. Требование к программному и техническому обеспечению.
курсовая работа [255,0 K], добавлен 18.03.2012