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

CiMonD에서 크기와 위치변화 실습, 그리고 visual basic을 이용한 기능구현

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

안녕하세요?


이번 포스팅에서는 먼저 오전에는 CiMon의 자습서를 보고서, 일종의 위치와 크기변화를 줄 수 있는 예제를 한번 연습해 보고, 이전에 명령식으로 구현한 적이 있는 회로를 이번에는 스크립트를 이용해서 구현하는 방법을 하고자 합니다. 



먼저 새 프로젝트를 실행하도록 합니다.



여기서 하나 특이한 것이 있다면, 바로 외부의 그림을 가져오는 기능이 편집이라는 메뉴에 있다는 것을 알았다는 것입니다. 이 기능을 사용하면, CiMon상에서 제어판넬의 특별한 것을 가져와서 더 전문적이어 보이는 제어판넬로 만들 수 있을 것으로 생각이 됩니다.



저는 일단 폭발 그림을 집어 넣는데 성공하였습니다.



태그를 설정하고



그림의 수직변화에 위 스크린샷과 같은 기능을 구현하도록 합니다.



그리고 당연하다면 당연한 것이기는 한데, 잘은 몰랐는 것이 위에서 외부에서 추가한 그림은, 수직변화와 수평변화를 동시에 주어서 아예 그림의 전체적인 크기가 변하는 것으로 지정할 수 있다는 것입니다.



그리고 일단 야뫼이기는 하지만, 자습서인 PDF파일에 있는 코드를 그대로 복사해서 붙여넣기를 하도록 해보겠습니다. 정석대로라면 이 코딩의 내용도 알아야 할듯 합니다만, 그렇게 되면 과정이 비쥬얼 베이직 수업이 되기에 무언가 넌센스인 점도 있어 보입니다.



그리고 크기의 변화를 주기 위해서 아래에 박스를 만든 다음에 원을 만들고 거기다가 수직이동에 대해서 설정을 하도록 합니다. 당연 이동거리는 바로 이 박스의 크기와 연동이 되어 있습니다.



그리고 원에다가 아예 수평이동도 추가해서 원을 이동하면 이래저래 움직임에 대해서 이제 지정을 하는 것은 다 끝이 났다는 생각이 듭니다.



새로운 태그를 만들어 주도록 합니다.



일련의 작업을 하였습니다. 그런데 불행히도 수업에 사용된 제 컴퓨터가 이래저래 PDF파일을 열수 없어서 이를 설치한다고 가지가지 문제들-인증서 문제와 같은 것으로 전혀 다운로드를 못하는 일이 발생해서 시간이 너무 끌려서 오전에 이 실습을 완전히 다 하지는 못했습니다.



먼저 새로운 프로젝트를 만들고 나서, 램프라는 이름의 디지털 태그를 만들어 주도록 합니다.



그리고 나서 버튼에 관해서 디지털 태그도 하나 만들어 주도록 합니다.



완전히 완성된 태그의 화면입니다. 




다음으로는 램프역할을 할 원과 버튼역할을 할 사각형도 구현을 하도록 합니다.



램프는 램프라는 태그의 값이 1로 변하는 것을 기점으로 켜지는 것으로 태그를 지정하고



버튼은 누르면 램프라는 태그가 1의 값을 가지는 것이 아니라 버튼이라는 태그의 값이 1로 변하도록 했습니다. 그리고 나서 온오프라는 스크립트를 작동시키도록 합니다.



그리고 버튼역할을 하는 사각형을 눌렀다가 떼면 버튼의 태그값을 0으로 도로 돌리도록 합니다. 그러고도 여전히 runscript라는 항목을 주어서 스크립트는 실행이 되도록 합니다.



특이하게도 스크립트에서는 한글로 스크립트 이름을 만들어도 된다고 합니다. 이건 이거대로 CiMon이 가지는 크나큰 장점이 아닌가 하는 생각이 듭니다.



그리고 여기서 if문을 쓰는데, C#과는 다르게 if문 뒤에는 ( )를 쓰지 않으며, 여기서는 then 으로 조건을 만족할 경우 다음과 같은 역할을 하도록 지정을 할 수 있게 됩니다. 여기서는 당연 버튼의 태그값을 가져와서 램프의 값을 변화시키도록 합니다.



CiMonX에서 실행을 하여서, 한번 버튼을 누르자 불이 들어오고 버튼에서 손을 떼면 불이 꺼지는 것을 확인할 수 있었습니다. 여기서 드는 생각이 그냥 명령식을 이용하면 태그 1개만 해도 될 것 같기는 한데, 이렇게 하는 데는 다른 이유가 있는 것이 아닌가 합니다.



이번에는 자가유지 회로라고 해서, 운전 버튼을 누르면, 계속 램프에 불이 켜지다가, 정지 버튼을 누르면, 램프의 불이 꺼지는 구조입니다. 



여기서는 다른것 필요없이, 정지 버튼을 누르면 버튼의 태그값이 0으로 바뀌도록 설정만 했습니다. 즉, 운전 버튼에서 손을 때면 버튼의 태그값이 0으로 돌아가지 않고, 오로지 정지 버튼에만 이런 기능을 주었다는 것입니다.



