Do Projektu iAutomatyka dołączyli:

https://iautomatyka.pl/wp-content/uploads/2019/03/20190329_113329.jpg

B&R Automation Studio w praktyce – druk etykiet QR ze sterownika PLC krok po kroku


Kody QR znajdują zastosowanie w wielu dziedzinach. Te dwuwymiarowe kody graficzne napotykamy codziennie w gazetach i na billboardach jako elementy kampanii reklamowych, na biletach lotniczych, w postaci wizytówek, czy też w przestrzeni miejskiej. Możliwość zakodowania dowolnego tekstu składającego się nawet z 4 tysięcy znaków (np. hiperłącza do strony internetowej, adresu e-mail czy też danych geolokalizacyjnych) w postaci białych i czarnych punktów, daje kodom QR bardzo duży potencjał do przenoszenia informacji.

Niewiele osób zdaje sobie sprawę, że pierwotne zastosowanie kodów QR (ang. Quick Response) miało ścisłe powiązanie z przemysłem – zostały opracowane w 1994 roku przez japońską firmę Denso Wave w celu automatyzacji procesów produkcyjnych w przemyśle motoryzacyjnym. Ich rozpowszechnienie i zastosowanie w życiu codziennym wiąże się ze wzrostem popularności smartfonów, które dzięki wbudowanym kamerom i aplikacjom, umożliwiają w mgnieniu oka je rozpoznać i rozszyfrować.

Obecnie kody QR mają również szerokie zastosowanie w automatyzacji procesów. Wykorzystuje się je między innymi w zautomatyzowanych sortowniach paczek, systemach magazynowych czy też w nowoczesnych fabrykach do identyfikacji i śledzenia komponentów na różnych etapach produkcji.

W tym artykule przedstawię krok po kroku w jaki sposób zaprojektować etykietę zawierającą kod QR w oprogramowaniu Zebra Designer, opiszę szczegółowo konfigurację sterownika PLC firmy B&R w środowisku Automation Studio oraz omówię proces powstawania programu do nawiązania komunikacji poprzez interfejs Ethernet i drukowania dynamicznie generowanych etykiet na drukarce Zebra. Poradnik ten jest zatem dobrym wstępem do rozpoczęcia pracy z oprogramowaniem firmy B&R i zapoznania się z podstawowymi bibliotekami i blokami funkcyjnymi, które dostarczane są wraz z Automation Studio.


Cel projektu

Celem projektu będzie napisanie programu realizującego połączenie pomiędzy sterownikiem PLC B&R X20CP1583 a drukarką Zebra GK420t poprzez interfejs Ethernet. Aplikacja będzie generowała polecenia do drukarki, których wysłanie skutkowało będzie wydrukiem etykiety z kodem QR, przechowującym informacje na temat wyprodukowanego detalu. W przykładowej etykiecie zostaną zawarte: nazwa gniazda produkcyjnego, data i czas produkcji komponentu oraz wartość zmiennej symulującej parametr produkowanego detalu.

Projekt szablonu etykiety z kodem QR w oprogramowaniu Zebra Designer

Zanim przystąpimy do właściwej części artykułu, czyli przygotowania programu w Automation Studio, musimy zaprojektować szablon etykiety, który wykorzystamy w kolejnych krokach.

Zdalne wydrukowanie etykiety na drukarce Zebra wiąże się z wysłaniem do niej polecenia w języku ZPL (Zebra Programming Language). Na szczęście, nie musimy zagłębiać się w semantykę tego języka i poznawać szczegółowo znaczenia poszczególnych komend, aby przygotować wzór etykiety. Istnieje na to znacznie prostszy sposób – wykorzystamy do tego oprogramowanie Zebra Designer.

Po uruchomieniu Zebra Designer, automatycznie wyskakuje okno kreatora nowej etykiety. Wybieramy opcję “Utwórz nową etykietę” i klikamy przycisk “Zakończ”.

W dalszej kolejności wybieramy drukarkę, która będzie użyta do druku projektowanej etykiety – w tym przypadku model GX420t – po czym klikamy przycisk “Następny”.Następne trzy okna przechodzimy bez zmian domyślnych ustawień.

W ostatnim oknie kreatora podajemy parametry etykiety, na której będziemy drukować. W tym przypadku druk będzie realizowany na etykiecie samoprzylepnej o wymiarach 5×3 cm. Zamykamy kreator poprzez naciśnięcie przycisku “Zakończ”.

Po przejściu do głównego okna programu, z bocznego menu narzędziowego wybieramy pozycję “QR”, znajdującą się w sekcji “2D”.

Po kliknięciu w dowolne miejsce obszaru roboczego uruchomi się kreator tworzenia kodu kreskowego. Uzupełniamy go dowolnym tekstem, który na etapie programowania w Automation Studio zostanie zastąpiony przez wygenerowany kod. Klikamy przycisk “Zakończ”.

Rozmiar i pozycję grafiki z kodem QR dopasowujemy do wymiarów obszaru roboczego naszej etykiety.

