미쓰비시 PLC 이더넷 소켓통신에서 Ping이 정상이고 연결 상태가 ESTABLISH로 표시되어도 데이터 누락이 발생할 수 있습니다. 이 경우 단순 네트워크 연결 문제가 아니라 송신과 수신의 처리 구조, 포트 구성, 버퍼 초기화, 완료 플래그 처리 방식까지 함께 확인해야 합니다. 특히 한 포트에 송신과 수신을 모두 집중시키면 통신량 증가 시 타이밍 충돌과 데이터 누락이 발생하기 쉽습니다.
연결 상태와 데이터 안정성은 별개다
이더넷 통신에서 Ping이 정상이라는 것은 네트워크 경로가 살아 있다는 의미입니다. ESTABLISH 상태는 TCP 연결이 성립되었다는 의미입니다. 그러나 이 두 가지가 곧 데이터 처리가 안정적이라는 뜻은 아닙니다.
현장에서 문제는 보통 연결 이후에 발생합니다. 접속은 되어 있지만 수신 버퍼를 제때 읽지 못하거나, 송신 처리 중 수신 데이터가 밀리거나, 이전 데이터가 초기화되지 않아 다음 처리에 영향을 주는 경우가 있습니다.
구분해서 보면 다음과 같습니다.
| 상태 | 의미 | 추가 확인 항목 |
|---|---|---|
| Ping 정상 | IP 경로 확인 | 포트, 프로토콜, 방화벽 별도 확인 필요 |
| ESTABLISH | TCP 연결 성립 | 송신·수신 데이터 처리 확인 필요 |
| SD/RD 반응 | 데이터 송수신 시도 | 버퍼 처리와 완료 플래그 확인 필요 |
| 값 누락 | 처리 구조 문제 가능 | 포트 분리, 수신 타이밍, 초기화 확인 필요 |
따라서 소켓통신에서는 연결 여부뿐 아니라 데이터가 언제 들어오고, 언제 읽히며, 처리 후 어떻게 정리되는지를 함께 봐야 합니다.
한 포트에 송신과 수신을 몰아넣을 때의 문제
하나의 IP와 하나의 포트로 송신과 수신을 모두 처리하면 설정은 단순해 보입니다. 그러나 통신량이 늘어나거나 상대 장비 응답 타이밍이 일정하지 않으면 문제가 발생할 수 있습니다.
대표적인 문제는 다음과 같습니다.
| 문제 | 설명 |
|---|---|
| 타이밍 충돌 | PLC 송신 시점과 상대 장비 송신 시점이 겹칠 수 있음 |
| 수신 지연 | 송신 처리 중 수신 데이터 처리가 늦어질 수 있음 |
| 원인 구분 어려움 | 송신 실패인지 수신 대기 문제인지 분리하기 어려움 |
| 버퍼 관리 복잡 | 송신 데이터와 수신 데이터를 같은 흐름에서 관리해야 함 |
| 재접속 처리 복잡 | 연결 이상 발생 시 복구 조건이 복잡해짐 |
통신 장애가 발생했을 때 송신 문제와 수신 문제를 구분할 수 있어야 원인 추적이 빠릅니다. 한 포트에 기능을 집중시키면 이 구분이 어려워집니다.
송신 포트와 수신 포트를 분리하는 이유
송신 포트와 수신 포트를 분리하면 데이터 흐름을 명확하게 나눌 수 있습니다.
수신 포트는 상대 장비에서 들어오는 데이터를 기다리는 역할을 담당하고, 송신 포트는 PLC가 필요할 때 상대 장비로 명령이나 데이터를 보내는 역할을 담당합니다.
| 구분 | 역할 |
|---|---|
| 수신 포트 | 외부 장비가 보내는 데이터를 대기 및 수신 |
| 송신 포트 | PLC가 외부 장비로 명령 또는 데이터 송신 |
| 수신 로직 | 완료 플래그 기준으로 버퍼 읽기 |
| 송신 로직 | 요청 조건 기준으로 1회성 송신 처리 |
| 유지보수 | 송신 이상과 수신 이상을 분리 진단 가능 |
포트 분리는 단순히 포트 번호를 나누는 작업이 아닙니다. 통신 역할을 분리하고, 로직 흐름을 분리하며, 장애 발생 시 진단 범위를 줄이는 설계 방식입니다.
수신 채널은 상시 대기 구조가 적합하다
상대 장비가 언제 데이터를 전송할지 알 수 없는 구조라면 수신 채널은 항상 대기 상태를 유지하는 것이 좋습니다.
예를 들어 바코드 리더기, 검사 장비, 비전 장비, 상위 PC가 특정 이벤트 시점에 PLC로 데이터를 보내는 경우가 있습니다. 이때 PLC 수신 포트가 열려 있지 않으면 데이터가 누락되거나 상대 장비에서 전송 실패가 발생할 수 있습니다.
수신 채널 구성 시 확인할 항목은 다음과 같습니다.
| 확인 항목 | 설명 |
|---|---|
| 포트 오픈 상태 | 수신 포트가 정상적으로 열려 있는지 확인 |
| 접속 상태 | 상대 장비와 연결 상태가 유지되는지 확인 |
| 수신 완료 플래그 | 데이터 수신 완료 조건이 명확한지 확인 |
| 수신 카운터 | 실제 수신 발생 여부를 카운터로 확인 |
| 미수신 감시 | 일정 시간 수신이 없을 때 알람 또는 상태 표시 |
수신 완료 신호가 들어올 때마다 카운터를 증가시키면 실제 데이터 수신 여부를 확인하기 쉽습니다. 단순히 연결 상태만 보는 것보다 수신 이벤트가 발생하는지 확인하는 것이 통신 진단에 더 유용합니다.
수신 완료 후 버퍼를 읽는 순서
수신 데이터는 수신 완료 조건을 기준으로 읽어야 합니다. 데이터가 들어오는 중간에 버퍼를 읽으면 일부 데이터만 처리되거나 이전 데이터와 새 데이터가 섞일 수 있습니다.
일반적인 수신 처리 흐름은 다음과 같습니다.
| 순서 | 처리 내용 |
|---|---|
| 1 | 수신 포트 오픈 및 대기 |
| 2 | 수신 완료 플래그 확인 |
| 3 | 수신 버퍼에서 데이터 읽기 |
| 4 | PLC 내부 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 | 각 포트의 접속 주체가 맞는지 확인 |
| 상대 IP | Active 송신 구조에서 상대 IP가 정확한지 확인 |
| 수신 완료 플래그 | 수신 포트별 완료 신호를 구분하는지 확인 |
| 에러 코드 | 송신·수신 포트별 에러를 별도로 관리하는지 확인 |
| 재접속 조건 | 연결 해제 시 복구 조건이 있는지 확인 |
| 방화벽 | 각 포트가 네트워크 정책에서 허용되는지 확인 |
포트를 분리한 뒤에도 플래그와 에러 코드를 하나로 묶어 관리하면 진단 효과가 떨어집니다. 포트별 상태를 따로 확인할 수 있어야 합니다.
수신 카운터와 상태 플래그를 남긴다
통신 진단을 위해서는 수신 완료 카운터, 송신 완료 카운터, 에러 카운터를 남기는 것이 좋습니다.
이 값들은 HMI나 모니터링 화면에서 통신 상태를 빠르게 확인하는 데 도움이 됩니다.
| 진단 항목 | 목적 |
|---|---|
| 수신 완료 카운터 | 실제 데이터 수신 발생 여부 확인 |
| 송신 완료 카운터 | 송신 명령 정상 완료 여부 확인 |
| 수신 에러 카운터 | 수신 이상 발생 빈도 확인 |
| 송신 에러 카운터 | 송신 실패 발생 빈도 확인 |
| 마지막 수신 시간 | 통신 정지 여부 판단 |
| 마지막 에러 코드 | 원인 추적 기준 확보 |
연결 상태만으로는 실제 데이터 흐름을 확인하기 어렵습니다. 수신 완료와 송신 완료를 카운터로 남기면 간헐적 문제를 추적하기 쉽습니다.
소켓통신 포트 분리 설계 체크리스트
송신·수신 포트를 분리할 때는 다음 항목을 점검합니다.
| 점검 항목 | 확인 내용 |
|---|---|
| 수신 포트 | 상대 장비가 보내는 데이터를 항상 받을 수 있는지 |
| 송신 포트 | PLC 요청 조건에 따라 1회성으로 송신되는지 |
| 포트 번호 | 상대 장비 설정과 일치하는지 |
| 접속 방식 | Active와 Unpassive가 역할에 맞는지 |
| 수신 완료 | 완료 플래그 기준으로 버퍼를 읽는지 |
| 초기화 | 처리 후 수신 영역과 플래그를 정리하는지 |
| 중복 송신 | 송신 명령이 매 스캔 반복되지 않는지 |
| 진단 카운터 | 송신·수신 완료 횟수를 확인할 수 있는지 |
| 에러 분리 | 송신 에러와 수신 에러를 따로 볼 수 있는지 |
| 재접속 | 연결 해제 후 복구 조건이 있는지 |
이 항목을 기준으로 보면 포트 분리 구조가 실제로 안정성을 높이는 방향으로 설계되었는지 확인할 수 있습니다.
송신·수신 포트 분리 정리
미쓰비시 PLC 소켓통신에서 Ping과 ESTABLISH 상태가 정상이어도 데이터 누락은 발생할 수 있습니다. 연결은 네트워크 경로와 접속 상태를 의미할 뿐, 데이터 처리 로직이 안정적이라는 의미는 아닙니다.
한 포트에 송신과 수신을 모두 집중시키면 타이밍 충돌, 수신 지연, 버퍼 처리 혼선, 디버깅 어려움이 발생할 수 있습니다. 송신 포트와 수신 포트를 분리하면 데이터 흐름이 명확해지고, 송신 문제와 수신 문제를 따로 진단할 수 있습니다.
수신 포트는 상대 장비의 데이터 전송에 대비해 대기 상태를 유지하고, 수신 완료 플래그 기준으로 버퍼를 읽어야 합니다. 처리 후에는 수신 데이터 영역과 완료 플래그를 정리해 이전 데이터가 다음 처리에 영향을 주지 않도록 해야 합니다.
송신 포트는 PLC가 필요할 때만 요청 조건에 따라 1회성으로 실행하는 것이 좋습니다. 송신 완료, 송신 에러, 재접속 조건을 별도로 관리하면 간헐적 통신 문제를 추적하기 쉽습니다.
소켓통신은 연결보다 구조가 중요합니다. 포트 분리는 설정을 복잡하게 만드는 작업이 아니라, 데이터 흐름을 분리하고 유지보수성을 높이는 설계 방식입니다.