Моделирование колебаний горизонтального маятника на двух пружинах

Автор работы: Пользователь скрыл имя, 14 Марта 2015 в 21:52, курсовая работа

Краткое описание

Под визуализацией программного обеспечения понимается совокупность методик использования графики и средств человеко-машинного взаимодействия, применяемых для лучшего уяснения понятий и эффективной эксплуатации программного обеспечения, а также для спецификации и представления программных объектов в процессе создания программ. Проектирование является одной из основных стадий создания изделия в технике.

Вложенные файлы: 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, тем быстрее остановится маятник.

 

Заключение

 

В ходе работы была разработано программное обеспечение для моделирования процесса колебания горизонтального маятника на двух пружинах.

Сформулирована основная концепция и представлены результаты её реализации. В дальнейшем предполагается доработка графической модели в соответствии с проектом и требованиями к ней по качеству.

 

 

Список использованной литературы

 

    1. Архангельский, А.Я. Программирование в Delphi. Учебник по классическим версиям Delphi (+ дискета); М.: Бином, 2006. - 415 c.
    2. Бутиков Е. И., Кондратьев А. С. «Физика» т.1, Механика.М.: Физматлит,  2001.
    3. Иродов И.Е. Задачи по общей физике. М.: Бином, 2008.
    4. Калиткин Н.Н. Численные методы: учебное пособие для студентов. М.: Наука, 1978.
    5. Матвеев А.Н. «Механика и теория относительности». М.: Высш. шк. 1986.
    6. Савельев И.В. Курс физики, т.т. 1-5. М.: Наука, 2007.
    7. Смит И. Л. Обыкновенные дифференциальные уравнения
    8. Сухарев, М.В. Основы 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('Длина должна быть  положительной'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

         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                                  begin

         MessageBox(0,PChar('Масса тела должна быть положительной'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

         Result := false;

         exit;

      end

      else                                    

         MyHSP.M := r;                        

   except                                     

      MessageBox(0,PChar('Длина  должна быть вещественным числом'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

      Result := false;

      exit;

   end;

 

   try

      r := StrToFloat(eK1.Text);

      if r<=0 then               

      begin

         MessageBox(0,PChar('Коэффициент жесткости  левой пружины должен быть  положительным'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

         Result := false;

         exit;

      end

      else                       

         MyHSP.Kleft := r;       

   except                        

      MessageBox(0,PChar('Коэффициент  жесткости левой пружины должен  быть вещественным числом'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

      Result := false;

      exit;

   end;

 

   try

      r := StrToFloat(eK2.Text);

      if r<=0 then         

      begin

         MessageBox(0,PChar('Коэффициент жесткости  правой пружины должен быть  положительным'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

         Result := false;

         exit;

      end

      else                 

         MyHSP.Kright := r;

   except                  

      MessageBox(0,PChar('Коэффициент  жесткости правой пружины должен  быть вещественным числом'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

      Result := false;

      exit;

   end;

 

   try

      r := StrToFloat(eX0.Text)/100;

      if abs(r*100)>abs(MyHSP.Length*0.80000001) then       

      begin

         MessageBox(0,PChar('Невозможно отобразить  анимацию при таком тачальном  положении тела. Или увеличьте  длинну области отбражения или  же измените начальное положение'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

         Result := false;

         exit;

      end

      else                  

         MyHSP.X0 := r;     

   except                    

      MessageBox(0,PChar('Коэффициент  жесткости правой пружины должен быть вещественным числом'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

      Result := false;

      exit;

   end;

 

   try

      r := StrToFloat(eAlfa.Text);

      if r<0 then                       

      begin

         MessageBox(0,PChar('Коэффициент вязкого  трения должен быть положительным'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

         Result := false;

         exit;

      end

      else                

         MyHSP.Alfa := r; 

   except                 

      MessageBox(0,PChar('Коэффициент  вязкого трения должен быть вещественным числом'),PChar('Ошибка'), MB_ICONERROR+MB_OK);

      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:=-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);

   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;

Информация о работе Моделирование колебаний горизонтального маятника на двух пружинах