PLC 연동 소켓 유지 질문드립니다.

안녕하세요. PLC (LS 산전)와 소켓 통신을 하고 있습니다.

어찌보면 이곳 주제에 벗어나는 질문일 수도 있지만 혹시나 해결하셨던 분이 계실까 문의드립니다.

PLC와 정상적으로 소켓이 연결된 상태에서 PC에서 아무런 작업(데이터 전송)하지 않으면

15초 주기로 “현재 연결은 원격 호스트에 의해 강제로 끊겼습니다.”

라는 메세지를 보이며 소켓 연결이 끊어집니다.

저는 PLC에서 소켓 연결을 끊어버리는 경우라 PLC에서 IP를 기준으로 접속을 유지시키는 기능이

있지 않냐 문의했고 PLC 담당자는 그런 기능은 없다고 합니다.

결국 끊어질때마다 재연결 시도하는 로직을 추가하거나 의미없는 데이터를 주기적으로 보내 연결을 유

지시킬 계획이긴 합니만 PLC 연동과정에서 PLC에서 연결을 끊어버리는 상황에서 해결한 사례가 있는

지 궁금합니다.

1개의 좋아요

제 경험으로는 15초마다 끊어지지는 않았던 것으로 기억합니다. 증상은 어쩌면 PLC가 오류로 인해 재시작 하는 과정에서 연결이 끊어지는 것이 의심이 됩니다.

PLC의 오류는 다양하게 발생하니 끊어지는 시점을 살펴보시고요,
만약 그런 요소가 없다면 15초라는 설정이 PLC에 있을텐데 메뉴얼을 참고하시면 아마 찾으실 수 있을꺼에요.

그럼에도 불구하고 연결상태를 유지하는 ping-pong 작업은 필요하니 그 코딩 역시 해주셔야 합니다.

2개의 좋아요

혹시, 해당 PLC랑 통신하는 다른 프로그램이 있고,
PLC에서 허용된 연결 개수가 제한되어 있이서 연결이 끊어질 가능성은 없을까요?

1개의 좋아요

안녕하세요. PLC담당자가 설정법을 모를수도 있으니 말씀하신바와 같이 PLC 연결설정 부분이 있는지 확인하고 데이터를 계속 보내는 로직도 추가를 해야겠습니다. 감사합니다.

1개의 좋아요

안녕하세요. 프로그램은 1개 밖에 없습니다. 혹시나 저도 말씀하시바와 같이 연결 개수가 제한되어 그러나 했는데 애당초 연결이 안되면 안됐지 PLC에서 기존 연결을 끊으면서 허용할 이유가 없을 것 같아서 확인을 하다 말았습니다.

1개의 좋아요

LS산전 PLC 파라메터 설정을 살펴보니 접속 유지에 관련된 항목은 보이지 않네요.
저같은 경우에는 PLC 연결 후 일정 주기(100ms)로 데이터 읽기 동작을 계속 유지하고 있습니다.

1개의 좋아요

아래 링크를 확인 해 보시겠어요.
테스트는 해보진 않았지만, Keep Alive 설정하는 내용 입니다.

1개의 좋아요

잘못된 프로토콜을 통해 데이터 쓰기 읽기를 연속해서 시도하면 통신을 차단해버리는 경우는 본적이 있는데… 처음보는 경우네요… 깃발꽂고 갑니다… 저도 궁금하네요.

1개의 좋아요

안녕하세요! 다른 프로그램에서 PLC의 읽기 동작을 할때에는 말씀바와 같이 일정주기로 읽기 동작을 해서인지 물리적 단선을 제외하고 연결이 끊어지는 경우는 없었습니다. 빈번히 일어나는 쓰기라면 연결이 유지될것 같은데 상황이 이러니 어렵네요 ㅎㅎ 말씀하신 keep Alive는 한번 확인을 해봐야겠습니다.

1개의 좋아요