Polecenia zapisane w kodzie ZPL, które będziemy przesyłać do drukarki z poziomu aplikacji na PLC, zawierają również parametry wydruku. Przed wygenerowaniem szablonu etykiety przechodzimy zatem do okna właściwości drukarki klikając “Plik” z górnego menu, a następnie wybierając “Ustawienia drukarki…”.

Istotnymi parametrami są tutaj: prędkość i zaczernienie. Od tych ustawień zależy jakość wydruku naszej etykiety. W moim przypadku sprawdziły się nastawy: prędkość 5cm/s, zaczernienie 30. Zmianę parametrów potwierdzamy przyciskiem “OK”.


Etykieta QR w postaci komendy zapisanej w języku ZPL

Szablon etykiety jest już gotowy. Pozostało wygenerować kod komendy w języku ZPL, który wykorzystamy przy tworzeniu programu do komunikacji z drukarką w Automation Studio.

Z górnego menu programu Zebra Designer wybieramy “Plik” i “Drukuj”. Następnie zaznaczamy opcję “Print to file” i wskazujemy miejsce zapisu pliku.

Zapisany w ten sposób plik otwieramy w dowolnym edytorze tekstowym (np. Notatnik).

Każda komenda w języku ZPL rozpoczyna się od ciągu znaków “^XA”, a kończy na “^XZ”. Widać zatem, że wygenerowany kod zawiera dwie komendy. W pierwszej z nich (wiersz nr 2) zawarte są parametry wydruku, które wcześniej ustawiono (m. in. prędkość i zaczernienie). Druga komenda rozpoczyna się w wierszu nr 3, a kończy w wierszu nr 10 – zawiera w sobie polecenie wydruku etykiety z naszym kodem QR.

W dziewiątej linii umieszczony jest ten fragment polecenia ZPL, który interesuje nas najbardziej. Widać w nim tekst, który zostały wprowadzony wcześniej w kreatorze kodu kreskowego.

Tak przygotowany szablon etykiety w postaci kodu ZPL interpretowanego przez drukarkę Zebra zostanie użyty w kolejnych etapach projektu.

Konfiguracja drukarki Zebra

Ostatnim zadaniem, które musimy zrealizować przed rozpoczęciem pracy w Automation Studio jest przygotowanie drukarki Zebra do komunikacji z PLC. Sprowadza się to do ustawienia adresu IP, z którym będziemy łączyć się ze sterownika B&R.

W przypadku drukarek Zebra z serii G, naciśnięcie i przytrzymanie przycisku podawania na jedno mignięcie kontrolki statusu spowoduje wydruk aktualnej konfiguracji urządzenia – w tym adresu IP.

Zmiana ustawień sieciowych Zebry możliwa jest z poziomu jej wewnętrznego webserwera (ZebraNet Print Server), do którego możemy dostać się wpisując w pasek adresu przeglądarki aktualny adres IP drukarki. Po zalogowaniu domyślnym hasłem “1234” należy nacisnąć odnośnik “Network Configuration”, a następnie “TCP/IP Settings”. Zmianę wprowadzonych parametrów zatwierdzamy klikając “Submit Changes”.

B&R Automation Studio – wprowadzenie

Automation Studio to zintegrowane środowisko deweloperskie zawierające narzędzia niezbędne do projektowania aplikacji wykorzystujących komponenty automatyki firmy B&R we wszystkich fazach projektu – od programowania sterowników i modułów bezpieczeństwa oraz konfiguracji napędów po tworzenie wizualizacji na panele HMI. Oprogramowanie firmy B&R wyposażone jest w rozbudowany symulator oraz narzędzia diagnostyczne, umożliwiające optymalizację projektowanych aplikacji.

Więcej na temat podstawowych funkcji Automation Studio można dowiedzieć się z artykułu przygotowanego przez redakcję iAutomatyka, w którym przedstawiono między innymi najważniejsze elementy obszaru roboczego tego środowiska:

Co to jest Automation Studio? Recenzja oprogramowania od B&R Automatyka Przemysłowa

Tworzenie projektu

Pierwszym krokiem jaki musimy wykonać jest utworzenie nowego projektu. W tym celu z paska menu wybieramy “File” … “New Project”. Możemy również skorzystać z menu znajdującego się na stronie startowej, która pojawia się po uruchomieniu Automation Studio – w tym przypadku z zakładki “New Project” należy wybrać “An empty project”.

W oknie kreatora projektu wpisujemy nazwę naszej aplikacji i wskazujemy miejsce zapisu wszystkich plików.

W kolejnym kroku podajemy nazwę konfiguracji sprzętowej, którą wykorzystamy w projekcie (domyślnie: “Config1”). Konfigurację sprzętową można określić na trzy sposoby: ręcznie wprowadzając wykorzystywany sprzęt, wyszukując urządzenia B&R podłączone do sieci, w której znajduje się nasz komputer lub wczytując konfigurację z innego projektu. W naszym przypadku wybieramy pierwszą z dostępnych opcji.

