enuSpace professional 2016 기준

enuSpace HMI 편집기를 이용한 동적 디스플레이 기능



Dynamic Script


속성 변경


속성의 변수 타입이 boolean인 속성은 스크립트 내에서는 true, false 값을 할당함으로써 바꿀 수 있으며, wchar 인 속성은 string의 보조 함수인 string.format 함수를 이용해서 바꿀 수 있다. wchar 속성의 변수를 string.format 함수를 사용하지 않고 직접 할당할 경우 처음에 할당되었던 문자의 크기보다 새로이 할당된 문자의 크기가 클 경우 메모리 침범이 발생할 수 있으며, 심해질 경우 프로그램이 정지할 수도 있다. 속성 변수의 이름은 -가 포함될 수 없으며 '-'는 '_'로 대치(속성 : fill-opacity, 변수명 : fill_opacity)하여 변수를 설정하였으므로 반드시 '-'는 '_'로 바꾸어 사용해야 한다.


boolean : visibility, lock, disabled, multiline, password, read-only, want-return, border, number, lowercase, uppercase, static-edge, auto-scroll, horizontal-scroll, vertical-scroll 등.

wchar : id, fill, stroke-dash, stroke, points, d, text, font-family 등.

int : stroke-width, stroke-linejoin, stroke-linecap, text-anchor, font-style, font-weight 등.

float, double : fill-opacity, stroke-opacity, x, y, rx, ry, width, height, translate-x, translate-y, rotate, scale-x, scale-y, center-x, center-y, cx, cy, r, rx, ry, font-size 등. 


색상변경 : 문자열 속성


각 객체의 색상은 텍스트 문자열로 "rgb(0,0,0)" , "black" 또는 "#000000" 처럼 스크립트 내에서 입력함으로써 변경할 수 있다.





onmousedown 이벤트에 의해 index의 값을 바꾸고 index 값에 따라 색상 값을 반환해주는 GetColor함수에서 색상 값을 받아서 사각영역을 채우는 색상 fill값을 바꾼다.





투명도 변경 : float 속성


각 객체의 색상은 0~1 사이의 투명도를 가지며 실수이다. 0은 완전 투명 1은 완전 불투명이다. 





onmousedown 이벤트에 의해 index의 값을 바꾸고 index 값에 따라 투명도 값을 반환해주는 GetOpacity함수에서 투명도 값을 받아서 사각영역의 투명도를 설정하는 fill-opacity 값을 바꾼다.





visibility 변경 : boolean 속성


각 객체의 속성 중 visibility는 객체가 보여질 것인지 보여지지 않을 것인지에 대해 결정하며 조건에 따라 객체가 보여질지 안 보여질지에 대해 스크립트 내에서 설정할 수 있는데 visibility의 변수 타입은 boolean이므로 스크립트 내에서 true 혹은 false로 할당하여 바꿀 수 있다.

다음 그림 예시는 세 개의 문자열 "빨강", "녹색", "파랑"의 visibility속성을 사각형의 마우스 다운이벤트가 한번 발생할 때마다 바뀌는 예시이며, 각각의 문자열은 사각형에 이웃한 객체의 고유한 id를 가지고 id.visibility를 바꾸는 스크립트를 작성한 예제이다.





다음 그림은 visibility를 바꾸는 이벤트 함수가 차례로 실행되어 표시된 상태이고 ○1은 편집 창에서의 표시를 나타내고 ○2는 실행창에서의 표시를 나타낸다. 편집 창에서는 편집을 위해 객체가 완전히 사라지지 않고 hidden 상태를 나타내는 회색 박스를 표시한다. 






enuSpace professional 2016 기준

enuSpace 그래픽 저작기 심볼 제작 기능 (HMI, Logic Library)



HMI 및 Logic 파일을 생성한 후 파일에 Symbol을 정의하여 Picture에서 사용할 수 있으며, 각 Symbol은 사용자가 원하는 이벤트 및 기능 정의를 이용하여 Picture에서 사용할 수 있다. 


HMI 심볼 편집


