Добавил:
Fragga
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программный комплекс Анализ систем 3.1 / PROG / C / example
.c/**********************************************\
| (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 дЁЄг
}