piątek, 20 lipca 2012

OPC dla Androida? [PL]

Ostatnio otrzymałem maila o treści zbliżonej do: "Jestem studentem i mam teraz praktyki w firmie związanej z przemysłem. Moim zadaniem jest nawiązanie komunikacji z serwerem OPC, czyli muszę zrobić klienta OPC. Aplikacja ma być na Androida. Mam duży problem z nawiązaniem łączności, nie wiem jakich bibliotek używać, niekoniecznie muszą być darmowe. Byłbym bardzo wdzięczny za pomoc za jakieś informacje jak mógłbym to zrealizować." Postanowiłem zamiast bezpośredniej odpowiedzi, opublikować krótkiego posta na blogu (a może się jeszcze komuś przyda??).

Na początku chciałem zaznaczyć, że w ostatnim czasie (od ok. roku) z OPC raczej miałem mało wspólnego z racji zmiany pracodawcy i odejściu od zagadnień związanych z automatyką przemysłową (teraz zajmują się tworzeniem oprogramowania dla instytucji finansowych). W związku z tym moja wiedza może być odrobinę nieaktualna, ale z drugiej strony chyba aż tak dużo się nie zmieniło.
Przejdźmy jednak do tematu, czyli możliwości dostępu do danych procesowych z poziomu systemu Android. Na starcie od razu stwierdzę, że nie jest to proste zagadnienie. Trzeba tutaj przeanalizować przynajmniej dwa przypadki, mianowicie czy jest to:
  • OPC DA 2 lub OPC DA 3 (zwane coraz częściej Classic)?
  • A może jest to OPC UA?
Z racji popularności wspomnianych standardów wydaje mi się, że autorowi pytania chodzi raczej o starszą wersję, czyli OPC DA (Classic) (dla tych którzy nie znają różnic, polecam przeczytanie postów: "Co to jest OPC? (w prostych żołnierskich słowach)" oraz "Porównanie Xi z innymi standardami (OPC DA, OPC XML DA, OPC UA, ...)"). Niestety ta wersja jest oparta o DCOM, a niestety jedyna słuszna implementacja DCOM dostępna jest w systemie operacyjnym Microsoft Windows. Dlatego wydaje mi się, że bezpośredni odstęp z aplikacji pracującej pod kontrolą systemu operacyjnego Android jest raczej skazana na porażkę. Ale … jak to zwykle bywa można zastosować pewien trik. Wystarczy na komputerze, na którym zainstalowany jest serwer OPC (lub nawet na innym komputerze pracującym pod kontrolą systemu Windows), zainstalować pewnego pośrednika, który zamieni OPC na coś innego, co można już łatwo skonsumować z poziomu aplikacji pracującej pod androidem. Jest co najmniej kilka tego rodzaju rozwiązań. Ja znam, korzystałem i współtworzyłem DataPorter'a. Potrafi on zamienić OPC na prosty Web Serwis oparty o SOAP. Taki web serwis na pewno łatwo skonsumować z poziomu aplikacji w systemie Android. Ja pisałem już wcześniej jak to zrobić z poziomu aplikacji .NET: "OPC Client .NET (w języku C# (csharp))", ale wydaje mi się, że implementacja z poziomu Javy nie powinna być dużo trudniejsza.

Mówiłem wcześniej o dwóch przypadkach, jeden już omówiłem, ale warto jeszcze wspomnieć o OPC UA. W tym przypadku nie jest wykorzystywany DCOM, komunikacja może odbywać się po dobrze zdefiniowanych binarnych strumieniach lub soap'owych webserwisach (!). Te dużo łatwiej obsłużyć z poziomu aplikacji Java. Zresztą (dla celów niekomercyjnych) jest również dostępne SDK dla Javy. Na stronie OPC Foundation znaleźć można informację "A non-commercial JAVA Sample Client and Server are available from VTT Technical Research Centre of Finland. Please email Matti.Paljakka_AT_vtt.fi.". Wydaje mi się również, że są dostępne komercyjne SDK, niestety żadnych nie znam, więc nic nie polecę

Na koniec chciałbym jeszcze wspomnieć, że po wpisaniu w Google (OPC Android), pojawia się m.in. link do firmy Unified Automation, która zajmuje się tworzeniem aplikacji wspierającej standard OPC. Niestety opisywane "coś" nie wygląda na skończony produkt, ale przecież zawsze można spróbować się z nimi jakoś skontaktować (wśród różnych firm związanych OPC, z którym miałem okazję się kontaktować, ich można uznać za dość doświadczonych w temacie OPC).

Polecam również przeczytanie na moim blogu pewnych postów (a może one podpowiedzą jeszcze jakieś rozwiązanie):"Dostęp do danych procesowych", "OPC – a programowanie – jak zacząć?".

8 komentarzy:

  1. Chciałbym zacząć naukę programowania chodzi o programowanie abap z tego co słyszałem ta materia jest mega trudna, moje doświadczenie ograniczało się do C++

    OdpowiedzUsuń
    Odpowiedzi
    1. To prawda, ta cała materia jest dosyć skomplikowana, więc na początek zacząć od czegoś łatwiejszego. Aczkolwiek, jeżeli masz już podstawy C++ to trochę będzie Ci łatwiej niż osobie która się nigdy tym nie zajmowała. Co nie oznacza że będzie dużo łatwiej.

      Usuń
  2. Jeżeli posiadamy serwer OPC, który implementuje standard XML DA, to również mamy dostęp poprzez web service :)

    OdpowiedzUsuń
  3. Jesli chodzi o naukę programowania to warto zacząć od nauki podstaw. Dobrze nauczyć się Pythona jest dość prosty a przy tym bardzo uniwersalny. Polecam, jest wiele kursów do pomocy w internecie.

    OdpowiedzUsuń
  4. Android jest systemem na którym obecnie działa już chyba wszystko. Robi się na niego programy, aplikacje, nakładki. Najlepsze jest to, że nie tylko na telefonie on działa, ale również na TV czy na tabletach.

    OdpowiedzUsuń
  5. Niestety nauka oprogramowania nie jest taka łatwa. Ciężko jest się nauczyć jednego języka oprogramowania, a teraz standardem jest znajomość kilku. Niestety na obecnym rynku pracy dla automatyki i innych dziedzin ciężko jest znaleźć pracę jako programista.

    OdpowiedzUsuń
  6. Kwestia automatyki przemysłowej jest bardzo ważna

    OdpowiedzUsuń

Posty powiązane / Related posts