HMI Symbol은 “그래픽 라이브러리 객체” 라고 불리며 HMI Symbol 생성하는 방법은 아래와 같다. 

1. 생성된 HMI 파일을 선택한 후 마우스 우클릭을 한다.

2. 우클릭 후 나타나는 하위 메뉴 중 “Add Symbol” 항목을 클릭한다.

3. “Add Symbol” 항목을 클릭 하면 화면 중앙에 팝업 다이얼로그가 나타나며, 다이얼로그에 생성할 Symbol 이름을 입력하고 “New” 버튼을 클릭한다.

4. “New” 버튼을 클릭하면, HMI Symbol을 정의할 화면이 나타나며, 선택한 HMI 파일 하위에 생성한 Symbol이 위치해 있다.

아래 그림은 HMI Symbol 생성에 대해 나타낸 것이다.





HMI Symbol이 생성되면 화면에 Symbol을 생성하고 Symbol의 기능 및 이벤트를 정의할 수 있다. HMI Symbol 편집 방법은 아래와 같다.


1. Symbol 생성을 위한 Object를 생성한 후 Object를 선택한다.

2. Object를 선택한 후 편집기 오른쪽에 위치한 속성 창에서 Event Window를 선택한다.

3. Event Window 선택한 후 Event Window를 구성하는 이벤트 함수 중 사용자가 원하는 이벤트 함수에서 Combo Box를 클릭하면 “Add” 라는 메뉴가 나타나며 이를 클릭한다. 

4. “Add” 메뉴를 클릭하면 그래픽 편집기 화면 중앙에 “Script Editor” 팝업 다이얼로그 화면이 나타나며, 여기에 생성하고자 함수 기능을 정의한다.

5. 작성이 완료되면 “Compile” 버튼을 클릭하여 기능 정의가 에러 없이 정상적으로 정의 되었는지 검증할 수 있으며, 결과는 “Script Editor” 화면 하단의 “Output”에서 확인할 수 있다. 

6. “Compile” 버튼을 클릭하여 기능 정의가 완료된 함수는 “Accept” 버튼을 클릭하여 함수를 적용한다.

7. 기능 정의 및 검증이 완료된 함수를 실행해서 결과를 확인해 보기 원할 때는  “Execute” 버튼을 클릭하여 확인해 볼 수 있다. HMI 파일 하위에 생성한 Symbol이 위치해 있다.

아래 그림은 HMI Symbol 편집에 대해 나타낸 것이다.






HMI Symbol 편집이 완료되면, Picture에서 HMI Symbol을 사용할 수 있으며, 사용 방법은 아래와 같다. 


1. 편집이 완료된 HMI Symbol을 사용할 Picture를 선택한다.

2. Picture를 선택한 후 편집기 우측에 있는 속성 창 하단에서 “HMI” 탭 메뉴를 선택한다.

3. “HMI” 탭 메뉴를 선택하며, 생성한 HMI Symbol이 보이며, 이 Symbol을 마우스 드래그를 통해 Picture 화면으로 옮겨 사용할 수 있다.


아래 그림은 HMI Symbol 사용 방법에 대해 나타낸 것이다.





Logic 심볼 편집


HMI Symbol을 생성하는 방법은 아래와 같다. 


1. 생성된 Logic 파일을 선택한 후 마우스 우클릭을 한다.

2. 우클릭 후 나타나는 하위 메뉴 중 “Add Node” 항목을 클릭한다.

3. “Add Node” 항목을 클릭 하면 화면 중앙에 팝업 다이얼로그가 나타나며, 다이얼로그에 생성할 Node 이름을 입력하고 “New” 버튼을 클릭한다.

4. “New” 버튼을 클릭하면, Logic Symbol을 정의할 화면이 나타나며, 선택한 Logic 파일 하위에 생성한 Symbol이 위치해 있다.


아래 그림은 Logic Symbol 생성에 대해 나타낸 것이다.