W następnym oknie zaznaczamy sterownik, który wykorzystamy w projekcie. W tym przypadku zaznaczono sterownik PLC X20CP1583. Listę wszystkich urządzeń możemy filtrować wprowadzając kolejne znaki opisujące model szukanego urządzenia lub wybierając kategorię, do której to urządzenie należy (np. sterowniki PLC znajdują się w grupie “Controller”). Kliknięcie przycisku “Finish” zamyka konfigurator projektu.

Zakończenie działania kreatora nowego projektu powoduje wywołanie karty projektowania konfiguracji sprzętowej “Hardware.hwl [System Designer]”, w której wszystkie użyte w aplikacji urządzenia oraz połączenia między nimi przedstawione są w formie graficznej.

W naszym przypadku jedynym urządzeniem firmy B&R, które na tym etapie dodane jest do konfiguracji (poprzez “przeklikany” wcześniej kreator), jest sterownik PLC X20CP1583. Do sterownika zostanie dołożony teraz moduł wejść cyfrowych X20DI9371.

Dodawanie kolejnych urządzeń do konfiguracji sprzętowej odbywa się poprzez wyszukanie sprzętu w pasku narzędzi “Hardware Catalog”, a następnie przeciągnięcie wybranego elementu w obszar roboczy karty “Hardware.hwl”. Wspomniany pasek narzędzi “Toolbox – Hardware Catalog” można wysunąć najeżdżając kursorem na zakładkę, znajdującą się domyślnie po prawej stronie okna Automation Studio.

Kartę projektowania konfiguracji sprzętowej możemy otworzyć w każdej chwili przechodząc do zakładki widoku konfiguracyjnego w eksploratorze projektu (Configuration View), a następnie klikając w “Hardware.hwl”.

Widok konfiguracji eksploratora projektu (“Configuration View”) umożliwia zarządzanie wieloma zestawami konfiguracji sprzętowej w ramach aplikacji i przełączanie się między nim. W naszym przypadku dysponujemy tylko jedną konfiguracją “Config1”, której nazwę nadaliśmy w kreatorze.

Konfiguracja sterownika PLC B&R

Czas na szybką konfigurację sterownika X20CP1583. Jedynym parametrem, który musimy ustalić w celu nawiązania komunikacji z drukarką Zebra (a także z samym sterownikiem z poziomu Automation Studio), jest adres sieciowy naszego PLC.

Przechodzimy do zakładki widoku fizycznego “Phisical View” w eksploratorze projektu, po czym klikamy prawym przyciskiem myszy na pozycję “ETH” i wybieramy “Configuration”.

W obszarze roboczym Automation Studio wyświetli się karta z parametrami konfiguracyjnymi interfejsu Ethernet sterownika X20CP1583.

W pierwszej kolejności należy zmienić sposób pozyskiwania adresu IP przez PLC. Domyślnie sterownik oczekuje na przydzielenie adresu z serwera DHCP. W sekcji “Mode” wybieramy “enter IP address manually” z rozwijanej listy.Po zatwierdzeniu tego wyboru uzupełniamy pola “IP address” oraz “Subnet Mask”, które pojawią się we wspomnianej wcześniej sekcji “Mode”.

Należy pamiętać, aby adres IP oraz maska odpowiadały sieci, w której znajduje się drukarka Zebra. Przyjąłem następujące ustawienia:

PLC

IP: 192.168.0.100, maska podsieci: 255.255.255.0

Drukarka

IP: 192.168.0.101, maska podsieci: 255.255.255.0

Dodawanie programu do projektu

Przechodzimy do najbardziej interesującego etapu poradnika – programowania.

Zgodnie z celem projektu – na drukowanej etykiecie QR ma zostać zawarta nazwa gniazda produkcyjnego (element stały), a także: data i czas produkcji komponentu oraz symulowany parametr wytwarzanego detalu (elementy zmienne). Pisanie programu zaczniemy zatem od przygotowania kodu odpowiedzialnego za generowanie części zmiennych, które następnie będziemy integrować z komendą ZPL wysyłaną do drukarki.

Aby przejść do widoku elementów wchodzących w skład całej aplikacji (w tym m.in. programów, bibliotek, tabel zmiennych, elementów wizualizacji), należy kliknąć w zakładkę “Logical View” eksploratora projektu.

Poszczególne komponenty programu mogą być pogrupowane w foldery, nazwane w środowisku Automation Studio pakietami (packages). Nadrzędny pakiet przyjmuje domyślnie nazwę projektu (tutaj: “drukarkaQR”). W jego strukturze znajdują się:

  • Global.typ – tabela struktur (typów) globalnych,
  • Global.var – tabela zmiennych globalnych,
  • Libraries – pakiet z podstawowymi bibliotekami.

W strukturze naszego projektu brakuje najważniejszego elementu – jednostki programowej (task). Aby dodać program do projektu, należy kliknąć w zakładkę “Logical View” (wtedy eksplorator projektu będzie aktywnym oknem – podświetlonym na niebiesko), a następnie z paska narzędzi “Object Catalog”, znajdującego się po prawej stronie ekranu Automation Studio, zaznaczyć kategorię “Program”. W dolnej części paska narzędzi zostanie wtedy wyświetlona przefiltrowana lista obiektów, zawierająca jednostki programowe we wszystkich językach programowania obsługiwanych przez sterowniki B&R.