현재까지 검색으로만 제 나름대로 추측해 보자면 TCP 연결 확인 문제같습니다. 아무런 동작도 하지않는 연결에 대해서 PLC(Server)에서는 상대방 생사 확인차 어떠한 패킷을 보내고 PC에서는 거기에 대한 응답이 없자 PLC에서는 죽은 소켓인지 알고 연결을 끊어버지 않을까 합니다.

1개의 좋아요

connection 제한 때문에 그런듯

1개의 좋아요

저는 주로 사용하는 공유기 자체적인 옵션 때문에 끊겼던 적은 있습니다. (keep-alive)
(저의 경우는 약 1분 이었던 것으로 기억합니다.)
그래서 TCP통신은 그 어떤 경우라도 1분 이하의 Heart-beat를 갖도록 구성하는 편입니다.
PLC통신은 읽기 작업이 매우 빈번한 작업이라 이런 경우가 잘 드러나지 않을 때가 있습니다만,
주로 Heart-beat를 적용하면 대부분 발생하지 않습니다.

1개의 좋아요

개인적인 의견입니다만, Keep Alive 설정도 결국은 socket 레벨에서 적은 양의 데이터를 주고 받는 것인데요. 다른 PLC 프로그램에서는 읽기 동작에서는 문제가 없었다고 하시니, 지금 문제가 되는 프로그램에서도 일정 주기로 읽기 동작을 하시면 될 것 같은데요. 쓰기 동작이야 잘못된 주소나 잘못된 데이터를 쓰면 PLC 동작에 문제를 유발할 수 있지만, 읽기는 문제가 없으니까요.
LS산전 PLC 같은 경우에는 동시에 최대 16개의 연결을 가질 수 있기는 하지만, 아무래도 PC보다는 리소스가 많지 않다 보니 필요없는 연결은 빨리 정리하는 것으로 되어 있는 것 같습니다.
이것는 LS PLC 뿐만 아니라 다른 제조사의 PLC도 동일한 상황 인 것 같습니다.

1개의 좋아요

라고 하셔서… 내부적으로 해놓은것이 아니라면 무작정 하트비트 날려서 통신을 유지하시려 하는것 또한 무리가 있어보입니다.

1개의 좋아요

안녕하세요. connection 제한은 아닐것으로 판단되어 확인을 하다가 말았습니다. 연결에 제한이 있다고 기존에 연결된 소켓을 끊어버린다게 말이 안될듯하고 지금 문제는 소켓 연결을 유지하는게 문제라서요. 여튼 읽기 명령을 주기적으로 보내여 연결은 유지를 시키게끔 소스는 수정했습니다. 감사합니다.

안녕하세요. 제가 제대로 내용을 파악한 건지는 모르겠지만 keep alive 설정 최대값이 2시간이더라고요. 해서 이전 댓글에서 말씀하신바와 같이 읽기 명령을 주기적으로 보내는 로직을 추가했습니다. 아직까지는 별다른 문제없이 잘 작동중이네요. 감사합니다!

안녕하세요. 제가 PLC 문외한이기도 하고 담당자와 다른분 댓글에서도 그런 기능은 없는 듯하다고 하니 제쪽에서는 연결을 유지시키기 위해 읽기 명령을 주기적으로 보내는 로직을 추가했습니다. 현재까지 별다른 문제없이 작동을 하고 있으니 좀더 지켜봐야겠네요. 감사합니다!

안녕하세요. 예전에 저도 공유기 옵션으로 인하여 연결이 끊어진 경험이 있었습니다. 그때는 단시간 패킷이 과도하게 전송되면서 공유기에서 디도스 의심으로 차단을 해버리더라고요ㅎㅎ;; 여튼 이번 문제를 통해 어떤식으로든 Heart-beat를 주기적으로 전송해야 한다는걸 알았네요. 감사합니다!

1개의 좋아요

3년전에 경험이 있지만, 지금도 같은 문제인지는 모르겠습니다. 당시에는 지속적으로 메세지를 보내야 했었습니다. 그리고 LS 산전 패치가 가능하다면, 요청하시면 됩니다.