Logic Symbol이 생성되면 Symbol 간의 연결점인 Connection Pin을 추가할 수 있다. Connection Pin은 하나의 Logic Symbol에서 처리된 결과를 다른 Logic Symbol에 전달할 때 사용되며, 이 Connection Pin은 하나의 Symbol에 여러 개 생성하여 사용할 수 있다. Logic Symbol에서 Connection Pin을 생성하는 방법은 아래와 같다.


1. 생성된 Logic 파일을 선택한 후 마우스 우클릭을 한다.

2. 우클릭 후 나타나는 하위 메뉴 중 “Add Connection Pin” 항목을 클릭한다. 다른 방법으로는 그래픽 편집기 중앙에 위치한 “Connection Pin” 버튼을 클릭함으로 서 “Connection Pin” 을 생성할 수 있다.

3. “Add Connection Pin” 클릭한 후 미리 생성한 Object의 원하는 위치에 클릭하면 “Connection Pin”이 생성된다.


아래 그림은 Logic Symbol의 Connection Pin 생성 방법에 대해 나타낸 것이다.






Logic Symbol이 생성되면 화면에 Symbol을 생성하고 Symbol의 기능 및 이벤트를 정의할 수 있다. Logic Symbol 편집 방법은 아래와 같다.


1. Symbol 생성을 위한 Object를 생성한 후 Object를 선택한다.

2. Object를 선택한 후 편집기 오른쪽에 위치한 속성 창에서 Event Window를 선택한다.

3. Event Window 선택한 후 Event Window를 구성하는 이벤트 함수 중 사용자가 원하는 이벤트 함수에서 Combo Box를 클릭하면 “Add” 라는 메뉴가 나타나며 이를 클릭한다. 

4. “Add” 메뉴를 클릭하면 그래픽 편집기 화면 중앙에 “Script Editor” 팝업 다이얼로그 화면이 나타나며, 여기에 생성하고자 함수 기능을 정의한다.

5. 작성이 완료되면 “Compile” 버튼을 클릭하여 기능 정의가 에러 없이 정상적으로 정의 되었는지 검증할 수 있으며, 결과는 “Script Editor” 화면 하단의 “Output”에서 확인할 수 있다. 

6. “Compile” 버튼을 클릭하여 기능 정의가 완료된 함수는 “Accept” 버튼을 클릭하여 함수를 적용한다.

7. 기능 정의 및 검증이 완료된 함수를 실행해서 결과를 확인해 보기 원할 때는  “Execute” 버튼을 클릭하여 확인해 볼 수 있다. Logic 파일 하위에 생성한 Symbol이 위치해 있다.


아래 그림은 Logic Symbol 편집에 대해 나타낸 것이다.




Logic Symbol 편집이 완료되면, Picture에서 Logic Symbol을 사용할 수 있으며, 사용 방법은 아래와 같다. 


1. 편집이 완료된 Logic Symbol을 사용할 Picture를 선택한다.

2. Picture를 선택한 후 편집기 우측에 있는 속성 창 하단에서 “Logic” 탭 메뉴를 선택한다.

3. “Logic” 탭 메뉴를 선택하며, 생성한 Logic Symbol이 보이며, 이 Symbol을 마우스 드래그를 통해 Picture 화면으로 옮겨 사용할 수 있다.

아래 그림은 Logic Symbol 사용 방법에 대해 나타낸 것이다.





Logic Symbol 객체가 추가된 상태에서는 상단 중앙에 “Transfer” 버튼이 활성화 되고 객체의 입출력 선을 연결할 수 있다.  “Transfer” 의 사용 방법은 아래와 같다. 


1. 사용할 Logic Symbol을 마우스 드래그를 통해 Picture에 위치 시킨다.

2. 그래픽 편집기 화면 상단 중앙에 위치한 “Transfer” 버튼을 클릭하고, 각각의 Logic Symbol에 위치한 “Connection Pin”에 마우스 클릭을 통해 “Transfer” 선을 연결한다.


아래 그림은 Logic Symbol에서 Transfer의 사용 방법을 나타낸 것이다.





