[쉽고 간단한 안내서] TwinCAT에서 TCP IP 통신을 어떻게 사용하나요?
TwinCAT TCP/IP는 TwinCAT PLC 내에서
하나 이상의 TCP/IP 서버 또는 TCP/IP 클라이언트를
구현 및 실현을 가능하게 합니다. 이번 안내서에서는 TwinCAT으로
TCP/IP 통신을 하는 법에 대해 다루겠습니다. |
TwinCAT TCP/IP는 TwinCAT
PLC에서 하나 이상의 TCP/IP 서버/클라이언트를
구현할 수 있도록 합니다. 이로 인해 독자적인 TCP/IP 기반
프로토콜(Application layer)을 PLC 프로그램에서
직접 개발할 수 있습니다.
Transmission Control Protocol (TCP)
정의
TCP는 전화 연결과 비교할 수 있는 연결
지향 전송 프로토콜 (OSI 4계층)으로, 참가자가 데이터를 전송하기 전에 먼저 연결을 설정해야 합니다. TCP는
신뢰할 수 있고 질서 있는 바이트 스트림 전송을 제공하므로 “스트림
지향 전송 프로토콜”로 간주됩니다. TCP 프로토콜은 클라이언트 또는 서버에서 보낸 데이터에 대해 수신 확인이 필요한 네트워크 응용 프로그램에
사용됩니다.
TCP 프로토콜은 더 많은 양의 데이터를
전송하고 정의된 시작과 끝없이 데이터 스트림을 전송하는데 매우 적합합니다. 전송기의 경우, 전송되는 데이터 바이트 수를 알고 있기 때문에 문제가 되지 않습니다. 그러나
수신기는 메시지가 데이터 스트림 내에서 끝나는 위치와 다음 데이터 스트림이 시작되는 위치를 감지할 수 없습니다.
수신기 측의 읽기 호출은 수신 버퍼에 현재 있는 데이터만 제공합니다. (다른 장치가 보내는
데이터 블록보다 작거나 많을 수 있습니다). 그러므로 송신기는 수신기가 해석할 수 있는 메시지 구조를
정해야 합니다. 간단한 경우 메시지 구조는 데이터와 최종 제어 문자 (예: 캐리지 리턴)로 구성할 수 있습니다. 최종 제어 문자는 메시지의 끝을 나타냅니다.
가변 길이를 가진 이진 데이터를 전송하기
위해 종종 사용되는 가능한 메시지 구조는 다음과 같습니다. 첫 번째 데이터 바이트에는 특수 제어 문자(시작 구분 기호)와 후속 데이터의 데이터 길이가 포함됩니다. 이를 통해 수신기는 메시지의 시작과 끝을 감지할 수 있습니다.
TCP/IP 클라이언트를 PLC에서 구현하려면 최소 4개의 Function Block (FB_SocketConnect,
FB_SocketClose, FB_SocketSend, FB_SocketReceive)이 필요합니다.
TCP/IP 서버를 PLC에서 구현하려면 최소 5개의 Function Block (FB_SocketListen, FB_SocketAccept,
FB_SocketClose, FB_SocketSend and/or FB_SocketReceive, FB_SocketCloseAll)이
필요합니다.
FB_SocketConnect
클라이언트가
원격서버에 새로운 TCP/IP 연결하는 Function Block입니다. 성공적으로 실행이 되면 새로운 소켓이 열리고 hSoket으로 관련된 Connection handle 정보를 줍니다. Connection
handle은 FB_SocketSend와 FB_SocketRecevie를
사용할 때 필요합니다.
FB_SocketClose
TCP/IP or UDP 소켓을 닫는 Function입니다.
FB_SocketSend
TwinCAT TCP/IP 연결을 통해 데이터를 원격 서버나 원격 클라이언트로 보내는 Function입니다. FB_SocketAccept로 원격 클라이언트 연결이 먼저 이루어지거나 FB_SocketConnect로
원격 서버와 연결이 이루어져야합니다.
FB_SocketReceive
원격 클라이언트나 원격 서버에서 TwinCAT TCP/IP 연결을 통해 데이터를 받을 수 있습니다. FB_SocketAccept로 원격 클라이언트 연결이 먼저 이루어지거나 FB_SocketConnect로 원격 서버와 연결이 이루어져야합니다. 데이터는 분할된 형태 (여러 개의 패킷)으로 TCP/IP 네트워크에서 보내거나 받을 수 있습니다. 그러므로 한번의 FB_SocketReceive 콜로 모든 데이터를 받을 수 없으므로 주기적으로 콜이 돼야합니다.
FB_SocketListen
TwinCAT TCP/IP 연결에서 새로운 Listener 소켓이 열리게 됩니다. Listener 소켓을 통해 서버가 클라이언트에서 오는 TwinCAT TCP/IP 연결 요청을 들을 수 있습니다. 성공적으로 실행이 되면 hListener에게 관련된 Connection handle 값을 줍니다. 이 값은 FB_SocketAccept에 필요 합니다. Listener 소켓이 더 이상 필요하지 않으면 FB_SocketClose를 통해 닫을 수 있습니다. 또한 Listener 소켓은 각 컴퓨터 마다 고유한 IP주소가 필요합니다.
FB_SocketAccept
원격 클라이언트
연결 요청은 TwinCAT TCP/IP 연결 서버에서 Acknowledged가
되어야 한다. FB_SocketAccept는 원격 클라이언트 연결의 요청을 받아주고 소켓을 엽니다. 그리고 Connection handle을 Return 합니다. 이 값은 FB_SocketSend와
FB_SocketReceive Function Block에 필요합니다.
FB_SocketCloseAll
TwinCAT이 restarted or stopped 되면 TwinCAT TCP/IP 연결 서버도 멈춥니다. 열려있는 모든 소켓들은
자동으로 닫힙니다. PLC 프로그램은 “PLC Reset”, “Rebuild all”, new “Dwonload” 후에 리셋됩니다. 따라서
이미 열린 소켓(Connection handle)에 대한 정보는 PLC에서
더 이상 사용할 수 없습니다. 따라서 열려 있는 모든 연결을 제대로 닫을 수가 없습니다.
FB_SocketCloseAll은 PLC runtime에 열린 모든
Connection handles (TCP/IP and UDP 소켓)을 닫을 수 있어 PLC start에서 콜 되는 것이 좋습니다.
Requirement
TwinCAT 3 Function TF6310 TCP/IP 소프트웨어 설치
TF6310 or TF6311 라이선스
Sample
TCP/IP 통신 샘플은 링크에서 다운 받을 수 있습니다.
TCP – Sample01 – Tcpip_CLIENT 샘플을 확인해보겠습니다.
먼저 아래와
같이 Remote Server IP 주소와 Server의 Port number를 입력합니다. 본 안내서는 로컬주소 127.0.0.1, 포트는 5012로 설정하였습니다.
SerialPortMon을 통해 아래와 같이 데이터가 수신되는 것을 확인할 수 있습니다.
위 내용에 대해 심화 내용이 필요하신 경우, 해당 내용을 댓글로 적어 주시면 다음 연재 시 반영하도록 하겠습니다. 문의사항은 아래 연락처로 연락 부탁드립니다. 전화 :
02-2107-3242 (대표전화, 내선번호 1번: 영업, 내선번호 2번: 마케팅, 내선번호 3번: 기술) 홈페이지 : https://www.beckhoff.com/kr/ 제품문의 : Info-KR@beckhoff.com 기술문의 : support-kr@beckhoff.com |
참고자료
TE6310 | TwinCAT 3
TCP/IP [링크]
본 문서의 무단전재 및 재배포를 금지합니다
본 문서는 공식 매뉴얼이 아닌, 교육용 참고자료임을 명시합니다
댓글
댓글 쓰기