МИНОБРНАУКИ РОССИИ
Федеральное государственное автономное образовательное
учреждение высшего профессионального образования
«Южный федеральный университет»
Факультет |
РАДИОТЕХНИЧЕСКИЙ |
Кафедра |
МИКРОПРОЦЕССОРНЫХ СИСТЕМ |
Отчет по лабораторной работе №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.