Program w tym projekcie zostanie napisany w języku ST (ang. Structured Text). Do okna eksploratora projektu otwartego wcześniej na zakładce “Logical View” przeciągamy obiekt “ST Program All In One” (“All In One” oznacza, że część inicjacyjna, część cykliczna i część wyjściowa programu, będą scalone w jeden plik). Tym sposobem w strukturze naszej aplikacji pojawi się jednostka programowa o domyślnej nazwie “Program” – możemy ją zmienić klikając prawym przyciskiem myszy i wybierając “Rename”.

Dodanie tym sposobem programu do części logicznej  projektu automatycznie przydziela go do domyślnej klasy zadań cyklicznych. Przechodząc do zakładki “Physical View” eksploratora, a następnie klikając dwukrotnie w symbol naszego sterownika, otworzymy widok, który przedstawia relację między częścią logiczną a częścią sprzętową naszej aplikacji.

Każda z klas ma zdefiniowany czas cyklu wykonania programów, które są do niej przypisane (w tym wypadku nasz program został przypisany do klasy o czasie cyklu 100ms). Możemy przeciągać programy (task’i) pomiędzy klasami, co umożliwia nam narzucenie reżimu czasowego dla wykonywania poszczególnych programów z projektu, nad którym pracujemy.

Pozyskiwanie aktualnej daty i czasu – biblioteka AsTime

Pobranie aktualnej daty i czasu zostanie zrealizowane za pomocą bloku funkcyjnego “DTGetTime” zawartego w bibliotece “AsTime”, która nie jest standardowo dodawana przy tworzeniu projektu – musimy załadować ją ręcznie. W tym celu – analogicznie jak przy dodawaniu jednostki programowej – należy kliknąć w zakładkę “Logical View”, a następnie z paska narzędzi “Object Catalog”, znajdującego się po prawej stronie ekranu Automation Studio, zaznaczyć kategorię “Library”. Z dolnej części paska narzędzi należy następnie przeciągnąć pozycję “B&R Libraries” do folderu (pakietu) “Libraries” znajdującego się w strukturze naszego projektu.

Z listy dostępnych bibliotek B&R, która pojawi się w oknie dodawania obiektu, należy zaznaczyć pozycję “astime”, a następnie potwierdzić wybór przyciskiem “Finish”.

Celem otwarcia okna edycji kodu, klikamy dwukrotnie w obiekt “Program” lub zwarty w nim plik “Main.st” w eksploratorze projektu (zakładka “Logic View”).

Standardowo w pliku programu zawarte są 3 sekcje kodu: INIT, CYCLIC i EXIT. Polecenia zawarte w poszczególnych sekcjach będą wykonywać się odpowiednio: przy inicjalizacji programu, cyklicznie oraz przy zakończeniu działania programu.Przed rozpoczęciem pisania programu warto ustawić jedną opcję edytora kodu, która usprawni nam dodawanie zmiennych do naszego projektu. Z menu górnego Automation Studio wybieramy: “Tools”, a następnie “Options”. W oknie ustawień wybieramy zakładkę “SmartEdit” i zaznaczamy opcję “Automatically declare new variables”.

Wracamy do karty edytora kodu. W programie musimy wywołać wspomniany wcześniej blok funkcyjny “DTGetTime” z biblioteki “AsTime”. W tym celu klikamy kursorem w dowolną pustą linię w sekcji cyklicznej programu, a następnie z paska narzędzi w edytorze kodu klikamy w ikonę “Insert Function/Function Block…” lub wciskamy kombinację klawiszy: CTRL+B.

W oknie wyboru typu danych wpisujemy w polu filtra pierwsze litery nazwy bloku funkcyjnego, który szukamy (“DTG”), potwierdzamy filtr klawiszem enter i wybieramy z listy “DTGetTime” zatwierdzając przyciskiem “OK”.

Dzięki wcześniejszemu ustawieniu SmartEdit, Automation Studio otwiera automatycznie okno deklaracji po wykryciu nowej zmiennej w kodzie programu, uzupełniając za nas typ i nazwę zmiennej lokalnej (pod którą będzie funkcjonował blok funkcyjny). Zatwierdzamy domyślne ustawienia klikając “OK”.

W kodzie programu zostaje umieszczona linia wywołania bloku funkcyjnego, który przed chwilą zadeklarowaliśmy:

Według dokumentacji (B&R Help Explorer – klawisz F1 w Automation Studio), blok funkcyjny “DTGetTime” ma jedno wejście “enable” (typ BOOL) oraz dwa wyjścia: “status” (typ UINT) oraz “DT1” (typ DATE_AND_TIME). Zgodnie z tym, potrzebujemy zadeklarować zmienną i przypisać ją do wyjścia “DT1” – w niej będzie przechowywana aktualna data i czas. Przerabiamy kod w następujący sposób:

