Разработка системы управления асинхронным двигателем с детальной разработкой программ при различных законах управления

to 5 do h[k]:=x[k];

Right_Part;

for k:=1 to 5 do

begin

f1[k]:=f[k];

x[k]:=h[k]+f1[k]*dt/2;

end;

Right_Part;

for k:=1 to 5 do

begin

f2[k]:=f[k];

x[k]:=h[k]+f2[k]*dt/2;

end;

Right_Part;

for k:=1 to 5 do

begin

f3[k]:=f[k];

x[k]:=h[k]+f3[k]*dt;

end;

Right_Part;

for k:=1 to 5 do

begin

f4[k]:=f[k];

x[k]:=h[k]+(f1[k]+2*f2[k]+2*f3[k]+f4[k])/6*dt;

end;

end;

{ Инициализация графики }

procedure Init_Graph;

var GraphDriver,GraphMode:integer;

i:integer;

color:word;

begin

GraphDriver:=0;

DetectGraph(GraphDriver,GraphMode);

if GraphMode>1 then GraphMode:=1;

InitGraph(GraphDriver,GraphMode,'e:tpbgi');

color:=GetMaxColor;

TextMode(1);

Writeln;

Writeln(' Graph Initialisate And ',GraphErrorMsg(GraphResult));

Writeln;

Writeln(' Use: GraphMode - ',GetModeName(GraphMode));

Writeln(' GraphDriver - ',GetDriverName);

Writeln;

Writeln(' The Number Of Using Colors :',GetMaxColor);

for i:=1 to 4 do Writeln;

Writeln(' Параметры АД:');

Writeln;

Writeln(' As =',A1:6,' Ar =',A2:6);

Writeln(' Ks =',K1:6,' Kr =',K2:6);

Writeln(' Ls`=',L11:6,' Lr`=',L21:6);

for i:=1 to 7 do Writeln;

Writeln(' Press Any Key To Continue');

pausa;

SetGraphMode(GraphMode);

end;

{ Процедура подготовки к цифровому моделированию

по паспортным данным двигателя }

procedure Prepeare;

var HelpVariable:integer;

begin

W1:=2*Pi*Fs;W0:=W1/p;

L0:=1.5*X0t/W1;L1:=X1t/W1;L2:=X2t/W1;

L1:=L1+L0;L2:=L2+L0;

K2:=L0/L2;K1:=L0/L1;

L11:=L1-sqr(L0)/L2;L21:=L2-sqr(L0)/L1;

A1:=R1t/L11;A2:=R2t/L21;

for HelpVariable:=1 to 5 do

begin

f[HelpVariable]:=0;

x[HelpVariable]:=0;

end;

end;

{ Процедура расчета угов векторов }

procedure AngleDefinition;

begin

UssAbsoluteAngle:=AbsoluteAngle(U1a,U1b);

PsisRAngle:=AbsoluteAngle(x[1],x[2])-UssAbsoluteAngle;

if PsisRAngle<0 then PsisRAngle:=360+PsisRAngle;

PsirRAngle:=AbsoluteAngle(x[3],x[4])-UssAbsoluteAngle;

if PsirRAngle<0 then PsirRAngle:=360+PsirRAngle;

IsRAngle:=AbsoluteAngle(I1a,I1b)-UssAbsoluteAngle;

if IsRAngle<0 then IsRAngle:=360+IsRAngle;

IrsRAngle:=AbsoluteAngle(I21a,I21b)-UssAbsoluteAngle;

if IrsRAngle<0 then IrsRAngle:=360+IrsRAngle;

PsioRAngle:=AbsoluteAngle(I0a,I0b)-UssAbsoluteAngle;

if PsioRAngle<0 then PsioRAngle:=360+PsioRAngle;

end;

procedure OutStringSum;

begin

VectorString:=VectorString+VectorString0+'¦';

end;

{ Функция, выдающая строку таблицы out - данных }

function GetVectorString(Number:StringSwitche):string;

begin

Case Number of

ST11 :GetVectorString:='+----------------------------------------------------------------------------+';

ST12 :GetVectorString:='¦ ¦ ¦ ¦ ¦ ¦ ¦ Uss ¦ Psis ¦';

ST13 :GetVectorString:='¦ ¦ ¦ ¦ ¦ ¦ +--------------------+-------------¦';

ST14 :GetVectorString:='¦ Fs ¦ Ms ¦ Wv ¦ S ¦ Effi-¦cos(F)¦ ¦ Angle ¦ ¦ ¦';

