Q&A

  • 서버에서 무한루프로 도는 곳에 변수를 쓸려고하는데 도대체 되질 않네여..
제가 클라이언트에서 서버로 데이타를 보내면 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값으로 쓰는데 받은 데이타가 무한루프 안으로 들어가질 않네요..해결책좀 부탁드립니다.



1  COMMENTS
  • Profile
    양병규 2000.06.28 10:26
    무한루프의 첫번째라인에



    Application.ProcessMessages; 를 넣어보세요



    그럼

    평안하시길~