페이지

2016년 3월 18일 금요일

pvdevelop 프로젝트 -UI 편집 방법 - RadioButton 위젯 사용법

radio button 위젯을 추가해 봅시다.

GUI 작화는 알아서 하시기를...

그림 1.라디오 버튼테스트용 GUI

사용한 라디오버튼 위젯 설정은 다음을 참조하시기 바랍니다.

위젯위젯 이름
radioButtonrb_left
radioButtonrb_center
radioButtonrb_right

컴파일 후 pvbrowser에서 확인 후 봅시다.

그림 2.pvbrowser 실행화면

라디오 버튼을 누를 때 어떤 이벤트가 발생하는지 알아 봅시다.

그림 3.radiobutton 관련 이벤트 메시지

BUTTON_RELEASED_EVENT 밑에 보면 RADIOBUTTON_EVENT id=8 (1) 이라는 새로운 이벤트가 보입니다. center 라디오 버튼을 누르면 RADIOBUTTON_EVENT id=8 (0), RADIOBUTTON_EVENT id=9 (1) 이라는 식으로 나타납니다.

 어렵지 않습니다. 한번 보죠. 라디오 버튼 이벤튼 메시지 다음에 오는 id 는 잘 알다시피 위젯 넘버입니다. 그럼 () 안에 있는 0, 1 은 무엇을 의미할까요. 눈치 채셨겠지만, 0은 선택되지 않았다. 1은 선택되었다. 입니다.
 pvbrowser에서 라디오 버튼을 무작위로 눌러 보십시오,  방금 선택된 라디오 버튼은 ON 되고, 이전에 선택되었던 버튼은 OFF 됩니다.

라디오 버튼이 체크되었을 때, 수행할 코드는 RADIOBUTTON_EVENT에 대응하는 slotRadioButtonEvent에 넣어주면 됩니다.

위젯에 대응하는 동작 코드는 위젯 이벤트가 발생시키는 이벤트 명을 추적한 후, 이 이벤트를 처리하기 위한 함수에 코드를 작성하면 됩니다. 매우 쉽습니다. pvserver 프로젝트 파일을 처음 접했을 때 어디서 부터 접근해야 할 지... 어찌보면 거의 절망한 적도 있지만. 앞에서 설명한 내용들이 머리속에 들어오면서 부터는 매우 쉽게 접근할 수 있었습니다. 아직 이해가 되지 않는 분들이 있으시다면 앞에서 설명한 내용들을 다시 한번 찬찬히 검토하십시오. 앞에 있는 내용을 이해하였다면 반 이상 성공하신 겁니다. 아니 간단한 프로젝트는 직접 만드실 수 있습니다. 추후 위젯 부분을 어느선까지 설명할 지 모르겠지만 위젯 사용 방법은 동일합니다.

앞서 설명한 라벨 위젯은 기본적으로 왼쪽 정렬로 문자를 표시합니다. 방금 만든 라디오 버튼 위젯을 이용하여 lb_10 라벨 위젯의 정렬 방식을 변경해 보겠습니다.

slotRadioButtonEvent 함수를 다음과 같이 수정하여 주십시오.




추가된 부분은 RadioButtonEvent가 발생하였을 때, 이벤트가 발생한 위젯 id를 판단하여 라벨의 정렬방식을 바꿔준 것 밖에 없습니다. 라벨 정렬 방식은 pvSetAlignMent 함수를 이용하면 됩니다. switch 조건문 대신 더 좋은 코드를 알고 계시면 변경해 사용하시기 바랍니다.
자, 코드가 추가되었으니 다음은...

코드를 컴파일 후 라디오 버튼을 눌러 보십시오, lb_10 라벨 위젯이 선택된 정렬 방식에 따라 정렬되는 것을 확인 할 수 있습니다.

그림 4.Center 라디오 버튼 선택

그림 5.Right 라디오버튼 선택

pvdevelop 메뉴얼 pvslib 라이브러리 관련 항목을 검색하면 alignment Enum에 관한 내용을 확인 할 수 있습니다. 아래와 같은 것을 지원합니다.(솔직히 잘 사용하지는 않습니다.)

