Dowolna ramka w komunikacji PLC

Wiktor Susfał Akademia Unitronics Tagi: , ,

Dowolna ramka w komunikacji PLC sprawia, że wymiana danych staje się bardziej wszechstronna. Poznaj sposób konfiguracji.

Wprowadzenie

Lekcja ta dotyczy konfigurowania komunikacji z wykorzystaniem własnych ramek, w celu powiększenia zbioru urządzeń, z którymi PLC od Unitronics może wymieniać dane. Własne ramki mogą posłużyć zarówno do zaprojektowania własnego protokołu komunikacji pomiędzy posiadanymi PLC, jak i do naśladowania gotowych rozwiązań. Istnieje bowiem wiele urządzeń, jak np. czytniki kodów kreskowych, które komunikują się w specyficzny sposób. Użytkownicy sterowników Vision lub Samba są jednak w stanie dostosować do nich swoje urządzenia.

Za przykład posłuży w tej sterownik będący modelem V430-J-RH6, jednak omawiana funkcjonalność dotyczy wszystkich PLC serii Vision i Samba. W tym przypadku skupimy się na komunikacji szeregowej. Niemniej jednak, jej odpowiednik z wykorzystaniem modelu TCP/IP można ustawić analogicznie, wykorzystując wiedzę np. z tej lekcji (link) lub tej lekcji (link).

Podstawowe informacje

Przede wszystkim, należy wiedzieć, że dowolna ramka przesyłana w komunikacji PLC od Unitronics zawiera znaki kodowane w standardzie ASCII. Jest to system kodowania, w którym każdemu znakowi przypisana jest wartość z zakresu 0 – 127 (mogą to być również odpowiadające im wartości bitowe lub heksadecymalne). Dokładne tabele kodów można znaleźć w internecie, np. pod tym linkiem.

Z faktów tych można wyciągnąć kilka przydatnych później wniosków.

  • Każdy znak ASCII może być zakodowany na 8 bitach (zajmuje 1 bajt pamięci).
  • Zmienna całkowita (MI) w pamięci PLC jest 16-bitowa, więc może przechowywać maksymalnie 2 znaki ASCII.
  • Jeśli przesyłamy łańcuchy znaków w standardzie ASCII, to na końcu każdego znajduje się znacznik końcowy – dodatkowe 8 bitów.
  • Jeśli weźmiemy wyraz złożony z 4 znaków, potrzeba co najmniej 3 zmiennych MI, aby móc przechować informacje o nim w kodzie ASCII.

Wstępna konfiguracja sterownika PLC

Pierwsza linia kodu dla posiadanego PLC wygląda jak poniżej.

Dowolna ramka w komunikacji PLC - wstępna konfiguracja
Dowolna ramka w komunikacji PLC – wstępna konfiguracja

Zawiera ona kilka elementów opisywanych już kilka razy we wcześniejszych lekcjach, dlatego tutaj skupimy się tylko na nowych zagadnieniach.

Bloczek „Init” z zakładki „Com->Com Port” skonfigurowano tak, aby inicjalizował port COM1 sterownika. W tym przypadku używa się standardu RS232 komunikacji, lecz można również wybrać RS485. Wtedy należy odpowiednio przygotować sterownik, jak np. w tej lekcji (sekcja 2.1).

COM1 to podstawowy port szeregowy sterownika, a co więcej, jest on reprezentowany przez dwa wejścia. Oprócz fabrycznego gniazda dla końcówki RJ11/12, korzysta również z niego wejście USB do programowania. Więc również za jego pomocą można połączyć sterownik np. z komputerem. Należy pamiętać tylko, aby nie korzystać z dwóch wejść jednocześnie.

Drugi z zaznaczonych wyżej bloczków to „Configuration” z zakładki „FB’s->Protocol”. Użytkownik definiuje dla niego nazwę oraz numer portu sterownika, z którego ma korzystać. Dodatkowo, należy przypisać dwie zmienne: MB i MI, które przechowują informacje o odpowiednio: zakończeniu (lub nie) komunikacji oraz jej statusie. Kody błędów (status) można znaleźć w dokumentacji sterownika.

