unit myclasses; {$mode objfpc}{$H+}{$M+} interface uses Classes, SysUtils, Unit1, Graphics, TAGraph, TASeries, TALegend; type TController = class; TController2 = class; TStorage = class; TStorage2 = class; TBorder = class(TForm1) procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private FCon: TController; FCon2: TController2; procedure PlotResult; property Con: Tcontroller read FCon write FCon; property Con2: Tcontroller read FCon2 write FCon2; public procedure ConnectController(var aController: TController); procedure ConnectController2(var aController2: TController2); end; TController = class private FBor: TBorder; FStor: TStorage; procedure CalcParam( var cp1, cp2, cp3, cp4, cp5, mup, ip, nup, Tnup:real); property Bor: TBorder read FBor write FBor; property Stor: TStorage read FStor write FStor; public procedure ConnectBorder(var aBorder: TBorder); procedure ConnectStorage(var aStorage: TStorage); end; TController2 = class private FBor: TBorder; FStor2: TStorage2; procedure Table(var cp1,cp2,cp3,cp4,cp5,mup,ip,nup :real); property Bor: TBorder read FBor write FBor; property Stor2: TStorage read FStor2 write FStor2; public procedure ConnectBorder(var aBorder: TBorder); procedure ConnectStorage2(var aStorage2: TStorage2); end; TStorage = class private FCon: TController; procedure SaveData(var css1,css2,css3,css4,css5,muvss,ivss,nuvss,Tnuss :real); property Con: Tcontroller read FCon write FCon; public procedure ConnectController(var aController: TController); end; TStorage2 = class private teta: array [1 .. 10000] of real; FCon2: TController2; property Con2: Tcontroller read FCon2 write FCon2; procedure SaveMassiv; public procedure ConnectController2(var aController2: TController2); end; implementation procedure TBorder.ConnectController(var aController: TController); //Подключение контроллера к бордеру begin Self.FCon := aController; end; // procedure TBorder.ConnectController2(var aController2: TController2); //Подключение контроллера2 к бордеру begin Self.FCon2 := aController2; end; // procedure TController.ConnectBorder(var aBorder: TBorder); //Подключение бордера к контроллеру begin Self.FBor := aBorder; end; // procedure TController2.ConnectBorder(var aBorder: TBorder); //Подключение бордера к контроллеру2 begin Self.FBor := aBorder; end; // procedure TController.ConnectStorage(var aStorage: TStorage); //Подключение сторэджа к контроллеру begin Self.FStor := aStorage; end; // procedure TStorage.ConnectController(var aController: TController); //Подключение контроллера к сторэдж begin Self.FCon := aController; end; procedure TController2.ConnectStorage2(var aStorage2: TStorage2); //Подключение сторэджа2 к контроллеру2 begin Self.FStor2 := aStorage2; end; // procedure TStorage2.ConnectController2(var aController2: TController2); //Подключение контроллера2 к сторэдж2 begin Self.FCon2 := aController2 ; end; // procedure TController.CalcParam( var cp1, cp2, cp3, cp4, cp5, mup, ip, nup, Tnup : real); var OmegaA, TA, Tv, Kcc, ash, bsh, Kcsh, TAsh: real; begin OmegaA := sqrt(cp1 * cp4 + cp2); TA := 1 / OmegaA; Tv := 1 / cp4; Kcc := cp3 * cp4 / (cp1 * cp4 + cp2); ash := 2 * (cp1 + cp5 - cp4) / cp3; bsh := ((cp1 + cp4 + cp5) * (cp1 + cp4 + cp5) - 4 * (cp1 * cp4 + cp2)) / (cp3 * cp3); mup := abs(-ash / 2 + sqrt(ash * ash / 4 - bsh)); Kcsh := Kcc / (1 + mup * Kcc); TAsh := TA / sqrt(1 + mup * Kcc); // Расчет передаточных чисел АП ip := 1 / (Kcsh * Tv); nup := 0.09 / (Kcsh * Tv * Tv); Tnup := ip / nup; end; // procedure TController2.Table(var cp1,cp2,cp3,cp4,cp5,mup,ip,nup :real); var i: integer; t1, t2, n, h: real; al, alpr, wz, wzpr, x1, x1pr, x2, x2pr: real; begin t2 := 10; t1 := 0; n := 1000; //кол-во шагов h := (t2 - t1) / n; //шаг по времени al := pi / 180; Fstor2.teta[1] := pi / 180; wz := 0; //угловая скорость по крену x1 := 0; x2 := -1; for i := 2 to 10000 do //интегрирование численным методом и получение begin //значений графика переходного процесса wzpr := wz; alpr := al; x1pr := x1; x2pr := x2; wz := wzpr + h * (-wzpr * (Cp1 + cp5 + cp3 * mup) - alpr * (cp2 - Cp4 * Cp5) - Cp3 * nup * x1pr - Cp3 * ip * x2pr); x1 := x1pr + h * x2pr; al := alpr + h * (wzpr - alpr * Cp4); x2 := x2pr + h * wzpr; Fstor2.teta[i] := x2 + 1; end; end; // procedure TBorder.PlotResult; var j: integer; begin Chart1LineSeries1.Clear; for j := 1 to 10000 do Chart1LineSeries1.AddXY(0.01 * (j - 1), FCon2.Fstor2.teta[j], '', clRed); end; procedure TBorder.Button1Click(Sender: TObject); var cc1, cc2, cc3, cc4, cc5, muv, iv, nuv, Tnu: real; begin cc1 := StrToFloat(Edit1.Text); cc2 := StrToFloat(Edit2.Text); cc3 := StrToFloat(Edit3.Text); cc4 := StrToFloat(Edit4.Text); cc5 := StrToFloat(Edit5.Text); muv:=0; iv:=0; nuv:=0; Tnu:=0; FCon.CalcParam(cc1,cc2,cc3,cc4,cc5, muv, iv, nuv, Tnu); FCon2.Table(cc1,cc2,cc3,cc4,cc5,muv,iv,nuv); PlotResult; Edit6.Text := FloatToStr(muv); Edit7.Text := FloatToStr(iv); Edit8.Text := FloatToStr(nuv); Edit9.Text := FloatToStr(Tnu); end; procedure TStorage.SaveData(var css1,css2,css3,css4,css5,muvss,ivss,nuvss,Tnuss :real); var File1: TextFile; str: string; begin AssignFile(File1, 'C:\123.txt'); ReWrite(File1); str := 'Коэффициенты линейной модели ЛА:'; Writeln(File1, str); str := 'c1 = ' + FloatToStr(css1); Writeln(File1, str); str := 'c2 = ' + FloatToStr(css2); Writeln(File1, str); str := 'c3 = ' + FloatToStr(css3); Writeln(File1, str); str := 'c4 = ' + FloatToStr(css4); Writeln(File1, str); str := 'c5 = ' + FloatToStr(css5); Writeln(File1, str); str := 'Передаточные числа АП:'; Writeln(File1, str); str := 'muv = ' + FloatToStr(muvss); Writeln(File1, str); str := 'iv = ' + FloatToStr(ivss); Writeln(File1, str); str := 'nuv = ' + FloatToStr(nuvss); Writeln(File1, str); str := 'Tnu = ' + FloatToStr(Tnuss); Writeln(File1, str); Close(File1); end; procedure TStorage2.SaveMassiv; var File2: TextFile; str: string; i: integer; begin AssignFile(File2, 'C:\456.txt'); ReWrite(File2); str := 'Точки графика:'; Writeln(File2, str); for i := 1 to 10000 do begin str := FloatToStr(i); Write(File2,str); Write(File2,' '); str := FloatToStr(teta[i]); Writeln(File2,str); end; Close(File2); end; procedure TBorder.Button2Click(Sender: TObject); var cs1,cs2,cs3,cs4,cs5,muvs,nuvs,ivs,Tnus : real; begin cs1:=StrToFloat(Edit1.Text); cs2:=StrToFloat(Edit2.Text); cs3:=StrToFloat(Edit3.Text); cs4:=StrToFloat(Edit4.Text); cs5:=StrToFloat(Edit5.Text); muvs:=StrToFloat(Edit6.Text); ivs:=StrToFloat(Edit7.Text); nuvs:=StrToFloat(Edit8.Text); Tnus:=StrToFloat(Edit9.Text); Fcon.FStor.SaveData(cs1,cs2,cs3,cs4,cs5,muvs,ivs,nuvs,Tnus); Fcon2.Fstor2.SaveMassiv; end; procedure TBorder.Button4Click(Sender: TObject); begin Close; end; procedure TBorder.ComboBox1Change(Sender: TObject); var i:integer; begin i:=Combobox1.itemindex; case i of 0: begin Edit1.Text:=FloattoStr(0.762); Edit2.Text:=FloattoStr(15.45); Edit3.Text:=FloattoStr(2.83); Edit4.Text:=FloattoStr(0.841); Edit5.Text:=FloattoStr(0.309); end; 1: begin Edit1.Text:=FloattoStr(0.715); Edit2.Text:=FloattoStr(14.51); Edit3.Text:=FloattoStr(2.49); Edit4.Text:=FloattoStr(1.32); Edit5.Text:=FloattoStr(0.290); end; 2: begin Edit1.Text:=FloattoStr(0.655); Edit2.Text:=FloattoStr(13.75); Edit3.Text:=FloattoStr(3.73); Edit4.Text:=FloattoStr(0.872); Edit5.Text:=FloattoStr(0.275); end; 3: begin Edit1.Text:=FloattoStr(0.879); Edit2.Text:=FloattoStr(31.55); Edit3.Text:=FloattoStr(6.26); Edit4.Text:=FloattoStr(1.41); Edit5.Text:=FloattoStr(0.356); end; 4: begin Edit1.Text:=FloattoStr(0.502); Edit2.Text:=FloattoStr(10.05); Edit3.Text:=FloattoStr(3.31); Edit4.Text:=FloattoStr(0.812); Edit5.Text:=FloattoStr(0.201); end; 5: begin Edit1.Text:=FloattoStr(0.549); Edit2.Text:=FloattoStr(12.25); Edit3.Text:=FloattoStr(3.86); Edit4.Text:=FloattoStr(0.860); Edit5.Text:=FloattoStr(0.220); end; 6: begin Edit1.Text:=FloattoStr(0.502); Edit2.Text:=FloattoStr(2.645); Edit3.Text:=FloattoStr(1.22); Edit4.Text:=FloattoStr(0.801); Edit5.Text:=FloattoStr(0.192); end; 7: begin Edit1.Text:=FloattoStr(0.393); Edit2.Text:=FloattoStr(2.278); Edit3.Text:=FloattoStr(0.748); Edit4.Text:=FloattoStr(1.05); Edit5.Text:=FloattoStr(0.150); end; end; end; end.