Моделирование работы плоского механизма

Проект оболочки моделирования кривошипно-шатунного механизма в среде 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.