Odczyt danych – dowolna ramka w komunikacji PLC

Za prowadzenie odczytu dowolnej ramki odpowiada bloczek „Scan” z zakładki „FB’s->Protocol”. Do programu dołączono go natomiast jak poniżej – poprzedzając stykiem „Direct Contact”, do którego przypisano bit informujący o zakończonej inicjalizacji używanego portu COM.

Odczyt dowolnej ramki w programie PLC
Odczyt dowolnej ramki w programie PLC

Dla bloczka „Scan” musimy określić:

  • którą konfigurację portu COM ma on wykorzystywać (nr 1 na powyższym zdjęciu) – w tym przypadku jest to jedyna konfiguracja o nazwie „Test_Data_Exchange”;
  • bit MB, oraz dwie zmienne MI (nr 2 na powyższym zdjęciu), które przechowują informacje o odpowiednio: zakończeniu odbioru wiadomości, ilości odebranych bajtów (znaków), numerze wiadomości (ze zdefiniowanej listy „Protocol Messages”), którą odebrano.

Kolejnym krokiem będzie właśnie uzupełnianie listy z definicjami wiadomości, których nasz sterownik ma się „spodziewać” podczas procesu komunikacji.

Dowolna ramka w komunikacji PLC – rodzaje wiadomości

Istnieje kilka różnych sposobów na zdefiniowanie struktury wiadomości w komunikacji z dowolną ramką.

  • Po pierwsze, można „na sztywno” uzupełnić listę pożądanymi ciągami znaków, których sterownik ma się spodziewać. Zaletą tej metody jest jej prostota. Wadą jest natomiast to, że ten ciąg znaków nie jest dalej zapisywany do zmiennej w programie. O tym, że odebrano akurat ten ciąg znaków, świadczy wartość zmiennej MI „Index of Received Message” – przechowującej numer wiadomości na liście. Wyświetlanie takiego tekstu na HMI trzeba konfigurować ręcznie, na przykład z użyciem elementu „List of Texts: By Range”.
  • Po drugie, do danej wiadomości na liście można wprowadzić zmienną, jak np. w drugiej i trzeciej pozycji na powyższym zdjęciu. Tutaj znów istnieje kilka rodzajów zmiennych. Użytkownik może ustawić zapisywanie nadchodzącego ciągu znaków do zmiennych np. MI, ML w formacie ASCII. Można również skonfigurować automatyczną konwersję odebranych bajtów na wartość całkowitą liczbową (w przypadku przesyłania liczb). Obydwa te przypadki pokazano dalej na przykładzie.

Z racji tego, że jest to jedynie wstęp do zagadnienia komunikacji z dowolną ramką wiadomości, pominięto na razie niektóre informacje. Więcej przykładów można znaleźć w plikach pomocy, lub na filmach Producenta, załączonych na końcu wpisu.

Odbiór stałego ciągu znaków

Poniższy film pokazuje serię działań, która pozwala skonfigurować odbiór stałego ciągu znaków w komunikacji z dowolną ramką. Następnie pokazano, jak ręcznie wyświetlić go na ekranie HMI.

Definiowanie wiadomości ze stałym tekstem w komunikacji z dowolną ramką

Zapis ciągu znaków do zmiennej

Teraz skonfigurujemy drugą wiadomość tak, aby odebrany ciąg znaków został zapisany w formacie ASCII do wskazanej zmiennej w programie sterownika. W tym celu, dla drugiej pozycji na liście wiadomości należy użyć opcji „Create/Edit new Var”, a w nowo otworzonym oknie przejść do zakładki „Stream”.

Odbiór dowolnego ciągu znaków z zapisem do zmiennej
Odbiór dowolnego ciągu znaków z zapisem do zmiennej

