МИНОБРНАУКИ РОССИИ
Федеральное государственное автономное образовательное
учреждение высшего профессионального образования
«Южный федеральный университет»
Факультет |
РАДИОТЕХНИЧЕСКИЙ |
Кафедра |
МИКРОПРОЦЕССОРНЫХ СИСТЕМ |
Отчет по лабораторной работе №1
по дисциплине:
«Объектно-ориентированное программирование».
На тему: «Спектр реакции системы на гармоническое воздействие».
Выполнил: студент группы Р-102 |
В.Г.Горчаков |
|
|
Проверил:доцент каф. МПС |
М.И.Ледовской |
Таганрог 2013 г.
Цель лабораторной работы
Изучить принципы создания приложения «Спектр реакции системы
на гармоническое воздействие» для Windows в инструментальной среде Delphi 7
Интерфейс приложения
графический компонент
|
свойство |
событие |
обработчик |
Button1 |
Caption |
OnClick |
Button1Click |
CheckBox1 |
Caption |
OnClick |
CheckBox1Click |
GroupBox1 |
Caption |
|
|
Edit1 |
|
OnChange |
EditChange |
Label1 |
Caption |
|
|
RadioGroup1 |
Caption |
OnClick |
RadioGroup1Click |
UpDown1 |
|
Associate |
|
GroupBox3 |
Caption |
|
|
Edit2 |
|
OnChange |
EditChange |
Edit3 |
|
OnChange |
EditChange |
Edit4 |
|
OnChange |
EditChange |
Label2 |
Caption |
|
|
Label3 |
Caption |
|
|
Label4 |
Caption |
|
|
Label5 |
Caption |
|
|
Label6 |
Caption |
|
|
Label7 |
Caption |
|
|
UpDown2 |
|
Associate |
|
UpDown3 |
|
Associate |
|
UpDown4 |
|
Associate |
|
PaintBox1 |
|
OnPaint |
PaintBox1Paint |
Код программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Edit1: TEdit;
UpDown1: TUpDown;
GroupBox3: TGroupBox;
Label1: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
UpDown2: TUpDown;
UpDown3: TUpDown;
UpDown4: TUpDown;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
CheckBox1: TCheckBox;
Button1: TButton;
PaintBox1: TPaintBox;
RadioGroup1: TRadioGroup;
procedure PaintBox1Paint(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure EditChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
Ymax=100; // верхняя граница ПХ системы
Xmax=10; // верхняя граница воздействия
var
Form1: Tform1;
TypCharact: integer; // тип ПХ системы
p: integer; // параметр ПХ
X0,Xm: real; // смещение и амплитуда воздействия
f: integer; // частота воздействия
implementation
{$R *.dfm}
// передаточная характеристика системы
functionTransCharact(x: real): real;
var
y: real;
begin
caseTypCharactof
0: y:=p*x;
1: y:=0.1*p*Sqr(x);
2: y:=Ymax*(1-Exp(-0.1*p*x));
end;
TransCharact:=y;
end;
// воздействие
function Influence(t: real): real;
begin
Influence:=X0+Xm*Cos(2*Pi*f*t);
end;
// спектр реакции системы
procedureSpectrReact;
const
tmax=1; // верхняя граница времени
N=100; // количество интервалов дискретизации времени
var
l,b: integer; // кординаты левого нижнего угола области вывода
w,h: integer; // ширина и высота области вывода
x: real; // аргумент ПХ
t: real; // время
fmax: integer; // верхнее значение частоты воздействия
A: array[1..5] of real; // амплитуды спектра
Amax: real; // верхнее значение амплитуды
dx,dt,df: real; // приращения
MasY: array[0..N] of real; // дискретные значения ПХ
cx0: integer; // X-координатa начала координат графиков
cy0: array[1..3] of integer; // Y-координаты начала координат графиков
mx,mt,mf,mr: real; // масштабы
cy: integer; // текущая Y-координата
z: real; // вспомогательные переменные
i,k: integer;
begin
// область вывода графиков
with Form1.PaintBox1 do
begin
Canvas.Pen.Color:=clBlack;
Canvas.Brush.Color:=clWhite;
Canvas.Rectangle(0,0,Width,Height);
l:=40; // X-координатa левоговерхнегоугла
b:=Height-20; // Y-координатa левого верхнего угла
h:=Height-50; // высота
w:=Width-80; // ширина
end;
if f<>0 thenfmax:=5*f elsefmax:=1;
// масштабы
mr:=(h-140)/4; // относительных единиц по Y-координате
mx:=(w-20)/Xmax; // аргумента ПХ по X-координате
mt:=(w-20)/tmax; // времени по X-координате
mf:=(w-20)/fmax; // частоты по X-координате
with Form1.PaintBox1.Canvas do
begin
// разметка осей для графика ПХ
// вертикальная ось
cx0:=l;
cy:=b-h;
TextOut(cx0+w div 3,cy-20,'ПХсистемы');
TextOut(cx0+7,cy-15,'Y(X)');
for i:=0 to 4 do
begin
MoveTo(cx0,cy); LineTo(cx0+3,cy);
TextOut(cx0-25,cy-7,FloatToStr(Ymax-(Ymax/5)*i));
MoveTo(cx0,cy); LineTo(cx0,cy+Round(0.2*mr));
cy:=cy+Round(0.2*mr);
end;
TextOut(cx0-17,cy-7,'0');
// горизонтальная ось
cy0[1]:=cy;
MoveTo(cx0,cy0[1]); LineTo(cx0+Round(Xmax*mx)+1,cy0[1]);
dx:=Xmax/5;
for i:=1 to 5 do
begin
MoveTo(cx0+Round(i*dx*mx),cy0[1]-3);
LineTo(cx0+Round(i*dx*mx),cy0[1]);
TextOut(cx0+Round(i*dx*mx)-3,cy0[1]+2,FloatToStr(i*dX));
end;
TextOut(w+40,cy0[1]+2,'X [ед]');
// разметка осей для графика воздействия
// вертикальная ось
cy:=cy+50;
TextOut(cx0+w div 3,cy-20,'Воздействие');
TextOut(cx0+7,cy-15,'X(t)');
for i:=0 to 4 do
begin
MoveTo(cx0,cy); LineTo(cx0+3,cy);
TextOut(cx0-20,cy-7,FloatToStr(Xmax-(Xmax/5)*i));
MoveTo(cx0,cy); LineTo(cx0,cy+Round(0.2*mr));
cy:=cy+Round(0.2*mr);
end;
TextOut(cx0-17,cy-7,'0');
// горизонтальная ось
cy0[2]:=cy;
MoveTo(cx0,cy0[2]); LineTo(cx0+Round(tmax*mt)+1,cy0[2]);
dt:=tmax/5;
for i:=1 to 5 do
begin
z:=i*dt;
MoveTo(cx0+Round(z*mt),cy0[2]-3);
LineTo(cx0+Round(z*mt),cy0[2]);
TextOut(cx0+Round(z*mt)-5,cy0[2]+2,FloatToStr(z));
end;
TextOut(w+40,cy0[2]+2,'t [c]');
// разметка осей для графика спектра
// вертикальная ось
cy:=cy+50;
TextOut(cx0+w div 4,cy-15,'Спектрреакции');
TextOut(cx0+7,cy-7,'А');
cy:=cy+10;
Amax:=Ymax div 2;
for i:=0 to 10 do
begin
MoveTo(cx0,cy); LineTo(cx0+3,cy);
TextOut(cx0-20,cy-7,FloatToStr(Amax-(Amax/5)*i));
if i<>10 then
begin
MoveTo(cx0,cy);
LineTo(cx0,cy+Round(0.2*mr));
cy:=cy+Round(0.2*mr);
end;
if i=4 then cy0[3]:=cy;
end;
// горизонтальнаяось
MoveTo(cx0,cy0[3]); LineTo(cx0+Round(fmax*mf)+1,cy0[3]);
df:=fmax/5;
for i:=1 to 5 do
begin
z:=i*df;
MoveTo(cx0+Round(z*mf),cy0[3]-3);
LineTo(cx0+Round(z*mf),cy0[3]);
TextOut(cx0+Round(z*mf)-7,cy0[3]+5,FloatToStr(i)+'f');
end;
TextOut(w+40,cy0[3]+5,'[Гц]');
// построение графика ПХ
Pen.Color:=clRed;
x:=0;
dx:=Xmax/N;
MoveTo(cx0,cy0[1]-Round((TransCharact(0)/Ymax)*mr));
for i:=1 to N do
begin
z:=i*dx;
LineTo(cx0+Round(z*mx),cy0[1]-Round((TransCharact(z)/Ymax)*mr));
MoveTo(cx0+Round(z*mx),cy0[1]-Round((TransCharact(z)/Ymax)*mr));
end;
// построение графика воздействия
t:=0;
dt:=tmax/N;
MasY[0]:=TransCharact(Influence(0));
MoveTo(cx0,cy0[2]-Round((Influence(0)/Xmax)*mr));
for i:=1 to N do
begin
z:=i*dt;
MasY[i]:=TransCharact(Influence(z));
LineTo(cx0+Round(z*mt),cy0[2]-Round((Influence(z)/Xmax)*mr));
MoveTo(cx0+Round(z*mt),cy0[2]-Round((Influence(z)/Xmax)*mr));
end;
// построение графика спектра
if f<>0 then
begin
for k:=1 to 5 do
begin
A[k]:=0;
z:=Pi*f*k*dt;
for i:=1 to N do
A[k]:=A[k]+(MasY[i]-MasY[i-1])*Sin(z*(2*i-1));
z:=Sin(z)/Sqr(z)/N;
A[k]:=-A[k]*z;
MoveTo(cx0+Round(k*f*mf),cy0[3]);
LineTo(cx0+Round(k*f*mf),cy0[3]-Round((A[k]/Amax)*mr));
MoveTo(cx0+Round(k*f*mf)-2,cy0[3]-Round((A[k]/Amax)*mr));
LineTo(cx0+Round(k*f*mf)+2,cy0[3]-Round((A[k]/Amax)*mr));
end;
// коэффициентгармоник
if Form1.CheckBox1.Checked and (A[1]<>0) then
TextOut(cx0,cy+10,'Коэффициентгармоник: '+
FloatToStrF(Sqrt(Sqr(A[2])+Sqr(A[3])+Sqr(A[4])+Sqr(A[5]))/A[1],
ffFixed,3,2));
end;
end;
end;
procedure Tform1.PaintBoxPaint(Sender: Tobject);
begin
SpectrReact;
end;
procedure Tform1.RadioGroupClick(Sender: Tobject);
begin
// изменениетипаПХ
TypCharact:=RadioGroup1.ItemIndex;
SpectrReact;
end;
procedure Tform1.EditChange(Sender: Tobject);
var
i: integer;
s: string;
begin
i:=(Sender as Tedit).Tag;
s:=(Sender as Tedit).Text;
// обновление параметров ПХ и воздействия
case i of
1: p:=StrToInt(s);
2: X0:=StrToFloat(s);
3: Xm:=StrToFloat(s);
4: f:=StrToInt(s);
end;
SpectrReact;
end;
procedure Tform1.ButtonClick(Sender: Tobject);
begin
Application.Terminate;
end;
procedure Tform1.CheckBoxClick(Sender: Tobject);
begin
SpectrReact;
end;
end.
Вывод: изучены принципы создания приложения «Спектр реакции системы на гармоническое воздействие» для Windows в инструментальной среде Delphi 7. Изучены основные свойства объектов среды программирования Delphi 7.