선은 출력에서 입력으로 해야 하며, 거꾸로 하면 안 된다. 객체의 입출력을 Transfer로 연결할 때 변수의 타입이 맞지 않으면 에러 메시지가 출력된다. 연결된 Transfer 객체를 선택하면 우측 속성 창에 속성이 표시되며, 아래 그림과 같이 from-id와 to-id가 입력한 시작 객체 ID와 끝 객체 ID가 표시되고, 각 객체의 입출력 변수 명으로 “from-id” 과 “to-id”가 표시된다.






enuSpace professional 2016 기준

enuSpace 그래픽 저작기 라인 객체(Polyine Object - SVG)


그래픽 편집기에서 Polyline Object 생성 방법은 아래와 같다.

1. Polyline Object를 생성할 Picture를 선택한다.

2. 그래픽 편집기 상단의 메뉴에서 “Polyline” 버튼을 클릭한다.

3. “Polyline” 버튼을 클릭하고 선택한 Picture에서 원하는 위치 및 길이만큼 마우스로 클릭하여 Polyline Object를 생성한다.

4. 생성을 완료하려면 “ESC” 버튼을 클릭하여 완료할 수 있다.

5. 생성된 Polyline Object는 그래픽 편집기 오른쪽에 위치한 “Property Window” 에서 설정한다.

아래 그림은 Polyline Object 생성 및 속성 설정 방법을 나타낸다.




Polyline Object Property List

분류

항목

기능

Property

id

고유 식별자 설정

visibility

화면 표시 여부 설정

lock

편집 모드 시 선택 여부 설정

Pen

stoke

외곽선 색상 설정

stoke-opacity

외곽선 투명도 설정

불투명 : 1.0 투명 : 0.0

stoke-width

외곽선 두께 설정

stoke-linecap

외곽선 끝 모양 설정

stoke-linejoin

외곽선의 꼭지점 모양 설정

stoke-dasharray

외곽선 패턴 설정

패턴 입력의 구분자는 ‘ , ’이고 첫 패턴은 실선 두 번째는 공백의 순으로 반복

Layout

points

Polyline의 형상되는 점 좌표 설정

Transform

translate-x

원점으로부터 이동한 거리 X 좌표 설정

translate-y

원점으로부터 이동한 거리 Y 좌표 설정

scale-x

크기 변경 X 좌표 설정

scale-y

크기 변경 Y 좌표 설정

center-x

센터 포인터의 X 좌표 설정

center-y

센터 포인터의 Y 좌표 설정

Style & Class

style

외부 스타일 정의

class

내부 스타일 정의


enuSpace professional 2016 기준

enuSpace 편집기 단축 명령어 기능


그래픽 편집기에서는 객체 편집 시 사용되는 Common Edit Command를 제공하며, 종류는 Copy, Cut, Paste, Delete, Select를 제공한다.

Copy Paste를 하기 전에 선택한 객체를 메모리에 복사하여 놓는다. 키보드 단축키로는 “Ctrl + C”를 눌러 할 수 있고 편집기 화면에서는 아래 그림의 3번 항목을 클릭하여 실행할 수 있다. 객체의 선택은 선택하고자 하는 객체를 영역을 드래그 함으로써 영역 내에 있는 모든 객체를 선택하는 방법과 원하는 객체를 Shift+클릭을 함으로써 추가 할 수 있다.

Cut Paste를 하기 전에 선택한 객체를 메모리에 복사하여 놓고 원래의 선택된 객체 또는 객체들을 삭제한다. 키보드 단축키는 “Ctrl + X”를 눌러 할 수 있으며, 편집기 화면에서는 아래 그림의 1번 항목을 클릭하여 실행할 수 있다. 객체의 선택은 선택하고자 하는 객체를 영역을 드래그 함으로써 영역 내에 있는 모든 객체를 선택하는 방법과 원하는 객체를 Shift+클릭을 함으로써 추가 할 수 있다.

PasteCopy 또는 Cut를 사용하여 메모리에 저장된 객체를 새로운 객체로 생성하는 것이다. 키보드 단축키는 “Ctrl + V”를 눌러 할 수 있고 편집기 화면에서는 아래 그림 1번 항목을 클릭하여 실행할 수 있다.