Aby wytłumaczyć ustawienia zawarte w oknie „Protocol Scan Variables” (okno po prawej) wygodnie zacząć od pola „Link”. Tutaj podajemy adres zmiennej (początek grupy zmiennych), do której zapisane zostaną odebrane znaki – w standardzie ASCII. W tym przypadku wybrano zmienną DW0 (będącą typu „Double Word”), a więc zajmującą 32 bity (4 bajty) pamięci. To znaczy, że można do niej zapisać 4 znaki w kodzie ASCII.

Pole „Vector Length” zawiera informację o tym, do ilu zmiennych, począwszy od adresu z pola „Link”, należy zapisać odebrane informacje. Wartość „2” świadczy o tym, że dane będą zapisywane do zmiennych DW0 oraz DW1. To znaczy z kolei, że do dyspozycji jest już 64 bity – 8 bajtów (znaków).

Z kolejnej rozwijanej listy wybrano opcję mówiącą o tym, że każde 4 odebrane bajty (znaki) sterownik zapisze do jednej podlinkowanej zmiennej (tutaj – typu DW). Pozwala to maksymalnie wykorzystać miejsce w pamięci, choć można też również zapisywać mniejszą ilość bajtów do danej zmiennej.

Zaznaczenie pola „Add Null To The End of The Stream” powoduje zakończenie ciągu znaków „pustym” symbolem (niedrukowanym) charakterystycznym dla zmiennych typu „string”. Finalnie oznacza to, że odbierany strumień danych może zawierać maksymalnie 7 znaków (7 bajtów + „pusty” znak na końcu).

Zawartość takiej zmiennej można wyświetlić na HMI na przykład za pomocą elementu „ASCII String”.

Wyświetlenie na HMI ciągu znaków zapisanych w formacie ASCII
Wyświetlenie na HMI ciągu znaków zapisanych w formacie ASCII

Przesył wartości całkowitych

W przykładzie prezentowanym na potrzeby tej lekcji pokażemy, w jaki sposób przesłać w jednej wiadomości trzy zmienne całkowite o zadanej liczbie cyfr. Konfigurację tego typu przeprowadza się w tym samym oknie, co wcześniej, w zakładce „Numeric” – porównaj poniższe zdjęcie po lewej.

Dowolna ramka w komunikacji PLC - przesył wartości całkowitych
Dowolna ramka w komunikacji PLC – przesył wartości całkowitych
Pliki Pomocy programu VisiLogic na temat przesyłu wartości całkowitych
Pliki Pomocy programu VisiLogic na temat przesyłu wartości całkowitych

Ponadto, po prawej stronie wyżej, zamieszczono przykład konfiguracji tego okna, który znajduje się w plikach pomocy VisiLogic.

W tym przypadku (zdjęcie po lewej), skonfigurowano przesył liczb całkowitych o określonej stałej liczbie cyfr, które zapisane zostaną do określonych z góry rejestrów sterownika PLC. Świadczy o tym zawartość pierwszego pola – „Decimal ASCII: Fixed Length”. Podając wartość „3” w polu „Vector Length”, użytkownik określa natomiast liczbę rejestrów sterownika PLC, które mają przechowywać odbierane wartości. Adres początkowy dla tych rejestrów należy podać na końcu okna, w polu „Link” – w tym przypadku to MI3.

Co zaś się tyczy informacji na temat odbieranych zmiennych, należy skonfigurować pozostałe 3 opcje. Pole „Prefix Sign Format” przechowuje informacje o tym, czy wraz z odbieranymi zmiennymi przesyłany jest ich znak – tutaj ustawiono jako „No Prefix”, czyli bez znaku. Pole „Length” określa, ile symboli (cyfr oraz ewentualnie znaków) zawiera jedna zmienna – tutaj: 4.