ST15 :GetVectorString:='¦ ¦ ¦ ¦ ¦ciency¦ ¦Module+-------------¦Module¦RAngle¦';

ST16 :GetVectorString:='¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦absol.¦relat.¦ ¦ ¦';

ST17 :GetVectorString:='+------+------+------+------+------+------+------+------+------+------+------¦';

DATA1:begin

VectorString:='¦';Str(Fs:6,VectorString0);OutStringSum;

Str(Ms:6,VectorString0);OutStringSum;

Str(x[5]/p:6:2,VectorString0);OutStringSum;

Str(s:6:3,VectorString0);OutStringSum;

Str(KPD:6:3,VectorString0);OutStringSum;

Str(CosF:6:3,VectorString0);OutStringSum;

Str(Uss:6,VectorString0);OutStringSum;

Str(UssAbsoluteAngle:6,VectorString0);OutStringSum;

VectorString0:=' 0 ';OutStringSum;

Psi1:=sqrt(sqr(x[1])+sqr(x[2]));

Str(Psi1:6:4,VectorString0);OutStringSum;

Str(PsisRAngle:6,VectorString0);OutStringSum;

GetVectorString:=VectorString;

end;

ENDT1:GetVectorString:='+----------------------------------------------------------------------------+';

ST21 :GetVectorString:='+----------------------------------------------------------------------------+';

ST22 :GetVectorString:='¦ Psir ¦ Is ¦ Irs ¦ Psio ¦ Power ¦ ¦';

ST23 :GetVectorString:='+-------------+-------------+-------------+-------------+-------------¦ M ¦';

ST24 :GetVectorString:='¦Module¦RAngle¦Module¦RAngle¦Module¦RAngle¦Module¦RAngle¦ Full ¦Utilit¦ ¦';

ST25 :GetVectorString:='+------+------+------+------+------+------+------+------+------+------+------¦';

DATA2:begin

Psi2:=sqrt(sqr(x[3])+sqr(x[4]));Psi0:=I0*L0;

Str(Psi2:6:4,VectorString0);VectorString:='¦';OutStringSum;

Str(PsirRAngle:6,VectorString0);OutStringSum;

Str(I1:6:2,VectorString0);OutStringSum;

Str(IsRAngle:6,VectorString0);OutStringSum;

Str(I21:6:2,VectorString0);OutStringSum;

Str(IrsRAngle:6,VectorString0);OutStringSum;

Str(Psi0:6:4,VectorString0);OutStringSum;

Str(PsioRAngle:6,VectorString0);OutStringSum;

Str(0.003*Uss/sqrt(2)*I1:6:2,VectorString0);OutStringSum;

Str(0.003*Uss/sqrt(2)*I1*CosF:6:2,VectorString0);OutStringSum;

Str(M:6:2,VectorString0);OutStringSum;

GetVectorString:=VectorString;

end;

ENDT2:GetVectorString:='+----------------------------------------------------------------------------+'

end

end;

{ Процедура, рисующая векторную диаграмму }

procedure DrawVectorDiagram;

var CenterX,CenterY,Max,Kx:real;

Xk,Yk:word;

begin

GetAspectRatio(Xk,Yk);Kx:=Yk/Xk;

CenterY:=GetMaxY/2;Max:=(GetMaxY-150)/2;CenterX:=2/3*GetMaxX-10;

PutVector(CenterX,CenterY,Max,90,GetMaxColor,'Uss');

PutVector(CenterX,CenterY,Max,90+IsRAngle,GetMaxColor*0.9,'Is');

PutVector(CenterX,CenterY,Max*I21/I1,90+IrsRAngle,GetMaxColor*0.88,'Irs');

PutVector(CenterX,CenterY,Max,90+PsisRAngle,GetMaxColor*0.8,'Psis');

PutVector(CenterX,CenterY,Max*Psi2/Psi1,90+PsirRAngle,GetMaxColor*0.75,'Psir');

PutVector(CenterX,CenterY,Max*Psi0/Psi1,90+PsioRAngle,GetMaxColor*0.65,'Psio');

end;

procedure SolveDiagram;Forward;

{ Процедура выхода из программы }

procedure quit;

begin

Write(Result,GetVectorString(ENDT1));Writeln(Result,GetVectorString(ENDT2));

Close(Result);GraphDefaults;CloseGraph;Halt;

end;

{ Процедура анализа скэн - кода }

procedure PressKeyAnalysis;

var p:char;

begin

p:=chr(0);

if KeyPressed=True then