Do wejść i wyjść bloku funkcyjnego można odwołać się przez postawienie kropki po nazwie zmiennej, która go reprezentuje. Po naciśnięciu klawisza enter za drugą linią kodu – podobnie jak w przypadku bloku funkcyjnego – wyskoczy okno deklaracji nowej zmiennej (tutaj: “dateTimeNow”). Niestety, w tym wypadku, Automation Studio nie wypełnia automatycznie typu naszej zmiennej. Musimy ją zmienić ręcznie z typu BOOL na typ DATE_AND_TIME – w przeciwnym razie kompilator zgłosi błąd. Klikamy w tym celu dwukrotnie w polu “Type”, a następnie w przycisk z trzema kropkami.

W kolejnym oknie wybieramy typ zmiennej: DATE_AND_TIME i zatwierdzamy przyciskiem “OK”.

Mamy już zmienną typu DATE_AND_TIME, która przechowuje informację o aktualnej dacie i czasie sterownika. Docelowo, będziemy potrzebować tę informację w postaci tekstu (typ STRING), aby umieścić ją w komendzie wysyłanej do drukarki.

Z pomocą przychodzi nam również biblioteka “AsTime”, która zawiera w sobie funkcję “ascDT” dokonującą konwersji daty i czasu zapisanych w zmiennej typu DATE_AND_TIME do zmiennej typu STRING w formacie: “Sun Jan 3 15:14:13 1988”. Zgodnie z opisem zawartym w pomocy Automation Studio (klawisz F1), funkcja “ascDT” przyjmuje 3 argumenty wejściowe:

  • zmienną typu DATE_AND_TIME, którą chcemy przekonwertować,
  • adres do zmiennej typu STRING, do której zostanie zapisana data i czas w postaci tekstu,
  • długość łańcucha wyjściowego (wymagany jest STRING o minimalnej długości 25).

Zgodnie z powyższym, do naszego kodu dodajemy następującą linię:

Po naciśnięciu klawisza ENTER będziemy musieli zadeklarować nową zmienną – “dateTimeNow_txt” typu STRING – analogicznie jak w poprzednio opisanych przypadkach.

Tym sposobem w zmiennej o nazwie “dateTimeNow_txt” przechowywana będzie informacja o aktualnej dacie i czasie sterownika w postaci tekstu, aktualizowana z każdym cyklem jego pracy.

Symulacja parametru detalu – biblioteka AsMath

Kolejną zmienną, której wartość zawrzemy w kodzie QR, jest parametr detalu. W rzeczywistości mogłaby to być np. wartość odczytana z czujnika podłączonego do analogowego wejścia sterownika lub wynik pomiaru odebrany z systemu wizyjnego, nadzorującego poprawność wykonania produkowanego elementu. W projekcie zasymulujemy zmienność parametru przy użyciu prostej funkcji matematycznej.

Funkcje i stałe matematyczne opisuje biblioteka “AsMath”. Należy dodać ją do projektu w ten sam sposób, jaki zostało to zrobione z poprzednimi bibliotekami.

Tym razem zmienne lokalne zadeklarujemy ręcznie. Możemy to zrobić przechodząc do pliku “Variables.var” znajdującego się w zakładce logicznej eksploratora projektu pod nazwą dodanego programu, a następnie klikając prawym przyciskiem w puste pole i wybierając “Add Variable”.

Dodajemy następujące zmienne lokalne: “x” typu REAL, “detail” typu REAL oraz “detail_txt” typu STRING[5] (łańcuch 5 znaków).

Analogicznie do tej procedury można dodawać zmienne globalne przechodząc do pliku Global.var w części logicznej eksploratora projektu.

Wracamy do edytora programu i wpisujemy w kolejnych liniach poniższy kod:

Ten prosty fragment programu inkrementuje zmienną “x” przy każdym cyklu pracy sterownika do momentu osiągnięcia wartości “360” – wtedy do “x” zostaje przypisana wartość “0” i inkrementacja zaczyna się od początku. W kolejnych krokach wyliczany jest parametr produktu przechowywany w zmiennej “detail”, który jest wynikiem funkcji sinus dla parametru “x” przeliczonego na radiany – stała “amPI” to liczba PI zdefiniowana w bibliotece “AsMath”. W ostatniej linii kodu wartość liczbowa zmiennej “detail” zostaje przekształcona do zmiennej typu STRING przy użyciu funkcji “REAL_TO_STRING”.

Generowanie komendy ZPL – biblioteka asstring

Mamy już wszystkie elementy niezbędne do wygenerowania polecenia, które będziemy przesyłać do drukarki. Musimy je teraz połączyć w jedną komendę.

Przywołajmy szablon etykiety QR w postaci kodu zapisanego w języku ZPL, który zaprojektowaliśmy w poprzednich punktach tego poradnika:

