Pokazywanie postów oznaczonych etykietą DataPorter. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą DataPorter. Pokaż wszystkie posty

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??).

sobota, 7 stycznia 2012

Dostęp do danych procesowych [PL]

Ostatnio byłem zapytany i kilka rozwiązań związanych z dostępem do danych procesowych oraz z przekazywaniem danych z różnego rodzaju aplikacji do sterowników przemysłowych. Przyjrzyjmy się, jakie są możliwe podejścia, do wspomnianych problemów.

poniedziałek, 21 grudnia 2009

OPC Client .NET (w języku C# (csharp)) [PL]

Zapraszam wszystkich do przeczytania serii postów poświęconych dostępowi do danych w OPC przy pomocy kodu w C# na platformie .NET. Przedstawione przykłady zawierają gotowe do wykorzystania aplikacje i kod źródłowy. Artykuł został podzielony na następujące części:

  1. Teoria: Implementacja klienta OPC w C# - artykuł wprowadzający, bedącym częścią serii "OPC, DCOM, .NET i C# w jednym stali domu"
  2. Przygotowania
  3. Implementacja
  4. OPC klient z linii poleceń (przykład C# .NET)
  5. OPC klient z linii poleceń (gotowa aplikacja i kod w C#)

Życzę wszystkim dobrej lektury, a zainteresowanych tematem zapraszam do dyskusji i komentowania treści.

Promuj

niedziela, 20 grudnia 2009

OPC klient z linii poleceń (gotowa aplikacja i kod w C#) [PL]

W poprzedniej części opisałem jak stworzyć aplikację klienta OPC z linii poleceń (OPC command-line client), czyli aplikację która ma za zadanie odczytywać dane serwera OPC i udostępniać je jako standardowa aplikacja pracująca w "linii poleceń" systemu Windows. Dzięki temu będziemy mogli za pomocą argumentów podawać co chcemy otrzymać, a rezultat zostanie przekazany do standardowego wyjścia, czyli domyślnie na ekran. Dzisiaj zapraszam do pobrania kodu wraz z gotową aplikacją: tutaj do pobrania.

niedziela, 13 grudnia 2009

OPC klient z linii poleceń (przykład C# .NET) [PL]

Promuj

Jakiś czas temu zacząłem cykl poświęcony implementacji klienta OPC (Cz. 1. Przygotowania, Cz. 2. Implementacja), w tym post'cie chciałbym wrócić do tematu i przedstawić przykład gotowego programu, który realizuje opisywane możliwiści:

Klient OPC z linii poleceń (OPC command-line client)

środa, 28 października 2009

OPC Client .NET (cz.2 Implementacja) [PL]

Promuj

W poprzedniej części opisałem czynności przygotowawcze, teraz napiszemy trochę kodu :).

Na początku należy dodać referencję do projektu w Visual Studio:


Teraz wskazujemy serwis (wpisując jego adres: http://localhost/CAS.OPCWSDataAccess/OPCAdvancedDataAccess.asmx):


Wpisujemy jeszcze nazwę naszej referencji, klikamy na "Add Reference" i referencja powinna nam się pojawić w naszym Solution:


Teraz wykorzystamy dwie funkcje: GetAvailiableItems (zwracającą dostępne w serwerze elementy) oraz GetValue_OneItem (odczytującą wartość wybranego elementu). Informacje na temat innych wywołań dostępne są tutaj: http://www.commsvr.com/DataPorter/Index.aspx?topic=html/3bddf5c3-5d5a-4569-85db-fcdc52a1b34a.htm. Poniższe dwa rysunki pokazują efekt wykonania tych dwóch funkcji przy pomocy wspomnianej wcześniej strony debugger'a.

GetAvailiableItems:


GetValue_OneItem:


Oczywiście my wywołamy te dwie funkcje z poziomu C#. W tym celu należy najpierw wykonać połączenie: OPCAdvancedDataAccess.OPCAdvancedDataAccess opcDA = new OPCAdvancedDataAccess.OPCAdvancedDataAccess(). Później można pobrać listę elementów jako tablicę stringów: string[] items = opcDA.GetAvailiableItems(). Oraz można pobrać wartość dla jednego z elementów tablicy: OPCAdvancedDataAccess.ItemValue val = opcDA.GetValue_OneItem( items[ 0 ] ).

Ostatecznie kod prostej funkcji nawiązującej połączenie, pobierającej i wyświetlającej listę dostępnych elementów oraz wartość pierwszego dostępnego elementu, wygląda następująco:

static void Main( string[] args )
{
  //connecting to remote object
  OPCAdvancedDataAccess.OPCAdvancedDataAccess opcDA = new OPCAdvancedDataAccess.OPCAdvancedDataAccess();
  // getting availiable item list
  string[] items = opcDA.GetAvailiableItems();
  //displaing the list
  Console.WriteLine("Item List:");
  foreach ( string item in items )
    Console.WriteLine( item );
  //reading a value of the first item (#0)
  OPCAdvancedDataAccess.ItemValue val = opcDA.GetValue_OneItem( items[ 0 ] );
  Console.WriteLine( "---------------------" );
  Console.WriteLine( "Value of item {0}", items[ 0 ] );
  Console.WriteLine( "value={0}", val.Value );
  Console.WriteLine( "quality={0}", val.Quality.QualityBits );
  Console.WriteLine( "timestamp={0}", val.Timestamp );

  //waiting for enter
  Console.WriteLine( "[Press Enter]" );
  Console.ReadLine();
}

I daje w efekcie:



Item List:
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/108
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/102
CAS.CommServer.OPC.Da.Server/Generator/PLC/G/000
CAS.CommServer.OPC.Da.Server/Generator/PLC/G/001
CAS.CommServer.OPC.Da.Server/Generator/PLC/G/002
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/101
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/101
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/100
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/105
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/107
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/100
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/109
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/103
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/106
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/104
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/108
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/105
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/106
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/110
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/103
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/109
CAS.CommServer.OPC.Da.Server/Registers/PLC/R/102
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/107
CAS.CommServer.OPC.Da.Server/Flags/PLC/F/104
---------------------
Value of item CAS.CommServer.OPC.Da.Server/Registers/PLC/R/108
value=170
quality=good
timestamp=2009-08-12 15:17:04
[Press Enter]

Proste prawda? :)

Promuj

wtorek, 27 października 2009

OPC Client .NET (część 1. Przygotowania) [PL]

Promuj

Jakiś czas temu w post'cie pt. "Implementacja klienta OPC w C#" spróbowałem naświetlić podstawowe zagadnienia związane z implementacją klienta OPC na platformie .NET. Nie jest to proste zagadnienie, a do tego poza dobrą znajomością programowania opartego o DCOM należy mieć dostęp do specyfikacji standardu OPC. W tym artykule chciałbym wskazać pewną alternatywę, a mianowicie pokazać jak można dostać się do danych w OPC z poziomu platformy .NET (przykład w C#) bez implementacji pełnego klienta OPC. W tym celu zostanie wykorzystane dodatkowe oprogramowanie: DataPorter, które posiada funkcjonalność klienta OPC oraz zapewnia dostęp do odczytywanych przez niego danych poprzez WebSerwis. W prezentowanym tutaj przykładzie nie zostanie napisany "prawdziwy klient OPC", gdyż zostanie wykorzystane kompletne oprogramowanie klienta, zamierzam natomiast pokazać jak przy pomocy prostego programiku można dostać się do danych z OPC. Niniejszy artykuł może być również ciekawy dla osób, które chcą poznać przykład wykorzystania jakiegoś WebSerwisu z poziomu .NET (oczywiście nie piszę tu o WebSerwisie w rozumieniu serwisów w formie stron internetowych, a o serwisach opartych o SOAP i technologie WS-*)

Oprogramowanie DataPorter jest dostępne w pełni funkcjonalnej wersji demonstracyjnej (ograniczonej czasowo) na stronie: http://www.commsvr.com/DownloadCenter/ProductSoftware/PR2605DataPorter_Software.aspx (wymagana jest darmowa rejestracja). Instalowane jest z domyślną konfiguracją, w której podłącza się one do oprogramowania serwera OPC: CommServer. Opis domyślnej konfiguracji dostępny jest tutaj: http://www.commsvr.com/Products/DataPorterDescription/DataPortersampleconfiguration/tabid/320/language/en-US/Default.aspx. Pokazany w tym artykule przykład używa oprogramowania CommServer, dlatego warto je również zainstalować (jak to zrobić?). Przed przystąpieniem do dalszych ćwiczeń warto, w tym miejscu sprawdzić wspólne działanie CommServer'a i DataPorter'a (w przypadku jakichś problemów polecam odwiedzenie e-manuala DataPorter'a, dostępnego tutaj: http://www.commsvr.com/DataPorter/Index.aspx

Po pomyślnym zweryfikowaniu działania DataPorter'a i CommServer'a należy zainstalować dodatek do DataPorter'a udostępniający WebSerwisy (uwaga wcześniej należy mieć zainstalowany IIS, zintegrowany z platformą .NET 2.0). Dodatek znajduje się w katalogu DataPortera w następującej lokalizacji:

"%programfiles%\CAS\DataPorter\AdditionalSetup\CAS.OPCWSDataAccess\setup.exe" 

Po instalacji dodatku i wpisaniu w przeglądarkę internetową adresu: http://localhost/CAS.OPCWSDataAccess/OPCAdvancedDataAccess.asmx, oczom powinien się okazać obraz podobny do poniższego:


Jest to strona generowana w sposób automatyczny przez serwer IIS na podstawie WebSerwisu i umożliwiająca jego debugowanie (uwaga: ta strona dostępna jest tylko na lokalnej maszynie - tzn. tylko na tym komputerze, na którym zainstalowany jest WebSerwis).

Dla takiego WebSerwisu można pobrać i odczytać jego definicję zapisaną w języku WSDL. W tym celu należy do przedstawionego wyżej adresu dopisać "?wsdl" lub kliknąć na odpowiedni odnośnik na wspomnianej autogenerowanej stronie.


W następnej części zaprezentuję jak obsłużyć taki WebSerwis z poziomu C# i .NET, czyli w konsekwencji jak dostać się do danych w OPC.

Promuj

Posty powiązane / Related posts