PLC & Industrial Automation Field Notes

Practical solutions for industrial automation


[실전] 미쓰비시 PLC 소켓통신 로직, 왜 송신·수신 포트를 분리할까?

미쓰비시 PLC 이더넷 소켓통신에서 Ping이 정상이고 연결 상태가 ESTABLISH로 표시되어도 데이터 누락이 발생할 수 있습니다. 이 경우 단순 네트워크 연결 문제가 아니라 송신과 수신의 처리 구조, 포트 구성, 버퍼 초기화, 완료 플래그 처리 방식까지 함께 확인해야 합니다. 특히 한 포트에 송신과 수신을 모두 집중시키면 통신량 증가 시 타이밍 충돌과 데이터 누락이 발생하기 쉽습니다.

연결 상태와 데이터 안정성은 별개다

이더넷 통신에서 Ping이 정상이라는 것은 네트워크 경로가 살아 있다는 의미입니다. ESTABLISH 상태는 TCP 연결이 성립되었다는 의미입니다. 그러나 이 두 가지가 곧 데이터 처리가 안정적이라는 뜻은 아닙니다.

현장에서 문제는 보통 연결 이후에 발생합니다. 접속은 되어 있지만 수신 버퍼를 제때 읽지 못하거나, 송신 처리 중 수신 데이터가 밀리거나, 이전 데이터가 초기화되지 않아 다음 처리에 영향을 주는 경우가 있습니다.

구분해서 보면 다음과 같습니다.

상태의미추가 확인 항목
Ping 정상IP 경로 확인포트, 프로토콜, 방화벽 별도 확인 필요
ESTABLISHTCP 연결 성립송신·수신 데이터 처리 확인 필요
SD/RD 반응데이터 송수신 시도버퍼 처리와 완료 플래그 확인 필요
값 누락처리 구조 문제 가능포트 분리, 수신 타이밍, 초기화 확인 필요

따라서 소켓통신에서는 연결 여부뿐 아니라 데이터가 언제 들어오고, 언제 읽히며, 처리 후 어떻게 정리되는지를 함께 봐야 합니다.

한 포트에 송신과 수신을 몰아넣을 때의 문제

하나의 IP와 하나의 포트로 송신과 수신을 모두 처리하면 설정은 단순해 보입니다. 그러나 통신량이 늘어나거나 상대 장비 응답 타이밍이 일정하지 않으면 문제가 발생할 수 있습니다.

대표적인 문제는 다음과 같습니다.

문제설명
타이밍 충돌PLC 송신 시점과 상대 장비 송신 시점이 겹칠 수 있음
수신 지연송신 처리 중 수신 데이터 처리가 늦어질 수 있음
원인 구분 어려움송신 실패인지 수신 대기 문제인지 분리하기 어려움
버퍼 관리 복잡송신 데이터와 수신 데이터를 같은 흐름에서 관리해야 함
재접속 처리 복잡연결 이상 발생 시 복구 조건이 복잡해짐

통신 장애가 발생했을 때 송신 문제와 수신 문제를 구분할 수 있어야 원인 추적이 빠릅니다. 한 포트에 기능을 집중시키면 이 구분이 어려워집니다.

송신 포트와 수신 포트를 분리하는 이유

송신 포트와 수신 포트를 분리하면 데이터 흐름을 명확하게 나눌 수 있습니다.

수신 포트는 상대 장비에서 들어오는 데이터를 기다리는 역할을 담당하고, 송신 포트는 PLC가 필요할 때 상대 장비로 명령이나 데이터를 보내는 역할을 담당합니다.

구분역할
수신 포트외부 장비가 보내는 데이터를 대기 및 수신
송신 포트PLC가 외부 장비로 명령 또는 데이터 송신
수신 로직완료 플래그 기준으로 버퍼 읽기
송신 로직요청 조건 기준으로 1회성 송신 처리
유지보수송신 이상과 수신 이상을 분리 진단 가능

포트 분리는 단순히 포트 번호를 나누는 작업이 아닙니다. 통신 역할을 분리하고, 로직 흐름을 분리하며, 장애 발생 시 진단 범위를 줄이는 설계 방식입니다.

수신 채널은 상시 대기 구조가 적합하다

상대 장비가 언제 데이터를 전송할지 알 수 없는 구조라면 수신 채널은 항상 대기 상태를 유지하는 것이 좋습니다.

예를 들어 바코드 리더기, 검사 장비, 비전 장비, 상위 PC가 특정 이벤트 시점에 PLC로 데이터를 보내는 경우가 있습니다. 이때 PLC 수신 포트가 열려 있지 않으면 데이터가 누락되거나 상대 장비에서 전송 실패가 발생할 수 있습니다.

수신 채널 구성 시 확인할 항목은 다음과 같습니다.

확인 항목설명
포트 오픈 상태수신 포트가 정상적으로 열려 있는지 확인
접속 상태상대 장비와 연결 상태가 유지되는지 확인
수신 완료 플래그데이터 수신 완료 조건이 명확한지 확인
수신 카운터실제 수신 발생 여부를 카운터로 확인
미수신 감시일정 시간 수신이 없을 때 알람 또는 상태 표시