Case ReadKey of

'V','v':SolveDiagram;

'M','m':begin

Ms:=NumberInput('Момент');

SolveDiagram;

end;

'U','u':begin

Uss:=round(NumberInput('Напряжение')*sqrt(2));

SolveDiagram;

end;

'W','w':begin

Write(Result,GetVectorString(DATA1));

Writeln(Result,GetVectorString(DATA2));

SolveDiagram;

end;

'P','p':begin

SetActivePage(1);SetVisualPage(0);

SetViewPort(0,100,300,204,True);ClearViewPort;

SetViewPort(0,0,GetMaxX,GetMaxY,True);

TextOut(80,148,0.9,'Печать:');

TextOut(0,164,0.75,'1 - печать графика скорости');

TextOut(0,180,0.87,'2 - печать векторной диаграммы');

SetVisualPage(1);

Repeat p:=ReadKey;

Until (p='1') or (p='2');

Case p of

'1':begin

SetActivePage(0);SetVisualPage(0);

CopyToPRN;

end;

'2':begin

SetActivePage(1);SetVisualPage(1);

CopyToPRN;

end

end;

SolveDiagram;

end;

'Q','q':quit

else

SetColor(GetMaxColor);

SetVisualPage(0);

end

end;

{ Процедура расчета векторной диаграммы }

procedure SolveDiagram;

begin

SetVisualPage(0);SetActivePage(1);

SetViewPort(0,0,GetMaxX,GetMaxY,True);SetBkColor(Black);ClearViewPort;SetColor(GetMaxColor);

AngleDefinition;

{формирование} OutTextXY(0,0,GetVectorString(ST11));OutTextXY(0,8,GetVectorString(ST12));

{ заголовка } OutTextXY(0,16,GetVectorString(ST13));OutTextXY(0,24,GetVectorString(ST14));

{ первой } OutTextXY(0,32,GetVectorString(ST15));OutTextXY(0,40,GetVectorString(ST16));

{ таблицы } OutTextXY(0,48,GetVectorString(ST17));

{вывод данных} OutTextXY(0,56,GetVectorString(DATA1));

{конец табл.1} OutTextXY(0,64,GetVectorString(ENDT1));

{конец табл.2} OutTextXY(0,GetMaxY-8,GetVectorString(ENDT2));

{вывод данных} OutTextXY(0,GetMaxY-16,GetVectorString(DATA2));

{формирование} OutTextXY(0,GetMaxY-24,GetVectorString(ST25));OutTextXY(0,GetMaxY-32,GetVectorString(ST24));

{ заголовка } OutTextXY(0,GetMaxY-40,GetVectorString(ST23));OutTextXY(0,GetMaxY-48,GetVectorString(ST22));

{ таблицы2 } OutTextXY(0,GetMaxY-56,GetVectorString(ST21));

DrawVectorDiagram;

TextOut(56,100,0.9,'КЛАВИАТУРА:');TextOut(0,116,0.75,'V - векторная диаграмма');

TextOut(0,132,0.87,'W - запись результатов в файл');TextOut(0,148,0.65,'M - изменить момент на валу');

TextOut(0,164,0.6,'U - изменить напряжение');TextOut(0,180,0.4,'P - печать результатов моделирования');

TextOut(0,196,0.8,'Q - выход в систему');

SetVisualPage(1);SetActivePage(0);

end;

{Процедура моделирования пуска асинхронного двигателя}

procedure Model;

begin

RepeatNumber:=round(EndT/(dt*640));

SpeedScale:=GetMaxY/(3*W0);

for CurrentNumber:=0 to 640 do

begin

for CurrentRepeat:=1 to RepeatNumber do

begin

Runge;

I1a:=x[1]/L11-K2/L11*x[3];

I1b:=x[2]/L11-K2/L11*x[4];

I1:=sqrt(sqr(I1a)+sqr(I1b));

I21a:=x[3]/L21-K1/L21*x[1];

I21b:=x[4]/L21-K1/L21*x[2];

I21:=Sqrt(sqr(I21a)+sqr(I21b));

I0a:=I1a+I21a;I0b:=I1b+I21b;

I0:=sqrt(sqr(I0a)+sqr(I0b));

t:=t+dt;

PutPixel(CurrentNumber,round(GetMaxY/2-SpeedScale*x[5]/p),color);

end;

PutPixel(CurrentNumber,round(GetMaxY/2-SpeedScale*x[5]/p),color);

SetActivePage(0);