Wiemy, że stałymi elementami komendy są polecenia zawarte w wierszach od 2 do 8 oraz w wierszu 10. Linia nr 9 powstanie w wyniku połączenia danych zapisanych w formie tekstu. Manipulację łańcuchami umożliwi nam biblioteka “AsString”, którą należy dodać do projektu. Zawarta w niej funkcja “strcat” da nam możliwość dopisywania kolejnych części polecenia wydruku.

W edytorze programu wprowadzamy poniższy kod:

Zmienna “command” przechowuje wynik połączenia wszystkich składowych poleceń w postaci finalnej komendy, którą będziemy nadawać do drukarki. Na początku przypisujemy do “command” pierwszą stałą część kodu ZPL (wiersze: od 2 do 8 szablonu etykiety). Następnie, przy użyciu funkcji “strcat”, dołączamy do niej kolejno: tekst “iAutomatyka.pl”, datę i czas sterownika oraz parametr produktu, rozdzielone ciągiem znaków “ | “ zapisanym w stałej “separator” typu STRING. Na końcu dodajemy drugą stałą część komendy (wiersz nr 10 szablonu etykiety).

Zgodnie z dokumentacją funkcji “strcat”, jej argumentami są adresy do zmiennych przechowujących łańcuchy znaków, które zostaną połączone. Łańcuch drugi zostaje dodany na końcu łańcucha pierwszego.

Tym sposobem wygenerowaliśmy dynamiczny kompletny kod ZPL, który będziemy wysyłać do drukarki.

Komunikacja TCP/IP – biblioteka AsTCP

Bloki funkcyjne do wymiany danych przez protokół TCP zdefiniowane są w bibliotece “AsTCP” – należy dodać ją do projektu.

Wyszukujemy “AsTCP” w przeglądarce pomocy B&R Help Explorer (klawisz F1). W opisie biblioteki znajduje się link do przykładów (“Examples”). Tam, w sekcji “TCP Communication” załączono bardzo dobrze opisany wzór programu do nawiązania prostej komunikacji poprzez interfejs Ethernet – na jego podstawie zrealizujemy połączenie ze skonfigurowaną wcześniej drukarką Zebra.

Działanie finalnego programu oparte jest na konstrukcji CASE i zmiennej “PrintStep” (typu USINT), które zostały użyte do przełączania pomiędzy poszczególnymi etapami wydruku etykiety z kodem QR. Do szczegółowych opisów poszczególnych bloków funkcyjnych, które zostały użyte w tym programie, odsyłam do wspomnianej wyżej przeglądarki pomocy Automation Studio, gdzie omówiona jest biblioteka “AsTCP”.

Po uruchomieniu sterownika, zmienna “PrintStep” przyjmie startową wartość “0”. Program będzie “czekał” na wykrycie zbocza narastającego wejścia cyfrowego PLC podłączonego do zmiennej “diPrintButton” (typu BOOL). Zarejestrowanie tego sygnału spowoduje przejście do kolejnego kroku algorytmu.

W kolejnym cyklu pracy sterownika po naciśnięciu przycisku drukowania, program przygotuje komendę do drukarki Zebra – tu został przeniesiony wcześniej opisany kod generowania polecenia ZPL.

W następnym kroku program otwiera ustawiony port po stronie sterownika (tutaj: 12001) – wywołuje w tym celu funkcję “TcpOpen”. Pomyślne otwarcie interfejsu  Ethernet skutkuje przejściem do kolejnego etapu.

Zgodnie ze schematem blokowym z dokumentacji biblioteki “AsTCP”, opisującym realizację połączenia TCP/IP po stronie klienta, przed nawiązaniem kontaktu z serwerem (drukarką) należy skonfigurować otwarte połączenie. Służy do tego funkcja “TcpIoct”. Definiuje ona między innymi w jaki sposób program ma obchodzić się z danymi, które pozostały w buforze po zakończeniu połączenia. Wykorzystałem domyślne parametry z przykładu dołączonego do biblioteki.

Przechodzimy do nawiązania połączenia z serwerem TCP (drukarką). W tym kroku programu ustawiany jest port oraz adres IP, na jakim pracuje drukarka Zebra. Prawidłowe wywołanie funkcji “TcpClient” skutkuje przejściem do kolejnego etapu – wysyłki danych.

Jednym z argumentów funkcji “TcpSend” (odpowiedzialnej za wysyłkę danych) jest adres do obszaru w pamięci sterownika przechowującego wygenerowany wcześniej kod ZPL (zmienna “command”). Jeżeli po wywołaniu tej funkcji, jej status przyjmie wartość “0” – dane zostały wysłane pomyślnie i program może przejść do zamknięcia połączenia.

Za zamykanie otwartego wcześniej połączenia TCP/IP odpowiada wywołanie funkcji “TcpClose”. Prawidłowe zakończenie operacji powoduje przypisanie zmiennej “PrintStep” wartości “0”, co oznacza powrót do stanu początkowego algorytmu i oczekiwanie na kolejne naciśnięcie przycisku wydruku.

