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