Автор работы: Пользователь скрыл имя, 14 Марта 2015 в 21:52, курсовая работа
Под визуализацией программного обеспечения понимается совокупность методик использования графики и средств человеко-машинного взаимодействия, применяемых для лучшего уяснения понятий и эффективной эксплуатации программного обеспечения, а также для спецификации и представления программных объектов в процессе создания программ. Проектирование является одной из основных стадий создания изделия в технике.
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.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, тем быстрее остановится маятник.
В ходе работы была разработано программное обеспечение для моделирования процесса колебания горизонтального маятника на двух пружинах.
Сформулирована основная концепция и представлены результаты её реализации. В дальнейшем предполагается доработка графической модели в соответствии с проектом и требованиями к ней по качеству.
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;
Информация о работе Моделирование колебаний горизонтального маятника на двух пружинах