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

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <conio.h>
#include "Ctrl.c"

#define TimeStep    0.003  // и Ј а бзҐв 
#define AmplitudeY  10     //  ¬Ї«Ёвг¤  ўл室 
#define SecPerScr   0.3    // ᥪ㭤 ­  нЄа ­

float  Task, v, U;         // § ¤ ­ЁҐ, бЄ®а®бвм, ­ Їа殮­ЁҐ
float  Time;               // ⥪г饥 ўаҐ¬п


/****** ¤«п Ё­ЁжЁ жЁЁ Јp дЁЄЁ ****/
int Driver = DETECT;
int Mode   = 0;

/**********************************************\
| Њ®¤Ґ«м н«ҐЄвதўЁЈ вҐ«п.                     |
|   U-­ Їа殮­ЁҐ.                              |
|   ‚®§ўа й Ґв - бЄ®а®бвм                      |
\**********************************************/
float Engin( float U )
{
  static float A1 = 0;
  static float A2 = 0;

  #define K   23    // Є®нд. ЇҐаҐ¤ зЁ
  #define Te  0.03  // н«ҐЄваЁзҐбЄ п Ї®бв®п­­ п ўаҐ¬Ґ­Ё
  #define Tm  0.3   // ¬Ґе ­ЁзҐбЄ п Ї®бв®п­­ п ўаҐ¬Ґ­Ё

  A1 = A1+(U-A1)*TimeStep/Te;
  A2 = A2+(A1-A2)*TimeStep/Tm;
  return A2*K;
}


/*********************************************\
| ђЁбгҐв Ї®«Ґ Ја дЁЄ                          |
\*********************************************/
void DrawField()
{
  int   x, y;
  char	s[10];
  float	T;

  // Ї®«Ґ
  cleardevice();
  setfillstyle( SOLID_FILL, DARKGRAY );
  bar(0, 20, getmaxx(), getmaxy()-20 );

  // бҐвЄ  га®ў­Ґ©
  for (x=-4; x<=4; x++)
  {
    if (x==0) setcolor( WHITE ); else setcolor( LIGHTGRAY );
    y = (getmaxy()+1)/2 - (getmaxy()-39)*x/8;
    line( 0, y, getmaxx(), y);

    setcolor( WHITE );
    outtextxy( 4, y-9, gcvt( x * AmplitudeY/4,4, s));
  }

  // бҐвЄ  ўаҐ¬Ґ­Ё
  T=0;
  do
  {
    x = T * getmaxx() / SecPerScr;
    setcolor( LIGHTGRAY );
    line( x, 20, x, getmaxy()-20);

    setcolor( WHITE );
    gcvt( T, 4, s);
    outtextxy( x-textwidth(s)/2, getmaxy()-10, s);
    T += SecPerScr / 10;
  }while (x < getmaxx());
}

/********************************\
| бв ўЁв ®зҐpҐ¤­го в®зЄг Јp дЁЄ  |
\********************************/
void PutPoint( float v )
{ static int OldX = 0;
  static int OldY = 0;
  int	 x, y;

  x = Time * getmaxx() / SecPerScr;
  y = (getmaxy()+1)/2 - (getmaxy()-39)*v/AmplitudeY/2;

  if (x==0) OldY = getmaxy()/2;
  setcolor( LIGHTRED );
  setlinestyle( SOLID_LINE, 0, 3);
  line( OldX, OldY, x, y);
  setlinestyle( 0, 0, 0);

  OldX = x;
  OldY = y;
}



/*******************************\
|     Ћб­®ў­ п Їp®Јp ¬¬         |
\*******************************/
void main()
{

  initgraph( &Driver, &Mode, NULL );    // гбв ­®ўЁвм Јp д. pҐ¦Ё¬
  DrawField();                          // ­ pЁб®ў вм Ї®«Ґ Јp дЁЄ 

  Initialization();                     // **** €Ќ€–€€ђЋ‚Ђ’њ ђ…ѓ“‹џ’Ћђ ****/

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

    Time += TimeStep;
  }while ( Time < SecPerScr);
  getch();

  closegraph();            // ‡ Єpлвм Јp дЁЄг
}
Соседние файлы в папке C