PsiAlpha:=AbsoluteAngle(I0a,I0b)-AbsoluteAngle(x[3],x[4]);

IsPsirAlpha:=AbsoluteAngle(I1a,I1b)-AbsoluteAngle(x[3],x[4]);

IsAlpha:=AbsoluteAngle(U1a,U1b)-AbsoluteAngle(I1a,I1b);

CosF:=cos(IsAlpha*Pi/180);

if (Uss*I1)<>0 then KPD:=abs(M*Fs*4*Pi/(3*p*Uss*I1));

Str(Uss:5,StringPsiAlpha);Str(IsAlpha,StringIsAlpha);

Str(KPD:5:3,StringKPD);Str(IsPsirAlpha,StringIsPsirAlpha);

Str(s:6:4,StringAlphaRasch);Str(x[5]/p:5:1,StringCurrW);

Str(I1:6:2,StringIs);Str(CosF:4:2,StringCosF);

SetViewPort(184,20,240,30,False);ClearViewPort;SetViewPort(304,20,368,30,False);ClearViewPort;

SetViewPort(400,20,472,30,False);ClearViewPort;SetViewPort(576,20,638,30,False);ClearViewPort;

SetViewPort(184,40,248,50,False);ClearViewPort;SetViewPort(296,40,368,50,False);ClearViewPort;

SetViewPort(400,40,472,50,False);ClearViewPort;SetViewPort(576,40,638,50,False);ClearViewPort;

SetViewPort(0,0,GetMaxX,GetMaxY,True);

OutTextXY(192,20,StringPsiAlpha);OutTextXY(312,20,StringIsAlpha);

OutTextXY(408,20,StringKPD);OutTextXY(584,20,StringIsPsirAlpha);

OutTextXY(192,40,StringAlphaRasch);OutTextXY(312,40,StringCurrW);

OutTextXY(408,40,StringIs);OutTextXY(584,40,StringCosF);

PressKeyAnalysis;

end;

end;

{ Процедура формирования заголовка файла }

procedure FileHead;

begin

Assign(Result,'lw.res');

Rewrite(Result);

Writeln(Result,GetVectorString(ST11));Writeln(Result,GetVectorString(ST12));

Write(Result,GetVectorString(ST13));Writeln(Result,GetVectorString(ST21));

Write(Result,GetVectorString(ST14));Writeln(Result,GetVectorString(ST22));

Write(Result,GetVectorString(ST15));Writeln(Result,GetVectorString(ST23));

Write(Result,GetVectorString(ST16));Writeln(Result,GetVectorString(ST24));

Write(Result,GetVectorString(ST17));Writeln(Result,GetVectorString(ST25));

end;

{ Основная программа }

begin

ReCalculation;

ClrScr;Writeln;

TextColor(10);WriteLn(' Программа расчета и вывода векторной диаграммы А.Д.');

TextColor(12);Writeln(' Для IBM PC/XT/AT/PS-2 с ОЗУ экрана 256/512 Кб');

for i:=0 to 4 do Writeln;TextColor(15);

Write('Введите время окончания работы двигателя: ');Readln(EndT);

Write('Введите частоту питающей сети (Гц): ');Readln(Fs);

t:=0;dt:=1e-4;Ms:=0;Uss:=round(310*Fs/50);

FileHead;Prepeare;Init_Graph;TextMode(2);

SetActivePage(0);SetVisualPage(0);

Scale(1.5*W0,-1.5*W0,EndT,'t,c','W,рад/с');

SetColor(round(GetMaxColor*0.7));

OutTextXY(66,8,'Программа расчета векторной диаграммы и некоторых параметров А.Д.');

SetColor(round(GetMaxColor*0.9));

OutTextXY(112,20,'PsiAlpha:');OutTextXY(240,20,'IsAlpha:');

OutTextXY(368,20,'KPD:');OutTextXY(496,20,'IsPrAlpha:');

OutTextXY(96,40,'RelSkRasch:');OutTextXY(256,40,'CurrW:');

OutTextXY(376,40,'Is:');OutTextXY(536,40,'CosF:');

SetViewPort(0,0,GetMaxX,GetMaxY,True);

color:=GetMaxColor;SetColor(color);

Model;

Quit;

end.


{ ИСХОДНЫЙ ТЕКСТ МОДУЛЯ СЕРВИСНЫХ ПРОЦЕДУР И ФУНКЦИЙ }

Unit Im_tpu;

Interface

uses graph,dos,crt,printer;

type string4=string[4];

procedure pausa;

