본문 바로가기
PLC 자동제어 학습/CiMon Scada 수업

CiMon에서 스크립트를 이용하는 수업-저수조, 배수구 관련된 제어 시스템

by 인터넷떠돌이 인터넷떠돌이 2017. 10. 28.
반응형

안녕하세요?


이번 포스팅에서는 PLC 자동제어를 위한 시스템을 구축하는데 필요한 CiMon scada라는 프로그램을 이용해서 가상으로 일종의 시스템을 구축하는 연습을 했는데, 그 내용을 포스팅 하고자 합니다. 



언제나 강조하는 것이지만, 괜히 이전에 있던 프로젝트를 해서, 태그랑 이런게 전부 섞이게 하는 것 보다는 새로 프로젝트를 만들어서 하는 것이 훨씬 깔끔합니다.



사소한 것이기는 하지만, 페이지 환경설정에서 이 페이지를 열거나 닫을 때 특정한 명령어를 지정할 수 있습니다. 당연 runscript라는 명령식을 사용해서 스크립트를 실생하거나 stopscript라는 명령어를 사용해서 특정 스크립트의 사용을 중지 시킬 수 있습니다.



다음으로는 페이지에 관계된 단축키를 설정할 수 있다고 하는데, 이 기능에 대해서 저는 아직 배워본 적이 없으니, 여기서 그냥 언급만 하고서 넘어 가도록 해 보겠습니다.




다음으로는 사소할 수도 있지만 상당히 중요한 것일 수도 있는 것을 설정하러 가는 단계입니다. 위 스크린샷을 보시면 도구라는 메뉴에 CiMonX환경설정이라는 것이 있습니다.



이 CiMonX의 환결설정 창을 보시면, 처음에는 초기화면에 아무것도 없는 것을 보실 수 있습니다. 그런데 여기서 프로젝트 폴더 안에 저장된 페이지가 있으면, 그 페이지 중에 하나를 초기화면으로 띄울 수 있다는 것입니다. 즉 CiMonX라고 해서 실제로 제어를 실행하는 패널이 되는 것인데, 이를 실행시키면 가장 먼저 무슨 페이지가 보일 것인지 지정할 수 있다는 것입니다.



실제로 이번에는 메인페이지라는 페이지를 CiMonX를 실행하자 마자 바로 보일 수 있도록 지정을 하는 데 성공하였습니다. 이제는 일일히 CiMonX를 눌러서 어느 페이지 부터 불러올 것인지 지정하지 않아도 된다는 것입니다.



다음으로는 패널의 내용물이라고 해야 할까요? 제어 시스템의 화면을 구성하는 것이 될만한 것을 디자인 하는 작업에 들어가 보도록 합니다.



좀저 작업을 이어가도록 합니다.



이전에 포스팅의 내용에서도 다룬 적이 있었는 내용대로 토글버튼을 만들기 위해서는 사각형 박스를 2개 사용해도 한개는 ON일때 출현하도록 하고, 다른 하나는 OFF일때만 출현하도록 설정하는 것도 방법이기는 합니다만, 위 스크린샷에 나와있는 것처럼 버튼이라는 메뉴를 눌러서 아예 버튼으로 하나를 지정하는 것도 방법이라고 할 수 있습니다.



본격적인 버튼을 만들기에 앞서서 해두었어야 하는 작업이 있는데, 그건 바로 태그를 설정하는 작업이었습니다. 일단 태그를 설정하고서, 이제 다음의 작업에 들어가 보도록 해 봅니다.



아예 버튼의 설정에서 버튼정의 항목에서 디지털값쓰기라는 항목을 만들어 두고서, 여기다가 태그를 지정한 다음에, 토글이라는 항목에 체크를 하면 간단하게 토글 스위치 역할을 하는 버튼을 만들 수 있다는 것입니다.



이런 점에서 여러개의 버튼을 만들어서 태그값을 변경시키는 것에 들어가 보도록 합니다.



그리고 일정한 도형이라고 해야 할까요? 화살표가 출몰해서 기계가 작동한다는 것을 보여주기 위해서 위 스크샷과 같이 태그가 ON일때 출몰을 하고 수평으로 이동을 하는 것으로 설정을 하도록 합니다.



다음으로는 너무 이동을 해서는 안되기 때문에 일단 15정도로 거리를 잡아 두도록 합니다. 이건 절대적인 것은 아니고, 일일히 시행착오를 거쳐서 상황에 따라 적절하게 바꾸어야 할 필요성은 있습니다.



이제 스크립트의 작업을 들어가보도록 합니다. 일단 스크립트의 이름을 pumpon이라고 지정을 하도록 합니다. 그리고 스크립트가 실행되면 T1이라는 태그의 값을 1이라고 쓰도록 합니다.



다음은 드디어 반복문인 While을 사용하는 시간이 되었습니다. 5초 간격으로 T2라는 태그의 값을 ON/OFF시키라는 것을 할 것인데, 일단 구성은 아래처럼 되어 있습니다.


While 1

settagval "T2",1

sleep(5000)

settagval "T2",0

sleep(5000)

wend


여기서 우선 while 조건문 ~ wend 라는 형식으로 반복되는 반복문을 구성하게 되는데, 여기서 while 옆에 1이라는 것이 붙으면 무조건 실행을 시키라는 의미가 됩니다. 즉, 위에서 처럼 while문을 짜면, 스크립트 상으로 한번 실행되면 계속해서 반복이 되는 것입니다.



