Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ООП / 1 / 4 / 4

.docx
Скачиваний:
28
Добавлен:
01.06.2015
Размер:
83.44 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Федеральное государственное автономное образовательное

учреждение высшего профессионального образования

«Южный федеральный университет»

Факультет

РАДИОТЕХНИЧЕСКИЙ

Кафедра

МИКРОПРОЦЕССОРНЫХ СИСТЕМ

Отчет по лабораторной работе №1

по дисциплине:

«Объектно-ориентированное программирование».

На тему: «АЧХ и ФЧХ двигателя постоянного тока».

Выполнил:

студент группы Р-102

В.Г.Горчаков

Проверил: доцент каф. МПС

М.И.Ледовской

Таганрог 2013 г.

Цель лабораторной работы

Изучить принципы создания приложения «АЧХ и ФЧХ двигателя постоянного тока» для Windows в инструментальной среде Delphi 7

Интерфейс приложения

графический компонент

событие

обработчик

Button1

OnClick

Button1Click

GroupBox1

Edit1

Edit2

Edit3

Label1

Label2

Label3

TrackBar1

OnChange

TrackBarChange

TrackBar2

OnChange

TrackBarChange

TrackBar3

OnChange

TrackBarChange

PaintBox1

OnPaint

PaintBoxPaint

Код программы:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, ComCtrls;

type

TForm1 = class(TForm)

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

TrackBar1: TTrackBar;

TrackBar2: TTrackBar;

TrackBar3: TTrackBar;

Button1: TButton;

PaintBox1: TPaintBox;

procedureButtonClick(Sender: TObject);

procedurePaintBoxPaint(Sender: TObject);

