Zmienne sieciowe mogą być używane do wymiany danych pomiędzy dwoma lub kilkoma sterownikami PLC. W oprogramowaniu WAGO-I/O-PRO oraz e!COCKPIT Network Variables używa warstwy transportowej protokołu UDP. Wartości zmiennych są wymieniane automatycznie w trybie broadcast. Protokół UDP nie gwarantuje dostarczenia datagramów, ale w przypadku Network Variables istnieje opcja „Acknowledgement” we właściwościach kanału, która pozwala na otrzymywanie odpowiedzi od drugiego sterownika/serwera.
Listy zmiennych należy przygotować w projekcie programu. Po wgraniu do sterowników, zmienne będą wymieniane automatycznie, gdy sterowniki zostanie ustawiony w tryb RUN. Istnieje możliwość stworzenia kilku list zmiennych sieciowych dla pojedynczego sterownika PLC. W związku z tym, że dane wymieniane są z wykorzystaniem telegramów typu broadcast, to jeden ze sterowników działa jako sender, a reszta sterowników w sieci jako reader (odbierający dane). Nie ma potrzeby implementacji bibliotek obsługujących protokół w programie głównym PLC, ale wymagane jest, aby listy zmiennych były zgodne we wszystkich sterownikach w sieci. W celu zmniejszenia możliwości pomyłki przy tworzeniu list w CODESYS istnieje możliwość eksportu listy zmiennych ze sterownika typu sender i importowanie jej w sterowniku typu reader.
Każda zdefiniowana lista zmiennych sieciowych posiada unikalny identyfikator listy, który nadawany jest przez użytkownika. tzw. COB-ID.
Zmienne sieciowe w WAGO-I/O-PRO
Poniższy przykład bazuje na dwóch sterownikach PFC200 750-8202 w środowisku WAGO-I/O-PRO (CODESYS 2.3). Jako medium komunikacyjne zastosowany jest przewód Ethernet CAT5.
Konfiguracja dla sterownika wysyłającego dane (sender)
Pierwszym krokiem jest utworzenie nowego projektu dla PLC odpowiedzialnego za wysyłanie zmiennych sieciowych.
Zaczniemy od sendera. Po skonfigurowaniu sterownika i nadaniu nazw symbolicznych dla obrazu procesu modułów WAGO, należy wejść w „Target Settings” i aktywować opcję obsługi protokołu Network Variables, zaznaczając opcję „Support Network Variables”. W polu „Name od supported network interfaces:” należy wpisać dużymi literami UDP!
Następnie klikamy prawym przyciskiem myszy na „Global Variables” i wybieramy „Add Object”.
Po utworzeniu nowej listy zmiennych globalnych, nadajemy jej nazwę i klikamy w „Add network”.
Wyświetli się okno konfiguracji dla zmiennych sieciowych. Zaznaczamy opcję „Export before compile” i wybieramy ścieżkę do zapisu pliku eksportu na dysku komputera PC. Plik zapisze się z rozszerzeniem.exp. W polu „List identifier” (COB-ID) należy wpisać liczbę 1. Będzie to identyfikator listy. Domyślnie mamy zaznaczoną opcję „Read”, dlatego należy ją dezaktywować i zaznaczyć opcję „Write” – realizowane jest wówczas wysyłanie danych. Dodatkowo należy zaznaczyć opcję „Cyclic transmission”. W polu „Interval” można wpisać wartość T#50ms.
Warto także zawęzić zakres adresów IP, do których będą wysyłane dane. Można to zrobić po kliknięciu w pole „Settings”.
Opis opcji dostępnych w oknie konfiguracji Network Variables
COB-ID – identyfikator listy zmiennych
Pack Variable – kompresja zmiennych do bloków o wielkości 256 bajtów. W przeciwnym razie zmienne są wysyłane pojedynczo. Opcja powinna być aktywna.
Request on bootup – w momencie restartu PLC jest wysyłane zapytanie o konkretną listę z określonym COB-ID (bez względu na ustawione warunki transmisji jak time, event). Wymagane jest jednak, aby stacja nadawcza miała zaznaczoną opcję Answer Bootup requests.
Transmit checksum – w deklaracji zmiennych jest wyliczana suma kontrolna.
Cyclic transmission – transmisja cykliczna listy zmiennych
Transmit on change – zmienne są zapisywane, gdy zmieni się ich wartość. Dzięki „Minimum gap” można ustalić minimalne opóźnienie czasowe, po którym przy zmianie jest wysyłana ta zmienna. Szczególnie w przypadku zmiennych typu REAL należy mieć na uwadze, że każda zmiana (choćby na 4 miejscu po przecinku) wywoła przesyłanie, co przy niewłaściwej konfiguracji tasków może zablokować wykonywanie programów. Zaleca się przycinanie wartości do np. dwóch miejsc po przecinku.
Transmit on event – zmienne są wysyłane, gdy wartość wskazanej zmiennej będzie ustawiona na TRUE.
Read/Write – dostęp do zmiennych (dla danych wysyłanych TYLKO Write)
Po wykonaniu wszystkich powyższych operacji trzeba zatwierdzić konfigurację klikając „ok”. W drzewie projektu, po lewej stronie zostanie utworzona lista zmiennych sieciowych. Następnie tworzymy dwie zmienne o nazwach: xPrzycisk oraz wNapiecie.
Lista zmiennych sieciowych jest gotowa do wysyłki. Teraz należy ją wyeksportować do pliku.
Wykonaj kompilację projektu.
Dla przykładu napiszemy teraz krótki program, który wpisuje wartości do utworzonych zmiennych. Będzie to przepisanie wartości z wejścia analogowego do zmiennej wNapiecie oraz wartości z wejścia cyfrowego do zmiennej xPrzycisk. Należy pamiętać, że zmienne sieciowe działają prawidłowo dopiero po wywołaniu ich w programie głównym!
Konfiguracja dla sterownika odbierającego dane (reader)
Tym razem tworzymy projekt dla odbierania zmiennych sieciowych (reader). Podobnie jak w projekcie „sender” należy uaktywnić usługę zmiennych sieciowych.
Klikamy prawym przyciskiem myszy na Global Variables, następnie wybieramy „Add Object”.
Zaznaczamy opcję „Import before compile”, wybieramy „Browse”, a następnie wcześniej zapisaną listę zmiennych sieciowych (plik z rozszerzeniem.exp).
Po zatwierdzeniu pojawi się lista zmiennych przeznaczona do odbioru zmiennych sieciowych.
Wgranie projektów do sterowników PFC200
Teraz pozostało tylko wgrać projekty do sterowników PFC200.
W tym momencie, gdy oba programy są aktywne, zmienne powinny zostać odbierane w programie „reader”.
Komunikacja z wieloma sterownikami
Przykład powyżej obrazuje, w jaki sposób wykonać prostą komunikację między dwoma sterownika. Protokół Network Variables umożliwia jednak komunikację między wieloma sterownikami. Obrazuje to poniższa grafika. Każdy sterownik w tym wypadku może pracować jako sender i równocześnie jako reader.
Maciej Kurantowicz, WAGO.PL