Opcja „Decimal Point” zawiera początkowy adres zmiennej, do której zapisywana jest pozycja przecinka w danej odebranej zmiennej (jeśli ona go zawiera). Dzieje się tak, gdyż przy zapisie do rejestrów MI, ML, DW..., należy taki przecinek najpierw usunąć, gdyż są one przeznaczona dla wartości całkowitych. Należy pamiętać, że zmiennych wskazujących pozycję przecinka jest tyle samo, co odebranych wartości. W tym przypadku sterownik będzie wykorzystywał zmienne MI6, MI7, MI8 na te potrzeby. Zjawisko to zobrazowano dobrze w plikach pomocy VisiLogic (zdjęcie powyżej, po prawej).

Znaki kontroli transmisji

Obserwując okno konfiguracyjne bloczka „Scan” można jeszcze zauważyć zestaw opcji pozwalający na określenie, jakie znaki kontroli transmisji poprzedzają oraz kończą nadawanie pojedynczej wiadomości.

Znaki kontroli transmisji - dowolna ramka w komunikacji PLC
Znaki kontroli transmisji – dowolna ramka w komunikacji PLC

Mimo, że dwa podstawowe sposoby kontroli początku i końca przekazu oznaczane są jako STX i ETX (symbolami: „Start-” i „End of Text”), można w nich zawrzeć dowolną ilość dowolnych znaków. Wystarczy określić, ile znaków zawiera dana grupa kontrolna (pole „Length”). Następnie, należy klikać dwukrotnie LPM w małe obiekty pokazujące się w polach „STX:” lub „ETX:”, w celu dokładnego określenia znaków.

Co więcej, istnieje możliwość wykrywania końca wiadomości na podstawie:

  • liczby odebranych bitów (numer 2 na zdjęciu wyżej),
  • odstępu czasu od ostatniej odebranej informacji (numer 3).

W tym przypadku, PLC oczekuje że każda wiadomość rozpocznie się zakiem STX, a zakończy – ETX.

Prezentacja rozwiązania

Poniżej zamieszczono krótki film pokazujący, jak następuje komunikacja z PLC przy wykorzystaniu dowolnej ramki wiadomości. W celu symulacji nadawania wiadomości, po stronie komputera wykorzystano program Hercules, dostępny do pobrania na tej stronie (link).

W celu jednoczesnej komunikacji z PLC oraz monitorowania jego stanu (np. za pomocą Remote Operator) skonfigurowano również dla niego kartę Ethernet. Nie jest to jednak wymóg przy samej komunikacji z dowolną ramką.

Prezentacja odbioru wiadomości w komunikacji z dowolną ramką

Podsumowanie oraz pliki do pobrania

Komunikacja z dowolną ramką dla PLC, nie tylko Unitronics, to rozbudowane zagadnienie. Dlatego też, aby nie komplikować zbyt bardzo przekazu, pominięto tu pewne aspekty.

Przede wszystkim, nie skonfigurowano wysyłania wiadomości przez PLC (bloczek „Send”, zakładka „FB’s->Protocol”). Bloczek ten jest zbudowany w analogiczny sposób. Również można dla niego skonfigurować listę wiadomości, oraz wysyłać tę, która ma pożądany przez użytkownika numer.

Więcej na ten temat oraz na temat zagadnień takich jak np. kopiowanie, czy resetowanie bufora wiadomości w komunikacji z dowolną ramką, zawarte jest w filmach Producenta, zamieszczonych niżej.

Film producenta – odbiór i wysyłanie dowolnej ramki (ustawione na fragm. o wysyłaniu)
Film producenta – komunikacja z dowolną ramką

Dodatkowo, wypełniając poniższy krótki formularz, możesz pobrać prosty program, który prezentowaliśmy podczas tej lekcji. Program zawiera również konfigurację karty Ethernet. Jeśli Twój sterownik jej nie posiada – usuń z niego poziom trzeci drabinki.

Po więcej lekcji, przejdź na stronę startową tego kursu.

Jeśli masz pytania, skontaktuj się z nami pod adresem e-mail: sterowniki@elmark.com.pl . Chętnie wysłuchamy również każdą konstruktywną krytykę na temat jakości tego kursu.