수신 완료 신호가 들어올 때마다 카운터를 증가시키면 실제 데이터 수신 여부를 확인하기 쉽습니다. 단순히 연결 상태만 보는 것보다 수신 이벤트가 발생하는지 확인하는 것이 통신 진단에 더 유용합니다.

수신 완료 후 버퍼를 읽는 순서

수신 데이터는 수신 완료 조건을 기준으로 읽어야 합니다. 데이터가 들어오는 중간에 버퍼를 읽으면 일부 데이터만 처리되거나 이전 데이터와 새 데이터가 섞일 수 있습니다.

일반적인 수신 처리 흐름은 다음과 같습니다.

순서처리 내용
1수신 포트 오픈 및 대기
2수신 완료 플래그 확인
3수신 버퍼에서 데이터 읽기
4PLC 내부 D 영역으로 데이터 이동
5데이터 길이와 형식 확인
6필요한 값 파싱
7처리 완료 후 수신 영역 초기화
8다음 수신 대기 상태로 복귀

수신 완료 플래그 없이 상시 조건으로 버퍼를 읽으면 데이터 누락이나 깨짐이 발생할 수 있습니다. 반드시 완료 조건을 기준으로 읽는 구조가 필요합니다.

데이터 처리 후 초기화가 필요한 이유

수신 데이터를 정상적으로 읽었더라도 처리 후 초기화가 빠지면 이전 데이터가 다음 사이클에 영향을 줄 수 있습니다.

예를 들어 이전 수신값이 D 영역에 남아 있는 상태에서 새 데이터 수신이 지연되면, PLC가 이전 값을 새 데이터처럼 다시 사용할 수 있습니다. 이 경우 통신은 정상이나 제어 로직에서는 한 박자 늦거나 중복 처리된 것처럼 보일 수 있습니다.

처리 후 초기화가 필요한 영역은 다음과 같습니다.

영역초기화 목적
수신 원본 영역이전 수신 데이터 잔류 방지
파싱 임시 영역다음 데이터 변환 시 혼입 방지
수신 완료 플래그동일 데이터 반복 처리 방지
처리 요청 플래그중복 실행 방지
에러 상태이전 에러와 현재 에러 구분

수신 데이터는 읽는 것만큼 정리하는 과정도 중요합니다. 특히 문자열, 바코드, 검사 결과처럼 길이가 변할 수 있는 데이터는 이전 데이터 잔류 여부를 반드시 확인해야 합니다.

송신 채널은 필요할 때만 실행한다

송신 채널은 PLC가 외부 장비로 요청이나 데이터를 보내는 역할을 담당합니다. 수신 채널과 달리 상시 실행보다 요청 조건에 따른 1회성 실행 구조가 적합합니다.

송신 로직은 다음 흐름으로 구성하는 것이 좋습니다.

순서처리 내용
1송신 요청 조건 발생
2송신 데이터 영역 작성
3송신 명령 1회 실행
4송신 완료 플래그 확인
5송신 에러 여부 확인
6필요 시 수신 대기 또는 재시도
7송신 요청 플래그 초기화

송신 명령을 매 스캔 반복 실행하면 상대 장비가 중복 명령을 받거나, 응답 데이터가 꼬일 수 있습니다. 따라서 송신은 상승엣지 또는 상태 단계 방식으로 제어하는 것이 안전합니다.

송신과 수신을 분리하면 진단이 쉬워진다

송신 포트와 수신 포트를 분리하면 장애 발생 시 원인을 나누어 볼 수 있습니다.

예를 들어 수신 카운터는 증가하지 않지만 송신 완료는 정상이라면 상대 장비가 데이터를 보내지 않거나 수신 포트 쪽에 문제가 있을 수 있습니다. 반대로 수신은 정상인데 송신 완료가 발생하지 않으면 PLC 송신 조건이나 상대 장비 응답 구조를 확인해야 합니다.

증상우선 확인 방향
수신 카운터 증가 없음수신 포트, 상대 송신, 방화벽, 포트 번호
송신 완료 없음송신 조건, 상대 IP, 상대 포트, 접속 상태
수신값이 이전 값 반복수신 영역 초기화, 처리 완료 플래그
데이터 일부 누락수신 완료 기준, 데이터 길이, 버퍼 읽기 타이밍
간헐적 끊김재접속 조건, 네트워크 부하, 상대 장비 응답 시간

포트와 로직이 분리되어 있으면 문제 발생 시 송신 계통과 수신 계통을 따로 확인할 수 있습니다.

같은 IP에 여러 포트를 사용하는 구조

같은 상대 IP라도 포트를 여러 개 사용할 수 있습니다. 이는 중복 설정이 아니라 데이터 역할 분리일 수 있습니다.

예를 들어 한 포트는 PLC가 상대 장비의 데이터를 수신하는 용도, 다른 포트는 PLC가 상대 장비로 요청을 보내는 용도로 사용할 수 있습니다. 또는 상태 데이터, 검사 결과, 제어 명령을 각각 다른 포트로 나누어 관리할 수도 있습니다.