Każde wywołanie którejkolwiek z funkcji z biblioteki “AsTCP” może zakończyć się statusem błędu. W razie zaistnienia takiej sytuacji, program przechodzi do kroku obsługi błędu (PrintStep = 10). W tym przypadku, wystąpienie błędu powoduje powrót do oczekiwania na ponowne wywołanie wydruku etykiety.

Podłączanie przycisku drukowania – mapowanie zmiennych

Program gotowy. Przed transferem projektu do pamięci sterownika B&R musimy zrobić jeszcze jedną rzecz – przypisać wejście cyfrowe sterownika do zmiennej, która uruchamia proces drukowania.

Przechodzimy do zakładki widoku konfiguracyjnego w eksploratorze projektu (Configuration View) i otwieramy kartę projektowania konfiguracji sprzętowej “Hardware.hwl”. Klikamy prawym przyciskiem na moduł wejść cyfrowych X20DI9371, a następnie wybieramy “I/O Mapping”.

W karcie mapowania zmiennych dla wskazanego modułu, klikamy dwukrotnie w polu “Proces Variable” należącego do pierwszego wejścia cyfrowego “DigitalInput01”, a następnie klikamy w przycisk z trzema kropkami.

W oknie wyboru wskazujemy zmienną “diPrintButton”, która zostanie przypisana do wejścia cyfrowego, po czym zatwierdzamy przyciskiem “OK”.

Wszystkie relacje między wejściami/wyjściami PLC a zmiennymi programów w Automation Studio zapisane są w pliku mapowania “IoMap.iom”, który dostępny jest w eksploratorze plików w karcie “Configuration View”.

Połączenie Automation Studio ze sterownikiem – transfer programu

Wszystko już gotowe, aby przetransferować nasz projekt do pamięci PLC. Można to zrobić na co najmniej dwa sposoby: wgrywając pliki programu na kartę pamięci sterownika (jeżeli sterownik je obsługuje) lub przesyłając aplikację przy użyciu połączenia sieciowego (Ethernet).

Korzystając z faktu, że sterownik X20CP1583 skonfigurowany w projekcie odczytuje karty pamięci CF – skorzystamy z pierwszego wymienionego sposobu. Do komputera, na którym mamy otwarty projekt naszej aplikacji w Automation Studio, podłączamy czytnik kart pamięci. Z głównego menu programu wybieramy: “Project”, “Project Installation”, a następnie “Offline Installation”.

Automation Studio skompiluje naszą aplikację i jeżeli nie wystąpią żadne błędy – otworzy okno, w którym należy wskazać miejsce zapisu (wybrać kartę pamięci), po czym nacisnąć przycisk “Create local install folder”.

Przygotowaną w ten sposób kartę pamięci można umieścić w slocie kart CF sterownika.Po uruchomieniu PLC z zainstalowaną aplikacją na karcie pamięci i połączeniu go z komputerem, powinniśmy być w stanie się z nim połączyć.

Przechodzimy do ustawień połączenia w Automation Studio poprzez wybranie z menu głównego: “Online”, “Settings…”. W pasku narzędziowym karty “Online Settings” klikamy na ikonę lupy (“Browse”). Spowoduje to wyszukanie wszystkich sterowników PLC podłączonych do sieci, w której znajduje się nasz komputer i wyświetlenia listy znalezionych urządzeń. Klikamy na nazwę naszego sterownika prawym przyciskiem myszy i wybieramy polecenie “Connect”.

Połączenie ze sterownikiem PLC, na którym działa program, sygnalizowane jest zielonym napisem RUN w dolnej części okna Automation Studio.

Wydruk etykiety QR – tryb Watch i wymuszanie wejść/wyjść

Jesteśmy połączeni ze sterownikiem, na który wgraliśmy przygotowany wcześniej program. Możemy teraz sprawdzić jego działanie, a więc przystąpić do wydruku etykiet z kodem QR.

Poprawność pracy programu możemy zweryfikować poprzez podanie sygnału cyfrowego na zamapowane wcześniej wejście sterownika. Naciśnięcie przycisku podłączonego do wejścia cyfrowego PLC powinno skutkować wydrukiem etykiety na drukarce Zebra.

Przebieg działania aplikacji możemy prześledzić korzystając z trybu Watch w Automation Studio. Jego aktywacja sprowadza się do kliknięcia na ikonę lupy w górnym pasku narzędzi.

W trybie Watch edytor kodu programu zostaje zablokowany, a z prawej strony pojawia się okno podglądu zmiennych. Aby dodać interesującą nas zmienną do okna podglądu należy kliknąć prawym przyciskiem myszy w puste pole tego okna, a następnie wybrać “Insert Variable…”.

Pojawia się okno z listą zmiennych wykorzystanych w programie. Zaznaczamy dwie zmienne: “PrintStep” oraz “diPrintButton” (wciśnięty klawisz CTRL) i klikamy przycisk “Add”.

W trybie Watch mamy możliwość zmiany wartości podglądanych zmiennych. Aby to zrobić, wystarczy dwukrotnie kliknąć w pole “Value” interesującego nas parametru i wprowadzić z klawiatury nową wartość.