procedure Scale(Ymax,Ymin,Tmax:real;XText,YText:string);

function AbsoluteAngle(AComponent,BComponent:real):integer;

procedure PutVector(Xb,Yb,MVector,AVector,Col:real;Name:string4);

function NumberInput(What:string):integer;

procedure TextOut(X,Y:integer;Col:real;TextString:string);

procedure CopyToPRN;

function Sgn(v:real):integer;

function DefTime:string;

procedure TimeOut;

procedure PrintPausa;

Implementation

{ Пауза до первой нажатой клавиши }

procedure pausa;

begin

Repeat Until ReadKey<>#0

end;

{ Вывод на экран системы координат }

procedure Scale(Ymax,Ymin,Tmax:real;XText,YText:string);

var Ybeg,Ystep,Tstep,t1:real;

ScaleGrad:string;

Col:word;

SDrawX,SDrawY,HelpVar,GDriver,GMode:integer;

begin

DetectGraph(GDriver,GMode);GMode:=1;

InitGraph(Gdriver,GMode,'');

SetBkColor(0);SetColor(GetMaxColor);

Col:=GetMaxColor;PutPixel(0,0,Col);

LineTo(GetMaxX,0);LineTo(GetMaxX,GetMaxY);

LineTo(0,GetMaxY);LineTo(0,0);

for SDrawX:=1 to 19 do

for SdrawY:=1 to 19 do

PutPixel(SdrawX*GetMaxX div 20,SdrawY*GetMaxY div 20,col);

SetTextStyle(0,0,1);

if Ymin<0 then Ystep:=(Ymax-Ymin)/10

else

Ystep:=Ymax/10;

for HelpVar:=0 to 10 do

begin

Str(Ymax:9,ScaleGrad);

OutTextXY(0,HelpVar*GetMaxY div 10,ScaleGrad);

Ymax:=Ymax-Ystep;

end;

Tstep:=Tmax/5;t1:=0;

for HelpVar:=0 to 4 do

begin

Str(t1:9,ScaleGrad);

OutTextXY(HelpVar*GetMaxX div 5,GetMaxY-10,ScaleGrad);

t1:=t1+Tstep;

end;

SetColor(round(GetMaxColor/1.25));

OutTextXY(GetMaxX-48,GetMaxY-11,XText);OutTextXY(8,20,YText);

SetColor(GetMaxColor);

end;

{ Функция геометрического анализа и расчета абсолютного угла вектора }

function AbsoluteAngle(AComponent,BComponent:real):integer;

var IntAngle:integer;

begin

if AComponent<>0 then IntAngle:=round(180/Pi*ArcTan(BComponent/AComponent));

if AComponent=0 then

begin

if BComponent>0 then IntAngle:=90

else IntAngle:=-90;

end

else

if BComponent=0 then

begin

if AComponent>0 then IntAngle:=0

else IntAngle:=180;

end

else

if ((AComponent>0) and (BComponent>0)) or (AComponent>0) and (BComponent<0) then

{первый и второй квадранты}

IntAngle:=IntAngle

else

IntAngle:=180+IntAngle;{второй и третий квадранты};

if IntAngle<0 then IntAngle:=360+IntAngle;

AbsoluteAngle:=IntAngle;

end;

{ Процедура вывода вектора по заданным координатам }

procedure PutVector(Xb,Yb,MVector,AVector,Col:real;Name:string4);

const LengthPoint=8;

var Xbh,Ybh,Xeh,Yeh,Xp,Yp,AVAngle:integer;

Xk,Yk,Colh:word;

Kx:real;

begin

GetAspectRatio(Xk,Yk);Kx:=Yk/Xk;

Xbh:=round(Xb);Ybh:=Round(Yb);

Xeh:=Round(Xb+Kx*MVector*cos(Pi/180*AVector));

Yeh:=round(Yb-MVector*sin(Pi/180*AVector));

Colh:=round(Col);SetColor(Colh);

Line(Xbh,Ybh,Xeh,Yeh);

AVAngle:=AbsoluteAngle((Xeh-Xbh),(Ybh-Yeh));

Xp:=round(LengthPoint*Kx*Cos(Pi/180*(AVAngle+10)));

Yp:=round(LengthPoint*Sin(Pi/180*(AVAngle+10)));

Xp:=Xeh-Xp;Yp:=Yeh+Yp;

Line(Xeh,Yeh,Xp,Yp);

Xp:=round(LengthPoint*Kx*Cos(Pi/180*(AVAngle-10)));

