본문 바로가기
PLC 프로그래밍/MELSEC PLC

Ethernet 통신 하기[2]

by lemy 2019. 2. 20.
반응형

광고도 한번씩 눌러주세요~~꾸벅 !!

 

 

Ethernet 통신 하기[2]

 

 

죄송해서 출처를 계속 찾아보니 melsec PLC 동호회(http://cafe.daum.net/melsec)의 회색늑대 (grizlupo)님의 초보 통신 이야기 연재글 이었군요. 감사드립니다.

초보 통신 이야기 연재글은 Ethernet 뿐만 아니라 시리얼 통신등의 주제도 다루고 있습니다.  

회색늑대 (grizlupo)님의 초보 통신 이야기중 Ethernet 통신에 관련하여 전반적으로 이해 할 수 있는 좋은 글입니다. 총 3회 분량의 글 입니다.

 

5. 컨넥션(Connection)

이더넷 모듈로 실질적인 통신을 하기 위해서는 컨넥션이라는 것이 있어야 합니다. Q시리즈에서는 최대 16개까지의 컨넥션을 만들 수 있습니다.(Parameter->Network Parameter -> Ethernet/ CC IE/ MELSECNET -> Ethernet (Open Setting)

이 컨넥션이라는 것은 TCP/IP를 실질적으로 다루기 위해서 이더넷 모듈이 제공하는 것입니다. PC에서 소켓 이라고 표현되는 것과 거의 같은 것입니다.

 

하나의 컨넥션은 통신을 할 두 대상 사이를 이어주는 말 그대로 하나의 연결입니다. 물리적으로 두 대상을 연결하는 것은 통신선이겠지만, 프로그램을 하는 입장에서 두 대상을 연결하는 것은 컨넥션입니다. 컨넥션은 논리적으로 두 대상을 연결하는 그 무엇입니다. 그렇기 때문에 이더넷 모듈을 사용해서 통신을 하기 위해서는 두 대상을 연결하는 과정을 가장 먼저 밟아야 합니다.

 

6. 컨넥션 열기(Port Open)

컨넥션을 좀 더 좁게 보면, 두 대상 사이의 연결을 이루어내기 위해 각각이 가지는 연결고리와 같은 것입니다. 실제로 두 대상의 연결은 각각의 컨넥션이 연결되는 것입니다. 

 

이더넷 모듈은 컨넥션을 열기 위해 OPEN이라는 전용 명령을 제공합니다. 다른 전용 명령과 같이 이런 저런 여러가지 값들을 필요로 합니다. 

하지만 Q 시리즈에서는 이런 값들을 파라메터 형태로 미리 지정해 둘 수 있도록 해주기 때문에 실제로 래더에서는 OPEN 명령 한 줄만을 사용하는 경우가 대부분입니다.

 

이더넷 파라메터의 Open setting을 열면 가장 먼저 선택하도록 되어 있는 것이 Protocol입니다. TCP와 UDP 둘 중의 하나를 선택하도록 되어 있습니다.

 

7. TCP 컨넥션 (Transmission Control Protocol, TCP)

TCP를 이용한 통신이라는 것은 전화를 하는 것과 같은 것입니다. IP를 전화번호라고 하면 IP를 누르고 연결음이 들리고, 상대방이 전화를 받으면 통화가 가능해 집니다.

 

TCP 컨넥션은 TCP의 특성을 가지는 컨넥션입니다. 그래서 전화를 거는 사람과 이를 받는 사람처럼 연결을 기다리는 컨넥션과 연결을 하는 컨넥션의 차이가 있습니다. 

 

따라서 컨넥션에서 TCP를 프로토콜로 선택하는 경우 Open System이라는 것을 추가로 선택해 주어야 합니다. Active, Unpassive, Fullpassive, MELSOFT connection의 4가지 중에서 하나를 선택할 수 있습니다. 여기서 MELSOFT connection이라는 것은 멜섹만의 특별한 것이므로 빼겠습니다.

 

나머지 셋 중에서 Unpassive와 Fullpassive가 연결을 기다리는 컨넥션이고, Active가 연결을 하는 컨넥션입니다. 

Unpassive와 Fullpassive의 차이점은 Fullpassive가 연결해 올 대상을 구체적으로 지정하는데 반해 Unpassive는 누가 연결을 해 오든지 상관하지 않는다는 것입니다. 말하자면 Unpassive는 누가 전화를 하더라도 다 받는데 비해, Fullpassive는 애인이 하는 전화만, 혹은 친구 아무개가 하는 전화만 받는 식으로 구체적으로 대상을 지정해 놓고 기다리는 것입니다. 이런 경우에는 다른 누군가가 전화를 하더라도 벨 조차 울리지 않습니다.

 

* 전송 제어 프로토콜(Transmission Control Protocol, TCP)

전송 제어 프로토콜(Transmission Control Protocol, TCP)은 인터넷 프로토콜 슈트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로도 널리 불린다. TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 바이트를 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. 

 

* 인터넷 프로토콜 슈트(Internet Protocol Suite, IP)

인터넷 프로토콜 슈트(Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음이다. 

 

인터넷 프로토콜 슈트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 슈트라고도 불린다.

 

8. UDP 컨넥션 (User Datagram Protocol, UDP)

UDP는 말하자면 편지 같은 것입니다. 주소로서의 IP를 적고, UDP라는 봉투에 담아 보내면 상대방에 전달이 된다고 보는 것입니다. 실제로 배달이 되었는지 아닌지는 상대방이 답장을 해 주어야만 알 수 있습니다. 그래서 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보 없이 누락시키기도 합니다.

 

UDP의 경우에는 굳이 컨넥션 열기라는 과정을 따로 밟을 필요가 없는데도 이더넷 모듈은 UDP에 대해서도 OPEN을 하도록 하고 있습니다. 그러므로 여기서의 OPEN은 통신 그 자체을 위한 것이라기 보다는 내부적으로 필요한 조치를 취하기 위한 것으로 보입니다.

 

* 사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)

사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)은 인터넷 프로토콜 스위트의 주요 프로토콜 가운데 하나이다.

1980년에 데이빗 리드가 설계하였고, 현재 IETF의 RFC 768로 표준으로 정의되어 있으며, TCP와 함께 데이터그램으로 알려진 단문 메시지를 교환하기 위해서 사용된다. 

UDP의 전송 방식은 너무 단순해서 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보 없이 누락시키기도 한다. UDP는 일반적으로 오류의 검사와 수정이 필요 없는 애플리케이션에서 수행할 것으로 가정한다.

 

9. 포트 (Port)

TCP 컨넥션이거나 UDP 컨넥션이거나 대상을 지정하는 부분에 IP와 함께 포트를 설정하도록 하고 있습니다. 그리고 자신의 포트도 지정하도록 하고 있습니다. 전화와 비교한다면 포트는 내선같은 것입니다.

 

포트는 하나의 워드로 0~65535까지의 값이 가능합니다. 컨넥션 간에 중복되지만 않는다면 이 중에서 어느 값을 사용해도 상관없습니다. 하지만 PC에서 1023이하는 관리자 권한이 있는 경우에만 사용할 수 있도록 되어 있으므로 되도록 이면 이 범위의 값은 사용하지 않는 것이 좋을 것 같습니다. 

 

10. 고정버퍼 (Fixed Buffer Communication)

OPEN 설정에는 고정버퍼와 관련해서 수신용인지 송신용인지를 설정하는 부분과 수순인지 무수순인지 미리 정의 된 프로토콜인지를 설정하는 항목이 더 있습니다.

이 고정버퍼에 의한 통신이라는 것은 시리얼 통신을 얘기할 때 무수순이라는 방식과 같은 범주의 것입니다. 즉, 통신 모듈 자신이 이해할 수 있는 MC 프로트콜이 아닌 다른 어떤 프로토콜을 사용하는 통신 방식이라는 것입니다. 따라서 이더넷 모듈은 이렇게 이용되는 프로토콜을 이해하지 못하기 때문에 자신이 수신하는 내용은 그대로 어떤 특정영역에 단순히 저장하는 소극적인 대응 밖에는 할 수 없습니다. 이 때 사용되는 저장 영역을 고정버퍼라고 하기 때문에 이런식의 설정이 생겨난 것입니다.

 

하나의 연결에 대해 수신용인지 송신용인지를 결정하도록 하는 이 설정 때문에 연결 자체에 송신과 수신의 제한이 있다고 오해를 하는 경우가 있습니다. 하지만 하나의 연결은 송/수신이 모두 가능합니다. 절대로 어느 하나로 제한되지 않습니다.

 

그런데 왜 둘 중의 하나를 선택하도록 하는것인가? 이유는 저도 모릅니다. 모듈을 개발한 사람들의 결정이니까요. 모듈을 처음 개발했던 이들이 하나의 연결에 송/수신을 위한 두 개의 버퍼를 생각하지 않고, 왜 하나의 버퍼만을 두었는지는 저로서는 알 수 없는 일입니다. 어쨌던 하나의 연결에 하나의 버퍼만을 두었기 때문에 송/수신을 함께 할 수는 없습니다. 시리얼 통신을 얘기하면서도 잠시 언급했지만 송신이라는 것은 스스로 통제가 가능한 것이지만 수신이라는 것은 언제 이루어질지 모르는 것입니다. 따라서 언제 이루어질 지 모르는 수신이 기록될 공간에 송신할 데이터를 저장한다는 것은 좋은 생각이 아니고, 잘못될 확률이 너무나도 높기 때문에 이더넷 모듈은 송/수신을 엄격하고 구분하고 있습니다. 하지만 이는 제가 보기에 결코 좋은 결정이 아니었습니다. 

 

Fixed Buffer Communication 선택

Procedure Exist : 수순

No Procedure : 무수순

Predefined Protocol : 정의 된 프로토콜

 

 

11. 페어링 오픈(Pairing open)

이를 만회하기 위해 Pairing open 이라는 설정을 할 수 있도록 되어 있습니다. 이는 두 개의 연결을 하나의 연결처럼 다룰 수 있도록 해 주는 기능입니다. Pairing open을 Enable로 하는 경우 두 개의 연결이 한 쌍이 되어 하나는 수신용, 다른 하나는 송신용으로 됩니다. 두 개의 연결을 마치 동일한 하나의 연결처럼 다룰 수 있도록 해 주는 것입니다. 하지만 애초에 송/수신 버퍼를 따로 두도록 설계했으면 그만인 것에 대해 이런 이상한 설정을 둔다는 것이 제가 보기에는 좀 우스꽝스럽습니다. 나름대로는 송신만 하는 혹은 수신만 하는 연결이 있을 수도 있을텐데 그런 경우에는 다른 한쪽의 버퍼 메모리가 너무 아깝지 않는가 뭐 그런 생각을 개발자들이 했을 것 같기도 하지만 꼭 이런 식이어야 하는 것이었을까하는 아쉬움이 남습니다.

 

고정버퍼가 아닌 경우는?

앞서의 고정버퍼에 대한 설정은 고정버퍼로 사용하는 경우에만 적용되는 것입니다. 시리얼 모듈에서는 자신이 MC 프로토콜을 사용하는지, MC 프로토콜 중에서도 어떤 형식인지, 무수순인지, 쌍방향인지 뭐 그런 것들을 따로이 설정하도록 하는 부분이 있었습니다. 하지만 이더넷 모듈에는 그런 부분이 따로 없고, 수신된 메세지 속에 그러한 내용이 포함되도록 되어 있습니다. 매뉴얼의 포맷에 대한 설명부분에 서브헤드라고 표현되는 부분입니다. 그러므로 메세지를 송신하는 측에서 자신이 사용하는 프로토콜이 무엇인지를 기록해서 보내면 그 내용을 확인해서 이더넷 모듈이 자동적으로 그에 맞도록 동작하는 것입니다. 이렇게 메세지에 포함된 서브헤더를 해석하도록 하려면 컨넥션은 수순이 있는 것으로 해야 합니다. 무수순인 경우에는 서버헤더까지도 하나의 데이터로 인식을 하기 때문에 아무런 반응 없이 그냥 고정버퍼에 넣어 버립니다.

 

간단한 예로 상대장비가 MC 프로토콜을 사용하고자 하는 경우, 연결은 상대 장비가 할 것이기 때문에 Unpassive 컨넥션 하나를 준비하면 됩니다. 이런 경우 수신용인지 송신용인지 그런 것은 아무런 의미도 없고, 수순이 있는 것으로만 설정을 하십시요. 송신용이라고 설정을 했다고 해서 앞서도 말한 것처럼 송신만 되는 것이 절대로 아닙니다. 송신용인지 수신용인지를 설정하는 것은 단순하게 컨넥션의 버퍼를 어떤 용도로 사용할 것인지에만 영향을 미치는 것입니다. 따라서 MC 프로토콜을 사용하는 것처럼 고정버퍼와 무관한 경우에는 아무런 의미도 없는 값입니다.

반응형

'PLC 프로그래밍 > MELSEC PLC ' 카테고리의 다른 글

전압 강하 계산 엑셀 TOOL  (2) 2019.02.28
Ethernet 통신 하기[3]  (0) 2019.02.20
Ethernet 통신 하기[1]  (0) 2019.02.16
MELSEC-Q PLC/ CC-LINK DATA BOOK  (1) 2019.01.20
MR-J3을 MR-J4로 변경 방법  (0) 2019.01.13

댓글