Sprawdź, jakie bloki funkcyjne do przemieszczania danych dostępne są w sterownikach PLC.
W poprzednim artykule dowiedziałeś się jak działają bloki funkcyjne służące do zliczania impulsów w sterowniku PLC i jak je wykorzystywać.
Ta lekcja kursu jest podzielona na dwie istotne części – o konwersji danych i o przemieszczaniu rejestrów. Wiedzę teoretyczną z każdej części wykorzystasz w praktyce poprzez rozbudowanie Twojej aplikacji.
Programowanie PLC od podstaw – kurs dla automatyków i elektryków Podstawy programowania sterowników PLC
Programowanie sterownika PLC w języku drabinkowym
Programowanie zintegrowanego panelu HMI
Komunikacja sterowników PLC w sieci szeregowej i Ethernet
Zaawansowane funkcje sterownika PLC
Część I: Jak i po co robić konwersję typów zmiennych
Bloki do konwersji pozwalają na zamianę typów danych. Głównie wykorzystywane są bloki do konwersji między typami: INT (16-bitowy), DINT (32-bitowy) i REAL (32-bitowy). Ponadto możliwa jest też konwersja znaków ASCII czy liczb typu long.
Pamiętaj, że operacja konwersji dotyczy wartości, a nie miejsca zajmowanego przez zmienną w pamięci sterownika.
Podczas konwersji możesz mieć do czynienia z sytuacjami takimi jak:
Jakie bloki do konwersji typów zmiennych dostępne są w sterownikach PLC Horner?
Programowanie w akcji! Krok 1: Jak dodać i skonfigurować bloki konwersji typów danych w środowisku Cscape?
W tworzonej aplikacji zawartość zbiorników reprezentowana jest przez rejestry typu real. Do tworzenia wizualizacji stanów zbiorników na ekranach operatorskich niezbędne będą wartości typu int.
Teraz wykorzystaj bloki konwersji danych w każdym podprogramie służącym do napełniania i opróżniania odpowiedniego zbiornika.
Ikony służące do konwersji danych dostępne są z poziomu górnego paska narzędziowego.
Jeśli ich tam nie znajdujesz, włącz je, wybierając Menu -> View -> Toolbars -> Convert Operations.
W pierwszej kolejności dodaj nowe zmienne typu int. W oknie Project Navigator wybierz opcję I/O Names i za pomocą przycisku Add dodaj zmienne:
Następnie przejdź do podprogramu Zbiornik_1 i w trzecim szczeblu drabinki, po styku normalnie otwartym ALWAYS_ON, wstaw blok konwersji REAL na INT. Nie musisz obawiać się błędnego wyniku, ponieważ wartości rejestru nie przekraczają zakresu obsługiwanego przez int.
Klikając dwukrotnie na dodany blok przejdziesz do jego konfiguracji. Jako Source wybierz zmienną Zbiornik_1 o adresie %R00001. W polu Destination wybierz stworzoną przed momentem zmienną Zbiornik_1_INT o adresie %R00020.
Uzupełnianie logiki kolejnych zbiorników będzie analogiczne.
Przechodząc do podprogramu Zbiornik_2 i Zbiornik_3, w trzecim szczeblu drabinki za stykiem ALWAYS_ON, dodaj blok konwersji typu REAL na INT i skonfiguruj następująco:
Krok 2: Wgraj program do sterownika i przetestuj
Po tylu odcinkach praktyki wiesz już na pewno, jak w kilku krokach przejść do testowania programu:
Sterując zaworami napełniania i opróżniania poszczególnych zbiorników, możesz obserwować zmiany wartości informujących o ich zawartości. Możesz wtedy zauważyć działanie bloków konwersji typów.
Część II: Jak przemieszczać dane pomiędzy rejestrami?
Środowisko zmiennych Cscape zawiera bloki funkcyjne służące do przemieszczania danych pomiędzy rejestrami sterownika. Bloki te można wykorzystać do wstawiania stałych do rejestrów, przemieszczania bloków danych do innego miejsca lub wypełniania bloków rejestrów tą samą wartością.
Co cechuje parametry bloków do przemieszczania danych?
Jakie rodzaje bloków do przemieszczania danych oferuje środowisko Cscape i jak one działają?
Powoduje przesunięcie rejestru, pary rejestrów (32 bitów lub stałej wartości do następnego rejestru lub do pary rejestrów (32 bitów).
Powoduje przesunięcie bloku rejestrów z zadanego miejsca w inne. Move Block operuje wyłącznie na rejestrach 16-bitowych.
Powoduje on przemieszczenie pojedynczego rejestru lub bloku danych z jednego miejsca pamięci do innego. W przypadku tej instrukcji możliwe jest bezpośrednie lub pośrednie podanie adresu.
Adresowanie pośrednie wykorzystane było w powyższych blokach, gdzie podawałeś adres rejestru, który ma zostać przesunięty.
Adresowanie bezpośrednie polega na podaniu wskaźnika na adres. Rejestr podany jako parametr wejściowy traktowany jest jako wskaźnik, który blok funkcyjny odczytuje, następnie pobiera jego wartość i wartość tę przypisuje jako docelowy adres rejestru, z którego dane mają być przesunięte.
Powoduje wypełnienie bloku rejestrów określoną wartością. Parametr IN może być stałą numeryczną lub adresem rejestru.
Pozwala na zapisanie tabeli ze stałymi do grupy kolejnych rejestrów sterownika. Tabela stałych może zawierać wartości typu INT, DINT, UDINT, REAL. Jednak wszystkie elementy tablicy muszą być tego samego typu.
Programowanie w akcji!
Krok 1: Jak dodać i skonfigurować bloki do przemieszczania danych w programie?
Teraz dopiszesz kolejne linie kodu w Twojej aplikacji. Rozbudujesz program o logikę pozwalającą zadać w pierwszym cyklu pracy kontrolera czasy mieszania i grzania oraz ustawianie maksymalnych poziomów w zbiornikach.
W tym celu przejdź do programu głównego main i poniżej istniejącego szczebla wstaw styk normalnie otwarty i podłącz do niego zmienną S1. Jest to zmienna, która ma stan wysoki i przepuszcza sygnał tylko w pierwszym cyklu kontrolera. To zagwarantuje, że przemieszczanie danych do zmiennych będzie realizowane jednorazowo po uruchomieniu sterownika.
Kolejnym krokiem jest wstawienie za stykiem S1 dwóch bloków Move Data MOV.
Pierwszy blok będzie ustawiał czas mieszania. Przechodząc do konfiguracji jako Source zdefiniuj stałą wartość 50, natomiast w polu Destination wybierz zmienną Czas_Mieszanie. Typ danych ustaw na WORD. Blok ten spowoduje ustawienie czasu mieszania na 5 sekund.
Drugi blok posłuży do przypisania czasu grzania, w sposób analogiczny jak powyżej. Jako Source zdefiniuj stałą wartość 70, natomiast w polu Destination wybierz zmienną Czas_Grzanie. Typ danych również skonfiguruj jako WORD. Konsekwentnie, czas grzania będzie równy 7 sekund.
Do ustawienia maksymalnych pojemności zbiorników wykorzystasz blok Move Constant Data – MOV CST. Przechodząc do jego konfiguracji określ typ danych na REAL, a w oknie do wprowadzenia wartości wpisz kolejno pod sobą: 50.5, 40.8, 75.2. Jako Destination Address wybierz zmienną Zbiornik_1.
Taka konfiguracja spowoduje, że do kolejnych zmiennych: %R1 – Zbiornik_1, %R3 – Zbiornik_2, %R5 – Zbiornik_3 zostaną przypisane odpowiednio wprowadzone wartości.
Krok 2: Wgraj program do sterownika i przetestuj jego działanie
Tak jak wcześniej, wgraj program do sterownika, wprowadź sterownik w tryb RUN, włącz opcję Debug oraz włącz podgląd zmiennych w oknie Data Watch.
W oknie Data Watch dodaj do podglądu następujące zmienne i zobacz, jakie wartości zostały im przypisane:
Powinny być one zgodne z wartościami wprowadzonymi przez Ciebie w programie.
W kolejnym, ostatnim już odcinku części związanej z programowaniem sterowników PLC, poznasz instrukcję skoku warunkowego, która umożliwia sterowanie wykonywaniem programu logicznego.
Dowiesz się, jak działa ta instrukcja i jak można wykorzystywać ją w programie sterującym. Będzie to ostatni element uzupełniający Twoją wiedzę i umiejętności z zakresu tworzenia logiki w języku drabinkowym.
Chcesz nauczyć się programować sterowniki PLC?
Wszystkie odcinki kursu, bezpłatne oprogramowanie oraz dodatkowe materiały znajdziesz na stronie: https://www.astor.com.pl/poradnikautomatyka/kursy/programowania-plc-od-podstaw-dla-elektrykow-i-automatykow/
Sprawdź pozostałe bezpłatne kursy i poradniki na: https://www.astor.com.pl/poradnikautomatyka/