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

CiMon Scada에서 Visual Basic을 이용해서 코딩수업

by 인터넷떠돌이 2017. 11. 13.
반응형

안녕하세요?


이번 포스팅의 내용은 지난주 금요일에 있었단 CiMon Scada에서 어떻게 하면 메세지 박스에 관한 내용을 실습해 보았고, 예시하나를 통해서 새로운 CiMon Scada에서 사용할 수 있는 개발 방법이라고 해야 할까요? 이 한가지에 대해서 한번 포스팅을 하고자 합니다.



일단 새로운 프로젝트를 생성하도록 합니다.



메세지 박스를 띄우기 위한 버튼을 하나 만든다음, 버튼을 누르면, 위 스크린샷에서 보이는 것과 같이 스크립트가 실행이 되도록 만들도록 합니다.



먼저 위 그림을 보시면 Const 라는 것으로 시작하는 것을 하나 있는 것을 보실 수 있으실 것입니다. 이것은 상수를 지정하는 것인데, Const 바로 뒤에는 어떤 문자열이 와도 상관은 없습니다. 중요한 것은 chr$(13)+chr$(10) 이라는 것입니다. 그래서 전체적으로 아래와 같은 방식을 사용하게 됩니다.




Const 아무글귀=chr$(13)+chr$(10)


여기서 중요한 것은 $마크로, 이걸 빼 놓으면 에러가 나며, 13과 10이라는 것은 아스키 코드에서 13번, 줄을 바꾸어라, 그리고 10번 맨 첫머리로 돌아가라 라는 의미가 있습니다. 이런 의미를 가지고서, 맨 처음으로 돌리는 것을 하는 것입니다.



CiMonX에서 실행을 시켜 보고



제대로 뜨는 것을 확인할 수 있었습니다.



다음은 새로운 박스 테스트에 들어가 보도록 합니다.



비주얼 베이직에서 $표시는 문자열 변수를 선언하는 것이라고 들었습니다. 그리고 이번에는 문자열 변수를 선언하면서 AskBox$("문자열") 이런 식으로 입력박스를 만들어 낼 수 있게 되는 것입니다.



이제 CiMonX에서 실행을 시키도록 합니다.



위 스크린샷처럼 문자열은 이렇게 나오고, 입력란은 따로 뜨는 것을 볼 수 있습니다.



이후에 따로 2번째 메세지 박스를 만들 수도 있었습니다.



다음은 위 스크린샷을 보시면, Exit sub이라는 것이 있는 것을 보실 수 있습니다. 즉 위 스크린샷의 코드는 다음과 같은 구조를 띄고 있다고 할 수 있습니다.


if 조건문1 then

  실행문1

  실행문2

  Exit sub

end if 

if 조건문2 then 

  실행문3

  실행문4

end if


위 조건에서 조건문1에 맞는 것이 나오면, 바로 끝나야만 하지만, 문제는 그러고 나서도 조건문2에 해당하는 사항이 있어서 원하지 않게 추가로 실행문3과 실행문4가 나올 수 있는 상황을 막아야 하는데, 이럴 때 등장하는 것이 Exit sub 이라는 명령어를 써서, 그냥 스크립트 전체를 종료시켜야 합니다.



다음 실습을 위해서 새로운 버튼을 만들 도록 합니다.



다음은 MsgBox의 형식에 관해서 인데, 이에 대해서는 아래의 형식을 봐 주셨으면 합니다.


MsgBox("메세지 박스에 들어갈 글귀",ebYesNo,"메세지 박스위 상단에 표시될 글귀")


여기서 가장 중요한 것이 ebYesNo라는 것인데, Yes를 선택하면 6이라는 값이 저장이 되고, No라는 것을 선택하면 7이라는 값이 저장이 되는 특징이 있습니다. 이게 왜 그런지는 모르지만, 비주얼 베이직이 자체적으로 이런 결정을 했다고 합니다. 이 외에 내용은 비주얼 베이직의 레퍼런스 북이라는 공식 PDF파일에 있다고 들었습니다.




