제가 클라이언트에서 서버로 데이타를 보내면 ReceiveText로 받아지는데 무한루프에서 이 받아진 변수를 사용하려고 하니 변수에 보내진 데이타가 들어가질 않아여 고수님들 급합니다. 도와주세요!!
소스내용은 다음과 같습니다.
ServerScoket1ClientRead의 이벤트로서 받은 스트링데이타를 무한루프안에 보내려고 하려면 어떻게 해야하는지 궁금합니다.
-----------------------------------------------------------------------------
Pnstam:=Pnom; --> 무한루프에서 사용하고자 하는 데이타 초기화.
Dstad:=0.0; --> 무한루프에서 사용하고자 하는 데이타 초기화.
{*---------------------------------------------*}
40:---> 무한루프--
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(10000);
Goto 40;
end;
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;
앞에서의 무한루프에서 보셨듯이 여기서 받은 데이타를 예약어로 처리해서 R로 시작하면 Pnstam의 데이타로 쓰고 H로 시작하면 Dstad값으로 쓰는데 받은 데이타가 무한루프 안으로 들어가질 않네요..해결책좀 부탁드립니다.
Application.ProcessMessages; 를 넣어보세요
그럼
평안하시길~