enuSpace를 이용한 HMI 라이브러리 생성 및 적용 방법 (1/2)


본 강좌에서는 다이나믹 데이터 디스플레이를 HMI Panel 라이브러리 제작하는 과정을 포함하고 있습니다.


동영상 미리보기



New Project

새로운 프로젝트를 생성하기 위해서 Home->New->New Project 선택를 선택합니다.


New Project (Popup Window) 윈도우가 나타납니다. 솔루션 이름과 솔루션을 저장할 디렉토리를 설정후 OK 버튼을 클릭합니다.


New Hmi library

Project Explorer->Library->Hmi 아이템을 선택후 마우스 오른쪽 버튼을 클릭하여 팝업메뉴를 호출한다. 팝업메뉴 Add New Hmi Library를 선택하여 라이브러리의 이름을 입력합니다.


Project Explorer에 추가된 hmi_library.svg 파일을 선택후 마우스 오른쪽 버튼을 클릭하여 팝업메뉴를 호출한다. 팝업메뉴 Add Symbol을 선택하여 심볼의 이름을 LABEL_VALUE입력하고 New 버튼을 클릭합니다. 


Project Explorer에서 앞에서 추가한 라이브러리를 선택하면 라이브러리 편집 Picture Window가 나타납니다.


다이나믹 디스플레이를 위한 패널 제작을 위하여 그래픽 편집도구를 이용하여 다음과 같이 구성합니다. 사각형 객체와 문자객체를 추가합니다.


문자객체에 데이터를 디스플레이할 경우, 항상 사각형의 중앙정렬이 되도록 문자객체를 선택하고 Properties Window의 속성 text-anchor의 값을 middle로 설정합니다.  

참고사이트 : https://www.w3.org/TR/SVG/text.html#TextAnchorProperty


라이브러리를 OOP(Object Oriented Programming)기반으로 제작하기 위해서 멤버변수를 추가합니다. 디스플레이할 값과 연동하기 위한 변수를 추가합니다. Project Explorer->lesson2->Library->Hmi->hmi_library.svg->LABEL_VALUE를 선택하거나, 빈 공간을 선택합니다. 선택후 Properties 에서 변수를 추가합니다.  


데이터 연동시 두가지 방법으로 추가가 가능합니다. 라이브러리의 멤버함수 ontaskview()에 추가하는 방법과 TEXT 객체의 멤버함수 ontaskview()함수에 추가하는 방법입니다.


라이브러리의 멤버함수에 ontaskview()함수에 추가하는 스크립트 코드는 아래와 같습니다.

function _ontaskview()

{

//TODO Add your javascript code here

ID_LABEL.textContent = m_value.toString();

}

TEXT객체에 고유한 ID이름을 설정하고 고유한 ID값을 이용하여 텍스트의 값을 멤버변수 m_value의 값을 문자열로 치환하는 방법입니다.


TEXT객체의 ontaskview()함수에 추가하는 스크립트 코드는 아래와 같습니다.

function _ontaskview()

{

//TODO Add your javascript code here

textContent = m_value.toString();

}

TEXT객체 자체에 추가하는 스크립트 코드는 자신의 ID값을 적용할 필요없이 textContent 속성값을 호출하면 됩니다.


본 강좌에서는 라이브러리의 ontaskview() 함수를 이용하여 구현합니다. 

이로써 값을 디스플레이하는 다이나믹 패널이 제작 완료되었습니다.


Using HMI Library in picture

앞에서 제작한 다이나믹 라이브러리를 이용하여 픽쳐를 구현해보도록 하겠습니다.

Project Explorer의 Picture를 선택후 오른쪽 버튼을 클릭하여 팝업메뉴를 호출합니다. sample로 입력후 Create 버튼을 클릭하여 새로운 픽쳐 페이지를 생성합니다.


HMI 라이브러리 창을 클릭후 앞에서 생성한 라이브러리를 선택 후 Drag & Drop으로 객체를 생성합니다.