일차적으로 Yes와 No를 선택할 수 있는 메세지 박스가 뜨는 것을 볼 수 있습니다.



다음은 과제를 위해서 코딩을 한 것입니다. 위 코드에서는 예/아니오를 선택해야 하는 메세지박스를 출력할 수 있게 하며, 그 결과에 따라서 마지막 메세지 박스에 뜨는 내용이 바뀌는 것을 만든 것입니다. 일단 일련의 코딩을 완료 했습니다.



역시 버튼하나 만들어서 실행시킬 준비를 합니다.



최종 결과입니다. 제 의도대로 성공적으로 나온 것을 볼 수 있었습니다.



다음은 임의의 랜덤한 변수를 생성하는 것을 코딩하고자 합니다. for문을 써서 10번 반복을 하게 되는데, 각각 0에서 100사이의 수 중에 하나씩을 선택하도록 만드는 것입니다. 그래서 For문은 다음과 같습니다.


for x=1 to 10


y=random(0,100)

message=y+dash


next x


위 구문에서 random(a,b) 로 하자면, a에서 b사이에 있는 숫자 중에 아무거나 하나를 집을 수 있다는 것을 의미합니다. 그리고 나서 MsgBox "글귀" & dash & 변수 라고 하면, 여기서는 &를 써주면, 이어서 붙여서 메세지 박스에서 변수의 값과 상수를 처리할 수 있습니다. 위에 올라온 스크린샷을 잘 보시면, dash는 줄 바꿈을 위한 상수라는 것을 아실 수 있습니다.



이번에도 성공적으로 제 의도대로 잘 나온 것을 볼 수 있었습니다.



이제 새로운 프로젝트를 실행할 차례입니다. 이번에는 화장실 밸브라고 해서, 화장실 소변기에 사람이 서서 일정 시간이 지나면 잠시 물이 내려오고, 그 다음에 다시 멀어지면 물이 내려오게 하는 것입니다.



디자인을 하는 작업은 그런데로 쉬웠습니다.



하지만 가지가지 시도를 해 보았지만, 그다지 여의치는 않았습니다.




여기서의 정답은 아날로그 태그에 태그값 변경시 태그 동작을 실행함이라고 태그 동작을 지정하는 것이 핵심이라고 할 수 있었습니다. 이럴 경우 조금이라도 변할 때 마다 스크립트를 실행하거나 감지해서 값을 변화시키는 등의 일이 가능하다는 것입니다.



다음으로 중요한 것은, 디지털 태그의 값이 변할때 스크립트를 실행되도록 지정하는 것입니다. 이게 왜 중요하냐 하면.....



먼저 아날로그 태그의 값이 변할 때 실행되는 스크립트 안에서 디지털 태크의 값을 바꿔서 settagval 함수로 쓰면



따로 버튼이나 도형을 클릭하지 않아도, 저절로 태그동작에서 지정한 스크립트를 실행시킬 수 있다는 것입니다. 이전까지는 버튼이나 도형을 건드릴 때만 runscript가 되는 것으로 생각을 했지만, 그래도 이렇게 스크립트 내에서 디지털 태그의 값을 변화시키는 것으로 또 다른 스크립트를 작동시킬 수 있다는 것이 바로 핵심이라고 할 수 있습니다.


이래저래 수업의 내용이 풀로 이어져서 포스팅의 내용이 너무 함축적이라는 생각이 드실 건데요, 실제로 수업의 내용도 상당히 압축되어 있는 면이 있기는 있습니다. 그래도 어떻게 지금은 따라는 가고 있는데, 쉽지는 않지만, 그래도 불가능은 아니라는 생각이 듭니다. 조금 머릿속이 복잡하기는 하지만, 그래도 그럭저럭 정리를 하나하나 하면서 진도를 나아가는 중입니다.


반응형