Brise

Utgard 설치(java 기반의 OPC DA 클라이언트 API) 본문

프로그램

Utgard 설치(java 기반의 OPC DA 클라이언트 API)

naudhizb 2015. 12. 29. 16:45
반응형


OPC DA는 본래 Microsoft사의 COM/DCOM기술에 기반하여 만들어졌기 때문에. 기본적으로 운영체제에 대한 의존성을 가지고 있다. 하지만, 자바를 기반으로 하여 COM/DCOM 통신을 구현하는 프로젝트인 j-interop가 개발됨에 따라, 운영체제게 독립적으로 COM/DCOM 통신을 할 수 있게 되었다. (물론 자바를 실행할 수 있어야 한다.)

 

Utgard에 대한 소개는 다음 페이지에서 살펴 볼 수 있으며( http://openscada.org/projects/utgard/) 이러한 Utgard를 기반으로한 implementation으로는 OpenSCADA와 Plantstreamer가 있다.

 

Utgard의 의존 라이브러리는 다음과 같다.

http://download.openscada.org/utgard/R/1.0.0/org.openscada.utgard.sdk-R.1.0.0.zip

http://download.openscada.org/jinterop/R/1.0.0/org.openscada.jinterop.sdk-R.1.0.0.zip

http://download.openscada.org/external/R/1.0.0/org.openscada.external.sdk-R.1.0.0.zip

 

위의 라이브러리를 받은 뒤, 이클립스에서 새로운 프로젝트를 생성하고, 위에서 받은 라이브러리들을 build path에 추가하면 Utgard의 설치는 끝난다.

 

그다음 api를 사용하여 클라이언트 통신하는 예제를 만들면 Utgard의 설치 및 테스트가 완료된다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

package org.openscada.opc.tutorial;

import java.util.concurrent.Executors;

import org.jinterop.dcom.common.JIException;

import org.openscada.opc.lib.common.ConnectionInformation;

import org.openscada.opc.lib.da.AccessBase;

import org.openscada.opc.lib.da.DataCallback;

import org.openscada.opc.lib.da.Item;

import org.openscada.opc.lib.da.ItemState;

import org.openscada.opc.lib.da.Server;

import org.openscada.opc.lib.da.SyncAccess;

   

 public class UtgardTutorial1 {

   

    public static void main(String[] args) throws Exception {

        // create connection information

        final ConnectionInformation ci = new ConnectionInformation();

        ci.setHost("your host");

        ci.setDomain("");

        ci.setUser("your user");

        ci.setPassword("your password");

        ci.setProgId("SWToolbox.TOPServer.V5");

        // ci.setClsid("680DFBF7-C92D-484D-84BE-06DC3DECCD68"); // if ProgId is not working, try it using the Clsid instead

        final String itemId = "_System._Time_Second";

        // create a new server

        final Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());

           

        try {

            // connect to server

            server.connect();

            // add sync access, poll every 500 ms

            final AccessBase access = new SyncAccess(server, 500);

            access.addItem(itemId, new DataCallback() {

                @Override

                public void changed(Item item, ItemState state) {

                    System.out.println(state);

                }

            });

            // start reading

            access.bind();

            // wait a little bit

            Thread.sleep(10 * 1000);

            // stop reading

            access.unbind();

        } catch (final JIException e) {

            System.out.println(String.format("%08X: %s", e.getErrorCode(), server.getErrorMessage(e.getErrorCode())));

        }

    }

}

Colored by Color Scripter

cs


추가 : Utgard api를 소스코드 레벨에서 구한다면 더욱 쉽게 응용을 만들 수 있다. (https://github.com/ctron/org.openscada.utgard) 이 소스코드에는 기본 예제들도 포함되어 있기 때문에 어떻게 api를 사용해야하는지 쉽게 알 수 있다.  



Ref.

https://openscada.atlassian.net/wiki/display/OP/HowToStartWithUtgard



반응형
Comments