Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
102
Добавлен:
26.05.2014
Размер:
3 Кб
Скачать
{----------------------------------------------}
{ (c) …ўбвЁЈ­ҐҐў „.‚.                          }
{ ЏаЁ¬Ґа ЁбЇ®«м§®ў ­Ёп ¬®¤г«п, б®§¤ ­­®Ј®      }
{ Ї ЄҐв®¬ "Ђ­ «Ё§ бЁб⥬"                      }
{----------------------------------------------}
{ - Їгбвм б®§¤ ­­л© ¬®¤г«м ­ §лў Ґвбп Ctrl.pas }

Uses Crt, Graph, Ctrl;
Const
  TimeStep     = 0.003;  { и Ј а бзҐв  }
  AmplitudeY   = 10;     {  ¬Ї«Ёвг¤  ўл室  }
  SecPerScr    = 0.3;    { ᥪ㭤 ­  нЄа ­  }

Var
  Task, v, U    : Float; { § ¤ ­ЁҐ, бЄ®а®бвм, ­ Їа殮­ЁҐ }
  Time          : Float; { ⥪г饥 ўаҐ¬п }

Const
  { ¤«п Ё­ЁжЁ жЁЁ Јp дЁЄЁ }
  Driver  : Integer = Detect;
  Mode    : Integer = 0;
  DrvPath = 'C:\BP\BGI'; { ў®§¬®¦­® г ‚ б ¤pгЈ®© Їгвм Є BGI-¤p ©ўҐp ¬ }


{----------------------------------------------}
{ Њ®¤Ґ«м н«ҐЄвதўЁЈ вҐ«п.                     }
{   U-­ Їа殮­ЁҐ.                              }
{   ‚®§ўа й Ґв - бЄ®а®бвм                      }
{----------------------------------------------}
Function Engin( U : Float ) : Float;
Const
  A1 : Float = 0;
  A2 : Float = 0;

  K  = 23;   { Є®нд. ЇҐаҐ¤ зЁ }
  Te = 0.03; { н«ҐЄваЁзҐбЄ п Ї®бв®п­­ п ўаҐ¬Ґ­Ё }
  Tm = 0.3;  { ¬Ґе ­ЁзҐбЄ п Ї®бв®п­­ п ўаҐ¬Ґ­Ё  }
begin
  A1:=A1+(U-A1)*TimeStep/Te;
  A2:=A2+(A1-A2)*TimeStep/Tm;
  Engin:=A2*K;
end;


{---------------------------------------------}
{ ђЁбгҐв Ї®«Ґ Ја дЁЄ                          }
{---------------------------------------------}
Procedure DrawField;
var
  x, y : Integer;
  s    : string[6];
  T    : float;
begin
  { Ї®«Ґ }
  cleardevice;
  SetFillStyle( SolidFill, DarkGray);
  Bar(0,20,GetMaxX,GetMaxY-20);

  { бҐвЄ  га®ў­Ґ© }
  for x:=-4 to 4 do
  begin
    if x=0 then SetColor( White ) else SetColor( LightGray );
    y:=(GetMaxY+1) div 2 - (GetMaxY-39)*x div 8;
    Line(0,y,GetMaxX,y);

    SetColor( White );
    Str( x * AmplitudeY/4:0:1, s);
    OutTextXY( 4, y-9, s);
  end;

  { бҐвЄ  ўаҐ¬Ґ­Ё }
  T:=0;
  repeat
    x := round( T * GetMaxX / SecPerScr );
    SetColor( LightGray );
    Line( x, 20, x, GetMaxY-20);

    SetColor( White );
    Str( T:0:2, s);
    OutTextXY( x-TextWidth(s) div 2, GetMaxY-10, s);
    T:=T + SecPerScr / 10;
  until x >= GetMaxX;
end;

{--------------------------------}
{ бв ўЁв ®зҐpҐ¤­го в®зЄг Јp дЁЄ  }
{--------------------------------}
Procedure PutPoint( v : Float );
Const
  OldX : Integer = 0;
  OldY : Integer = 0;
var
  x, y : Integer;
begin
  x:=round( Time * GetMaxX / SecPerScr );
  y:=(GetMaxY+1) div 2 - round((GetMaxY-39)*v/AmplitudeY/2);

  if x=0 then OldY:=GetMaxY div 2;
  SetColor( LightRed );
  SetLineStyle( SolidLn, 0, ThickWidth);
  Line( OldX, OldY, x, y);
  SetLineStyle( 0, 0, 0);

  OldX := x;
  OldY := y;
end;



{-------------------------------}
{     Ћб­®ў­ п Їp®Јp ¬¬         }
{-------------------------------}
begin
  InitGraph( Driver, Mode, DrvPath );   { гбв ­®ўЁвм Јp д. pҐ¦Ё¬ }
  DrawField;                            { ­ pЁб®ў вм Ї®«Ґ Јp дЁЄ  }

  Initialization;                       { **** €Ќ€–€€ђЋ‚Ђ’њ ђ…ѓ“‹џ’Ћђ }

  { ®б­®ў­®© жЁЄ« }
  v:=0;
  Task:=5;
  Repeat
    PutPoint(v);           { ­ pЁб®ў вм в®зЄг }
    Controller(Task,v,U);  { **** ‚›‡‚Ђ’њ ђ…ѓ“‹џ’Ћђ }
    v:=Engin(U);           { ¤ўЁЈ вҐ«м }

    Time:=Time+TimeStep;
  until Time >= SecPerScr;
  readkey;

  CloseGraph;              { ‡ Єpлвм Јp дЁЄг }
end.
Соседние файлы в папке PASCAL