Jak korzystać ze styków, cewek i bloków operacji arytmetycznych w programie sterującym?
Kurs programowania PLC od podstaw
Odc. 4
Kontakt w sprawie artykułu: Kamil Zajdel - 2020-01-24
Z tego artykułu dowiesz się:
- Jak dodać do programu sterującego styki, cewki i bloki arytmetyczne w środowisku Cscape?
- Jak utworzyć prostą logikę programu sterującego?
- Jak skompilować stworzony program i wgrać go do sterownika?
- Jak śledzić wykonywany program i jak monitorować wartości wykorzystanych zmiennych?
Przyszedł moment na jeden z najciekawszych momentów kursu, szczególnie jeśli nie miałeś/aś okazji programować w języku LAD. Stworzysz teraz pierwszy rozbudowany program logiczny wykorzystujący podstawowe elementy języka drabinkowego.
Kurs programowania PLC od podstaw 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
Na przykładzie sterowania zaworami zbiorników nauczysz się tworzyć logikę programu oraz symulację procesów używając styków, cewek oraz bloków operacji arytmetycznych. To podstawowe elementy w języku drabinkowym! Zapraszamy więc do zgłębienia tej wiedzy i zdobycia kolejnych umiejętności!
Krok 1: Jakie są podstawowe elementy języka drabinkowego?
Styki – służą do sprawdzania stanu logicznego bitów im przypisanych
Styk normalnie otwarty – przesyła sygnał, jeżeli związana z nim zmienna ma wartość 1 (ON).
Styk normalnie zamknięty – przesyła sygnał, jeżeli związana z nim zmienna ma wartość 0 (OFF).
Przekaźniki (cewki) – służą do ustawiania stanów bitów im przypisany
Przekaźnik chwilowy o stykach otwartych – ustawia wartość przypisanej mu zmiennej na 1 w momencie doprowadzenia do niego sygnału.
Przekaźnik chwilowy o stykach zamkniętych – ustawia wartość przypisanej mu zmiennej na 0 w momencie doprowadzenia do niego sygnału.
Przekaźnik uaktywniany zboczem narastającym sygnału – zmiana stanu sygnału z 0 na 1 powoduje ustawienie zmiennej powiązanej z przekaźnikiem na 1 na okres jednego cyklu wykonywania programu sterującego. (Zbocze narastające – zmiana stanu sygnału z 0 na 1. )
Przekaźnik uaktywniany zboczem opadającym sygnału – zmiana stanu sygnału z 1 na 0 powoduje ustawienie zmiennej powiązanej z przekaźnikiem na 1 na okres jednego cyklu wykonywania programu sterującego. (Zbocze opadające– zmiana stanu sygnału z 1 na 0.)
Przekaźnik – zatrzask SET – doprowadzenie sygnału do tego przekaźnika powoduje ustawienie wartości związanej z nim zmiennej na 1. Zmienna zachowuje tę wartość do momentu jej zmiany za pomocą przekaźnika Reset.
Przekaźnik – zatrzask RESET – doprowadzenie sygnału do tego przekaźnika powoduje ustawienie wartości związanej z nim zmiennej na 0. Zmienna zachowuje tę wartość do momentu jej zmiany za pomocą przekaźnika Set.
Bloki operacji arytmetycznych – realizują funkcje matematyczne parametrów
Blok funkcyjny dodawania Add – dodaje parametr IN1 i IN2, a wynik zapisuje jako parametr Q:
Q = IN1 + IN2
Blok funkcyjny odejmowania Sub – odejmuje parametr IN2 od parametru IN1 i wynik zapisuje do parametru Q:
Q = IN1 – IN2
Blok funkcyjny mnożenia Mul – mnoży parametry IN1 i IN2, a wynik zapisuje do parametru Q:
Q = IN1 * IN2
Blok funkcyjny dzielenia Div – dzieli parametr IN1 przez IN2, a wynik zapisuje do parametru Q:
Q = IN1 / IN2
W przypadku wartości INT i DINT, część ułamkowa wyniku jest odrzucana.
Blok funkcyjny modulo (MOD) – dzieli parametr IN1 przez IN2, a resztę z dzielenia zapisuje do parametru Q:
Q = część ułamkowa (IN1/IN2)
Blok funkcyjny pierwiastek kwadratowy – oblicza pierwiastek kwadratowy z parametru IN1, a wynik zapisuje do parametru Q.
Q = pierwiastek kwadratowy (IN1)
Argumentami tego bloku powinny być zwykle wartości typu REAL, tak by wynik mógł być liczbą zmiennoprzecinkową. Jako argument możesz podać wartość typu INT lub DINT, ale w przypadku, gdy w wyniku działania otrzymasz wartość niecałkowitą, część ułamkowa będzie odrzucona, gdyż wartość Q jest wtedy również liczbą całkowitą.
Blok funkcyjny wartość bezwzględna (ABS) – odrzuca znak parametru IN1 i wynik zapisuje do parametru Q. Wynik działania jest więc zawsze liczbą dodatnią.
Q = wartość bezwzględna (IN1)
Krok 2: Jakie zadanie będzie realizowała tworzona aplikacja?
Program tworzony w ramach kursu, to przykład aplikacji stworzonej w języku LD. Architekturę programu sterowania prezentuje poniższy schemat:
Aplikacja będzie składała się z 3 zbiorników oraz z 5 zaworów – 2 napełniających oraz 3 opróżniających. Funkcje arytmetyczne wykorzystasz do symulacji napełniania i opróżniania zbiorników. Dodawanie i odejmowanie wartości do/od rejestrów przypisanych odpowiednim zbiornikom będzie realizowane w określonych interwałach czasowych.
Stan zaworów będzie kontrolowany przez odpowiednie styki. Otwarcie zaworu będzie następowało po wykryciu przez styk wartości zmiennej równiej 1. Zawór będzie natomiast zamknięty, jeśli wartość zmiennej badanej przez styk będzie równa 0.
Przepływ cieczy do zbiornika (dodawanie i odejmowanie wartości rejestru zbiornika) będzie sterowane przez zawory (styki).
Aby zwiększyć czytelność programu, logikę dotyczącą poszczególnych zbiorników będziesz umieszczać w osobnych podprogramach.
Krok 3: Jak utworzyć nowy podprogram w środowisku Cscape?
Aby utworzyć nowy podprogram, kliknij prawym klawiszem myszy na Main Loop Modules i z menu kontekstowego wybierz New Enhanced Ladder Logic Block, a następnie skonfiguruj jego nazwę jako Zbiornik_1:
Krok 4: Stworzenie programu sterującego napełnianiem i opróżnianiem zbiorników
Napiszemy teraz kod sterujący napełnianiem i opróżnianiem tego zbiornika. W tym celu wstaw kolejno dwa styki normalnie otwarte i blok dodawania.
Do pierwszego styku przypisz zmienną Impuls_100ms a do drugiego Zawor_napelniajacy_ZB1.
Klikając dwukrotnie na bloczek dodawania, uzupełnij parametry operacji dodawania. Pierwszym krokiem jest zmiana typu na REAL, gdyż zmienne, na których blok będzie operował, mają właśnie taki typ.
Kolejno, do parametru IN1 przypisz Zbiornik_1, do parametru IN2 przypisz wartość 0.1 oraz do parametru wyjściowego również przypisz zmienną Zbiornik_1.
W ten sposób po otwarciu zaworu napełniającego zawartość zbiornika będzie zwiększana co 100 ms o wartość 0.1.
Kolejnym krokiem jest napisanie logiki związanej z opróżnianiem zbiornika.
Ponownie wstaw dwa styki normalnie otwarte oraz blok odejmowania.
Do pierwszego styku przypisz zmienną Impuls_100ms a do drugiego Zawor_oprozniajacy_ZB1.
Klikając dwukrotnie na blok odejmowania, uzupełnij parametry. Najważniejsza jest zmiana typu na REAL, a następnie przypisanie zmiennych: do parametru IN1 przypisz Zbiornik_1, do parametru IN2 przypisz wartość 0.1 oraz do parametru wyjściowego również zmienną Zbiornik_1.
W ten sposób po otwarciu zaworu opróżniającego zawartość zbiornika będzie zmniejszana co 100 ms o wartość 0.1.
Krok 5: Stworzenie kodu dla kolejnych zbiorników. Jak kopiować i przenosić poszczególne fragmenty drabinki?
Przejdźmy do stworzenia analogicznej logiki dla kolejnych zbiorników.
Stwórz nowy podprogram o nazwie Zbiornik_2.
Z uwagi na fakt, że podprogram dla tego zbiornika różni się tylko zmiennymi i rejestrami, na których pracuje, można kod napisany dla zbiornika 1 skopiować i wkleić, a następnie zmienić odpowiednie parametry. W tym celu przejdź do podprogramu Zbiornik_1, zaznacz stworzony kod i skopiuj go skrótem klawiszowym Ctrl+C lub wybierając z menu kontekstowego opcję Copy.
Następnie w podprogramie Zbiornik_2 wklej kod, używając skrótu klawiszowego Ctrl+V lub opcji z menu kontekstowego Paste oraz wybierz miejsce na szarym tle, od którego kod ma zostać wklejany.
Zmienną Zawor_napelniajacy_ZB1 zmień na Zawor_napelniajacy_ZB2 oraz Zawor_oprozniajacy_ZB1 na Zawor_oprozniajacy_ZB2. W blokach dodawania i odejmowania zamień rejestr Zbiornik_1 na Zbiornik_2. Finalnie otrzymasz:
Krok 6: Jak wstawiać nowe szczeble, aby rozbudować przygotowany program?
Przejdziesz teraz do tworzenia logiki dla zaworu numer 3. Utwórz dla niego nowy podprogram o nazwie Zbiornik_3.
Przed stworzeniem kodu dla tego zbiornika, spójrz ponownie na schemat aplikacji przedstawiony powyżej. Zauważ, że zbiornik ten będzie napełniany w momencie opróżniania zaworu numer 1 lub numer 2. Dlatego kod będzie troszkę bardziej rozbudowany. Mimo to skopiuj program napisany dla zbiornika numer 1 i wklej do podprogramu stworzonego dla zbiornika numer 3.
Między istniejące linie kodu wstaw nowe puste szczeble drabinki, klikając prawym klawiszem myszy na jej początek w miejscu pomiędzy istniejącymi szczeblami, a następnie wybierając z menu kontekstowego opcję New Rung.
Kolejno, skopiuj pierwszy szczebel drabinki i wstaw go w nowo utworzonej przestrzeni.
Następnie zmień parametry tak, by pierwszy szczebel realizował napełnianie zbiornika numer 3 po otwarciu zaworu opróżniającego zbiornik numer 1, a drugi szczebel realizował napełnianie zbiornika 3 po otwarciu zaworu opróżniającego zbiornik numer 2.
W tym celu zmienną dla styku w pierwszej linijce o nazwie Zawor_napelniajacy_ZB1 zamień na Zawor_oprozniajacy_ZB1, a zmienną w drugiej linijce o nazwieZawor_napelniajacy_ZB2 zamień na Zawor_oprozniajacy_ZB2.
W obu blokach dodawania, zamień zmienną Zbiornik_1 na zmienną Zbiornik_3.
W linijce 3 zmień parametr Zawor_oprozniajacy_ZB1 na Zawor_oprozniajacy_ZB3.
Krok 7: Jak wstawiać komentarze, aby opisać fragment programu?
Ostatni, ważny element edycji kodu, to dodanie komentarzy. Opisz kolejne podprogramy, informując do czego służą.
W tym celu kliknij prawym klawiszem myszy na początku drabinki, na odpowiedniej wysokości i wybierz opcję New Comment. Następnie dwukrotnie kliknij w miejsce stworzonego komentarza i uzupełnij go treścią.
Operację powtórz dla wszystkich stworzonych podprogramów.
Krok 8: Jak wgrać program do sterownika Horner?
Aby utworzony program wgrać do sterownika, uruchom funkcję Download to… w sposób omówiony w poprzednich częściach kursu. Potwierdź kolejno pojawiające się okna.
Następnie wprowadź sterownik w tryb RUN, aby uruchomić program. Służy do tego ikona na górnym pasku narzędziowym.
Krok 9: Jak śledzić wykonywany program i wartości zmiennych?
Obserwowanie i zmiana wartości zmiennych możliwa jest z poziomu okna Data Watch, uruchamianego przy pomocy ikony znajdującej się na górnym pasku narzędziowym.
Przy pomocy przycisku Add dodaj zmienne, podając adres lub nazwę.
Co więcej, możesz dodać kilka następujących po sobie zmiennych. W tym celu podaj adres początkowy oraz liczbę zmiennych poprzedzoną myślnikiem:
Podgląd wykonującego się programu sterującego oraz aktualizację wartości zmiennych umożliwia opcja Debug.
W oknie Data Watch możesz zmieniać wartości zmiennych, klikając na wybraną zmienną prawym klawiszem myszy i wybierając z menu kontekstowego opcję Modify:
W ten sposób możesz sterować programem w celu sprawdzenia poprawności działania jego logiki.
W kolejnym artykule z cyklu kurs „Programowanie oraz konfiguracja sterowników PLC zintegrowanych z hmi”: Jak odmierzać czas w programie sterującym i jak konfigurować timery?
- Jakie rodzaje timerów dostępne są w środowisku Cscape?
- Jaka jest zasada działania odpowiednich timerów?
- Jak konfigurować bloki funkcyjne timerów?