Zobacz wszystkie

Kategorie

Programowanie PLC od podstaw – kurs dla automatyków i elektryków odc.8 – Jak konwertować typy zmiennych i przemieszczać zmienne w programie?

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

  • 1. Wprowadzenie. Jak skonfigurować, podłączyć oraz uruchomić sterownik PLC?
  • 2. Jak tworzyć i edytować projekty w oprogramowaniu Cscape?

Programowanie sterownika PLC w języku drabinkowym

  • 3. Jak tworzyć oraz konfigurować bazę zmiennych w środowisku Cscape?
  • 4. Jak korzystać ze styków, cewek i bloków operacji arytmetycznych w programie sterującym?
  • 5. Jak odmierzać czas w programie sterującym i jak konfigurować timery?
  • 6. Jak porównywać wartości i wykorzystać wyniki operacji logicznych?
  • 7. Jak zliczać impulsy i konfigurować liczniki?
  • 8. Jak konwertować typy zmiennych i przemieszczać zmienne w programie?
  • 9. Jak sterować wykonywaniem programu logicznego? Instrukcja skoku warunkowego

Programowanie zintegrowanego panelu HMI

  • 10. Jak budować ekrany operatorskie z obiektami do wizualizacji i zadawania wartości zmiennych?
  • 11. Jak umożliwić nawigację między ekranami operatorskimi oraz jak korzystać z gotowych obiektów graficznych w środowisku Cscape?
  • 12. Jak wizualizować zmienne analogowe oraz jak modyfikować ich wartości przy pomocy obiektów dostępnych w oprogramowaniu Cscape?
  • 13. Obiekt Menu
  • 14. Alarmy i Data trend

Komunikacja sterowników PLC w sieci szeregowej i Ethernet

  • 15. Komunikacja szeregowa Modbus RTU Master i Slave
  • 16. Komunikacja CsCAN
  • 17. Komunikacja Ethernet Modbus TCP i Email

Zaawansowane funkcje sterownika PLC

  • 18. Regulator PID
  • 19. Składowanie danych: Data logging oraz karta MicroSD
  • 20. Trendy historyczne oraz receptury w programie
  • 21. Setpoint, backup i restore danych oraz generowanie raportów z poziomu sterownika
  • 22. Hasła i zabezpieczenia w programie, ustawienia języka oraz edytor dostępny w narzędziu, opcja autodokumentacji / Dodatkowe ustawienia i możliwości edycji

 

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:

  • zmniejszenie dokładności – co nie jest traktowane jako błąd i program jest prawidłowo wykonywany,
  • konwertowanie dużej wartości na typ, który nie jest w stanie reprezentować tej wartości – błąd jest sygnalizowany i wynik działania programu może być nieoczekiwany. 

 

Jakie bloki do konwersji typów zmiennych dostępne są w sterownikach PLC Horner?

  • Blok służący do konwersji typu INT na REAL – blok konwertuje wartość INT (16-bitową), zadaną parametrem IN1 na wartość REAL (32-bitową), zapisywaną w parametrze Q.
  • Blok służący do konwersji typu DINT na REAL – blok konwertuje wartość DINT (32-bitową), zadaną parametrem IN1 na wartość REAL (32-bitową), zapisywaną w parametrze Q.
  • Blok służący do konwersji typu REAL na INT – blok konwertuje wartość REAL (32-bitową), zadaną parametrem IN1 na wartość INT (16-bitową), zapisywaną w parametrze Q.
  • Blok służący do konwersji typu REAL na DINT – blok konwertuje wartość REAL (32-bitową), zadaną parametrem IN1 na wartość DINT (32-bitową), zapisywaną w parametrze Q.
  • Blok służący do konwersji typu INT na DINT – blok konwertuje wartość INT (16-bitową), zadaną parametrem IN1 na wartość DINT (32-bitową), zapisywaną w parametrze Q.
  • Blok służący do konwersji typu DINT na INT – blok konwertuje wartość DINT (32-bitową) zadaną parametrem IN1 na wartość INT (16-bitową), zapisywaną w parametrze Q.

 

 

 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:

  • – Adres: %R00020, Nazwa: Zbiornik_1_INT
  • – Adres: %R00021, Nazwa: Zbiornik_2_INT
  • – Adres: %R00022, Nazwa: Zbiornik_3_INT

 

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:

  1. – Wgraj program do sterownika,
  2. – Przełącz sterownik w tryb RUN,
  3. – Włącz opcję Debug,
  4. – Włącz opcję Data Watch

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?

  • Wartości w rejestrze będącym parametrem wejściowym nie ulegają zmianie.
  • W przypadku bloków funkcyjnych do przemieszczania pojedynczych rejestrów, jako parametr wejściowy można podać stałą numeryczną. Spowoduje to umieszczenie tej stałej we wszystkich rejestrach wyjściowych.
  • W przypadku bloków funkcyjnych do przemieszczania bloków rejestrów, zarówno parametr wejściowy, jak i wyjściowy, musi być określony poprzez podanie adresu – nie można określać parametru wejściowego stałą numeryczną.
  • Parametr Count określa liczbę przemieszczanych lub wypełnianych rejestrów w czasie pojedynczego wykonania bloku funkcyjnego. Dla bloku funkcyjnego do przemieszczania pojedynczego rejestru, parametr Count ma stałą domyślną wartość ‘1’. W przypadku bloków funkcyjnych do przemieszczania lub wypełniania bloków, parametr Count jest konfigurowalny i może mieć wartość z przedziału od 0 do 2048.

 

Jakie rodzaje bloków do przemieszczania danych oferuje środowisko Cscape i jak one działają?  

  • Blok funkcyjny przemieszczający pojedynczy rejestr – MOV

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

  • Blok funkcyjny przemieszczający bloki rejestrów – BMV

Powoduje przesunięcie bloku rejestrów z zadanego miejsca w inne. Move Block operuje wyłącznie na rejestrach 16-bitowych.

  • Blok funkcyjny Indirect Move – IMV

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.

  • Blok funkcyjny do wypełniania bloków – FILL

Powoduje wypełnienie bloku rejestrów określoną wartością. Parametr IN może być stałą numeryczną lub adresem rejestru.

  • Blok funkcyjny do przemieszczania bloków stałych – CST MOV

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/

Zapytania ofertowe
Programowanie PLC od podstaw – kurs dla automatyków i elektryków odc.8 – Jak konwertować typy zmiennych i przemieszczać zmienne w programie?
Zapytaj o produkt