클라이언트로 값을 보내면서 에러가 자꾸뜹니다. 에러 내용은 그림에 삽입 시켜 놓았습니다. 소스는 다음과 같고요..계산부분에서 계산한 Aa1,Aa2,Aa3..등을 클라이언트로 보내고 싶습니다. 그리고 클라이언트로부터 변수값을 받아서 계산부분에서 계산을 하고 계산한것을 다시 클라이언트로 보내고 이런 알고리즘입니다. 클라이언트로부터 변수를 받아서 계산하는건 되는데 계산된 값을 보내질 못하는군요... 급해서 그런데 고수님들 아시는분을 답변 부탁드립니다. 보내는 곳은 맨밑에 있습니다. 받는곳은 바로 위에 있고여 (클라이언트로 부터)...그리고 계산부분은 무한루프 입니다.
{*--------------수학계산 부분--------------*}
procedure TSimul.Simulmain;
var
I1,I2,I3,I4,I5: Double;
Rtm,Rtp,Buns: Double;
T,T1,T2,T3,T4,T5,Head: Double;
Pno,Vo,Dstad: Double;
Lp,N,Kk,I,Nn: Integer;
Fk,Q,R: DEARRAY5;
Label 40;
begin
Data;
Pno:=Pnom/60.0;
Vo:=0.514444*Vokt;
Head:=Headd*Dtor;
Psaic:=Psaicd*Dtor;
Psaiw:=Psaiwd*Dtor;
Vcm:=0.514444*Vckt;
Xr:=-0.5;
Xp:=-0.48;
P:=Dia*Pd;
Ddmax:=3.0;
Ddmax:=Dtor*Ddmax;
{*---------------------------------------------*}
I1:=2.0*Al_ld*Lbp*Dra/Loa/Loa;
I2:=2.0*At_ld*Lbp*Dra/B/B;
I3:=Loa/B;
I4:=Ss_loa;
I5:=C_loa;
{*---------------------------------------------*}
For I:= 1 to 19 do begin
Cx[I]:=Da0[I]+Da1[I]*I1+Da2[I]*I2+Da3[I]*I3+Da4[I]*I4+Da5[I]*I5+Da6[I]*Mm;
Cy[I]:=Db0[I]+Db1[I]*I1+Db2[I]*I2+Db3[I]*I3+Db4[I]*I4+Db5[I]*I5
+Db6[I]*Ass_al;
Cn[I]:=Dc0[I]+Dc1[I]*I1+Dc2[I]*I2+Dc3[I]*I3+Dc4[I]*I4+Dc5[I]*I5;
end;
{*----------------------Initial Condition-----------------------*}
For I:= 1 to 10 do begin
D[I]:=0.0;
end;
D[8]:=Pno;
D[10]:=Vo;
D[1]:=D[10]*Cos(D[9]);
D[2]:=-1.0*D[10]*Sin(D[9]);
D[4]:=Head;
T:=0.0;
Lp:=0;
N:=0;
{*----------초기값을 보내는 부분--------------*}
Out1:='시간';
Out2:='선속';
Out3:='앙각';
Out4:='PN(RPM)';
Out5:='회두각';
Out6:='X 좌표';
Out7:='Y 좌표';
Out8:='타각';
Memo1.Lines.Add(Format('%7s %7s %9s %10s %9s %9s %9s %8s'
,[out1,out2,out3,out4,out5,out6,out7,out8]));
Memo1.Lines.Add(Format('%7.2F %8.3F %8.3F %11.3F %11.3F %8.3F %12.3F %9.2F'
,[T,Vokt,D[9],Pnom,Headd,D[5],D[6],D[7]]));
{*---------------------------------------------*}
Rtm:=1.0-0.5*Sqrt(2.0);
Rtp:=1.0+0.5*Sqrt(2.0);
Buns:=1.0/6.0;
{*---------------------------------------------*}
For I:= 1 to 8 do begin
Q[I]:=0.0;
end;
{*---------------------------------------------*}
Pnstam:=Pnom;
Dstad:=0.0;
{*---------------------------------------------*}
40:
Application.ProcessMessages;
Order;
N:=N+1;
{**************************************************
--RUNGE-KUTTA-GILL--
**********************1ST STEP*********************}
T1:=T;
Simuldynamc;
Ddot:=Steer(Dsta,D[7],Te,Ddmax);
Pndot:=Propel(Pnsta,D[8],Tn);
Fk[1]:=Dt*Dd[1];
Fk[2]:=Dt*Dd[2];
Fk[3]:=Dt*Dd[3];
Fk[4]:=Dt*D[3];
Fk[5]:=Dt*(D[1]*Cos(D[4])-D[2]*Sin(D[4]));
Fk[6]:=Dt*(D[1]*Sin(D[4])+D[2]*Cos(D[4]));
Fk[7]:=Dt*Ddot;
Fk[8]:=Dt*Pndot;
For I:= 1 to 8 do begin
R[I]:=0.5*Fk[I]-Q[I];
D[I]:=D[I]+R[I];
Q[I]:=3.0*R[I]-0.5*Fk[I]+Q[I];
end;
{***********************2ND STEP******************}
T2:=T+0.5*Dt;
Simuldynamc;
Ddot:=Steer(Dsta,D[7],Te,Ddmax);
Pndot:=Propel(Pnsta,D[8],Tn);
Fk[1]:=Dt*Dd[1];
Fk[2]:=Dt*Dd[2];
Fk[3]:=Dt*Dd[3];
Fk[4]:=Dt*D[3];
Fk[5]:=Dt*(D[1]*Cos(D[4])-D[2]*Sin(D[4]));
Fk[6]:=Dt*(D[1]*Sin(D[4])+D[2]*Cos(D[4]));
Fk[7]:=Dt*Ddot;
Fk[8]:=Dt*Pndot;
For I:= 1 to 8 do begin
R[I]:=Rtm*(Fk[I]-Q[I]);
D[I]:=D[I]+R[I];
Q[I]:=Q[I]+3.0*R[I]-Rtm*Fk[I];
End;
{*******************3RD STEP********************}
T3:=T+0.5*Dt;
Simuldynamc;
Ddot:=Steer(Dsta,D[7],Te,Ddmax);
Pndot:=Propel(Pnsta,D[8],Tn);
Fk[1]:=Dt*Dd[1];
Fk[2]:=Dt*Dd[2];
Fk[3]:=Dt*Dd[3];
Fk[4]:=Dt*D[3];
Fk[5]:=Dt*(D[1]*Cos(D[4])-D[2]*Sin(D[4]));
Fk[6]:=Dt*(D[1]*Sin(D[4])+D[2]*Cos(D[4]));
Fk[7]:=Dt*Ddot;
Fk[8]:=Dt*Pndot;
For I:= 1 to 8 do begin
R[I]:=Rtp*(Fk[I]-Q[I]);
D[I]:=D[I]+R[I];
Q[I]:=Q[I]+3.0*R[I]-Rtp*Fk[I];
end;
{*********************4TH STEP********************}
T4:=T+Dt;
Simuldynamc;
Ddot:=Steer(Dsta,D[7],Te,Ddmax);
Pndot:=Propel(Pnsta,D[8],Tn);
Fk[1]:=Dt*Dd[1];
Fk[2]:=Dt*Dd[2];
Fk[3]:=Dt*Dd[3];
Fk[4]:=Dt*D[3];
Fk[5]:=Dt*(D[1]*Cos(D[4])-D[2]*Sin(D[4]));
Fk[6]:=Dt*(D[1]*Sin(D[4])+D[2]*Cos(D[4]));
Fk[7]:=Dt*Ddot;
Fk[8]:=Dt*Pndot;
For I:= 1 to 8 do begin
R[I]:=Buns*(Fk[I]-2.0*Q[I]);
D[I]:=D[I]+R[I];
Q[I]:=Q[I]+3.0*R[I]-0.5*Fk[I];
end;
{*******************WRITING ROUTINE********************}
Kk:=TRUNC(Dtt/Dt+0.1);
Nn:=N div Kk;
If (N-Nn*Kk)<>0 then begin
T:=T+Dt;
Goto 40;
end else If (N-Nn*Kk)=0 then begin
Aa1:=Rtod*D[9];
Aa2:=60.0*D[8];
Aa3:=Rtod*D[4];
Aa4:=Rtod*D[7];
Aa5:=D[5]/Lbp;
Aa6:=D[6]/Lbp;
Aa7:=1.943844*D[10];
T5:=T4;
{**************************************************}
Lp:=Lp+1;
If Lp=10 then begin
Memo1.Lines.Add(' ');
Lp:=0;
end;
Memo1.Lines.Add(Format('%7.2F %8.3F %8.3F %11.3F %11.3F %8.3F %12.3F %9.2F'
,[T5,Aa7,Aa1,Aa2,Aa3,Aa5,Aa6,Aa4]));
T:=T+Dt;
SLEEP(1000);
Goto 40;
end;
end;
procedure TSimul.Button1Click(Sender: TObject);
begin
Simulmain;
end;
procedure TSimul.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Restr:=Socket.ReceiveText;
If Pos('R',Restr)<>0 then begin
Delete(Restr,1,1);
Pnstam:=StrToFloat(Restr);
end;
If Pos('H',Restr)<>0 then begin
Delete(Restr,1,1);
Dstad:=StrToFloat(Restr);
end;
end;
procedure TSimul.ServerSocket1ClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
var Vel,Heading,Rpm,Ran: String;
begin
Application.Processmessages;
Vel:=FloatToStr(Aa7);
Heading:=FloatToSTr(Aa1);
Rpm:=FloatToStr(Aa2);
Ran:=FloatToStr(Aa4);
Sleep(1000);
ServerSocket1.Socket.SendText('V'+Vel);
Sleep(1000);
ServerSocket1.Socket.SendText('H'+Heading);
Sleep(1000);
ServerSocket1.Socket.SendText('R'+Rpm);
Sleep(1000);
ServerSocket1.Socket.SendText('A'+Ran);
end;
end.