Моделирование работы сложного механизма
Федеральное агентство по образованию
Государственное образовательное
учреждение высшего профессионального образования
САМАРСКИЙ ГОСУДАРСТВЕННЫЙ
АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ
имени академика С.П. КОРОЛЕВА
Кафедра летательных аппаратов
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
по информатике
МОДЕЛИРОВАНИЕ РАБОТЫ СЛОЖНОГО
МЕХАНИЗМА
Самара 2010
ЗАДАНИЕ
Разработать программу, моделирующую движение сложного механизма.
1. Программу разрабатывать в среде Delphi 7 с учетом дополнительных
требований для курсовых работ специальности 230301.
2. Представить электронную версию программы.
. Оформить пояснительную записку.
. Программу и пояснительную записку разрабатывать в соответствии с
требованиями и рекомендациями следующих методических указаний
· Информатика: Метод. Указания и контрольные задания (курсовая работа) для
студентов заочной формы обучения / Самар.гос.аэрокосм. ун-т; Сост.
В.И.Куренков. Самара 1999. 23 с.
· СТО СГАУ 02068410-004-2007 «Общие требования к оформлению
учебных текстовых документов.» Самара, 2007.
· «Построение, изложение и оформление программных документов» /
Автор-составитель В.Д.Еленев, Куйбышев. авиац. ин-т. Куйбышев, 1987.
РЕФЕРАТ
Пояснительная записка 30 страниц, 7 рисунков, 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.
. Архангельский, А.Я. Язык Pascal и основы программирования в
Delphi. Учебное пособие. Москва «Бином» 2004
ПРИЛОЖЕНИЕ А
unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, StdCtrls, ExtCtrls, Math, Menus, ComCtrls, Spin;=
record,y:integer;;= class(TForm): TImage;: TTimer;: TLabel;: TLabel;: TLabel;:
TLabel;: TLabel;: TMainMenu;: TMenuItem;: TLabel;: TLabel;: TLabel;: TLabel;:
TLabel;: TTrackBar;: TTrackBar;: TPanel;: TLabel;: TSpinEdit;: TSpinEdit;:
TSpinEdit;: TSpinEdit;: TSpinEdit;: TSpinEdit;: TSpinEdit;: TButton;:
TMenuItem;: TMenuItem;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;:
TSpinEdit;: TLabel;N1Click(Sender: TObject);Timer1Timer(Sender:
TObject);FormActivate(Sender:
TObject);MoveB;MoveAB;MoveBC;MoveCD;MoveDE;DrawC;Reset;Dif(f1,f2:integer; var
fp:real);DifDif(f1,f2,f3:integer; var fpp:real);Count(c,e:pnt; var
d:pnt);DrawD(c,e:Pnt);TrackBar1Change(Sender: TObject);TrackBar2Change(Sender:
TObject);L1Change(Sender: TObject);L3Change(Sender: TObject);L5Change(Sender:
TObject);L2Change(Sender: TObject);L7Change(Sender: TObject);L4Change(Sender:
TObject);DxChange(Sender: TObject);L6Change(Sender: TObject);ExChange(Sender:
TObject);EyChange(Sender: TObject);Button1Click(Sender: TObject);Check(var
ErrMsg:byte);ShowErr(ErrMsg:byte);Redraw;N2Click(Sender:
TObject);N3Click(Sender: TObject);
{ Private declarations }
{ Public declarations };: TForm1;,dy,bc,ab,cd,de:
integer;,dt,h:real;,B,C,D,E,b_old,b_next,c_old,c_next: Pnt;:byte;Unit2;
{$R *.dfm}TForm1.N1Click(Sender: TObject);N1.Caption='Запуск' then begin.Caption:='Остановка';.Enabled:=false;.Enabled:=false;begin.Caption:='Запуск';.Enabled:=true;.Enabled:=true;.Canvas.Pen.Color:=ClWhite;;.Canvas.Pen.Color:=ClBlack;;;.Enabled:=Timer1.Enabled
xor true;;TForm1.N2Click(Sender: TObject);.Close;;TForm1.N3Click(Sender:
TObject);.ShowModal;;TForm1.MoveB;fp:real;.Canvas.Pen.Color:=ClWhite;.Canvas.Ellipse(b.x-10,b.y-10,b.x+10,b.y+10);.Canvas.Pen.Color:=clBlack;_old.x:=a.x+round(ab*cos(t-dt));
b_old.y:=a.y-round(ab*sin(t-dt)); //Сохранение точки со старыми
координатами.x:=a.x+round(ab*cos(t)); //параметрическое задание ф-ции
окружности
b.y:=a.y-round(ab*sin(t));_next.x:=a.x+round(ab*cos(t+dt));_next.y:=a.y-round(ab*sin(t+dt));(b_next.x,b_old.x,fp);.Caption:='Скорость точки B по Х = '+floattostr(fp);(b_next.y,b_old.y,fp);.Caption:='Скорость точки B по Y = '+floattostr(-fp);(b_next.x,b.x,b_old.x,fp);.Caption:='Ускорение точки B по Х = '+floattostr(fp);(b_next.y,b.y,b_old.y,fp);.Caption:='Ускорение точки B по Y =
'+floattostr(-fp);.Canvas.Ellipse(b.x-10,b.y-10,b.x+10,b.y+10);;TForm1.MoveAB;.Canvas.MoveTo(a.x,a.y);.Canvas.LineTo(b.x,b.y);;TForm1.MoveBC;.Canvas.MoveTo(c.x,c.y);.Canvas.LineTo(b.x,b.y);;TForm1.MoveCD;.Canvas.MoveTo(c.x,c.y);.Canvas.LineTo(d.x,d.y);;TForm1.MoveDE;.Canvas.MoveTo(e.x,e.y);.Canvas.LineTo(d.x,d.y);;TForm1.Redraw;.Canvas.Ellipse(a.x-10,a.y-10,a.x+10,a.y+10);.Canvas.Rectangle(a.x-10,a.y+5,a.x+10,a.y+10);.Canvas.Ellipse(b.x-10,b.y-10,b.x+10,b.y+10);.Canvas.Rectangle(c.x-20,c.y-10,c.x+20,c.y+10);.Canvas.Ellipse(c.x-10,c.y-10,c.x+10,c.y+10);.Canvas.MoveTo(10,c.y+9);.Canvas.LineTo(img.Width-10,c.y+9);.Canvas.Ellipse(e.x-10,e.y-10,e.x+10,e.y+10);.Canvas.Ellipse(d.x-10,d.y-10,d.x+10,d.y+10);;;;;;TForm1.L1Change(Sender:
TObject);.Enabled:=false;;TForm1.L3Change(Sender:
TObject);.Enabled:=false;;TForm1.Check(var ErrMsg:
Byte);bb,temp_ac,temp_bc,ac,ce:integer;,temp_alpha,alpha:real;_temp,b_temp,d_temp:pnt;:=0;:=round(sqrt(sqr(b.x-a.x)+sqr(b.y-a.y)));:=round(sqrt(sqr(b.x-c.x)+sqr(b.y-c.y)));:=round(sqrt(sqr(d.x-c.x)+sqr(d.y-c.y)));:=round(sqrt(sqr(d.x-e.x)+sqr(d.y-e.y)));_ac:=bc-ab;_temp.y:=c.y;_alpha:=(c.y-a.y)/temp_ac;(temp_alpha>=-1)
and (temp_alpha<=1) then
begin:=arccos(temp_alpha);_temp.x:=round(temp_ac*sin(alpha))+a.x;:=(a.y-c.y)/(a.x-c.x);:=round(a.y-k*a.x);_temp.x:=a.x-round(ab*sin(alpha));_temp.y:=a.y-round(ab*cos(alpha));:=round(sqrt(sqr(c_temp.x-a.x)+sqr(c_temp.y-a.y)));_bc:=round(sqrt(sqr(b_temp.x-c_temp.x)+sqr(b_temp.y-c_temp.y)));temp_bc>bc
then ErrMsg:=1;:=round(sqrt(sqr(c_temp.x-e.x)+sqr(c_temp.y-e.y)));de+cd<=ce
then ErrMsg:=2;(a.y+ab>=c.y-10) or (a.x-ab<=10) then ErrMsg:=3;_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;:=round(sqrt(sqr(c_temp.x-e.x)+sqr(c_temp.y-e.y)));de+cd<=ce then
ErrMsg:=5;:=1;;TForm1.ShowErr(ErrMsg: Byte);s:string; ErrMsg of
: s:='Ошибка задания координат точек A, B, C. Необходимо уменьшить
отрезок AB, либо увеличить BC.';
: s:='Ошибка задания координат точек C, D, E. Необходимо увеличить
отрезки CD и DE.';
: s:='Ошибка задания координат точки A и B. Слишком большой радиус вращения
или слишком маленькое расстояние до краев области моделирования.';
: s:='Ошибка задания координат точек A, B, С или E. Точка D выходит за
границы области моделирования в процессе движения системы.';
: s:='Ошибка задания координат точек. Отрезок ВС слишком большой.';
end;(s,mtError,[mbOk],0);;TForm1.Button1Click(Sender:
TObject);alpha:real;.Canvas.Pen.Color:=clWhite;;.y:=c.y-L5.Value;.x:=a.x+L1.Value;.y:=a.y-L6.Value;:=L2.Value;:=arccos((L6.Value+L5.Value)/bc);.x:=b.x+round(bc*sin(alpha));:=l3.Value;:=L4.Value;.x:=c.x+L7.Value;.y:=c.y-L8.Value;(c,e,d);.Canvas.Pen.Color:=clBlack;;(ErrMsg);ErrMsg<>0
then ShowErr(ErrMsg) else begin.Enabled:=true;;;TForm1.L5Change(Sender:
TObject);.Enabled:=false;;TForm1.L2Change(Sender:
TObject);.Enabled:=false;;TForm1.Count(c,e:pnt; var
d:pnt);CE,CF,DF:integer;,alpha,g:real;:=round(sqrt(sqr(c.x-e.x)+sqr(c.y-e.y)));:=arcsin((e.x-c.x)/CE);:=arccos((sqr(ce)+sqr(cd)-sqr(de))/(2*ce*cd));:=pi/2-beta-alpha;:=round(CD*cos(g));:=round(CD*sin(g));.x:=c.x+CF;.y:=c.y-DF;;TForm1.L7Change(Sender:
TObject);.Enabled:=false;;TForm1.L4Change(Sender:
TObject);.Enabled:=false;;TForm1.DrawD(c,e:Pnt);d_old,d_next:pnt;:real;.Canvas.Pen.Color:=clWhite;.Canvas.Ellipse(d.x-10,d.y-10,d.x+10,d.y+10);(c_old,e,d_old);(c,e,d);(c_next,e,d_next);(d_next.x,d_old.x,fp);
Label4.Caption:='Скорость
точки D по Х = '+floattostr(fp);
Dif(d_next.y,d_old.y,fp);.Caption:='Скорость точки
D по Y = '+floattostr(-fp);(d_next.x,d.x,d_old.x,fp);
Label9.Caption:='Ускорение
точки D по Х = '+floattostr(fp);
DifDif(d_next.y,d.y,d_old.y,fp);.Caption:='Ускорение точки
D по Y =
'+floattostr(-fp);.Canvas.Pen.Color:=clBlack;.Canvas.Ellipse(d.x-10,d.y-10,d.x+10,d.y+10);;TForm1.DxChange(Sender:
TObject);.Enabled:=false;;TForm1.L6Change(Sender:
TObject);.Enabled:=false;;TForm1.ExChange(Sender:
TObject);.Enabled:=false;;TForm1.EyChange(Sender:
TObject);.Enabled:=false;;TForm1.Timer1Timer(Sender: TObject);:=t+dt;t=2*pi
then t:=0;
img.Canvas.Pen.Color:=clWhite;
//изменение цвета кисти на белый; //удаление отрезков со старыми
координатами;;;; //Сдвиг ведущей точки B; //Сдвиг точки С(c,e); //Вычисление
точки D.Canvas.Pen.Color:=clBlack; //Изменение цвет кисти на
черный.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);.Canvas.MoveTo(10,c.y+9);.Canvas.LineTo(img.Width-10,c.y+9);.Canvas.Ellipse(e.x-10,e.y-10,e.x+10,e.y+10);
MoveAB; //Прорисовка отрезков
с новыми координатами
MoveBC;;;;TForm1.TrackBar1Change(Sender:
TObject);.Interval:=TrackBar1.Position*10;;TForm1.TrackBar2Change(Sender:
TObject);:=TrackBar2.Position/100;;TForm1.DrawC;fp:real;.Canvas.Pen.Color:=clWhite;.Canvas.Rectangle(c.x-20,c.y-10,c.x+20,c.y+10);.Canvas.Ellipse(c.x-10,c.y-10,c.x+10,c.y+10);_old.x:=b_old.x+round(sqrt(sqr(bc)-sqr(c.y-b_old.y)));.x:=b.x+round(sqrt(sqr(bc)-sqr(c.y-b.y)));_next.x:=b_next.x+round(sqrt(sqr(bc)-sqr(c.y-b_next.y)));_old.y:=c.y;_next.y:=c.y;(c_next.x,c_old.x,fp);.Caption:='Скорость точки С =
'+floattostr(fp);(c_next.x,c.x,c_old.x,fp);.Caption:='Ускорение точки
C = '+floattostr(fp);.Canvas.Pen.Color:=clBlack;.Canvas.Rectangle(c.x-20,c.y-10,c.x+20,c.y+10);.Canvas.Ellipse(c.x-10,c.y-10,c.x+10,c.y+10);;TForm1.Dif(f1,f2:integer;
var fp:real);:=(f1-f2)/2*h;;TForm1.DifDif(f1: Integer; f2: Integer; f3:
Integer; var fpp: Real);:=(f1-2*f2+f3)/sqr(h);;TForm1.FormActivate(Sender:
TObject);;;TForm1.Reset;:=1;:=0.01;:=Timer1.Interval/100;.x:=280;
b.y:=120;.x:=200; a.y:=200;.x:=500; c.y:=330;.x:=650; d.y:=270;.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)));:=round(sqrt(sqr(b.x-c.x)+sqr(b.y-c.y)));:=round(sqrt(sqr(d.x-c.x)+sqr(d.y-c.y)));:=round(sqrt(sqr(d.x-e.x)+sqr(d.y-e.y)));
// CD:=220;
// DE:=150;:=100;
// Redraw;