티스토리 뷰

SCADA

동운 HMI 태그 쓰기 속도 개선 적용

록개발자 2018. 11. 29. 13:52

스카다 시스템이나 HMI를 단순 모니터링 용도가 아니라 제어 기능이 포함되는 경우 오퍼레이터의 조작에 대한 시스템의 반응 속도는 상당히 중요합니다. 특정 태그 값 표시와 쓰기 기능을 동시에 제공하는 컨트롤의 경우 쓰기 동작이 완료되어 PLC 값이 변경되어야 표시되는 데이터도 변경된 값으로 바뀌는 까닭에 화면 갱신 주기와 쓰기 과정등을 감안 했을때 통신 과정이 지연되거나 하는 경우 조작자 입장에서 반응 속도가 상당히  느린 것으로 느낄 수 있습니다. 특히 시리얼 통신으로 대량의 태그를 다루는 HMI의 경우에는 이런 반응 속도 저하 현상은 두드러지게 나타날 수 있습니다.




기존에는 쓰기를 위해서 UI쪽의 쓰레드에서 특정 태그의 쓰기 플래그를 On하면 PLC 드라이버가 주기적으로 전체 쓰기 태그들에 대한 쓰기 플래그를 검사해서 플래그가 켜진 경우에 해당 태그의 데이터를 PLC로 전송합니다.


전체 쓰기 태그들에 대한 플래그 검사 및 쓰기 전송이 끝나면 읽기 대상 태그들에 대하여 블럭 읽기 방식으로 PLC로부터 데이터를 전달 받습니다. 문제는 RS-422, RS-232C, RS-482와 같은 직렬 통신 방식으로 대량의 태그 데이터를 읽는 경우 블럭 읽기 방식이라해도 데이터 전송에 상당한 시간이 소요 될 수 있다는 것입니다.


결과적으로 플래그 검사 및 쓰기와 전체 태그 읽기가 PLC 드라이버의 1주기 이므로 태그 읽기 과정중에 쓰기가 발생하는 경우에는 읽기가 모두 끝나야 다음 쓰기 주기를 수행하는 지연 현상이 발생할 수 밖에 없습니다. 서버/클라이언트 분리형 모델에서는 상황이 더욱 악화되는 현상이 일어 날 수도 있습니다. 


개선 방안은 다음과 같습니다.



플래그를 사용하는 대신 쓰레드들이 공유하는 큐를 사용해서 UI쪽의 쓰레드는 데이터와 함께 어떤 태그에 쓰기가 발생했는지를 큐에 넣습니다. 큐는 각 PLC 드라이버 별로 존재하기 때문에 들은 UI쪽의 쓰레드가 특정 태그에 대한 쓰기 정보를 큐에 넣을 때는 해당 태그가 어떤 PLC와 연결되었는지를 확인해서 해당 큐에 집어 넣습니다. 


각 PLC 드라이버는 기존에는 쓰기가 허용된 모든 태그의 플래그를 검사하는 대신에 큐가 비었는지 만을 확인하고 큐에 정보가 있으면 큐에 들어간 내용을 기반으로 태그 정보를 직접 추출해서 쓰기를 수행합니다. 쓰기 여부 판단을 위한 비용을 최소화 한 것입니다. 그리고 쓰기 여부 판단 및 쓰기 수행 과정을 전체 읽기 단계 이전에 수행할 뿐만아니라 읽기가 여러 단계로 분할해서 수행되는 경우에는 각 세부 단계가 끝날 때 마다 수행하여 쓰기 지연 현상의 가능성을 최소화 하도록 했습니다. 이러한 큐를 매개로 한 쓰기 정보 전달은 서버/클라이언트 분리형 모델에서 클라이언트와 서버간 정보 전달 과정에도 유사하게 적용됩니다. 


금번 작업에 수정한 소스 코드는 공통 글로벌 및 태그 클래스, 클라이언트/서버 관리자, PLC 드라이버들 입니다.



(주)동운시스템 전화 041-358-3760

동운 HMI 소개 바로가기

[온라인 문의 및 견적요청]



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함