Требуется расчитать и оптимизировать электрическую цепь, состоящую из 6 ветвей. Для проверки хода расчета вывожу Хс. считаю процедурой:
Код:
Код:
for i:=1 to 6 do
if C[i]=0 then
XC[i]:=0
else
XC[i]:=(1/(pi*100*C[i]));
где С-емкость катушки, i-порядковый номер ветви, содержащей катушку. Хс упорно равно 0 при любом значении С. наверняка обнуляет при вводе данных, а вот где, как и почему найти не могу.Толи класс создаю не правильно...
исходный код :
Код:
unit ClTypes;
interface
uses SysUtils;
type
TGenRes=array[1..6]of real;//общее сопротивление участкка
TXL=array[1..6] of real;
TXC=array[1..6] of real;
TZRes=array [1..6] of real;
TAngle=array [1..6] of real;
TBranch=class
Cur:array [1..6] of real;//ток
Voltage: array [1..6] of real;
PB:real;//баланс мощности
procedure XLCalc(i,n:byte);//считаем xc
procedure XCCalc(i,n:byte);
procedure ZResCalc(i,n:byte);
procedure AngleCalc(i,n:byte);
procedure CalcCur(i,n:byte);
procedure Datainp;
procedure PowBal(i,n:byte);
public
Zres:TZRes;
Angle:Tangle;
Xl:TXl;
Xc:TXc;
L: array[1..6] of real;
C: array [1..6] of real;
R: array [1..6]of real;
end;
TOptArea=class(TBranch)
procedure CalcOptArea(i,n:byte;ResAr,Volt:real);
end;
var
a:byte;
k:byte;
Branch:TBranch;
t:real;
implementation
uses main,calc;
{ TBranch }
procedure TBranch.AngleCalc(i,n:byte);
begin
Branch:=TBranch.Create;
n:=6;
for i:=1 to n do
if R[i]=0 then
if((XL[i]-XC[i])>0) then Angle[i]:=pi/2
else
if((XL[i]-XC[i])>0) then Angle[i]:=-pi/2
else
Angle[i]:=arctan((xl[i]-xc[i])/r[i]);
end;
{procedure TBranch.CalcCur(i,n:byte);
begin
Gauss:=TGauss.Create;
Gauss.CalcEqvSyst(i,j,k,n);
Cur[6]:=EqvSyst.Ik[1];
Cur[2]:=EqvSyst.Ik[2];
Cur[3]:=EqvSyst.Ik[1]-EqvSyst.Ik[3];
Cur[4]:=EqvSyst.Ik[3]-EqvSyst.Ik[2];
Cur[5]:=EqvSyst.Ik[1]-EqvSyst.Ik[2];
Cur[1]:=EqvSyst.Ik[3];
end;}
procedure TBranch.Datainp;//Присваиваем значения С
begin
Branch.C[1]:=0;
Branch.C[2]:=StrToFloat(Form1.StringGrid1.Cells[3,1])*0.000001;
Branch.C[3]:=0;
Branch.C[4]:=0;
Branch.C[5]:=StrToFloat(Form1.StringGrid1.Cells[2,1])*0.000001;
Branch.C[6]:=StrToFloat(Form1.StringGrid1.Cells[1,1])*0.000001;
Branch.L[1]:=StrToFloat(Form1.StringGrid1.Cells[4,1])*0.001;
Branch.L[2]:=StrToFloat(Form1.StringGrid1.Cells[5,1])*0.001;
Branch.L[3]:=0;
Branch.L[4]:=0;
Branch.L[5]:=0;
Branch.L[6]:=0;
Branch.R[1]:=StrToFloat(Form1.StringGrid1.Cells[6,1]);
Branch.R[2]:=StrToFloat(Form1.StringGrid1.Cells[7,1]);
Branch.R[3]:=StrToFloat(Form1.StringGrid1.Cells[8,1]);
Branch.R[4]:=StrToFloat(Form1.StringGrid1.Cells[9,1]);
Branch.R[5]:=0;
Branch.R[6]:=0;
end;
procedure TBranch.PowBal(i,n:byte);
begin
Gauss:=TGauss.Create;
Gauss.Assignment(i,n);
Branch.Create;
Branch.CalcCur(i,n);
Gauss.CalcEqvSyst(i,j,k,n);
n:=6;
For i:=1 to n do
PB:=ZRes[i]*sqr(Cur[i]);
PB:=PB+ZRes[i+1]*sqr(Cur[i+1]);
end;
procedure TBranch.XCCalc(i,n:byte);//считаем С
begin
Branch.Datainp;
for i:=1 to 6 do
if C[i]=0 then
XC[i]:=0
else
XC[i]:=(1/(pi*100*C[i]));
end;
procedure TBranch.XLCalc(i,n:byte);
begin
n:=6;
for i:=1 to n do
XL[i]:=(pi*100*L[i]);
end;
procedure TBranch.ZResCalc(i,n:byte);
begin
Branch.Datainp;
Branch.XLCalc(i,n);
Branch.XCCalc(i,n);
for i:=1 to 6 do
ZRes[i]:=sqrt(sqr(R[i])+sqr(Xl[i]-Xc[i]));
end;
{ TOptArea }
procedure TOptArea.CalcOptArea(i,n:byte;ResAr,Volt: real);
var AngArc:real;
begin
ResAr:=sqrt(sqr(R[2])+sqr(Xl[2]));
AngArc:=arctan((xl[2]/r[k]));
Volt:=ResAr*Cur[2]*sin((100*pi*t)+AngArc);
end;
end.
Код:
на форме выводим код по кнопке:
procedure TForm1.Button1Click(Sender: TObject);//выводим Xc по кнопке
begin
Branch:=TBranch.Create;
Branch.Datainp;
Branch.XLCalc(i,n);
{Form1.Label10.Caption:=FloatToStr(Branch.PB); }
Form1.StringGrid2.Cells[1,1]:=FloatToStr(Branch.Xc[1]);
end;
end.
Снится уже ошибка(