Моделирование работы сложного механизма
Разработка программы, моделирующей работу сложного механизма, состоящего из двух кривошипов, шатунов и ползуна, в среде Delphi 7. Описание алгоритма работы программы и расчет ускорения точек механизма. Обзор уравнения сложности и руководства пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.08.2013 |
Размер файла | 143,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
5
Размещено на http://www.allbest.ru/
1
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
САМАРСКИЙ ГОСУДАРСТВЕННЫЙ
АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ
имени академика С.П. КОРОЛЕВА
Кафедра летательных аппаратов
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
по информатике
МОДЕЛИРОВАНИЕ РАБОТЫ СЛОЖНОГО МЕХАНИЗМА
Самара 2010
ЗАДАНИЕ
Разработать программу, моделирующую движение сложного механизма.
1. Программу разрабатывать в среде Delphi 7 с учетом дополнительных требований для курсовых работ специальности 230301.
2. Представить электронную версию программы.
3. Оформить пояснительную записку.
4. Программу и пояснительную записку разрабатывать в соответствии с требованиями и рекомендациями следующих методических указаний
· Информатика: Метод. Указания и контрольные задания (курсовая работа) для студентов заочной формы обучения / Самар.гос.аэрокосм. ун-т; Сост. В.И.Куренков. Самара 1999. 23 с.
· СТО СГАУ 02068410-004-2007 «Общие требования к оформлению учебных текстовых документов.» Самара, 2007.
· «Построение, изложение и оформление программных документов» / Автор-составитель В.Д.Еленев, Куйбышев. авиац. ин-т. Куйбышев, 1987.
РЕФЕРАТ
Пояснительная записка 30 страниц, 7 рисунков, 3 источника.
ДВИЖЕНИЕ МЕХАНИЗМА, СКОРОСТЬ, УСКОРЕНИЕ, УРАВНЕНИЕ ДВИЖЕНИЯ СИСТЕМЫ ТЕЛ, МОДЕЛИРОВАНИЕ, УРАВНЕНИЕ ПРЯМОЙ
Цель курсовой работы: смоделировать работу механизма и найти скорости и ускорения точек.
СОДЕРЖАНИЕ
Введение
1. Математическая часть задачи
2. Алгоритм работы программы
3. Руководство пользователя
Заключение
Список использованных источников
Приложение А
Введение
Целью курсовой работы является создание программы, моделирующей работу сложного механизма, состоящего из двух кривошипов, шатунов и ползуна. В программе должно быть реализовано несколько функций, таких как: задание пользователем всех длин, временной интервал времени, величину приращения угла поворота; подсчет значений скоростей и ускорений точек. В модели механизма учитывается наличие границ моделируемой области. Движение описывается уравнением окружности, заданным параметрически.
алгоритм программное моделирование ускорение точка
1. Математическое описание
Основной целью программы является вычисление скоростей и ускорений всех подвижных. Вычисление происходит после каждого такта сдвига по координатам точек в предыдущий, настоящий и следующий момент времени.
Уравнение движения ведущего звена:
Уравнения движения точки C:
Уравнение движения точки D:
Условия корректности задания координат:
1.
BCкритическое вычисляется при крайнем значении координат точки B, исходя из положения точки C
2.
CEкритическое вычисляется при крайнем положении точки В, исходя из положения точки С
CEкритическое2 вычисляется при втором крайнем положении точки В.
2. Алгоритм работы программы
Общий алгоритм работы программы представлен в виде блок-схемы на рисунке 2.
Рисунок - Блок-схема программы
3. Руководство пользователя
Первое, что нужно сделать пользователю - это проверить задание длин соединений между элементами системы на корректность. Далее нажать на кнопку «запуск». Программа отображает правильное движение механизма, соответствуя законам физики. Длины соединений изменяются с помощью специальных полей, расположенных внизу формы.
Рисунок 3 - Окно программы
Зависимость v(t) и a(t)
Рисунок - зависимость скорости и ускорения точки B от t
Рисунок - зависимость скорости и ускорения точки C от t
Рисунок 10 - зависимость скорости и ускорения точки D от t
Заключение
При выполнении курсовой работы разработана математическая модель работы сложного механизма. Даная программа также рассчитывает скорости и ускорения точек B, C, D с помощью численного дифференцирования.
Программа обеспечивает работу таких функций как: задание пользователем координат всех узлов, временной интервал времени, величину приращения угла поворота; подсчет значений скоростей и ускорений точек. В модели механизма учитывается наличие границ, а также справка. В данной курсовой работе выполнены все основные задачи.
Список использованных источников
1. Фаронов, В.В. Delphi 7. Справочное пособие. Санкт-Петербург "Питер" 2006.
2. Архангельский, А.Я. Язык Pascal и основы программирования в Delphi. Учебное пособие. Москва «Бином» 2004
3. СТО СГАУ 02068410-004-2007. Общие требования к учебным текстовым документам. Самара 2007
ПРИЛОЖЕНИЕ А
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Math, Menus, ComCtrls, Spin;
type
Pnt = record
x,y:integer;
end;
TForm1 = class(TForm)
img: TImage;
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
TrackBar1: TTrackBar;
TrackBar2: TTrackBar;
Panel1: TPanel;
Label11: TLabel;
L1: TSpinEdit;
L3: TSpinEdit;
L5: TSpinEdit;
L2: TSpinEdit;
L7: TSpinEdit;
L4: TSpinEdit;
L6: TSpinEdit;
Button1: TButton;
N2: TMenuItem;
N3: TMenuItem;
Label16: TLabel;
Label17: TLabel;
Label12: TLabel;
Label18: TLabel;
Label19: TLabel;
Label14: TLabel;
L8: TSpinEdit;
Label13: TLabel;
procedure N1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure MoveB;
procedure MoveAB;
procedure MoveBC;
procedure MoveCD;
procedure MoveDE;
procedure DrawC;
procedure Reset;
procedure Dif(f1,f2:integer; var fp:real);
procedure DifDif(f1,f2,f3:integer; var fpp:real);
procedure Count(c,e:pnt; var d:pnt);
procedure DrawD(c,e:Pnt);
procedure TrackBar1Change(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure L1Change(Sender: TObject);
procedure L3Change(Sender: TObject);
procedure L5Change(Sender: TObject);
procedure L2Change(Sender: TObject);
procedure L7Change(Sender: TObject);
procedure L4Change(Sender: TObject);
procedure DxChange(Sender: TObject);
procedure L6Change(Sender: TObject);
procedure ExChange(Sender: TObject);
procedure EyChange(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Check(var ErrMsg:byte);
procedure ShowErr(ErrMsg:byte);
procedure Redraw;
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dx,dy,bc,ab,cd,de: integer;
t,dt,h:real;
A,B,C,D,E,b_old,b_next,c_old,c_next: Pnt;
ErrMsg:byte;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.N1Click(Sender: TObject);
begin
if N1.Caption='Запуск' then begin
N1.Caption:='Остановка';
Panel1.Enabled:=false;
Button1.Enabled:=false;
end
else begin
N1.Caption:='Запуск';
Panel1.Enabled:=true;
Button1.Enabled:=true;
img.Canvas.Pen.Color:=ClWhite;
Redraw;
img.Canvas.Pen.Color:=ClBlack;
Reset;
end;
Timer1.Enabled:=Timer1.Enabled xor true;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedure TForm1.MoveB;
var fp:real;
begin
img.Canvas.Pen.Color:=ClWhite;
img.Canvas.Ellipse(b.x-10,b.y-10,b.x+10,b.y+10);
img.Canvas.Pen.Color:=clBlack;
b_old.x:=a.x+round(ab*cos(t-dt));
b_old.y:=a.y-round(ab*sin(t-dt)); //Сохранение точки со старыми координатами
b.x:=a.x+round(ab*cos(t)); //параметрическое задание ф-ции окружности
b.y:=a.y-round(ab*sin(t));
b_next.x:=a.x+round(ab*cos(t+dt));
b_next.y:=a.y-round(ab*sin(t+dt));
Dif(b_next.x,b_old.x,fp);
Label1.Caption:='Скорость точки B по Х = '+floattostr(fp);
Dif(b_next.y,b_old.y,fp);
Label2.Caption:='Скорость точки B по Y = '+floattostr(-fp);
DifDif(b_next.x,b.x,b_old.x,fp);
Label6.Caption:='Ускорение точки B по Х = '+floattostr(fp);
DifDif(b_next.y,b.y,b_old.y,fp);
Label7.Caption:='Ускорение точки B по Y = '+floattostr(-fp);
img.Canvas.Ellipse(b.x-10,b.y-10,b.x+10,b.y+10);
end;
procedure TForm1.MoveAB;
begin
img.Canvas.MoveTo(a.x,a.y);
img.Canvas.LineTo(b.x,b.y);
end;
procedure TForm1.MoveBC;
begin
img.Canvas.MoveTo(c.x,c.y);
img.Canvas.LineTo(b.x,b.y);
end;
procedure TForm1.MoveCD;
begin
img.Canvas.MoveTo(c.x,c.y);
img.Canvas.LineTo(d.x,d.y);
end;
procedure TForm1.MoveDE;
begin
img.Canvas.MoveTo(e.x,e.y);
img.Canvas.LineTo(d.x,d.y);
end;
procedure TForm1.Redraw;
begin
img.Canvas.Ellipse(a.x-10,a.y-10,a.x+10,a.y+10);
img.Canvas.Rectangle(a.x-10,a.y+5,a.x+10,a.y+10);
img.Canvas.Ellipse(b.x-10,b.y-10,b.x+10,b.y+10);
img.Canvas.Rectangle(c.x-20,c.y-10,c.x+20,c.y+10);
img.Canvas.Ellipse(c.x-10,c.y-10,c.x+10,c.y+10);
img.Canvas.MoveTo(10,c.y+9);
img.Canvas.LineTo(img.Width-10,c.y+9);
img.Canvas.Ellipse(e.x-10,e.y-10,e.x+10,e.y+10);
img.Canvas.Ellipse(d.x-10,d.y-10,d.x+10,d.y+10);
MoveAB;
MoveBC;
MoveCD;
MoveDE;
end;
procedure TForm1.L1Change(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.L3Change(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.Check(var ErrMsg: Byte);
var bb,temp_ac,temp_bc,ac,ce:integer;
k,temp_alpha,alpha:real;
c_temp,b_temp,d_temp:pnt;
begin
ErrMsg:=0;
ab:=round(sqrt(sqr(b.x-a.x)+sqr(b.y-a.y)));
bc:=round(sqrt(sqr(b.x-c.x)+sqr(b.y-c.y)));
cd:=round(sqrt(sqr(d.x-c.x)+sqr(d.y-c.y)));
de:=round(sqrt(sqr(d.x-e.x)+sqr(d.y-e.y)));
temp_ac:=bc-ab;
c_temp.y:=c.y;
temp_alpha:=(c.y-a.y)/temp_ac;
if (temp_alpha>=-1) and (temp_alpha<=1) then begin
alpha:=arccos(temp_alpha);
c_temp.x:=round(temp_ac*sin(alpha))+a.x;
k:=(a.y-c.y)/(a.x-c.x);
bb:=round(a.y-k*a.x);
b_temp.x:=a.x-round(ab*sin(alpha));
b_temp.y:=a.y-round(ab*cos(alpha));
ac:=round(sqrt(sqr(c_temp.x-a.x)+sqr(c_temp.y-a.y)));
temp_bc:=round(sqrt(sqr(b_temp.x-c_temp.x)+sqr(b_temp.y-c_temp.y)));
if temp_bc>bc then ErrMsg:=1;
ce:=round(sqrt(sqr(c_temp.x-e.x)+sqr(c_temp.y-e.y)));
if de+cd<=ce then ErrMsg:=2;
if (a.y+ab>=c.y-10) or (a.x-ab<=10) then ErrMsg:=3;
c_temp.x:=a.x+round(sqrt(sqr(ab+bc)-sqr(c.y-a.y)));
// Count(c_temp,e,d_temp);
// if (d_temp.x>img.Width) or (d_temp.y>c.y) then ErrMsg:=4;
ce:=round(sqrt(sqr(c_temp.x-e.x)+sqr(c_temp.y-e.y)));
if de+cd<=ce then ErrMsg:=5;
end
else
ErrMsg:=1;
end;
procedure TForm1.ShowErr(ErrMsg: Byte);
var s:string;
begin
case ErrMsg of
1: s:='Ошибка задания координат точек A, B, C. Необходимо уменьшить отрезок AB, либо увеличить BC.';
2: s:='Ошибка задания координат точек C, D, E. Необходимо увеличить отрезки CD и DE.';
3: s:='Ошибка задания координат точки A и B. Слишком большой радиус вращения или слишком маленькое расстояние до краев области моделирования.';
4: s:='Ошибка задания координат точек A, B, С или E. Точка D выходит за границы области моделирования в процессе движения системы.';
5: s:='Ошибка задания координат точек. Отрезок ВС слишком большой.';
end;
MessageDlg(s,mtError,[mbOk],0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var alpha:real;
begin
img.Canvas.Pen.Color:=clWhite;
Redraw;
a.y:=c.y-L5.Value;
b.x:=a.x+L1.Value;
b.y:=a.y-L6.Value;
bc:=L2.Value;
alpha:=arccos((L6.Value+L5.Value)/bc);
c.x:=b.x+round(bc*sin(alpha));
cd:=l3.Value;
de:=L4.Value;
e.x:=c.x+L7.Value;
e.y:=c.y-L8.Value;
Count(c,e,d);
img.Canvas.Pen.Color:=clBlack;
Redraw;
Check(ErrMsg);
if ErrMsg<>0 then ShowErr(ErrMsg) else begin
N1.Enabled:=true;
end;
end;
rocedure TForm1.L5Change(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.L2Change(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.Count(c,e:pnt; var d:pnt);
var CE,CF,DF:integer;
beta,alpha,g:real;
begin
CE:=round(sqrt(sqr(c.x-e.x)+sqr(c.y-e.y)));
beta:=arcsin((e.x-c.x)/CE);
alpha:=arccos((sqr(ce)+sqr(cd)-sqr(de))/(2*ce*cd));
g:=pi/2-beta-alpha;
CF:=round(CD*cos(g));
DF:=round(CD*sin(g));
d.x:=c.x+CF;
d.y:=c.y-DF;
end;
procedure TForm1.L7Change(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.L4Change(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.DrawD(c,e:Pnt);
var d_old,d_next:pnt;
fp:real;
begin
img.Canvas.Pen.Color:=clWhite;
img.Canvas.Ellipse(d.x-10,d.y-10,d.x+10,d.y+10);
Count(c_old,e,d_old);
Count(c,e,d);
Count(c_next,e,d_next);
Dif(d_next.x,d_old.x,fp);
Label4.Caption:='Скорость точки D по Х = '+floattostr(fp);
Dif(d_next.y,d_old.y,fp);
Label5.Caption:='Скорость точки D по Y = '+floattostr(-fp);
DifDif(d_next.x,d.x,d_old.x,fp);
Label9.Caption:='Ускорение точки D по Х = '+floattostr(fp);
DifDif(d_next.y,d.y,d_old.y,fp);
Label10.Caption:='Ускорение точки D по Y = '+floattostr(-fp);
img.Canvas.Pen.Color:=clBlack;
img.Canvas.Ellipse(d.x-10,d.y-10,d.x+10,d.y+10);
end;
procedure TForm1.DxChange(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.L6Change(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.ExChange(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.EyChange(Sender: TObject);
begin
N1.Enabled:=false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
t:=t+dt;
if t=2*pi then t:=0;
img.Canvas.Pen.Color:=clWhite; //изменение цвета кисти на белый
MoveAB; //удаление отрезков со старыми координатами
MoveBC;
MoveCD;
MoveDE;
MoveB; //Сдвиг ведущей точки B
DrawC; //Сдвиг точки С
DrawD(c,e); //Вычисление точки D
img.Canvas.Pen.Color:=clBlack; //Изменение цвет кисти на черный
img.Canvas.Ellipse(a.x-10,a.y-10,a.x+10,a.y+10);
img.Canvas.Rectangle(a.x-10,a.y+5,a.x+10,a.y+10);
img.Canvas.MoveTo(10,c.y+9);
img.Canvas.LineTo(img.Width-10,c.y+9);
img.Canvas.Ellipse(e.x-10,e.y-10,e.x+10,e.y+10);
MoveAB; //Прорисовка отрезков с новыми координатами
MoveBC;
MoveCD;
MoveDE;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Timer1.Interval:=TrackBar1.Position*10;
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
dt:=TrackBar2.Position/100;
end;
procedure TForm1.DrawC;
var fp:real;
begin
img.Canvas.Pen.Color:=clWhite;
img.Canvas.Rectangle(c.x-20,c.y-10,c.x+20,c.y+10);
img.Canvas.Ellipse(c.x-10,c.y-10,c.x+10,c.y+10);
c_old.x:=b_old.x+round(sqrt(sqr(bc)-sqr(c.y-b_old.y)));
c.x:=b.x+round(sqrt(sqr(bc)-sqr(c.y-b.y)));
c_next.x:=b_next.x+round(sqrt(sqr(bc)-sqr(c.y-b_next.y)));
c_old.y:=c.y;
c_next.y:=c.y;
Dif(c_next.x,c_old.x,fp);
Label3.Caption:='Скорость точки С = '+floattostr(fp);
DifDif(c_next.x,c.x,c_old.x,fp);
Label8.Caption:='Ускорение точки C = '+floattostr(fp);
img.Canvas.Pen.Color:=clBlack;
img.Canvas.Rectangle(c.x-20,c.y-10,c.x+20,c.y+10);
img.Canvas.Ellipse(c.x-10,c.y-10,c.x+10,c.y+10);
end;
procedure TForm1.Dif(f1,f2:integer; var fp:real);
begin
fp:=(f1-f2)/2*h;
end;
procedure TForm1.DifDif(f1: Integer; f2: Integer; f3: Integer; var fpp: Real);
begin
fpp:=(f1-2*f2+f3)/sqr(h);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Reset;
end;
procedure TForm1.Reset;
begin
t:=1;
dt:=0.01;
h:=Timer1.Interval/100;
b.x:=280; b.y:=120;
a.x:=200; a.y:=200;
c.x:=500; c.y:=330;
d.x:=650; d.y:=270;
e.x:=530; e.y:=100;
// Ax.Value:=a.x;
// Ay.Value:=a.y;
// Bx.Value:=b.x;
// By.Value:=b.y;
// Cx.Value:=c.x;
// Cy.Value:=c.y;
// Dx.Value:=d.x;
// Dy.Value:=d.y;
// Ex.Value:=e.x;
// ab:=round(sqrt(sqr(b.x-a.x)+sqr(b.y-a.y)));
bc:=round(sqrt(sqr(b.x-c.x)+sqr(b.y-c.y)));
cd:=round(sqrt(sqr(d.x-c.x)+sqr(d.y-c.y)));
de:=round(sqrt(sqr(d.x-e.x)+sqr(d.y-e.y)));
// CD:=220;
// DE:=150;
ab:=100;
// Redraw
end;
Размещено на Allbest.ru
Подобные документы
Проект оболочки моделирования кривошипно-шатунного механизма в среде MS Visual Studio. Разработка его математической модели. Исследование кинематики точек В, С, М. Алгоритм и код программы. Анимация движения механизма и график движения основных точек.
курсовая работа [422,2 K], добавлен 13.03.2016Написание программы, состоящей из двух модулей и реализующей простейший калькулятор. Разработка алгоритма решения задачи, реализация его в среде программирования Delphi. Список использованных переменных. Блок-схема программы, руководство пользователя.
курсовая работа [106,6 K], добавлен 16.06.2014Написание программы на языке Delphi для определения суммарного напряжения крюковой подвески: расчет мощности электродвигателя по среднеквадратической нагрузке, по максимальному усилию в стреловом полиспасте, составление блок-схем, описание алгоритма.
курсовая работа [3,2 M], добавлен 31.05.2010Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.
курсовая работа [1,4 M], добавлен 04.06.2013Осуществление работы разрабатываемой программы на основе алгоритма, использующего Z-буфер. Аналитическое описание программной реализации. Алгоритмы основных функций программы. Содержание руководства пользователя. Файлы программы, пункты главного меню.
курсовая работа [1,7 M], добавлен 15.04.2015Программа, моделирующая систему массового обслуживания (СМО). Моделирование программы имитации работы турникетов на стадионе (многоканальная СМО) в визуальной среде Delphi 7. Описание программного модуля, листинг программы и руководство пользователя.
курсовая работа [3,8 M], добавлен 20.08.2009Написание программы для работы с клиентами средствами языка Delphi, которая предусматривает ввод, редактирование и удаление информации. Разработка алгоритма решения задачи, описание переменных, вспомогательных процедур, входных и выходных данных.
курсовая работа [355,7 K], добавлен 21.09.2010Разработка программы для нахождения корней нелинейных уравнений несколькими методами: методом хорд, касательных, половинного деления, итераций. Реализации программы с помощью системы программирования Delphi 7. Методика работы пользователя с программой.
курсовая работа [1,3 M], добавлен 11.02.2013Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.
курсовая работа [506,5 K], добавлен 21.02.2011Характеристика функциональных возможностей разрабатываемой программы в среде Delphi для регистрации абитуриентов. Описание алгоритма и структуры данной программы. Поиск данных в базе по заданным параметрам. Описание модулей и листинг программы.
курсовая работа [801,5 K], добавлен 19.07.2011