생성된 객체를 선택한후 속성창의 Variable Window에서 앞에서 추가한 멤버변수가 나타나고 값을 할당하기 위한 Set Attribute항목이 나타납니다. #m_value의 값으로 입력할 수 있는 타입은  2가지입니다. 

1. 상수값을 입력합니다.

2. 인터페이스 되고자 하는 변수를 입력합니다.

어떠한값도 입력하지 않았을 경우에는 초기값을 유지합니다.


테스트를 위해서 Ribbon Menu->Script Operation의 Run 버튼을 클릭하여 스크립트를 기동합니다. 0으로 디스플레이 되는것을 확인할 수 있습니다. 50을 입력합니다. 아래 그림과 같이 50으로 변경되어 디스플레이 됨을 확인할 수 있습니다.

Set Attribute에 변수를 할당하기 위한 변수가 없기 때문에 sample.svg에 멤버변수를 추가하여 연동을 합니다. Project Explorer의 Picture하위 sample.svg를 선택하거나 Picture Window의 배경을 선택합니다. 속성창에서 Variable Window에서 픽쳐 변수를 생성합니다.

변수가 생성이 되었다면, 픽쳐의 멤버함수 ontask()함수에 lua 스크립트를 이용하여 추가합니다. enuSpace의 lua 스크립트를 사용하는 경우는 특정 모델에 해당하는 연산을 수행하고자 할 경우에는 ontask()함수를 사용합니다. ontask()함수는 lua 스크립트에서만 추가가능합니다.

다음과 같이 루아 스크립트를 추가합니다.

function _ontask()

--TODO Add your lua script code here

m_double = m_double + 1

if (m_double > 100) then

m_double = 0

end

end

Ribbon Menu의 Home->Script Operation의 Run 버튼을 클릭하면, Task의 logic_svg의 속성 Cycle(Hz)값에 따라 연산을 수행합니다. 간단하게 0에서 100까지 증가하는 연산을 구성하였다면, 앞에서 생성한 HMI 객체를 선택하고 Variable Window의 SetAttribute의 #m_value의 값에 #m_double을 입력합니다.


Picture에 추가한 멤버변수를 HMI 라이브러리의 변수를 연결을 수행하였습니다. 연결시 외부 데이터의 인터페이스를 수행하는 경우에는 변수명 앞에 #을 입력하여야 합니다. #의 의미는 데이터의 인터페이스를 의미합니다.

Home->Runtime 버튼을 클릭하여, 실제 동작화면을 통하여 변수값 변경 및 색상값 변경에 대한 결과를 확인할 수 있습니다.


패널의 색상 및 사이즈를 조정하시고자 하는 경우가 발생할 경우에 별도의 라이브러리를 만들지 않고 라이브러리의 기능을 확장하여 사용할 수 있습니다.

다음 강좌에서는 HMI 라이브러리의 확장 사용방법에 대하여 알아보도록 하겠습니다.

enuSpace를 이용한 HMI 라이브러리 생성 및 적용 방법(2/2)

- 이엔유 주식회사- 


enuSpace for mars를 이용하여 첫 프로젝트 만들기


동영상으로 미리보기

lesson1.zip


New Project

새로운 프로젝트를 생성하기 위해서 Home->New->New Project 선택를 선택합니다.


New Project (Popup Window) 윈도우가 나타납니다. 솔루션 이름과 솔루션을 저장할 디렉토리를 설정후 OK 버튼을 클릭합니다.


Project Explorer창에 Task 하위 logic_svg와 Global 하위 global.svg가 기본으로 생성되어 나타납니다.


Project Explorer창에서 Task 하위 logic_svg선택하면 Script Operation->RUN 수행시 1초에 수행되는 타이머 횟수 입니다. 기본 24 Cycle로 설정됩니다. Task에 외부 모듈을 추가할 수 있는 습니다. 각 Task의 In, Out에 대한 설정을 수행하여 TASK를 제어할 수 있습니다.