procedureTrackBarChange(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: Tform1;

Tm: real; // электромеханическая постоянная времени

Te: real; // электромагнитная постоянная времени

C: real; // конструктивная постоянная двигателя

implementation

{$R *.dfm}

// переходная характеристика двигателя

functionTransCharact(t: real): real;

var

ksi: real;

delta: real;

Q: real;

w: real;

A: real;

Tme: real;

k: real;

y: real;

begin

Tme:=Sqrt(Tm*Te);

k:=1/C;

ksi:=Tm/2/Tme;

A:=-1/Sqrt(1-Sqr(ksi));

delta:=ksi/Tme;

w:=Sqrt(1-Sqr(ksi))/Tme;

Q:=ArcTan(-ksi/(1-Sqr(ksi)));

y:=k*(1+A*Exp(-delta*t)*Sin(w*t+Q));

TransCharact:=y;

end;

// АЧХиФЧХдвигателя

procedureFreqCharact;

const

Vmax=100; // верхняяграницаПХ

Mmax=300; // верхняя граница АЧХ

Qmax=100; // верхняя граница ФЧХ

fmax=20; // верхняя граница частоты

tmax=1; // верхняя граница времени

N=100; // количество интервалов дискретизации времени

var

l,p: integer; // кординаты левого нижнего угола области вывода

w,h: integer; // ширина и высота области вывода

MasY: array [0..N] of real; // значенияПХ

t: real; // время

f,f0,f1: real; // значения частоты

Q1,Q2: real; // значения фазы

dt,df,dQ: real; // приращения

Mc,Ms,M1,M2: real; // значения спектральной плотности

mt,mf,my: real; // масштабы

x0: integer; // координаты начала координат графиков

y0: array[1..3] ofinteger;

y: integer; // текущая Y-координата области вывода

z: real; // вспомогательные переменные

i,k: integer;

begin

// параметрыдвигателя

Tm:=Form1.TrackBar1.Position*1e-4;

Te:=Form1.TrackBar2.Position*1e-3;

C:=Form1.TrackBar3.Position*1e-3;

// область вывода графиков

with Form1.PaintBox1 do

begin

Canvas.Pen.Color:=clBlack;

Canvas.Brush.Color:=clWhite;

Canvas.Rectangle(0,0,Width,Height);

l:=40; // X-координаталевоговерхнегоугла

p:=Height-20; // Y-координата левого верхнего угла

h:=Height-60; // высота

w:=Width-80; // ширина

end;

// масштабы

my:=(h-110)/3; // относительных единиц по Y-координате

mt:=(w-20)/tmax; // времени по X-координате

mf:=(w-20)/fmax; // частоты по X-координате

with Form1.PaintBox1.Canvas do

begin

// разметка осей для графика ПХ

// вертикальная ось

x0:=l;

y:=p-h;

TextOut(x0+w div 3,y-35,'ПХ двигателя');

TextOut(x0+7,y-15,'V [рад/c]');

for i:=0 to 4 do

begin

MoveTo(x0,y); LineTo(x0+3,y);

TextOut(x0-25,y-7,IntToStr(Vmax-(Vmax div 5)*i));

MoveTo(x0,y); LineTo(x0,y+Round(0.2*my));

y:=y+Round(0.2*my);

end;

TextOut(x0-15,y-5,'0');

// горизонтальная ось

y0[1]:=y;

MoveTo(x0,y0[1]); LineTo(x0+Round(tmax*mt)+1,y0[1]);

dt:=tmax/5;

for i:=1 to 5 do

begin

MoveTo(x0+Round(i*dt*mt),y0[1]-3);

LineTo(x0+Round(i*dt*mt),y0[1]);

TextOut(x0+Round(i*dt*mt)-3,y0[1]+2,FloatToStr(i*dt));

end;

TextOut(w+40,y0[1]+2,'t [c]');

// разметка осей для графика AЧХ

// вертикальная ось

y:=y+55;

TextOut(x0+w div 4,y-25,'АЧХ двигателя');

TextOut(x0+7,y-15,'M');

for i:=0 to 4 do

begin

MoveTo(x0,y); LineTo(x0+3,y);

TextOut(x0-25,y-7,FloatToStr(Mmax-(Mmax div 5)*i));

MoveTo(x0,y); LineTo(x0,y+Round(0.2*my));

y:=y+Round(0.2*my);

end;

TextOut(x0-15,y-5,'0');

// горизонтальная ось

y0[2]:=y;

MoveTo(x0,y0[2]); LineTo(x0+Round(fmax*mf)+1,y0[2]);

df:=fmax/5;

for i:=1 to 5 do

begin

z:=i*df;

MoveTo(x0+Round(z*mf),y0[2]-3);

LineTo(x0+Round(z*mf),y0[2]);

TextOut(x0+Round(z*mf)-3,y0[2]+2,FloatToStr(z));

end;

TextOut(w+40,y0[2]+2,'f [Гц]');

// разметка осей для графика ФЧХ

// вертикальная ось

y:=y+45;

TextOut(x0+w div 4,y-15,'ФЧХ двигателя');

y:=y+10;

y0[3]:=y;

TextOut(x0-15,y-5,'0');

for i:=1 to 5 do

begin

MoveTo(x0,y); LineTo(x0,y+Round(0.2*my));

y:=y+Round(0.2*my);

MoveTo(x0,y); LineTo(x0+3,y);

TextOut(x0-27,y-7,FloatToStr(-(Qmax div 5)*i));

end;

TextOut(x0+7,y-3,'Q [град]');

// горизонтальнаяось

MoveTo(x0,y0[3]); LineTo(x0+Round(fmax*mf)+1,y0[3]);

df:=fmax/5;

for i:=1 to 5 do

begin

z:=i*df;

MoveTo(x0+Round(z*mf),y0[3]+3);

LineTo(x0+Round(z*mf),y0[3]);

TextOut(x0+Round(z*mf)-3,y0[3]+5,FloatToStr(z));

end;

TextOut(w+40,y0[3]+5,'f [Гц]');

// построение графика ПХ

Pen.Color:=clRed;

t:=0;

dt:=tmax/N;

MasY[0]:=TransCharact(0);

MoveTo(x0,y0[1]-Round((TransCharact(0)/Vmax)*my));

for i:=1 to N do

begin

z:=i*dt;

MasY[i]:=TransCharact(z);

LineTo(x0+Round(z*mt),y0[1]-Round((TransCharact(z)/Vmax)*my));

MoveTo(x0+Round(z*mt),y0[1]-Round((TransCharact(z)/Vmax)*my));

end;

// построение графиков АЧХ и ФЧХ двигателя

df:=0.01;

f:=df;

k:=1;

repeat

Mc:=0; Ms:=0;

z:=Pi*f*dt;

for i:=1 to N do

begin

Mc:=Mc+(MasY[i]-MasY[i-1])*Cos(z*(2*i-1));

Ms:=Ms+(MasY[i]-MasY[i-1])*Sin(z*(2*i-1));

end;

z:=Sin(z)/z;

Mc:=Mc*z;

Ms:=Mc*z;

M2:=Sqrt(Sqr(Mc)+Sqr(Ms));

Q2:=-ArcTan(Ms/Mc);

// АЧХ

if k=1 then

MoveTo(x0+Round(f*mf),y0[2]-Round((M2/Mmax)*my)) else

MoveTo(x0+Round((f-df)*mf),y0[2]-Round((M1/Mmax)*my));

LineTo(x0+Round(f*mf),y0[2]-Round((M2/Mmax)*my));

// ФЧХ

if k=1 then

MoveTo(x0+Round(f*mf),y0[3]-Round((180*Q2/Pi/Qmax)*my)) else

MoveTo(x0+Round((f-df)*mf),y0[3]-Round((180*Q1/Pi/Qmax)*my));

LineTo(x0+Round(f*mf),y0[3]-Round((180*Q2/Pi/Qmax)*my));

M1:=M2;

Q1:=Q2;

f:=f+df;

k:=k+1;

until f>=fmax;

end;

end;

procedure Tform1.TrackBarChange(Sender: Tobject);

var

k: integer;

begin

k:=(Sender as TtrackBar).Tag;

// обновлениепараметровдвигателя

if k=1 then Edit1.Text:=FloatToStr((Sender as TtrackBar).Position*1e-4);

if k=2 then Edit2.Text:=FloatToStr((Sender as TtrackBar).Position*1e-3);

if k=3 then Edit3.Text:=FloatToStr((Sender as TtrackBar).Position*1e-3);

FreqCharact;

end;

procedure Tform1.PaintBoxPaint(Sender: Tobject);

begin

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

Edit1.Text:=FloatToStr(TrackBar1.Position*1e-4);

Edit2.Text:=FloatToStr(TrackBar2.Position*1e-3);

Edit3.Text:=FloatToStr(TrackBar3.Position*1e-3);

FreqCharact;

end;

procedure Tform1.ButtonClick(Sender: Tobject);

begin

Application.Terminate;

end;

end.

Вывод: изучены принципы создания приложения «АЧХ и ФЧХ двигателя постоянного тока» для Windows в инструментальной среде Delphi 7. Изучены основные свойства объектов среды программирования Delphi 7.

Соседние файлы в папке 4
  • #
    01.06.201583.44 Кб284.docx
  • #
    01.06.2015434 б25Project4.cfg
  • #
    01.06.20152.5 Кб25Project4.dof
  • #
    01.06.2015188 б25Project4.dpr
  • #
    01.06.2015876 б25Project4.res
  • #
    01.06.2015214 б25Project4.~dpr