enuSpace professional 2016 기준

enuSpace SDK를 이용한 동적 함수 등록 및 호출하기


응용 프로그램에서 Runtime Scheduler를 통하여 객체의 스크립트 함수 또는 페이지의 스크립트 함수를 수행한다. 또한 스크립트 이벤트에 따라서 Runtime Scheduler가 응용 프로그램의 Call back 함수를 호출한다. 본 절에서는 Runtime Scheduler에 함수를 전달하거나, Runtime Scheduler로부터 호출되는 방법에 대하여 알아본다.


Sending Commands to the Runtime Scheduler

응용 프로그램에서 Runtime Scheduler를 통하여 함수를 호출 하기 위해서, 사전에 아래 그림과 같이 예시를 생성한다. 


<심볼 객체를 이용하여 그래픽 객체 추가 화면>


1. HMI 심볼 객체를 생성한다. (심볼 객체 생성 방법 참조) 생성될 심볼은 사용자의 함수를 추가하여 작성한다.

2. HMI 시볼 객체를 그래픽 Picture 화면에 추가한 후 Use 객체의 ID를 지정한다. (ID_PUMP) 설정된 프로젝트를 저장한다. 

3. 저장된 프로젝트를 이용하여 응용 프로그램에서 Use 객체의 함수를 호출하여 속성 값을 변경한다.


아래 샘플 코드는 샘플 프로젝트 파일을 이용하여 프로젝트를 로드 수행한 후 특정 객체의 함수를 호출 하는 예시이다.


Examples

C++ 


#include <SvgDefine.h>

#include <enuLibrary.h>


BOOL CSampleDlg::OnInitDialog()

{


HPROJECT m_Project = enuCreateProject();

enuLoadProjectFile(L"d:\\Sample\\Sample.enup");


enuSetRuntimeMode(true);

enuShowRuntimeView(NULL);

HSVG pSvgHandler = enuGetPageClass(L"Picture\\SamplePicture.svg");


if (pSvgHandler)

{

enuExecuteFunction(pSvgHandler, L"ID_PUMP.SetProperty(false, false, 0, 2, \"LABEL\", true, true, true, true)");


return TRUE; 

}



enuExecuteFunction()

본 함수는 SVG 핸들러를 이용하여 함수를 호출하는 API이다.


enuExecuteFunctionByNode()

본 함수는 SVG 핸들러와 노드 핸들러를 이용하여 함수를 호출하는 API이다.





Sending Commands from the Runtime Scheduler

내부 스크립트에서 응용 프로그램에서 생성한 함수를 호출하기 위한 방법에 대하여 알아본다. 내부 스크립트에서 응용 프로그램의 함수를 호출하기 위해서는 응용 프로그램은 다음과 같은 절차를 통하여 함수를 등록 및 적용한다. 


1. 결과값을 디스플레이 하기 위한 Text객체를 추가한다. 추가된 Text의 객체의 아이디를 ID_TEXT로 지정한다.

2. 사각형 객체를 추가하고 마우스다운 이벤트 스크립트 창을 호출한다. 

3. 스크립트 창에 스크립트를 작성한다.

4. 외부함수에 입력 파라미터를 작성하고 컴파일 버튼을 누른다. 주) 컴파일 시 아래와 같은 info 정보가 나타난다. 외부 프로그램이 기동 시 등록 과정에 의한 정보 디스플레이.

info ID_1ZJYsp0::onmousedown AddFunction Recognized internal variable in this function.

Compile OK : Page Name:samplepicture, Object Name:ID_1ZJYsp0, Function Name:onmousedown

<Sending Commands from the Runtime Scheduler>


샘플 프로젝트를 작성하였다면 아래와 같이 함수를 등록하는 코드를 작성한다.

Examples

C++ 


#include <SvgDefine.h>

#include <enuLibrary.h>


int AddFunction(lua_State *L)

