close

Вход

Забыли?

вход по аккаунту

?

поясн записка (6)

код для вставкиСкачать
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
САМАРСКИЙ ГОСУДАРСТВЕННЫЙ
АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ
имени академика С.П. КОРОЛЕВА
Кафедра летательных аппаратов
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
по информатике
МОДЕЛИРОВАНИЕ РАБОТЫ СЛОЖНОГО МЕХАНИЗМА
Выполнил студент группы 1208
Проверил__________________
Оценка____________________
Самара 2010
ЗАДАНИЕ
Разработать программу, моделирующую движение сложного механизма.
1. Программу разрабатывать в среде Delphi 7 с учетом дополнительных
требований для курсовых работ специальности 230301.
2. Представить электронную версию программы.
3. Оформить пояснительную записку.
4. Программу и пояснительную записку разрабатывать в соответствии с
требованиями и рекомендациями следующих методических указаний
 Информатика: Метод. Указания и контрольные задания (курсовая
работа) для студентов заочной формы обучения /
Самар.гос.аэрокосм. ун-т; Сост. В.И.Куренков. Самара 1999. 23 с.
 СТО СГАУ 02068410-004-2007 «Общие требования к
оформлению учебных текстовых документов.» Самара, 2007.
 «Построение, изложение и оформление программных
документов» / Автор-составитель В.Д.Еленев, Куйбышев. авиац.
ин-т. Куйбышев, 1987.
2
РЕФЕРАТ
Пояснительная записка 30 страниц, 7 рисунков, 3 источника.
ДВИЖЕНИЕ МЕХАНИЗМА, СКОРОСТЬ, УСКОРЕНИЕ, УРАВНЕНИЕ
ДВИЖЕНИЯ СИСТЕМЫ ТЕЛ, МОДЕЛИРОВАНИЕ, УРАВНЕНИЕ
ПРЯМОЙ
Цель курсовой работы: смоделировать работу механизма и найти
скорости и ускорения точек
3
СОДЕРЖАНИЕ
Введение...................................................................................................................5
1 Математическая часть задачи..............................................................................6
2 Алгоритм работы программы............................................................................10
3 Руководство пользователя.................................................................................11
Заключение.............................................................................................................12
Список использованных источников...................................................................13
Приложение А........................................................................................................14
4
ВВЕДЕНИЕ
Целью курсовой работы является создание программы, моделирующей
работу сложного механизма, состоящего из двух кривошипов, шатунов и
ползуна. В программе должно быть реализовано несколько функций, таких
как: задание пользователем всех длин, временной интервал времени,
величину приращения угла поворота; подсчет значений скоростей и
ускорений точек. В модели механизма учитывается наличие границ
моделируемой области. Движение описывается уравнением окружности,
заданным параметрически.
5
1 МАТЕМАТИЧЕСКОЕ ОПИСАНИЕ
Основной
целью
программы
является
вычисление
скоростей
и
ускорений всех подвижных. Вычисление происходит после каждого такта
сдвига по координатам точек в предыдущий, настоящий и следующий
момент времени.
Уравнение движения ведущего звена:
xb  x0  r cos(t )
yb  y0  r sin(t )
Уравнения движения точки C:
xc  xb  BC2  ( yc  yb ) 2
Уравнение движения точки D:
CE  ( xC  xE ) 2  ( yC  y E ) 2
xE  xc
CE
CE 2  CD2  DE 2
  arccos
2  CE  CD
  arcsin


  
2
CF  CD  cos
DF  CD  sin 
xD  xC  CF
y D  xC  DF
Условия корректности задания координат:
Рисунок 1 - Схема механизма
1. BC  BCcrit
BCкритическое вычисляется при крайнем значении координат точки B,
исходя из положения точки C
2. CD  DE  CEcrit
6
CEкритическое вычисляется при крайнем положении точки В, исходя из
положения точки С
1. CD  DE  CEcrit2
CEкритическое2 вычисляется при втором крайнем положении точки В.
7
2 АЛГОРИТМ РАБОТЫ ПРОГРАММЫ
Общий алгоритм работы программы представлен в виде блок-схемы на
рисунке 2.
начало
Задание
длин
соединений
нет
Проверка
данных на
корректность
да
запуск
Расчет скоростей и
ускорений точек В, С, D
Вывод на экран
значений скоростей
точек B, C, D.
конец
Рисунок 6 – Блок-схема программы
8
3 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Первое, что нужно сделать пользователю - это проверить задание длин
соединений между элементами системы на корректность. Далее нажать на
кнопку «запуск». Программа отображает правильное движение механизма,
соответствуя законам физики. Длины соединений изменяются с помощью
специальных полей, расположенных внизу формы.
Рисунок 7 – Окно программы
L6
L8
L5
L7
9
Зависимость v(t) и a(t)
Точка В
6
5
4
v
3
a
2
1
0
0
5
10
15
20
Рисунок 8 – зависимость скорости и ускорения точки B от t
Точка С
10
5
0
0
10
20
30
40
50
60
v
a
-5
-10
-15
Рисунок 9 – зависимость скорости и ускорения точки C от t
Точка D
14
12
10
8
v
6
a
4
2
0
0
10
20
30
40
50
60
Рисунок 10 – зависимость скорости и ускорения точки D от t
10
ЗАКЛЮЧЕНИЕ
При выполнении курсовой работы разработана математическая модель
работы сложного механизма. Даная программа также рассчитывает скорости
и ускорения точек B, C, D с помощью численного дифференцирования.
Программа
обеспечивает
работу
таких
функций
как:
задание
пользователем координат всех узлов, временной интервал времени, величину
приращения угла поворота; подсчет значений скоростей и ускорений точек.
В модели механизма учитывается наличие границ, а также справка. В данной
курсовой работе выполнены все основные задачи.
11
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Фаронов, В.В. Delphi 7. Справочное пособие.
Санкт-Петербург "Питер" 2006.
2. Архангельский, А.Я. Язык Pascal и основы программирования в Delphi.
Учебное пособие. Москва «Бином» 2004
3. СТО СГАУ 02068410-004-2007. Общие требования к учебным текстовым
документам. Самара 2007
12
ПРИЛОЖЕНИЕ А
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;
13
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;
14
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
15
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;
16
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);
17
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);
18
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;
19
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)));
20
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.';
21
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);
22
if ErrMsg<>0 then ShowErr(ErrMsg) else begin
N1.Enabled:=true;
end;
end;
procedure 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;
23
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);
24
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;
25
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);
26
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);
27
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;
28
// 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;
// Ey.Value:=e.y;
// 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;
end.
29
Документ
Категория
Теория систем управления
Просмотров
19
Размер файла
137 Кб
Теги
поясн, записка
1/--страниц
Пожаловаться на содержимое документа