AlignmentFlags내 용
AlignAuto자동 정렬
AlignLeft왼쪽 정렬
AlignRight오른쪽 정렬
AlignHCenter-
AlignJustify-
AlignHorizontal_Mask-
AlignTop-
AlignBottom-
AlignVCenter-
AlignVertical_Mask-
AlignCenter-

enum을 다쓰셔도 되고 대응되는 숫자를 넣어주셔도 됩니다. AlignAuto의 경우 0, 순서대로 숫자가 증가됩니다. 그럼 AlignRight은 .... 예 2를 넣어주시면 됩니다.


추가...
라디오 버튼 위젯은 기본값이 0, 즉 처음 실행하면 아무 것도 선택되어 있지 않습니다. 일반적으로 라디오 버튼을 이용할 때는, 기본적으로 한 가지가 선택된 단계로 많이 사용합니다. 어떻게 해야 할 까요?

RadioButton 위젯 지원 함수들을 살펴보면 pvSetChecked()함수가 있습니다. 이 함수를 이용하면 될 것 같네요. 한번 해 볼까요.
사용할 함수는 결정되었고 처음 실행할때 반영이 되어야 하며, rb_left 라디오버튼 위젯의 기본값을 0에서 1로 변경하여야 합니다.

mask 프로그램이 실행될 때 맨 처음 실행되는 부분은 slotInit() 함수 입니다. 어렵게 생각하지 마시고 여기다 코드를 넣어 보겠습니다.




pvSetChecked 함수의 3번째 인자는 0, 1의 값을 가질 수 있습니다. 0은 off 1은 ON이라고 생각하시면 됩니다. 자 컴파일 후 pvbrowser에서 실행해 보죠.

그림 6. 실행화면
그림 6과 같은 화면이 나타납니다. LEFT 라디오 버튼이 기본 선택되어 ON되어 있습니다.
쉽죠...


쉽다고 생각하시면 하나 더 해 보죠.
나는 오른쪽 정렬버튼이 필요없다. 위젯을 지우시면 됩니다. 너무 과감한가...
저는 지우지 않고 비활성 상태로 만들어 보겠습니다.
비활성 상태를 만들기 위해 사용할 함수는 pvSetEnabled() 함수를 사용하면 됩니다.
추가된 코드는 다음과 같습니다. 똑같이 mask 처음 실행하는 단계부터 반영하기 위해 slotInit() 함수에 넣어 주었습니다.



pvSetEnabled() 함수의 3번째 인자는 0, 1입니다. 기본적으로 위젯이 생성되면 이 속성에 대한 위젯의 기본값은 1입니다. 하지만 저는 rb_right 위젯을 비활성화 시키기 위해 0을 넣어 주었습니다. 자 확인해 봅시다.

그림 7. 라디오 버튼 비활성화
그림 7과 같이 Right 라디오 버튼이 비활성화 됩니다.

기타 위젯 관련 조작은 이런식으로 함수를 통해 수행할 수 있습니다.
어찌보면 생노가다 일 수도 있습니다. 하지만 다른 SCADA도 원하는 것을 세부적(세밀하게) 제어하기 위해서는 script 언어를 사용하여야 합니다. 어찌보면 더 복잡해 줍니다.

 그리고 사용 SCADA 시스템 대부분은 basic 언어를 이용한 script를 지원해 줍니다. 제가 확인한 시스템 중 wincc 가 유일하게 C언어를 스크립 언어로 지원해 주는 것으로 알고 있습니다. 비트 조작을 많이 해야하는 경우 제가 볼때 C 언어가 다소 유리합니다.

pvbrowser를 잘 활용하는 경우 제가 볼때 다른 SCADA 시스템보다 유리한 점도 많이 있는 것 같습니다. 우선 코드를 컴파일한 후 실행하기 때문에 script를 실행하는 시스템보다 처리 속도가 빠를 뿐 아니라 코드의 크기가 어찌 보면 매우 작다고 할 수 있습니다.

댓글 없음:

댓글 쓰기