구성목적
수신 전용 포트외부 장비의 비동기 데이터 수신
송신 전용 포트PLC 요청 또는 명령 전송
상태 전용 포트주기적인 상태 데이터 교환
결과 전용 포트검사 결과 또는 판정값 수신
명령 전용 포트제어 명령 송신

포트를 나누면 설정은 늘어나지만 데이터 흐름이 명확해지고, 유지보수 시 어떤 포트에서 문제가 발생했는지 추적하기 쉬워집니다.

포트 분리 시 주의할 항목

송신·수신 포트를 분리할 때는 포트 번호만 나누면 끝나는 것이 아닙니다. Open Setting, 상대 장비 설정, PLC 로직, 방화벽 정책이 모두 일치해야 합니다.

확인해야 할 항목은 다음과 같습니다.

확인 항목설명
포트 번호송신용과 수신용 포트가 상대 장비와 일치하는지 확인
TCP/UDP각 포트의 프로토콜이 상대 장비와 일치하는지 확인
Active/Unpassive각 포트의 접속 주체가 맞는지 확인
상대 IPActive 송신 구조에서 상대 IP가 정확한지 확인
수신 완료 플래그수신 포트별 완료 신호를 구분하는지 확인
에러 코드송신·수신 포트별 에러를 별도로 관리하는지 확인
재접속 조건연결 해제 시 복구 조건이 있는지 확인
방화벽각 포트가 네트워크 정책에서 허용되는지 확인

포트를 분리한 뒤에도 플래그와 에러 코드를 하나로 묶어 관리하면 진단 효과가 떨어집니다. 포트별 상태를 따로 확인할 수 있어야 합니다.

수신 카운터와 상태 플래그를 남긴다

통신 진단을 위해서는 수신 완료 카운터, 송신 완료 카운터, 에러 카운터를 남기는 것이 좋습니다.

이 값들은 HMI나 모니터링 화면에서 통신 상태를 빠르게 확인하는 데 도움이 됩니다.

진단 항목목적
수신 완료 카운터실제 데이터 수신 발생 여부 확인
송신 완료 카운터송신 명령 정상 완료 여부 확인
수신 에러 카운터수신 이상 발생 빈도 확인
송신 에러 카운터송신 실패 발생 빈도 확인
마지막 수신 시간통신 정지 여부 판단
마지막 에러 코드원인 추적 기준 확보

연결 상태만으로는 실제 데이터 흐름을 확인하기 어렵습니다. 수신 완료와 송신 완료를 카운터로 남기면 간헐적 문제를 추적하기 쉽습니다.

소켓통신 포트 분리 설계 체크리스트

송신·수신 포트를 분리할 때는 다음 항목을 점검합니다.

점검 항목확인 내용
수신 포트상대 장비가 보내는 데이터를 항상 받을 수 있는지
송신 포트PLC 요청 조건에 따라 1회성으로 송신되는지
포트 번호상대 장비 설정과 일치하는지
접속 방식Active와 Unpassive가 역할에 맞는지
수신 완료완료 플래그 기준으로 버퍼를 읽는지
초기화처리 후 수신 영역과 플래그를 정리하는지
중복 송신송신 명령이 매 스캔 반복되지 않는지
진단 카운터송신·수신 완료 횟수를 확인할 수 있는지
에러 분리송신 에러와 수신 에러를 따로 볼 수 있는지
재접속연결 해제 후 복구 조건이 있는지

이 항목을 기준으로 보면 포트 분리 구조가 실제로 안정성을 높이는 방향으로 설계되었는지 확인할 수 있습니다.

송신·수신 포트 분리 정리

미쓰비시 PLC 소켓통신에서 Ping과 ESTABLISH 상태가 정상이어도 데이터 누락은 발생할 수 있습니다. 연결은 네트워크 경로와 접속 상태를 의미할 뿐, 데이터 처리 로직이 안정적이라는 의미는 아닙니다.

한 포트에 송신과 수신을 모두 집중시키면 타이밍 충돌, 수신 지연, 버퍼 처리 혼선, 디버깅 어려움이 발생할 수 있습니다. 송신 포트와 수신 포트를 분리하면 데이터 흐름이 명확해지고, 송신 문제와 수신 문제를 따로 진단할 수 있습니다.

수신 포트는 상대 장비의 데이터 전송에 대비해 대기 상태를 유지하고, 수신 완료 플래그 기준으로 버퍼를 읽어야 합니다. 처리 후에는 수신 데이터 영역과 완료 플래그를 정리해 이전 데이터가 다음 처리에 영향을 주지 않도록 해야 합니다.

송신 포트는 PLC가 필요할 때만 요청 조건에 따라 1회성으로 실행하는 것이 좋습니다. 송신 완료, 송신 에러, 재접속 조건을 별도로 관리하면 간헐적 통신 문제를 추적하기 쉽습니다.

소켓통신은 연결보다 구조가 중요합니다. 포트 분리는 설정을 복잡하게 만드는 작업이 아니라, 데이터 흐름을 분리하고 유지보수성을 높이는 설계 방식입니다.