Автор работы: Пользователь скрыл имя, 30 Марта 2013 в 12:53, курсовая работа
Целью работы является создание приложения в среде Delphi позволяющие определить кинематические параметры, положения главных точек кривошипно-шатунного механизма в зависимости от времени. А так же создание математической модели решения поставленной задачи при помощи математического пакета MathCad.
Для достижения цели выполнения курсовой работы, необходимо решить следующие задачи:
произвести формулировку задачи с конкретными данными;
провести предварительный анализ задачи, описать математический аппарат, который будет использоваться для её решения;
в соответствии с определенным заданием разработать алгоритм решения задачи;
разработать программу в среде Delphi, реализующую построенный алгоритм;
решить задачу с помощью интегрированного пакета MathCAD;
провести анализ полученных результатов;
ВВЕДЕНИЕ 5
1 ПОСТАНОВКА ЗАДАЧИ 7
2 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 8
3 РАЗРАБОТКА ПРОГРАММЫ В СРЕДЕ DELPHI 11
3.1 Описания алгоритма решения задачи 11
3.2 Блок-схема алгоритма 12
3.3 Разработка пользовательского интерфейса 13
3.4 Тестирование программы 16
4 РАЗРАБОТКА ПРОГРАММЫ В СРЕДЕ MATHCAD 17
4.1 Тестирование программы 17
ЗАКЛЮЧЕНИЕ 19
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 20
ПРИЛОЖЕНИЕ А. Код программы в Delphi 21
ПРИЛОЖЕНИЕ Б. Графики зависимости координат точек А и В от времени 32
ПРИЛОЖЕНИЕ В. Графики зависимости скорости от времени 33
Теперь это же начальное условие задачи подставим для рассчета в математический пакет MathСad, получим окно с промежуточными расчетами, представленное на рисунке 4.1:
Рисунок 4.1 – Промежуточные расчеты в MathCad
На рисунке 4.2 представлены результаты вычислений, полученные при помощи MathCad, которые с учетом программного округления соответствуют результатам, полученным при помощи программы Delphi.
Рисунок 4.2 – Решение задачи в MathCad
В ходе курсовой работы по предложенному нам заданию, необходимо было разработать алгоритм для определения кинематических характеристик механизма. Для этого был использован аналитический метод, так как он наиболее прост и легок в решении для столь простого механизма. В данной работе необходимо было найти значения кинематических характеристик на интервале времени, что и было выполнено на практике при помощи Delphi, а также интегрированного пакета MathCad. В результате выполнения были получены абсолютно одинаковые результаты, что показывает о правильности выполнения работы. Аналитический метод расчетов больше всего подходит для решения поставленной задачи. Легко программируются т.к. для вычисления последовательных значений нужно знать лишь одно предыдущее. Метод является само стартующим, величина интервала времени может легко изменяться. Этот метод широко применяется и используется в создании различных программ и приложений.
Среда Delphi является очень удобной при решении такого рода задач, так как позволяет не с большой точностью с помощью программного кода найти корни того или иного уравнения, таким образом, для достижения наибольшей точности в расчетах лучше использовать программу Delphi.
Математический пакет MathCad также позволяет решать системы уравнений и простые уравнения, но он отличается от Delphi главным образом тем, что в её входном языке (MathCad), который максимально приближён к естественному математическому языку (многие функции уже заложены разработчиками, что значительно упрощает задачу), это говорит о том, что в отличие от программы Delphi MathCad более удобен и более легок при решении.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, ComCtrls, Buttons,
Grids, Series, XPMan, ExtDlgs;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Label5: TLabel;
Edit5: TEdit;
PageControl1: TPageControl;
B: TTabSheet;
Chart1: TChart;
Chart2: TChart;
C: TTabSheet;
Chart3: TChart;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;
BitBtn7: TBitBtn;
BitBtn2: TBitBtn;
Image1: TImage;
StringGrid1: TStringGrid;
StringGrid3: TStringGrid;
Series1: TLineSeries;
Series2: TLineSeries;
Series3: TLineSeries;
Series4: TLineSeries;
Timer1: TTimer;
A: TTabSheet;
SaveDialog1: TSaveDialog;
Edit6: TEdit;
Label6: TLabel;
SavePictureDialog1: TSavePictureDialog;
Button1: TButton;
StringGrid2: TStringGrid;
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
w, L1, fi, L2, t, Va, Vb, Xa, Xb, Ya, Yb, Vax,Vbx, Vay,Vby, deltax, deltay:real;
i,it,k:integer;
implementation
{$R *.dfm}
function signum(a,b: extended): integer;
begin
if a=b then
result:=0
else
if a<b then
result:=-1
else
result:=1;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
L1:=strtofloat(edit1.text);
L2:=strtofloat(edit2.text);
Xb:=strtofloat(edit3.text);
Yb:=strtofloat(edit4.text);
w:=strtofloat(edit5.text);
t:=0; i:=1;
stringgrid1.Cells[0,0]:='
stringgrid1.Cells[1,0]:='Угол фи, рад';
stringgrid2.Cells[0,0]:='X, м';
stringgrid2.Cells[1,0]:='Y, м';
stringgrid3.Cells[0,0]:='X, м';
stringgrid3.Cells[1,0]:='Y, м';
stringgrid1.Cells[2,0]:='
stringgrid1.Cells[3,0]:='
while t<=2.3 do begin
fi:=cos(w*t-PI/6.0);
Xa:=L1*cos(fi);
Ya:=L1*sin(fi);
Vax:=L1*w*sin(w*t-PI/6.0)*sin(
Vay:=-L1*w*sin(w*t-PI/6.0)*
Va:=sqrt(sqr(Vax)+sqr(Vay));
deltax:=(Xb-Xa);
deltay:=sqrt(abs(sqr(L2)-sqr(
Yb:=Ya-deltay;
Vbx:=0;
Vby:=20*cos(w*t-PI/6.0)-(20*
Vb:=sqrt(sqr(Vbx)+sqr(Vby));
stringgrid1.Cells[0,i]:=
stringgrid1.Cells[1,i]:=
stringgrid2.Cells[0,i]:=
stringgrid2.Cells[1,i]:=
stringgrid3.Cells[0,i]:=
stringgrid3.Cells[1,i]:=
stringgrid1.Cells[2,i]:=
stringgrid1.Cells[3,i]:=
t:=t+0.01; i:=i+1;
series1.AddXY(t,Vb);
series2.AddXY(t,Xa);
series3.AddXY(t,Ya);
series4.AddXY(t,Yb);
end;
end;
procedure TForm1.BitBtn6Click(Sender: TObject);
begin
series1.Clear;
series2.Clear;
series3.Clear;
series4.Clear;
end;
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
procedure TForm1.BitBtn7Click(Sender: TObject);
begin
Timer1.Enabled:=false;
end;
procedure PaintA(img: TImage; Ax,Ay,Bx,By:real);
var
dx,dy:integer;
begin
dx:=100;
dy:=200;
k:=20;
//Оy
img.Canvas.MoveTo(dx,20);
img.Canvas.LineTo(dx,img.
img.Canvas.MoveTo(dx,20);
img.Canvas.LineTo(dx-5,25);
img.Canvas.MoveTo(dx,20);
img.Canvas.LineTo(dx+5,25);
//Оx
img.Canvas.MoveTo(dx,img.
img.Canvas.LineTo(img.Width-
img.Canvas.LineTo(img.Width-
img.Canvas.MoveTo(img.Width-
img.Canvas.LineTo(img.Width-
//L1
img.Canvas.MoveTo(dx,img.
img.Canvas.LineTo(dx+Trunc(
//L2
img.Canvas.LineTo(dx+Trunc(
//прямоугольник
img.Canvas.MoveTo(dx+Trunc(
img.Canvas.LineTo(dx+Trunc(
img.Canvas.Rectangle(dx+
dx+Trunc(Bx*k)+10,img.Height-
//подписи
img.Canvas.TextOut(img.Width-
img.Canvas.TextOut(dx-15,25,'
img.Canvas.TextOut(dx-10,img.
// А
img.Canvas.TextOut(dx+Trunc(
// B
img.Canvas.TextOut(dx+Trunc(
//опора
img.Canvas.Polygon([Point(dx,
Point(dx-10,img.Height-dy+15),
Point(dx+10,img.Height-dy+15)]
//штрихи
img.Canvas.MoveTo(dx-10,img.
img.Canvas.LineTo(dx-8,img.
img.Canvas.MoveTo(dx-6,img.
img.Canvas.LineTo(dx-4,img.
img.Canvas.MoveTo(dx-2,img.
img.Canvas.LineTo(dx,img.
img.Canvas.MoveTo(dx+2,img.
img.Canvas.LineTo(dx+4,img.
img.Canvas.MoveTo(dx+6,img.
img.Canvas.LineTo(dx+8,img.
img.Canvas.MoveTo(dx+10,img.
img.Canvas.LineTo(dx+12,img.
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Ax0,Ay0,Bx0,By0: real;
begin
BitBtn4.Click;
Ax0:=StrToFloat(StringGrid2.
Ay0:=StrToFloat(StringGrid2.
Bx0:=StrToFloat(StringGrid3.
By0:=StrToFloat(StringGrid3.
PaintA(Image1,Ax0,Ay0,Bx0,
it:=1;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
Ax0,Ay0,Bx0,By0:real;
begin
Image1.Canvas.Brush.Color:=
Image1.Canvas.FillRect(
Ax0:=StrToFloat(StringGrid2.
Ay0:=StrToFloat(StringGrid2.
Bx0:=StrToFloat(StringGrid3.
By0:=StrToFloat(StringGrid3.
PaintA(Image1,Ax0,Ay0,Bx0,
it:=it+1;
if(it=64) then it:=1;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
var
I: Byte;
F: TextFile;
S: String;
begin
AssignFile(F, Edit6.Text);
Rewrite(F);
for I := 0 to StringGrid1.RowCount - 1 do begin
S:=StringGrid1.Cells[0,I] +' | '+ StringGrid1.Cells[1,I] +' | '+ StringGrid1.Cells[2,I] +' | '+StringGrid1.Cells[3,I] +' | '+StringGrid2.Cells[0,I] +' | '+StringGrid2.Cells[1,I] +' | '+StringGrid3.Cells[0,I] +' | '+StringGrid3.Cells[1,I];
Writeln(F,S)
end;
CloseFile(F)
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
showmessage('Курсовая по информатике. L1,L2-длины стержней. Xb,Yb-координаты В. W-угловая частота вращения. Работа содержит таблицу с координатами и скоростями, графики и модель движения системы. Руководитель: Тимовец А.Н. Выполнил: Наливко О.И. БарГУ 2012г');
end; //справка
//сохранение файла изображения
procedure TForm1.Button1Click(Sender: TObject);
var
FName:string;
begin
FName:=edit6.text;
SavePictureDialog1.FileName:=
if SavePictureDialog1.Execute then begin
Image1.Picture.SaveToFile(
end;
end;
end.
Рисунок Б.1 – Графики зависимости координат точек А от времени в Delphi
Рисунок Б.2 – График зависимости координаты точки В от времени в Delphi
Рисунок Б.3 – График зависимости координаты точки А от времени в Mathcad
Рисунок Б.4- График зависимости координаты точки от времени в MathCad
Рисунок В.1 – График зависимости скорости от времени в Delphi
Рисунок В.2 – График зависимости скорости от времени в MathCad
Информация о работе Кинематический расчет кривошипно-шатунного механизма