Q&A

  • 미쓰비시 plc 통신이 안됩니다.

안녕하세요?

 

델파이 초보가,,  미쓰비시 plc 통신도 초보입니다.. 왕이죠... ㅠㅠ

 

그런데,,, plc 측에서는 아주 간단히

 

메모리에 D900번지에 데이타를 라이트하고, 리드하면 된다고하는데,,,

 

tcp 통신을 하려고 합니다.

 

어떻게 데이타를 전송해야하는지...

 

procedure TForm1.Button5Click(Sender: TObject);
var
  Msg, resp, sndStr: string;
  aStream,rStream : TMemoryStream;
  aLen : integer;
  i : integer;
begin

// 바이너라값입니다.  50h 00h 01h 01h 이런식의 값인데 아래처럼 보내면 보내면 되는건가요??

 

  sndstr := '500001010000031000100001140001900A8010011001100';
  aStream := TMemoryStream.Create;
  aLen   := Length(sndStr);
  aStream.WriteBuffer(Pointer(sndStr )^, aLen);
  aStream.Position := 0;

  if TCPClient.Connected then begin
    try
      TCPClient.OpenWriteBuffer;
      TCPClient.WriteStream(aStream);
      TCPClient.CloseWriteBuffer;

// 전송후 데이타를 다시 리시브 하고 싶습니다.

 

      Button9.Click;
    except on E:exception do
      begin
        TCPClient.DisconnectSocket;
      end;
    end;
  end;

end;

 

procedure TForm1.Button9Click(Sender: TObject);
var

  Msg, resp, SourceString: string;
  AStream : TMemoryStream;
  aLen : integer;
  i,TotLen : integer;
begin

  AStream := TMemoryStream.Create;
  if TCPClient.Connected then begin
    try
      tcpclient.ReadStream(AStream,-1,True);
      aStream.Position := 0;
      SourceString := '';// 변수를 비우고
      SetLength(SourceString, AStream.Size);// 메모리 스트림에 저장된 크기 만큼 크기를 재할당

      AStream.ReadBuffer(Pointer(SourceString)^, AStream.Size);
      Memo1.Lines.Add(SourceString);

    except on E:exception do
      begin
        TCPClient.DisconnectSocket;
      end;
    end;
  end;

end;

 

 

1  COMMENTS
  • Profile
    화담 2013.09.24 02:19

    좀 늦은 내용이지만,

    참고용으로 달아봅니다.


    저는 PLC 통신을 직접 해본적은 없고,

    OPC 프로토콜을 사용해서 Seimens 모션컨트롤러를 제어했었습니다.

    그때 듣기로는 PLC도 똑같은 방법이라고 하더군여...^^;;;


    성공하셨다면 모르겠지만,

    TCP 통신의 포멧을 직접 맞추시기 만만치 않아보이는데,

    직접 구현하시기 보다 제조사에서 제공되는 라이브러리를 이용하시는 것을 추천합니다.


    제가 썼던 OPC 프로토콜을 지멘스 뿐만 아니라 다른 산업장비도 통용되는 것으로 알고 있습니다.

    확인해보시기 바랍니다.


    (^^)(__)