실제로 CiMonX에서 실행을 해 보았더니, 제대로 동작을 하는 것은 확인을 했습니다.



그런데 정답이라고 해야 할까요? 여기서는 정지라는 태그를 추가로 생성을 한다고 합니다.



버튼은 여전하기는 하지만, 그래도 작동시키는 스크립트를 바꾸어 주도록 합니다.



그리고 버튼에서 손을 떼면 다시 0으로 돌아가도록 합니다.



그리고 이번에는 정지버튼을 누르면, 정지 태그의 값이 1로 바뀌도록 합니다.



다음으로는 정지버튼을누르면 정지태그의 값을 도로 0으로 되돌리도록 합니다.



스크립트의 내용은 간단합니다. 먼저 버튼이라는 태그의 값이 1일 경우(if문 사용)을 했는데, 여기서 중요한 것은 0의 경우는 지정하지 않았다는 겁니다. 즉, 버튼의 태그값이 0으로 돌아가도 아무런 if문이 없어서 변화가 일어나지 않습니다. 그리고 정지의 태그를 가져와서 이게 1로 변하면, if구문....... 그러면 램프의 태그값을 0으로 바꾸라고 지정하면 됩니다.



이제 인터록회로라고 해서, 이전에 포스팅에서 소개한 적이 있는 것으로, 이 회로를 실습해 보고자 새 프로젝트를 생성하도록 합니다.



먼저 제어판의 디자인을 CiMonD로 만들어 주도록 합니다.



그리고 나서 위 스크린샷과 같이 태그를 설정해 주도록 합니다.




먼저 위 그림과 같이 일련의 태그설정을 하도록 합니다. 



일련의 시도를 제가 해 보기는 했습니다만, 제 능력의 부족이었는지 이래저래 뭐가 안되기는 안되었습니다.



다시한번 말하지만, 여기 스크립트를 제대로 하기 위해서는 램프에는 램프에 해당하는 태그를 따로 두어야만 한다고 합니다. 이걸 잊어서 저는 문제를 해결하는 데 이래저래 애로사항이 많았습니다.



그리고 특이하게도 : 를 써서 settagval이라는 함수를 여러개 이어서 쓸 수 있다는 것을 알 수 있었습니다. 이게 아니라면 엔터키를 써서 줄을 바꾸면, if구문에서는 마지막에 end if라는 것을 써야만 한다는 문법 규칙이 있다고 합니다.



C#에서는 &로 표현이 되었지만, 여기 비주얼 베이직에서는 AND라고 그냥 그대로 쓰는 것이 특징이었습니다. 그리고 먼저 ( )를 써서 괄호안의 내용이 먼저 나올 수 있도록 합니다. 이렇게 해서 인터록 회로를 구성할 수 있었습니다.



다음은 부위부선 회로의 스크립트를 짰습니다. 여기서는 어떻게 해서든 위 스크린샷을 보는 것 처럼, 각각의 램프의 태그를 서로 다르게 설정해서 운전1을 누르면 운전2의 램프가 바로 꺼지는 식으로 마치 선풍기의 스위치처럼 할 수 있습니다.



CiMonX에서는 어떻게 제대로 부위부선회로가 작동을 하는 것을 볼 수 있었습니다. 이것으로 이제 부위부선회로까지 제대로 만들었고, 이제는 타이머를 쓰는 회로를 만들어 보도록 합니다.



먼저 2초씩 시간이 지나면서 차례로 램프에 불이 들어오는 제어판을 디자인 하도록 합니다. 그리고 나서 작업을 이어서 하도록 합니다.



일련의 태그를 지정하는 작업을 하도록 하고, 다음에는 타이머라는 스크립트에서 sleep이라는 함수를 사용합니다. sleep함수는 밀리세컨드라고 해서 1000이 1초를 의미합니다. 2초를 의미하면 2000을 입력해야 합니다. 그리고 : 를 이용해서 sleep함수를 중간에 두면, 지정한 시간이 지나고 나서 뒤에 있는 함수가 실행이 됩니다.



다음은 정지 버튼을 설정하는데, 문제는 sleep함수가 나오는 지정된 시간 동안은 정지 명령을 해도 전혀 듣지를 않는 특성이 있습니다. 그래서 이 경우에는 아예 스크립트 자체를 정지 시켜야 한다고 합니다. 



스크립트 자체는 위 스크린샷에 나오는 것처럼 지정을 하면 됩니다. 제 경우에는 settagval이라는 함수에 오타를 내는 휴먼에러를 내서 좀 애를 먹었습니다. 



그래도 타이머를 이용한 회로가 제대로 작동하는 것을 볼 수 있었습니다. 이것으로 어떻게 해서 이번 수업의 내용도 포스팅에 정리하는 데는 성공했는데, 정점 하루의 수업 내용에 들어가는 내용이 많아져서 정리하기가 어려워 진다는 생각이 들기는 합니다. 

반응형