안녕하세요! 다른 프로그램에서 PLC의 읽기 동작을 할때에는 말씀바와 같이 일정주기로 읽기 동작을 해서인지 물리적 단선을 제외하고 연결이 끊어지는 경우는 없었습니다. 빈번히 일어나는 쓰기라면 연결이 유지될것 같은데 상황이 이러니 어렵네요 ㅎㅎ 말씀하신 keep Alive는 한번 확인을 해봐야겠습니다.
현재까지 검색으로만 제 나름대로 추측해 보자면 TCP 연결 확인 문제같습니다. 아무런 동작도 하지않는 연결에 대해서 PLC(Server)에서는 상대방 생사 확인차 어떠한 패킷을 보내고 PC에서는 거기에 대한 응답이 없자 PLC에서는 죽은 소켓인지 알고 연결을 끊어버지 않을까 합니다.
저는 주로 사용하는 공유기 자체적인 옵션 때문에 끊겼던 적은 있습니다. (keep-alive)
(저의 경우는 약 1분 이었던 것으로 기억합니다.)
그래서 TCP통신은 그 어떤 경우라도 1분 이하의 Heart-beat를 갖도록 구성하는 편입니다.
PLC통신은 읽기 작업이 매우 빈번한 작업이라 이런 경우가 잘 드러나지 않을 때가 있습니다만,
주로 Heart-beat를 적용하면 대부분 발생하지 않습니다.
개인적인 의견입니다만, Keep Alive 설정도 결국은 socket 레벨에서 적은 양의 데이터를 주고 받는 것인데요. 다른 PLC 프로그램에서는 읽기 동작에서는 문제가 없었다고 하시니, 지금 문제가 되는 프로그램에서도 일정 주기로 읽기 동작을 하시면 될 것 같은데요. 쓰기 동작이야 잘못된 주소나 잘못된 데이터를 쓰면 PLC 동작에 문제를 유발할 수 있지만, 읽기는 문제가 없으니까요.
LS산전 PLC 같은 경우에는 동시에 최대 16개의 연결을 가질 수 있기는 하지만, 아무래도 PC보다는 리소스가 많지 않다 보니 필요없는 연결은 빨리 정리하는 것으로 되어 있는 것 같습니다.
이것는 LS PLC 뿐만 아니라 다른 제조사의 PLC도 동일한 상황 인 것 같습니다.
안녕하세요. connection 제한은 아닐것으로 판단되어 확인을 하다가 말았습니다. 연결에 제한이 있다고 기존에 연결된 소켓을 끊어버린다게 말이 안될듯하고 지금 문제는 소켓 연결을 유지하는게 문제라서요. 여튼 읽기 명령을 주기적으로 보내여 연결은 유지를 시키게끔 소스는 수정했습니다. 감사합니다.
안녕하세요. 예전에 저도 공유기 옵션으로 인하여 연결이 끊어진 경험이 있었습니다. 그때는 단시간 패킷이 과도하게 전송되면서 공유기에서 디도스 의심으로 차단을 해버리더라고요ㅎㅎ;; 여튼 이번 문제를 통해 어떤식으로든 Heart-beat를 주기적으로 전송해야 한다는걸 알았네요. 감사합니다!