Project Explorer창에서 Global 하위 global.svg는 전연변수 추가 및 전역함수를 추가하여 모든 픽쳐에서 공용으로 호출하여 활용할 수 있습니다.

global.svg의 Event Window에서 Script Type을 text/javascript를 선택합니다.


New Function

User Function의 <New>를 선택하여 Javascript Editor를 창을 엽니다.

간단하게 숫자형 입력값을 주면, 색상값을 반환하는 함수 GetValueColor를 추가합니다.

function GetValueColor(fValue)

{

var color;

if (fValue<0)

color = "rgb(0,0,0)";

else if (fValue>0 && fValue <=5)

color = "rgb(15,75,165)";

else if (fValue>5 && fValue <=10)

color = "rgb(30,110,200)";

else if (fValue>10 && fValue <=15)

color = "rgb(60,160,240)";

else if (fValue>15 && fValue <=20)

color = "rgb(80,180,250)";

else if (fValue>20 && fValue <=25)

color = "rgb(130,210,255)";

else if (fValue>25 && fValue <=30)

color = "rgb(160,240,255)";

else if (fValue>30 && fValue <=35)

color = "rgb(200,250,255)";

else if (fValue>35 && fValue <=40)

color = "rgb(230,255,255)";

else if (fValue>40 && fValue <=45)

color = "rgb(255,250,220)";

else if (fValue>45 && fValue <=50)

color ="rgb(255,232,120)";

else if (fValue>50 && fValue <=55)

color = "rgb(255,192,60)";

else if (fValue>55 && fValue <=60)

color = "rgb(255,160,0)";

else if (fValue>60 && fValue <=65)

color = "rgb(255,96,0)";

else if (fValue>65 && fValue <=70)

color = "rgb(255,50,0)";

else if (fValue>70 && fValue <=75)

color = "rgb(225,20,0)";

else if (fValue>75 && fValue <=80)

color = "rgb(192,0,0)";

else 

color = "rgb(0,0,0)";


return color;

}


New Variable

global.svg에 전역변수 하나를 추가합니다. type은 double형으로 변수명은 g_double로 설정합니다.


New Picture

Project Explorer의 Picture를 선택후 오른쪽 버튼을 클릭하여 팝업메뉴를 호출합니다. sample로 입력후 Create 버튼을 클릭하여 새로운 픽쳐 페이지를 생성합니다.


새로운 픽쳐가 생성된후, Project Explorer 윈도우에서 Picture하위 sample.svg를 선택한다. Properties 윈도우창에서 Event Window 선택후 ontask를 선택하여 Script Editor에 다음과 같이 코드를 작성하고 Compile 버튼 클릭후 Accept 버튼을 클릭하여 스크립트를 추가한다.

function _ontask()

--TODO Add your lua script code here

g_double = g_double + 1

if (g_double > 100) then

g_double = 0

end

end

위 코드는 루아 스크립트로 작성된 코드이며, 앞에서 추가한 전역 변수에 0 ~ 100사이의 값으로 업데이트를 수행하는 코드입니다.

* ontask 함수는 루아 스크립트의 경우에만 등록할 수 있다. ontask함수는 프로젝트 로딩시 스케쥴러의 요청에 따라 주기적으로 (초기값 1초에 24번) 호출되는 함수이다. 

위 코드를 작성후 값을 확인할 수 있도록 Graphic Window에 Text 객체를 추가하여 보자. 추가된 Text 객체에 Javascript를 추가한다. 화면이 로딩되어 동작을 수행하는  동안 주기적으로 호출되는 함수인 ontaskview()함수를 아래 코드와 같이 추가하여 본다.

function _ontaskview()

{

//TODO Add your javascript code here

textContent = g_double.toString();

}



사각형 객체를 추가하여 색상값 변경 코드를 추가한다. 

function _ontaskview()