Wpisując “TRUE” dla “diPrintButton” zasymulujemy naciśnięcie i przytrzymanie przycisku podłączonego do sterownika – powinniśmy zaobserwować zmieniający się stan zmiennej “PrintStep”, odzwierciedlającej aktualnie wykonywany krok naszego programu.Z uwagi na to, że zmienna “diPrintButton” jest skorelowana z fizycznym wejściem cyfrowym sterownika, zmiana jej wartości wiąże się z wymuszeniem stanu na wejściu PLC. Oznacza to, że po zmianie wartości “diPrintButton”, sterownik będzie ignorował rzeczywisty sygnał, który do niego dociera i będzie opierał się tylko na wprowadzonej wcześniej wartości w trybie Watch. Nazwy zmiennych, których stan został wymuszony, przyjmują w oknie Watch kolor czerwony.

Wymuszenia zmiennych możemy deaktywować globalnie wybierając z górnego menu programu: “Online”, a następnie “Force” i “Global Force Off”.

Efektem powyższych operacji powinno być też oczywiście wydrukowanie etykiety z kodem QR.

Podsumowanie

Mam nadzieję, że ten poradnik będzie w stanie przybliżyć podstawowe zagadnienia związane z Automation Studio. To wszechstronne środowisko ma bardzo szerokie możliwości. Początkujących użytkowników zachęcam do przeglądania wspomnianej kilkukrotnie przeglądarki pomocy. B&R opisuje bardzo szczegółowo praktycznie każdy element swojego oprogramowania i hardware’u, a co więcej – bardzo często załącza przydatne przykłady, na których możemy bazować w swoich aplikacjach.

Przedstawiony przeze mnie system mógłby być wykorzystany np. na etapie kontroli jakości produktu, podczas którego sprawdzana jest kluczowa cecha detalu, a pozytywne przejście testu potwierdzone jest naklejeniem etykiety z kodem QR, który może być wykorzystany w kolejnych fazach produkcji. Taka koncepcja zagwarantowałaby przede wszystkim łatwość obsługi oraz szybki dostęp do zakodowanej informacji.

Użycie rozwiązania opartego na tym dwuwymiarowym systemie kodów graficznych sprawdzi się w aplikacjach, gdzie wymagane jest oznaczanie bardzo dużej ilości elementów. W wielu sytuacjach zastosowanie kodów QR będzie o wiele lepszą metodą znakowania niż użycie aplikacji bazującej na równie popularnej dziś technologii RFID – w szczególności ze względu na bardzo niskie koszty wydruku w stosunku do zakupu i zaprogramowania znacznika RFID.

Artykuł został nagrodzony w Konkursie iAutomatyka –  edycja Marzec 2019

Nagrodę Softshell Regatta dostarcza ambasador konkursu, firma EATON.

 



Utworzono: / Kategoria: , , ,

Reklama

Newsletter

Zapisz się i jako pierwszy otrzymuj nowości!



PRZECZYTAJ RÓWNIEŻ



NAJNOWSZE PUBLIKACJE OD UŻYTKOWNIKÓW I FIRM

Reklama



POLECANE FIRMY I PRODUKTY
  • Zaprojektowane, aby zwiększyć wydajność Sterowniki FX5U/FX5UC zapewniają rodzinie FX wyższą wydajność oraz dodają nowe cechy, które wyznaczają standardy w klasie kompaktowych sterowników PLC. Pozwala to użytkownikom na tworzenie bardziej zł...
  • To rozwiązanie oparte o technologię LoRaWAN pozwala skutecznie realizować działania ograniczające ryzyko rozprzestrzeniania się wirusa . Możliwość automatycznej kontroli dystansu z jednoczesnym monitoringiem relacji i wstecznym śledzeniem k...
  • Bezpieczny, prosty w obsłudze i energooszczędny Seria serwowzmacniaczy Mitsubishi Electric MELSERVO MR-J4 wraz z kompatybilnymi modułami pozycjonującymi oraz zaawansowanymi kontrolerami motion, umożliwia konstruktorom maszyn i urządzeń oraz...
  • 1,000 PLN
    Zdobądź wiedzę i bądź pewny, że nic Cię nie zaskoczy. Nie musisz przekopywać się przez tony katalogów i instrukcji. Oferujemy Ci kompleksowy system szkoleń, który sprawi, że najpierw zbudujesz fundamenty swojej wiedzy, a później pod okiem n...
    Czas trwania: 7h - 14 h
    Link: Terminy
  • Ten kurs zawiera podstawy z dziedziny serwomechanizmów. Składa się z pierwszego modułu wprowadzającego, pełnego kursu o serwomechanizmach. Mini kurs przeprowadzi Cię przez podstawowe zagadnienia związane z serwomechanizmami. Zaczniemy od sa...
  • Chcieliby Państwo być informowani z wyprzedzeniem o stanie maszyny lub techniki napędowej? Nic prostszego! Aplikacja DriveRadar® oferuje kompleksowe zarządzanie konserwacją w oparciu o cyfrowe rejestrowanie danych, na podstawie których możl...