{

const char* str;

str = luaL_checkstring(L,1);

CString strPageName(str);


str = luaL_checkstring(L,2);

CString strScriptName(str);


int iInput1 = luaL_checknumber(L,3);

int iInput2 = luaL_checknumber(L,4);


int iReturn = iInput1 + iInput2;

lua_pushnumber(L, iReturn);


return 1;

}


BOOL CSampleDlg::OnInitDialog()

{

HPROJECT m_SpadeProject = enuCreateProject();


enuRegisterFunction(L"AddFunction", AddFunction);


enuLoadProjectFile(L"Sample\\Sample.enup");


enuSetRuntimeMode(true);

enuShowRuntimeView(NULL);

return TRUE; 

}



enuRegisterFunction()

본 함수는 함수를 등록하기 위한 API 함수이며, 사용하기 위해서는 루아 라이브러리를 링크하여야 한다.


아래 그림은 Visual Studio에 루아 라이브러리를 등록하는 방법을 나타낸 것이다


아래 그림은 스크립트 실행 결과를 나타낸 것이다.




enuSpace professional 2016 기준

enuSpace SDK를 이용한 동적 변수 생성 및 관리


응용 프로그램에서 변수를 생성하고 생성된 변수를 업데이트 수행하기 위한 인터페이스 API에 대하여 설명한다. (통합그래픽 편집기에서 제공되는 변수 추가 인터페이스 방법 별도참조)


변수 생성

아래는 샘플 코드는 전역 변수 생성/변경/확인 예시를 보여준다.


C++ 


#include <SvgDefine.h>

#include <enuLibrary.h>


BOOL CSampleDlg::OnInitDialog()

{

HPROJECT m_SpadeProject = enuCreateProject();

enuLoadProjectFile(L"Sample\\Sample.enup");


HSVG pSvgHandler = enuGetGlobalClass(L"global\\global.svg");

enuAddGlobalVariable(L"global\\global.svg", L"int", L"g_iGlobalCount", L"golbal count variable");


HNODE hNode = enuGetGlobalVariableNode(L"g_iGlobalCount");

if (hNode)

{

enuSetVariableValue(pSvgHandler, L"g_iGlobalCount", L"10");


VariableStruct Data;

enuGetAttributeByNode(pSvgHandler, hNode, L"variable", &Data);

AfxMessageBox(Data.strValue);    // 출력 : g_iGlobalCount


enuGetAttributeByNode(pSvgHandler, hNode, L"value", &Data);

AfxMessageBox(Data.strValue););    // 출력 : 10

}


return TRUE; 

}



enuAddGlobalVariable();

기본 프로젝트를 생성하고 나면, global 파일(global\global.svg)이 기본 생성된다. 생성된 global 파일에 전역변수를 추가하고자 하는 경우에 위 함수를 호출하여 동적으로 생성할 수 있다. 변수가 정상적으로 생성되었을 경우, 리턴 값을 true를 반환한다.

Variable Type

Description

bool

Boolean 변수

int

Integer 변수

float

Float 변수

double

Double 변수

wchar

Wide char 문자열 변수


enuGetGlobalClass();

본 함수는 파일이름을 통하여 글로벌 클래스의 핸들을 취득하는 함수이다. 정상적으로 핸들을 취득하였을 경우에는 핸들을 리턴 수행하며, 요청한 클래스의 핸들을 취득하지 못하였을 경우 NULL값을 반환한다.


enuSetGlobalValue();

본 함수는 전역변수의 값을 외부 코드상에서 변경하고자 할 경우에 사용하는 인터페이스 함수이다.


enuSetVariableValue()

본 함수는 SVG 핸들러를 이용하여 변수의 값을 변경하는 함수이다.


enuSetAttributeByNode()

본 함수는 SVG 노드의 속성값을 변경하는 함수이며, 각 노드의 타입 정보에 따라서 입력되는 파라미터의 정보가 달라진다.


enuGetAttributeByNode()