{

//TODO Add your javascript code here

fill = GetValueColor(g_double);


Home->Runtime 버튼을 클릭하여, 실제 동작화면을 통하여 변수값 변경 및 색상값 변경에 대한 결과를 확인할 수 있습니다.



다음으로 강좌는 다이나믹 라이브러리로 제작하여 변수값 모니터링하는 방법에 대하여 알아보도록 하겠습니다.


- 이엔유 주식회사 - 



enuSpace for mars 개발 환경 및 구조


enuSpace for mars?

엔유스페이스는 HMI/SCADA/DCS/IOT분야에서 활용되는 다기능 통합 개발자 솔루션입니다. 그래픽 편집 및 런타임 뷰어 기능을 포함하고 있으며, 동적 데이터 가시화 도구를 제공합니다. 객체 지향 프로그래밍(Object Oriented Programming:OOP) 개념을 도입한 사용자 정의 라이브러리를 생성하여 그래픽 컴포넌트로 적용 가능합니다.

엔유스페이스는 동적 디스플레이와 시뮬레이션 도구가 통합되어 로직 및 알고리즘 라이브러리 블럭을 이용하여 데이터 연결선만으로 플로우베이스 프로그래밍(Flowbased Programming)이 가능합니다. 연산결과는 동적 디스플레이 객체를 통하여 표현합니다.

엔유스페이스는 소프트웨어 개발자 도구(Software Development Kit :SDK)를 제공하며, SDK 그래픽 기능을 활용하여 빠르고 수려한 윈도우 그래픽 프로그램을 개발할 수 있습니다. 


운영환경 : Windows 7, Windows 10(Recommand)


1. Ribbon menu

Ribbon menu는 사용자가 화면을 제작을 위한 메뉴와 운영에 필요한 메뉴가 구성되어 있습니다.


2. Project Explorer

Project Explorer는 현재 열려진 프로젝트의 모든 정보를 제공합니다. 


3. Debug output

각종 출력 메세지를 통하여 프로젝트의 디버깅을 수행합니다.


4. Graphic window

Project Explorer의 픽쳐 아이템에 대한 그래픽 정보를 제공합니다. 화면을 편집및 수정을 위한 인터페이스를 제공합니다.


5. Properties Window

각 객체의 속성에 대한 정보를 제공하며, 각 속성 아이템에 대하여 속성 변경처리를 수행합니다. 속성창은 객체의 속성, 객체의 이벤트, 객체의 변수에 대하여 설정할수 있는 인터페이스를 제공합니다.

* 객체의 이벤트에 사용되는 스크립트 언어는 Lua, Javascript language를 지원하며 객체의 속성을 변경하고자 할 경우에는 속성창의 이름을 이용하여 동적으로 스크립트에서 제어할 수 있습니다. fill-opacity와 같이 -가 포함된 문자는 fill_opacity의 변수로 접근합니다.


6. Logic Library Window

로직 라이브러리의 리스트를 보여줍니다. 로직 라이브러리를 선택 Graphic window에 마우스를 이용한 Drag & Drop을 이용하여 객체를 추가합니다.


7. HMI Library Window 

HMI 라이브러리의 리스트를 보여줍니다. HMI 라이브러리를 선택 Graphic window에 마우스를 이용한 Drag & Drop을 이용하여 객체를 추가합니다.



enuSpace for mars introduce


엔유스페이스는 HMI/SCADA/DCS/IOT분야에서 활용되는 다기능 통합 개발자 솔루션입니다. 그래픽 편집 및 런타임 뷰어 기능을 포함하고 있으며, 동적 데이터 가시화 도구를 제공합니다. 객체 지향 프로그래밍(Object Oriented Programming:OOP) 개념을 도입한 사용자 정의 라이브러리를 생성하여 그래픽 컴포넌트로 적용 가능합니다.

엔유스페이스는 동적 디스플레이와 시뮬레이션 도구가 통합되어 로직 및 알고리즘 라이브러리 블럭을 이용하여 데이터 연결선만으로 플로우베이스 프로그래밍(Flowbased Programming)이 가능합니다. 연산결과는 동적 디스플레이 객체를 통하여 표현합니다.

엔유스페이스는 소프트웨어 개발자 도구(Software Development Kit :SDK)를 제공하며, SDK 그래픽 기능을 활용하여 빠르고 수려한 윈도우 그래픽 프로그램을 개발할 수 있습니다


Main features

  • Task model scheduling and control the task model.

  • Design symbol and drawing pictures for simulation and monitoring.

  • Advanced GUI Programming. (Flowbased Programming)

  • Extended file format. (Scalable Vector Graphics + Lua Script Language)

  • Versatile software tool to develop and display dynamic graphical user interfaces.

  • Graphic Component . (Easy to development User Application Program)

  • Making Dynamic Symbols & Logic Symbols.

  • Web server and extension module support.

  • IoT(Internet of Things) devices management and control.




RESTful API and JSON


RESFful API와 JSON을 사용하여 클라이언트 프로그램 만들기

enuSpace for mars 서버는 클라이언트 웹 요청에서 대하여 JSON 데이터를 반환을 수행합니다. enuSpace for mars 클라이언트 프로그램은 HTTP 라이브러리 함수를 이용하여 프로그래밍이 가능합니다.

  • enuSpace 서버와의 요청 RESTful API 
  • JSON은 enuSpace의 요청정보에 대한 응답을 나타냅니다.


enuSpace for mars는 서버측에서 JavaScript를 이용하여 웹 기반 언어로 작성하고 클라이언트의 페이지 요청에 대하여 JavaScript가 포함된 함수를 포함하고 있습니다.

웹 기반 응용 프로그램은 JavsScript로 작성된 클라이언트 코드에 적합하지만, Java, Python, C++, C# 및 기타 많은 HTTP 지원 프로그래밍 언어를 사용하여 클라이언트 응용 프로그램을 개발할 수 있습니다.


기본 제공 RESTful API


확장 모듈을 이용하여 사용자 정의 RESTful API를 활용하여 적용할수 있습니다.

확장 모듈을 이용한 RESTful API 적용 방법



RESTful API - getpicturevalue

특정 픽쳐에서 사용된 변수의 현재 값을 요청

--------------------------------------------

Description

enuSpace 서버측에 특정 픽쳐에서 사용된 변수의 현재 값을 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/getpicturevalue?page=sample.svg

Query Parameters

        page : svg filename

Example : ?page=sample.svg

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

Body Example

{

  "RESULT": "OK",

  "RESULT_CODE": "RESULT_OK",

"MESSAGE": "GETPICTURE VALUE COMPLETE",

"TIME_FORMAT": "SIM",

"TIME": "2017-04-19 10:46:23.001",

  "VALUES": {  "VARIABLE":"ID_AND.input" , "VALUE":"10"  },{  "VARIABLE":"ID_AND.output" , "VALUE":"10" }

}

--------------------------------------------

Sample Call

JavaScript

function getPictureValue(page)

{

  var xmlHttp = new XMLHttpRequest();

  var strUrl = "getpicturevalue" ;

var strParam= "page="+page;


    xmlHttp.onreadystatechange=function()

    {

        if (xmlHttp.readyState==4 && xmlHttp.status==200)

        {

            var msg = xmlHttp.responseText;

            var arr;

            if(msg != "")

            {

                arr = JSON.parse(msg);

            }

    };

  xmlHttp.open("POST", strUrl, true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


RESTful API - gethistoricaldata

특정변수의 히스토리 데이터에 대하여 값을 요청

--------------------------------------------

Description

enuSpace 서버측에 데이터베이스의 변수 히스토리 값을 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/gethistoricaldata?tagid=@043DFEDEFD. A0&duration=300&endtime=0

Query Parameters

        tagid : database tagid

        duration : duration time

        endtime = 0      // 0->current time

Example : ?tagid=@043DFEDEFD. A0&duration=300&endtime=0

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

TIME_FORMAT : "SIM" or "SYS" -> SIM : Simulation Time, SYS : System Time

Body Example

{

  "RESULT": "OK",

  "RESULT_CODE": "RESULT_OK",

"MESSAGE": "GETHISTORICAL DATA COMPLETE",

"TIME_FORMAT": "SIM",

"TAGID": "@043DFEDEFD. A0",

  "VALUES": {  "TIME":"2017-04-19 10:46:23.001" , "VALUE":"84"  },{  "TIME":"2017-04-19 10:46:21.959" , "VALUE":"77"  }

}

--------------------------------------------

Sample Call

JavaScript

function gethistoricaldata(tagid, duration, endtime, datalist)

{

  var xmlHttp = new XMLHttpRequest();

  var strUrl = "gethistoricaldata" ;

var strParam= "tagid="+tagid+"&"+"duration="+duration+"&"+"endtime="+endtime;

xmlHttp.open("POST", strUrl, false);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

var msg = xmlHttp.responseText;

var arr = JSON.parse(msg);

    if (arr.RESULT == "OK")

{

        var values = arr.VALUES;

        if(values.length > 0)

        {

            if(arr.TIME_FORMAT == "SIM")

            {

                for(var i in values)

                {

                    var recive_time = new Date(values[i].TIME).valueOf();

                    var sub_time = new Date("1601-01-01 00:00:00.000").valueOf();

                    var x = recive_time - sub_time;

                    var y = parseFloat(Number(values[i].VALUE));

                    var point_data = new data_point(x, y);

                    datalist.unshift(point_data);

                }

            }

            else if(arr.TIME_FORMAT == "SYS")

            {

                for(var i in values)

                {

                    var x = new Date(values[i].TIME).valueOf();

                    var y = parseFloat(Number(values[i].VALUE));

                    var point_data = new data_point(x, y);

                    datalist.unshift(point_data);

                }

            }

        }

    }

    else

    {

        console.log("gethistoricaldata: 받아오기 에러");

    }

}


RESTful API - setvalue_package

특정변수 리스트에 대하여 값 설정 요청

--------------------------------------------

Description

enuSpace 서버측에 데이터베이스의 변수 리스트의 값을 설정 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/setvaue_package?tagid_list={“@043DFEDEFD. A0”:”10”, “@043DFEDEFD. A1”:”20”}

Query Parameters

        tagid_list : tagid list

Example : ?tagid_list={“@043DFEDEFD. A0”:”10”, “@043DFEDEFD. A1”:”20”}

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

Body Example

{

“RESULT”:”OK”,

“RESULT_CODE”:”RESULT_OK”,

“MESSAGE":””

}

--------------------------------------------

Sample Call

JavaScript

function setvalue_package()

{

var tag_id1= document.getElementById("tagid1").value;

var setvalue1 = document.getElementById("setvalue1").value;

var tag_id2= document.getElementById("tagid2").value;

var setvalue2 = document.getElementById("setvalue2").value;

var xmlHttp = new XMLHttpRequest();

var strUrl = "setvalue_package" ;

var text = "{\"" +  tag_id1 +  "\":\""  + setvalue1 + "\",\""  +  tag_id2 +  "\":\""  + setvalue2 + "\"}";

var strParam= "tagid_list="+text;  

xmlHttp.onreadystatechange=function()

{

if (xmlHttp.readyState==4 && xmlHttp.status==200)

   {    

    var msg = xmlHttp.responseText;

var arr = JSON.parse(msg);

if (arr.RESULT == "OK")

{

location = "http://192.168.10.21:8080/main.html";

}

   }

};

xmlHttp.open("POST",strUrl,true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


RESTful API - getvalue_package

특정변수의 리스트에 대하여 값을 요청

--------------------------------------------

Description

enuSpace 서버측에 데이터베이스의 변수 리스트의 값을 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/getvaue_package?tagid_list=@043DFEDEFD. A0, @043DFEDEFD. A1

Query Parameters

        tagid_list : tagid1, tagid2

Example : ?tagid_list=@043DFEDEFD. A0, @043DFEDEFD. A1

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

Body Example

{

  "RESULT": "OK",

  "RESULT_CODE": "RESULT_OK",

"MESSAGE": "GETVALUE PACKAGE COMPLETE",

  "VALUES": 

  [

    {

    "TAGID": "@043DFEDEFD. A0",

    “TYPE”: “double”,

    "VALUE": "99.99"

    “RESULT_CODE”: “RESULT_OK”

    },

    {

    "TAGID": "@043DFEDEFD. A1",

    “TYPE”: “int”,

    "VALUE": "99"

    “RESULT_CODE”: “RESULT_OK”

    }

  ]

}

--------------------------------------------

Sample Call

JavaScript

function getvalue_package()

{

var tagid_list= document.getElementById("tagid_list").value;

var xmlHttp = new XMLHttpRequest();

var strUrl = "getvalue_package" ;

var strParam= "tagid_list="+tagid_list;  

xmlHttp.onreadystatechange=function()

{

if (xmlHttp.readyState==4 && xmlHttp.status==200)

   {    

    var msg = xmlHttp.responseText;

alert(msg);

var arr = JSON.parse(msg);

var values = arr.VALUES;

   var out = "";

var i;

for(i = 0; i<values.length; i++) 

{

alert("TAGID:" + values[i].TAGID);

alert("TYPE:" + values[i].TYPE);

alert("VALUE:" + values[i].VALUE);

}

   }

};

xmlHttp.open("POST",strUrl,true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


RESTful API - setvalue

특정변수에 대하여 값을 설정 요청

--------------------------------------------

Description

enuSpace 서버측에 데이터베이스의 변수값을 설정 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/setvalue?devicekey=043DFEDEFD&variable=A0&value=10

URI : http://localhost:8080/setvalue?tagid=@043DFEDEFD.A0&value=10

URI : http://localhost:8080/setvalue?page=main.svg&variable=ID_ARD.A0&value=10

Query Parameters

        devicekey : device name

        variable : device variable

        value : set value

        or

        tagid : database tagid

        value : set value

        or

        page : picture file name

        variable : variable name

        value : set value

Example : ?devicekey=043DFEDEFD&variable=A0&value=10

Example : ?tagid=@043DFEDEFD.A0&value=10

Example : ?page=main.svg&variable=ID_ARD.A0&value=10

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

Body Example

{

“RESULT”:”OK”,

“RESULT_CODE”:”RESULT_OK”,

“DEVICE_KEY":”043DFEDEFD”,

“VARIABLE":”A0”,

"TAGID":"043DFEDEFD.A0",

"TYPE":"int",

"VALUE":"10"

}

--------------------------------------------

Sample Call

JavaScript

function setvalue()

{

var devicekey= document.getElementById("devicekey").value;

var variable = document.getElementById("variable").value;

var setvalue = document.getElementById("setvalue").value;

var xmlHttp = new XMLHttpRequest();

var strUrl = "setvalue" ;

var strParam= "devicekey="+devicekey + "&" + "variable="+ variable + "&" + "value="+ setvalue;  

xmlHttp.onreadystatechange=function()

{

if (xmlHttp.readyState==4 && xmlHttp.status==200)

   {    

    var msg = xmlHttp.responseText;

var arr = JSON.parse(msg);

if (arr.RESULT == "OK")

{

location = "http://192.168.10.21:8080/main.html";

}

else

{

if (arr.RESULT_CODE == "CODE_VARIABLE_NOUT_FOUND" )

{

alert(" 등록된 디바이스의 변수를  검색하지 못하였습니다.");

}

if (arr.RESULT_CODE == "CODE_UNKNOWN_DATATYPE" )

{

alert("알수없는 데이터 타입니다..");

}

}

   }

};

xmlHttp.open("POST",strUrl,true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


+ Recent posts