Моделирование колебаний горизонтального маятника на двух пружинах
Курсовая работа, 14 Марта 2015, автор: пользователь скрыл имя
Краткое описание
Под визуализацией программного обеспечения понимается совокупность методик использования графики и средств человеко-машинного взаимодействия, применяемых для лучшего уяснения понятий и эффективной эксплуатации программного обеспечения, а также для спецификации и представления программных объектов в процессе создания программ. Проектирование является одной из основных стадий создания изделия в технике.
Вложенные файлы: 1 файл
курсовик граф системы (1).doc
— 606.50 Кб (Скачать файл)begin
Tmr.Enabled := not Tmr.Enabled if Tmr.Enabled
then
bStartPause.Caption := 'Пауза'
else
bStartPause.Caption := 'Старт'
end;
- Событие нажатия на кнопку «Сброс». При этом происходит очистка всех графиков.
procedure TMainForm.bResetClick(Sender: TObject);
var
flag:boolean;
begin
flag := Tmr.Enabled;
Tmr.Enabled := false;
eMassa.Text := FloatToStr(MyHSP.M);
eL.Text := IntToStr(MyHSP.Length);
eK1.Text := FloatToStr(MyHSP.Kleft);
eK2.Text := FloatToStr(MyHSP.Kright);
eX0.Text := IntToStr(Round(MyHSP.X0*100));
eAlfa.Text := FloatToStr(MyHSP.Alfa);
upd1.Position := MyHSP.TurnsCnt_1;
upd2.Position := MyHSP.TurnsCnt_2;
MyHSP.Print(img, 0);
T := 0;
ChartRes.Series[0].Clear;
ChartRes.Series[1].Clear;
ChartRes.LeftAxis.Minimum := -MyHSP.Length;
ChartRes.LeftAxis.Maximum := MyHSP.Length;
ChartRes.BottomAxis.Minimum := 0;
ChartRes.BottomAxis.Maximum := 10;
chartEnergy.LeftAxis.Minimum := 0;
chartEnergy.LeftAxis.Maximum:= MyHSP.EnergyPotential(0);
bStartPause.Enabled:=true;
Tmr.Enabled := flag;
end;
3.2 Описание работы системы
После запуска системы, пользователю представляется форма, которая представлена на рис. 3.1.
Рис. 3.1. Главная форма
Далее пользователю, необходимо задать начальные параметры для системы.
M - масса тела, закрепленного между
пружинами,
k1 - жесткость левой пружины,
k2 - жесткость правой пружины,
X0 - начальное отклонение от середины,
b - коэффициент вязкого трения - для затухающих
колебаний: Сила вязкого трения направлена
против скорости движения груза относительно
среды и пропорциональна этой скорости.
L - полудлина системы координат (полудлина
основания системы),
количество витков левой и правой пружин.
После чего ему необходимо нажать на кнопку «Задать начальные значения», если все значения были введены корректно, то появится картинка анимации (рис. 3.2). Если при вводе параметров была допущена ошибка, то появится соответствующее сообщение, в зависимости от того, какой именно параметр был введен некорректно (рис. 3.3).
Рис. 3.2. Главная форма после задания параметров
Рис. 3.3. Сообщение об ошибке
Если все параметры были введены корректно, и картинка анимации появилась, для дальнейшей работы системы необходимо нажать кнопку «Старт». После этого система выполнит моделирование колебания пружинного маятника и построит графики зависимости положения и скорости тела от времени, а также график изменения энергии. Необходимо отметить, что моделирование происходит в реальном времени, то есть графики строятся не моментально, а постепенно.
На рис. 3.4. представлен процесс моделирования колебания маятника с массой тела M=5 кг, жесткостью левой пружины k1=4 Н/м, жесткостью правой пружины k2=3 H/м, начальным отклонением от середины X0=8 см, коэффициентом вязкого трения b=0 кг/с (незатухающие колебания), полудлиной системы координат L=10 см.
Рис. 3.4. Процесс моделирования колебания маятника
Так как коэффициент b равен нулю, колебания маятника будут незатухающими и для остановки моделирования нужно нажать кнопку «Пауза» или «Сброс», если необходимо начать моделирование снова.
Если параметр b задать значением больше 0, то колебания станут затухающими. Чем больше b, тем быстрее остановится маятник.
Заключение
В ходе работы была разработано программное обеспечение для моделирования процесса колебания горизонтального маятника на двух пружинах.
Сформулирована основная концепция и представлены результаты её реализации. В дальнейшем предполагается доработка графической модели в соответствии с проектом и требованиями к ней по качеству.
Список использованной литературы
- Архангельский, А.Я. Программирование в Delphi. Учебник по классическим версиям Delphi (+ дискета); М.: Бином, 2006. - 415 c.
- Бутиков Е. И., Кондратьев А. С. «Физика» т.1, Механика.М.: Физматлит, 2001.
- Иродов И.Е. Задачи по общей физике. М.: Бином, 2008.
- Калиткин Н.Н. Численные методы: учебное пособие для студентов. М.: Наука, 1978.
- Матвеев А.Н. «Механика и теория относительности». М.: Высш. шк. 1986.
- Савельев И.В. Курс физики, т.т. 1-5. М.: Наука, 2007.
- Смит И. Л. Обыкновенные дифференциальные уравнения
- Сухарев, М.В. Основы Delphi. Профессиональный подход; М.: Наука и техника, 2004. - 600 c.
Текст программы
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, HSP, TeEngine, Series, TeeProcs, Chart,
ComCtrls;
type
TMainForm = class(TForm)
Panel1: TPanel;
bIniValue: TButton;
img: TImage;
Tmr: TTimer;
GroupBox1: TGroupBox;
eMassa: TEdit;
Label1: TLabel;
eK1: TEdit;
Label2: TLabel;
eK2: TEdit;
Label3: TLabel;
eX0: TEdit;
Label4: TLabel;
eAlfa: TEdit;
Label5: TLabel;
eL: TEdit;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
chartRes: TChart;
Series1: TLineSeries;
Series2: TLineSeries;
chartEnergy: TChart;
Series3: TBarSeries;
Series4: TBarSeries;
bStartPause: TButton;
bReset: TButton;
GroupBox2: TGroupBox;
Label13: TLabel;
Label14: TLabel;
eN1: TEdit;
eN2: TEdit;
upd1: TUpDown;
upd2: TUpDown;
procedure FormCreate(Sender: TObject);
procedure TmrTimer(Sender: TObject);
procedure bStartPauseClick(Sender: TObject);
procedure bResetClick(Sender: TObject);
function InitValue:boolean;
procedure bIniValueClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
MyHSP:THSP;
{delta,} T:real;
implementation
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
begin
MyHSP:= THSP.Create;
T:=0;
end;
function TMainForm.InitValue:boolean;
var
r:real;
i:integer;
begin
try
i:=StrToInt(eL.Text);
if i<=0 then
begin
MessageBox(0,PChar('Длина
Result := false;
exit;
end
else
MyHSP.Length:=i;
except
MessageBox(0,PChar('Длина должна быть целым числом'),PChar('Ошибка'), MB_ICONERROR+MB_OK);
Result := false;
exit;
end;
try
r := StrToFloat(eMassa.Text);
if r<=0 then
MessageBox(0,PChar('Масса тела должна быть положительной'),PChar('Ошибка'
Result := false;
exit;
end
else
MyHSP.M := r;
except
MessageBox(0,PChar('Длина
должна быть вещественным
Result := false;
exit;
end;
try
r := StrToFloat(eK1.Text);
if r<=0 then
begin
MessageBox(0,PChar('
Result := false;
exit;
end
else
MyHSP.Kleft := r;
except
MessageBox(0,PChar('
Result := false;
exit;
end;
try
r := StrToFloat(eK2.Text);
if r<=0 then
begin
MessageBox(0,PChar('
Result := false;
exit;
end
else
MyHSP.Kright := r;
except
MessageBox(0,PChar('
Result := false;
exit;
end;
try
r := StrToFloat(eX0.Text)/100;
if abs(r*100)>abs(MyHSP.Length*0.
begin
MessageBox(0,PChar('
Result := false;
exit;
end
else
MyHSP.X0 := r;
except
MessageBox(0,PChar('
Result := false;
exit;
end;
try
r := StrToFloat(eAlfa.Text);
if r<0 then
begin
MessageBox(0,PChar('
Result := false;
exit;
end
else
MyHSP.Alfa := r;
except
MessageBox(0,PChar('
Result := false;
exit;
end;
MyHSP.TurnsCnt_1 := upd1.Position;
MyHSP.TurnsCnt_2 := upd2.Position;
MyHSP.Print(img, MyHSP.X0/MyHSP.Length*100);
ChartRes.LeftAxis.Minimum:=-
ChartRes.LeftAxis.Maximum:= MyHSP.Length;
ChartRes.BottomAxis.Minimum := 0;
ChartRes.BottomAxis.Maximum := 10;
chartEnergy.LeftAxis.Minimum := 0;
chartEnergy.LeftAxis.Maximum:= MyHSP.EnergyPotential(0);
Result := true;
end;
procedure TMainForm.TmrTimer(Sender: TObject);
begin
MyHSP.Print(img, T);
T:=T+Tmr.Interval/1000;
if T>ChartRes.BottomAxis.Maximum then
ChartRes.BottomAxis.Maximum:= ChartRes.BottomAxis.Maximum + 10;