실수로 버튼을 만들때 글자를 오타를 냈다면, 그림구성에 있는 버튼구성이라는 항목에서 다시금 버튼의 이름이라고 할까요? 글귀를 수정할 수 있습니다.




그리고 여기서 또 중요한 것이 등장하는데, stopscript라는 명령식으로 얼마든지 스크립트를 정지 시킬 수는 있지만, 스크립트를 정지 시켰다고 해서, 반드시 태그의 값도 원래대로 돌아오는 것은 아닙니다. 그래서 태그의 값도 원래대로 돌리고 싶다면 위 스크린샷에서 나와 있는 것처럼 태그의 값을 원래의 OFF인 0으로 설정을 일일히 해주어야 합니다.



그리고 또 다른 사소한 것 같지만 중요한 것이, 위 스크린샷에 나와있는 스크립트의 이름에서 짐작을 할 수 있겠지만, 서로 상반대는 작용을 하는 스크립트의 경우에는 먼저 작동중인 스크립트를 작동정지 시키고 나서, 반대되는 작용을 하는 스크립트를 실행시키는 편이 가장 안전합니다.



아니면 다른 방법으로 스크립트 상에서 미리 충돌할 것같은 스크립트를 정지하는 내용을 적으면 되기는 합니다. 위 스크린샷에 나와 있는 것처럼 stopscript "스크립트이름" 이라고 입력하기만 하면 자기랑 충돌할 가능성이 있어 보이는 스크립트를 정지 시킬 수 있습니다.



다만 한가지 차이점이라면 스크립트가 정지되는 순서인데 서로 상반되는 작용을 해서 충돌을 할 수 있는 스크립트 A와 B가 있다고 합시다. 여기서 B라는 스크립트 안에 stopscript "A"라는 것이 있으면 A가 실행되고 있을 때 B가 실행이 되고나서, A가 정지가 된다는 것입니다. 사소해 보이기는 하지만 버튼에서 stopscript "A"라는 것을 먼저 지정하면 A가 먼저 정지되고 나서 B가 실행되는 것과 차이가 있는 것입니다. 이게 사소해 보이기는 하지만, 이 순서는 미리 알아두는 것이 나쁘지 않다는 생각이 듭니다.



그 차이를 보여주는 CiMonX에서의 모니터링 결과입니다. 이게 언젠가는 중요한 일을 할 것이라는 생각이 들기는 듭니다.



이제 새로운 것을 실습해 보기 위해서 새 프로젝트를 실행시켜 보도록 하겠습니다.



먼저 태그를 3개 만들어 주도록 합니다.



일단은 먼저 버튼을 만들어서 일련의 시도를 하고자 했습니다.



그리고 위 스크린샷에 보이는 것처럼 반복문을 만들어서 실행을 시키려고 했지만, 이래저래 시원치 않은 결과가 나왔습니다. 



결국 제가 지금까지 배운 대로는 토글 스위치 역할을 하는 박스를 2개 만들어서 서로 번갈아 가면서 출현시키고, 거기서 runscript와 stopscript를 실행하는 것만을 해야만 했습니다. 




일단은 제가 했는 방식말고 수업에서 나왔는 방식을 쓰자면, 그냥 버튼은 제가 생각한 대로 그대로 만들고서 태그를 작성할 때 변형을 준다고 합니다.



일단 버튼을 만듧니다.



태그를 설정하면서 '태그 동작을 지정함'이라는 박스를 체크 하도록 합니다. 



그리고 나서 태그 동작을 'runscript'라고 지정을 하도록 합니다. 



그리고 가장 중요한 것인데, 바로 태그값이 변경시 태그 동작을 실행함이라는 항목에 체크 표시를 하는 것입니다. 다시 말하지만, 이게 디지털 태그라서 0에서 1이 되든, 1에서 0이 되든 태그의 값이 ON/OFF가 변하면 바로 태그 동작이 실행되는 것으로 하는 것입니다. 이게 왜 중요하냐 하며, 바로 이 태그동작을 이용해서 스크립트를 실행시키는 것이 스크립트 실행의 기본이라고 합니다.


한마디로 프로그램에 해당하는 스크립트를 잘 짜는 것도 중요하지만, 이걸 실행시킬 수 있어야 한다고 합니다.



일단 이것으로 램프의 점멸을 나오기는 했는데, 정지시켰을 경우 태그의 값이 원래대로 OFF상태로 돌아가지 않는 문제가 발생하였습니다.



이런 경우에는 스크립트를 2개 만들어 주도록 합니다. 예를 들어서 디지털 태그인 버튼의 값이 1이라면 runscript라는 명령어를 써서 반복문이 있는 스크립트를 실행시켜 주도록 하는 것입니다. 그러다가 버튼이라는 태그의 값이 OFF상태인 0이 되면 stopscript라는 함수로 반복문이 있는 함수를 정지키시도록 합니다. 그리고 settagval이라는 함수로 전등 2개에 관계된 함수의 값을 0으로 설정하기만 하면 됩니다.


물론 이게 정답이라고는 말할 수 없기는 합니다. 하지만, 이런 것도 있다는 것을 알아두면 좋을 듯 하며, 그 다음으로는 가장 중요한 것이 태그값의 변경에 runscript를 넣어두어서 스크립트를 실행시킨다는 것입니다. 이게 사소한 것 같지만, 스크립트를 아무리 잘 짜도 어떻게 동작시키는 지를 모르면 아무런 소용이 없다는 생각이 듭니다.

반응형

댓글0