본 함수는 노드의 속성값을 반환받는 함수이며, 각 노드의 타입 정보에 따라서 입력되는 파라미터의 정보가 달라진다.

struct VariableStruct

Description

type

리턴된 결과의 타입 정보

pValue

리턴된 결과의 메모리 주소

strValue

리턴된 결과의 문자열 결과 값


Getting  started with enuSpace SDK

enuSpace SDK를 이용하여 응용프로그램 개발 방법에 대하여 설명한다. 개발하고자하는 응용 프로그램에 SDK header 파일과 라이브러리를 포함한다.

 

Header files 

#include “enuLibrary.h”

#include “SvgDefine.h”

Library files

enuSpaceLib.lib



분류

항목

내용

환경

OS

Windows 8.1

개발도구

Visual Studio 2012

사용언어

MFC, C/C++


응용 프로그램 프로젝트를 생성하기 위해서는 다음과 같은 순서로 생성할 수 있다. 

1. Visual Studio2012를 실행하고 상단 메뉴에서 파일→새로 만들기→프로젝트를 선택한다.

2. 새 프로젝트 창에서 Visual C++→MFC→MFC 응용 프로그램을 선택하고, 프로젝트의 이름과 저장 경로를 입력한다. 

3. 확인 버튼을 클릭 후 MFC 응용 프로그램 마법사를 이용하여 샘플 프로젝트를 생성한다.


응용 프로그램 생성 절차

<응용 프로그램 프로젝트 생성 절차>


생성된 응용프로그램 프로젝트에 enuSpace SDK를 연계하기 위하여 프로젝트의 환경 설정을 수행한다.

1. 상단 메뉴에서 프로젝트→속성을 선택한다.

2. 프로젝트의 속성 페이지가 나타나면, 링커→추가 종속성 컬럼에 enuSpaceLib.lib를 입력한다. 

3. 프로젝트의 소스 코드에 “#include <enuLibrary.h>”를 입력하여 프로젝트의 환경 설정을 마무리 한다.

<enuSpace SDK 라이브러리 추가>


 C++

#include <SvgDefine.h>

#include <enuLibrary.h>


BOOL CSampleDlg::OnInitDialog()

{

HPROJECT m_Project = enuCreateProject();

enuRegisterFunction(L"RemoteChangePicture", RemoteChangePicture);

enuSetRuntimeMode(true);


CString strProjectFile = L"d:\\SampleProject\\sample.enup";

if (enuLoadProjectFile(strProjectFile) == false)

{

AfxMessageBox(L"Project를 로드 하지 못하였습니다.");

return true;

}

enuShowRuntimeView(NULL);

return TRUE; 

}


int RemoteChangePicture(lua_State *L)

{

const char* str;

str = luaL_checkstring(L,1);

CString strPageName(str);


str = luaL_checkstring(L,2);

CString strScriptName(str);


enuChangePictureAsync(strParam1.GetBuffer(0), strParam2.GetBuffer(0));

return 0;

}


HPROJECT enuCreateProject();

처음 기동 시 프로젝트를 생성하는 명령어이며, 프로젝트의 핸들을 반환한다.

bool enuRegisterFunction(wchar_t* strFunction, int (*pfunc)(lua_State* L));

enuSpace 스크립트에서 응용 프로그램의 함수를 호출하고자 하는 경우에, 응용 프로그램의 함수를 등록하여 스크립트에서 사용한다.
본 예시에서는 스크립트에서 RemoteChangePicture라는 함수를 사용하고, 스크립트에서 호출하였을 경우, 응용 프로그램의 RemoteChangePicture 함수가 콜백 함수 형태로 실행된다.

bool enuLoadProjectFile(wchar_t* pStrFileName);

enuSpace 편집기를 통하여 개발된 프로젝트를 로드 수행하는 역할을 수행한다.

void enuShowRuntimeView(HWND hWnd);

프로젝트에 설정된 뷰의 속성에 따라서 뷰를 디스플레이 한다


+ Recent posts