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

extern void far INITIALIZATION(void);
extern void far CONTROLLER(void);


#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <conio.h>

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

float  INPUT0, INPUT1, OUTPUT0; // ўе®¤ 0, ўе®¤ 1, ўл室.
			        // ќвЁ ЇҐаҐ¬Ґ­­лҐ ¤®«¦­л Ўлвм ®Ўп§ вҐ«м­®
				// ®Ўкпў«Ґ­л, в.Є. ®­Ё ЁбЇ®«м§говбп ў Ctrl.obj
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   1     // Є®нд. ЇҐаҐ¤ зЁ
  #define Te  0.01  // н«ҐЄваЁзҐбЄ п Ї®бв®п­­ п ўаҐ¬Ґ­Ё
  #define Tm  0.03  // ¬Ґе ­ЁзҐбЄ п Ї®бв®п­­ п ўаҐ¬Ґ­Ё

  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Ёб®ў вм в®зЄг
    INPUT0 = Task;
    INPUT1 = v;

    CONTROLLER(); //**** ‚›‡‚Ђ’њ ђ…ѓ“‹џ’Ћђ *****/
    U = OUTPUT0;

    v = Engin(U);          // ¤ўЁЈ вҐ«м

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

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