Yp:=round(LengthPoint*Sin(Pi/180*(AVAngle-10)));

Xp:=Xeh-Xp;Yp:=Yeh+Yp;

Line(Xeh,Yeh,Xp,Yp);

OutTextXY(Xeh+4,Yeh,Name);

end;

{ Функция ввода числа с клавиатуры в графическом режиме }

function NumberInput(What:string):integer;

var InputChar:char;

number:integer;

begin

SetActivePage(1);SetVisualPage(1);

SetColor(round(GetMaxColor*0.8));What:=What+' :';

OutTextXY(0,GetMaxY-80,What);Number:=0;MoveTo(120,GetMaxY-80);

Repeat

InputChar:=ReadKey;

if (InputChar>'/') and (InputChar<':') then

begin

Number:=Number*10-48+ord(InputChar);

OutText(InputChar);

end;

Until ord(InputChar)=13;

SetColor(GetMaxColor);SetBkColor(0);

SetViewPort(0,GetMaxY-80,300,GetMaxY-72,True);

ClearViewPort;NumberInput:=Number;

SetViewPort(0,0,GetMaxX,GetMaxY,True);

SetActivePage(0);

end;

{ Процедура вывода на экран в заданную позицию (X,Y)

заданного текста (TextString) заданным цветом (Col) }

procedure TextOut(X,Y:integer;Col:real;TextString:string);

begin

SetColor(round(Col*GetMaxColor));

OutTextXY(X,Y,TextString);

end;

{ Процедура графической копии экрана }

procedure CopyToPRN;

var x1,x2,y1,y2:integer;

Bk1,Bk2,Mode:Byte;

Inverse:Boolean;

procedure SetPoints;

begin

x1:=0;x2:=GetMaxX;

y1:=0;y2:=GetMaxY;

Bk1:=0;Bk2:=0;

Inverse:=False;

Mode:=1;

end;

{ X1,Y1,X2,Y2 - the size of output screen }

{ Bk1,Bk2 - the colours of the both backgrounds }

{ Inverse - normal (false) or invert (true) colour of the printing copy }

{ Mode: 1 - double density 120 points/inch }

{ 2 - high speed 120 points/inch }

{ 3 - high density 240 points/inch }

{ 0, 4, 5 - 80 points/inch }

{ 6 - 90 points/inch }

{ For nonFX EPSON - printers Mode = 1 }

var ScanLine:integer;{ current printing string }

n1,n2 :Byte; { special data for printer }

{ The construction of the byte for the printing graphics }

function ConstructByte(x,y:integer):byte;

const bits:array[0..7] of byte=(128,64,32,16,8,4,2,1);

var p :word; { the colour of the pixel }

CByte,Bit:byte; { byte and the bites number }

YY :integer; { the state of the current pixel }

begin

CByte:=0;

for Bit:=0 to 7 do

begin

YY:=Y+Bit;

P:=GetPixel(X,YY);

if (YY<=Y2) and (P<>bk1) and (P<>bk2) then Inc(CByte,Bits[Bit]);

end;

ConstructByte:=CByte;

end;

{ The graphics string output }

procedure DoLine;

var XPixel :integer; { the current X - position }

PrintByte:byte; { the byte, which code 8 pixels }

begin