Delete는 선택한 객체를 삭제하며 키보드 단축키는 “Delete” 버튼을 눌러 실행할 수 있고, 편집기 화면에서는 4번 항목으로 실행할 수 있다.

Select는 객체를 선택할 때 사용되며 편집기에서는 단일 선택, 전체 선택 및 선택해제 기능을 지원한다. 전체선택은 Picture에 있는 모든 객체를 선택하며, 키보드 단축키는 “Ctrl + A”를 눌러 할 수 있다. 선택해제는 Picture에서 객체가 없는 빈 공간을 클릭함으로써 해제 할 수 있다.


기능

단축키

설명

Copy

Ctrl + C

선택한 객체를 복사한다

Cut

Ctrl + X

선택한 객체를 잘라낸다.

Paste

Ctrl + V

복사 및 잘라낸 객체를 붙여 넣는다.

Delete

Delete

선택한 객체를 삭제한다.

Select

Shift + Click

Ctrl + A

객체를 선택하는 기능으로 단일 및 선택 추가, 전체 선택 기능을 제공한다.



아래 그림은 편집기에서 제공하는 Common Edit Command의 위치를 나타낸다.








'enuSpace for moon(2016) > Tutorial Guide' 카테고리의 다른 글

enuSpace 그래픽 저작기 라인 객체(Line Object - SVG)  (0) 2016.01.14
enuSpace Picture page 속성 설정  (0) 2016.01.13
Style 관리  (0) 2016.01.11
Global 관리  (0) 2016.01.11
Logic Symbol 관리  (0) 2016.01.11

enuSpace profession 2016 - Sample Project


enuSapce(엔유스페이스) professional 2016을 이용한 Sample 입니다. 

첨부 파일 다운로드

enuSpace_sample.zip


Sample Project 실행 영상



enuSpace(엔유스페이스) Runtime을 이용한 기동하면.


enuSpace Sample Project 설명.


1. 상단 로고 이미지 속성 변경(visibility)을 이용한 동적 효과 적용하기. 

상단 로고를 특정 시간에 맞추어 변경하기 위한 스크립트를 삽입합니다. 

각 개별 이미지 로고 6개를 불러옵니다.

각 객체의 이벤트 함수 ontaskview() 함수에 아래와 같이 스크립트를 작성합니다.

g_fTimer는 전역변수로 선언하고, 픽쳐단의 ontask()함수에 0.1단위로 증분수행 스크립트 추가.

function ontaskview()

if (math.floor(g_fTimer) % 6 == 5) then

visibility = true

else

visibility = false

end

end 

각 객체는 시간에 따라서 자신이 visibility 속성을 변경함으로서, 다이나믹한 그래픽 효과를 표현합니다.


2. 마우스 오버, 아웃, 다운 이벤트 기능

Main feature 항목의 글에 마우스 오버시 색상 변경과 다운 이벤트에 따라서 화면 페이지 변경을 수행합니다. 


선택한 텍스트 객체에 아래와 같이 스크립트를 추가합니다. 

택스트의 색상값을 변경하는 스크립트와 마우스 다운시 화면 전환을 수행하는 함수를 호출합니다.

function onmouseover()

stroke = string.format("rgb(60,170,60)")

end


function onmouseout()

stroke = string.format("rgb(0,0,0)")

end


function onmousedown()

ChangePicture("window", "picture\\simulation.svg")

end


3. 이웃 객체의 속성 핸들링을 통한 Tool Tip 보여지기 기능

ToolTip 객체를 Group 설정을 한 후 Group 객체의 고유한 아이디를 설정합니다. ID_TOOLTIP

텍스트 객체에 마우스 오버시 ToolTip 객체의 Visibility의 속성을 변경하는 스크립트를 추가합니다. 

function onmouseover()

stroke = string.format("rgb(60,170,60)")

ID_TOOLTIP.visibility = true

end


function onmouseout()

stroke = string.format("rgb(0,0,0)")

ID_TOOLTIP.visibility = false

end


function onmousedown()