if Mode=1 then Write(Lst,#27'L')

else Write(Lst,#27'*',chr(mode));

Write(Lst,chr(n1),chr(n2));

for XPixel:=X1 to X2 do

begin

PrintByte:=ConstructByte(XPixel,ScanLine);

if Inverse then PrintByte:=not PrintByte;

Write(Lst,chr(PrintByte));

end;

Write(Lst,#10);

end;

label quit;

begin

SetPoints;

mode:=mode mod 7;

if mode in [0,5] then mode:=4;

Write(Lst,#27'3'#24);

n1:=Lo(succ(X2-X1));n2:=Hi(succ(X2-X1));

ScanLine:=Y1;

while ScanLine<Y2 do

begin

if KeyPressed and (ReadKey=#27) then Goto Quit;

DoLine;

Inc(ScanLine,8);

end;

quit:Write(Lst,#27#2);

end;

{ Определение знака выражения }

function Sgn(v:real):integer;

begin

if v<0 then Sgn:=-1

else

Sgn:=1;

if v=0 then Sgn:=0;

end;

{ Функция расчета времени счета }

function DefTime:string;

var cw,mw,sw,sdw:word;

cs,ms,ss,sds:string;

begin

GetTime(cw,mw,sw,sdw);

str(cw,cs);str(mw,ms);str(sw,ss);str(sdw,sds);

DefTime:=cs+':'+ms+':'+ss+'.'+sds;

end;

{ Процедура вывода на экран времени счета }

procedure TimeOut;

var ST:string;

begin

ST:=' Время счета : '+DefTime;

GoToXY(10,10);

Write(ST);

end;

procedure PrintPausa;

var c:char;

begin

Repeat c:=ReadKey

Until ((c='P') or (c='p') or (c<>''));

Case c of

'P','p':CopyToPRN

else

end

end;

end.


АННОТАЦИЯ

Данный документ "РАЗРАБОТКА ПРОГРАММЫ" представляет собой описание программного обеспечения моделирования работы асинхронного двигателя.

Документ включает в себя такие сведения о программе, как функциональное назначение программы, используемые технические средства, описание алгоритма программы, и т. д.


СОДЕРЖАНИЕ

Стр.

1. ОБЩИЕ СВЕДЕНИЯ

2. ФУНКЦИОНАЛЬНОЕ НАЗНАЧЕНИЕ

3. ОПИСАНИЕ УПРАВЛЯЮЩЕГО АЛГОРИТМА

4. ИСПОЛЬЗУЕМЫЕ ТЕХНИЧЕСКИЕ СРЕДСТВА

5. ВЫЗОВ И ЗАГРУЗКА

6. ВХОДНЫЕ ДАННЫЕ

7. ВЫХОДНЫЕ ДАННЫЕ


1. ОБЩИЕ СВЕДЕНИЯ

Программное обеспечение поставляется в виде пакета программ “AD”, состоящего из четырех файлов:

IM_MAIN.EXE

GRAPH.TPU

IM_TPU_.TPU

EGAVGA.BGI

Для функционирования программы необходимо наличие IBM-совместимого компьютера с ОЗУ экрана 512кБ. Программа управления разработана на языке Паскаль и скомпилирована в исполняемый файл с помощью встроенного компилятора.

2. ФУНКЦИОНАЛЬНОЕ НАЗНАЧЕНИЕ

Программа управления предназначена для моделирования работы асинхронного двигателя. Программа позволяет управлять режимами работы двигателя, изменять параметры во время работы и вести статистику работы двигателя путем записи результатов в файл.

3. ОПИСАНИЕ УПРАВЛЯЮЩЕГО АЛГОРИТМА

Описание управляющего алгоритма производится в порядке, соответствующем нумерации блоков в управляющей программе.

Схема алгоритма управляющей моделирования в приведена на листе графической части.

4. ИСПОЛЬЗУЕМЫЕ ТЕХНИЧЕСКИЕ СРЕДСТВА

Для функционирования программы необходимо наличие IBM-совместимого компьютера с видеопамятью не менее 512кБ. Так как программа предполагает вывод данных о моделировании на печать необходимо наличие принтера типа EPSON.

5. ВЫЗОВ И ЗАГРУЗКА

Исполняемым файлом в пакете программ “АД” является файл IM-MAIN.EXE.

После запуска программа выдает краткую информацию о ее разработчиках и предлагает ввести пользователю рабочую частоту и время моделирования его работы (в секундах).

Затем начинается процесс моделирования. На экране появляются оси координат: по оси абсцисс - время (t,c), по оси ординат - угловая скорость (w, рад/c). Во время своей работы программа выводит график зависимости w(t). Моделирование ведется в реальном масштабе времени.

В процессе моделирования работы двигателя у пользователя имеется возможность изменять некоторые его параметры, для этого зарезервированы “горячие” клавиши:

U - изменить напряжение;

М - изменить момент на валу.

При нажатии “M” программа предложит ввести значение момента на валу двигателя.

При нажатии “U” программа предложит ввести значение напряжения двигателя.

При ошибочном вводе любых значений пользователь в любой момент может отменить введенные числа путем нажатия клавиши “ESC”.

Также в процессе моделирования пользователю доступны следующие клавиши:

W - запись результатов в файл;

P - печать результатов моделирования;

Q - немедленный выход из программы.

При нажатии на клавишу “W” программа сохраняет результаты моделирования в файле TW.RES.

При нажатии на клавишу “P” программа инициализирует принтер и начинает выводить графический образ экрана и результаты на бумагу.

При помощи клавиши “Q” можно немедленно покинуть программу, при этом результаты работы не будут сохранены.

По истечении времени моделирования, заданного пользователем, программа автоматически записывает протокол своей работы в файл TW.RES, если в процессе работы этого не сделал пользователь. Результаты оформлены в виде таблицы.

При возникновении затруднений в процессе работы с программой пользователь в любой момент может нажать клавишу “F1” для получения справки.

6. ВХОДНЫЕ ДАННЫЕ

Входными данными для программы являются:

· рабочая частота;

· время моделирования его работы (в секундах).

Остальные параметры двигателя жестко оговорены в самой программе и выводятся экран при ее запуске.

7. ВЫХОДНЫЕ ДАННЫЕ

Выходными данными программы являются:

· график зависимости w(t);

· частота вращения вала двигателя;

· момент на валу двигателя;

· КПД;

· коэффициент мощности;

· питающее напряжение;

· сообщения об ошибках программы.


Протокол работы программы IM-MAIN.EXE

Параметры АД:

Время моделирования: 1 с

Частота питающей сети: 50 Гц

As = 4.5E+0001 Ar = 2.1E+0001

Ks = 9.9E-0001 Kr = 9.8E-0001

Ls`= 1.3E-0003 Lr`= 1.3E-0003

Рис.1(а)

Рис. 1(б)

Рис. 1(в)

Рис.2(а)

Рис. 2(б)

Рис. 3(а)

Рис. 3(б)


АННОТАЦИЯ

Данный программный документ представляет собой описание программного обеспечения моделирования работы асинхронного двигателя.

Документ включает в себя такие сведения о программе как функциональное назначение программы, условия выполнения и т. п.


СОДЕРЖАНИЕ

Стр.

1. НАЗНАЧЕНИЕ ПРОГРАММЫ

2. УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ

3. ВЫПОЛНЕНИЕ ПРОГРАММЫ

4. СООБЩЕНИЯ ОПЕРАТОРУ


1. НАЗНАЧЕНИЕ ПРОГРАММЫ

Программа предназначена для моделирования работы асинхронного двигателя. Программа позволяет управлять режимами работы двигателя, изменять параметры во время работы и вести статистику работы двигателя путем записи результатов в файл.

2. УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ

Для функционирования программы необходимо наличие IBM-совместимого компьютера не хуже PC AT 286 с видеопамятью не менее 512кБ. Так как программа предполагает вывод данных о моделировании на печать необходимо наличие принтера типа EPSON.

3. ВЫПОЛНЕНИЕ ПРОГРАММЫ

После запуска программа выдает краткую информацию о ее разработчиках и предлагает ввести пользователю рабочую частоту и время моделирования его работы (в секундах).

Затем начинается процесс моделирования. На экране появляются оси координат: по оси абсцисс - время (t,c), по оси ординат - угловая скорость (w, рад/c). Во время своей работы программа выводит график зависимости w(t). Моделирование ведется в реальном масштабе времени.

В процессе моделирования работы двигателя у пользователя имеется возможность изменять некоторые его параметры, для этого зарезервированы “горячие” клавиши:

U - изменить напряжение;

М - изменить момент на валу.

При нажатии “M” программа предложит ввести значение момента на валу двигателя.

При нажатии “U” программа предложит ввести значение напряжения двигателя.

При ошибочном вводе любых значений пользователь в любой момент может отменить введенные числа путем нажатия клавиши “ESC”.

Также в процессе моделирования пользователю доступны следующие клавиши:

W - запись результатов в файл;

P - печать результатов моделирования;

Q - немедленный выход из программы.

При нажатии на клавишу “W” программа сохраняет результаты моделирования в файле TW.RES.

При нажатии на клавишу “P” программа инициализирует принтер и начинает выводить графический образ экрана и результаты на бумагу.

При помощи клавиши “Q” можно немедленно покинуть программу, при этом результаты работы не будут сохранены.

По истечении времени моделирования, заданного пользователем, программа автоматически записывает протокол своей работы в файл TW.RES, если в процессе работы этого не сделал пользователь. Результаты оформлены в виде таблицы.

При возникновении затруднений в процессе работы с программой пользователь в любой момент может нажать клавишу “F1” для получения справки.

4. СООБЩЕНИЯ ОПЕРАТОРУ

Для оперативного контроля за процессом моделирования работы АД предусмотрен вывод графической зависимости w(t) на экран график зависимости w(t), частоты вращения вала двигателя, момента на валу двигателя, КПД, коэффициента мощности, питающего напряжения.

Пользователь также получает информацию о неправильно введенных с клавиатуры данных.




29-04-2015, 04:12

Страницы: 1 2 3 4 5 6 7 8
Разделы сайта