ChangePicture("window", "picture\\graphic_component.svg")

end

텍스트 객체에 마우스 오버 및 아웃시 동적 표현을 수행합니다.


4. 로직 심볼 제작 기능

로직 심볼은 생성하는 방법은 Project Explorer를 이용하여, Library 하위에 Logic 디렉토리의 팝업 메뉴를 이용하여 추가하여 제작합니다.

AND Gate를 생성하기 위한 AND Gate를 그림을 드로잉합니다. Connection Pin 객체를 이용하여 인터페이스 변수를 생성합니다. 생성된 핀객체의 이름을 변수의 타입과 이름을 입력합니다.

추가된 객체를 이용하여 연산을 수행하기 위한 스크립트를 작성합니다.


ontaskview()이벤트 함수는 동적인 화면 연출에 사용되는 함수이며, ontask()이벤트 함수는 로직 테스크의 연산 내용을 추가합니다.

function ontaskview()

if(input1 == false) then

ID_INPUT1_LINE.stroke = string.format("rgb(255,0,0)")

elseif(input1 == true) then

ID_INPUT1_LINE.stroke = string.format("rgb(0,255,0)")

end

if(input2 == false) then

ID_INPUT2_LINE.stroke = string.format("rgb(255,0,0)")

elseif(input2 == true) then

ID_INPUT2_LINE.stroke = string.format("rgb(0,255,0)")

end


if(output == false) then

ID_OUTPUT_LINE.stroke = string.format("rgb(255,0,0)")

elseif(output == true) then

ID_OUTPUT_LINE.stroke = string.format("rgb(0,255,0)")

end


end


function ontask()

if(input1 == true and input2 == true) then

output = true

else

output = false

end

end


사용자 정의 logic 심볼을 제작후, Picture단에서 Transfer Line을 이용하여 시뮬레이션 알고리즘을 구현합니다. 


5. logic simulation 기능.

아래 그림과 같이 simulation 페이지를 구성합니다. 

기 제작된 로직 심볼 (Logic Symbol)을 이용하여 화면에 드로잉을 수행합니다. 각 logic 심볼간에는 Transfer line을 이용하여 연결을 수행합니다.

실제 동작시에는 연결된 객체간에는 연산 결과를 전달합니다. 로직 객체를 더블클릭하여 로직의 변수값을 변경하여 시뮬레이션을 수행합니다.


6. 기초객체 및 path 객체를 이용하여 화면 드로잉 기능.

enuSpace pro 2016은 SVG(Scalable Vector Graphics) 포맷과 lua script language를 이용합니다. 

enuSpace 편집기를 이용하여 다양한 객체를 생성하여 적용합니다.


7. 다이나믹 HMI 심볼, Zoom Control을 이용한 화면 네비게이션 기능.

다이나믹 Zoom Control은 HMI Symbol로 제작되어 동작을 수행합니다. 다양한 컴포넌트를 사용자가 제작하거나 공유하여 사용할 수 있습니다. 

샘플의 ZoomControl은 마우스 다운시 스크립트가 동작을 수행하여 자신의 패널 사이즈 맞추어 Zoom 기능을 제공합니다.

Zoom 기능을 위한 ZoomControl 라이브러리 객체의 멤버변수 속성을 지정합니다.  


화면 Navigation을 위하여 Arrow 객체의 마우스 다운스 ZoomControl의 마우스 다운 이벤트를 호출하여 이동하고자 하는 ZoomControl를 호출합니다.

function onmousedown()

ID_PANEL1.onmousedown()

end





8. enuSpace SDK를 이용한 응용 프로그램 개발 

enuSpace SDK는 C++ 응용 프로그램에 라이브러리와 해더만을 추가함으로서 손쉽게 탑재가 가능합니다.

* enuSpace SDK의 API를 이용하여 enuSpace pro 2016 편집기와 유사한 형태의 응용 프로그램을 개발할 수 있습니다.




'enuSpace Reference > enuSpace Sample' 카테고리의 다른 글

Using enuSpace develope working video (demo)  (0) 2016.01.04

+ Recent posts