Strona główna ASTOR
Automatyka w praktyce

Jak korzystać ze styków, cewek i bloków operacji arytmetycznych w programie sterującym?
Kurs programowania sterowników Horner APG  w środowisku Cscape 10, odc. 4

Kontakt w sprawie artykułu: Mateusz Pytel - 2025-09-09

W tym odcinku zbudujemy pierwszą prostą aplikację sterowania zaworami zbiorników. Nauczysz się tworzyć logikę programu oraz symulację procesów, używając styków, cewek oraz bloków operacji arytmetycznych.

Kurs programowania sterowników Horner APG w środowisku Cscape 10

Wprowadzenie i podstawy

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

Programowanie 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 graficznych?
13. Jak korzystać z obiektu menu?
14. Konfiguracja i obsługa alarmów w sterownikach PLC.
15. Trend Graph.

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

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 pierwiastka kwadratowego √ – oblicza pierwiastek kwadratowy z parametru IN1, a wynik zapisuje do parametru Q.

Q = √(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ści bezwzględnej (ABS) – odrzuca znak parametru IN1 i wynik zapisuje do parametru Q. Wynik działania jest więc zawsze liczbą dodatnią.

Q = | 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 sterowany 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, który znajduje się w zakładce Project Toolbox -> Math Standard -> Add.

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 (blok SUB), który znajduje się w tej samej zakładce Math -> Standard.

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 Paste z menu kontekstowego 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?

Przejdziemy 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. Poszczególne linie kodu, jak i pojedyncze elementy, możesz także swobodnie przesuwać w celu utworzenia miejsca pomiędzy liniami.

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 nazwie Zawor_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.

Oto efekt:

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 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 wartości zmiennych możliwe jest z poziomu zakładki Debug, znajdującej się na górnym pasku narzędziowym.

Podgląd wykonującego się programu sterującego umożliwia opcja Debug Mode.

W oknie Data Watch możesz dodawać zmienne (Add) i zmieniać ich wartości, 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.

Następny odcinek: Jak odmierzać czas w programie sterującym i jak konfigurować timery?

Autor artykułu:


Jacek Dynak

Praktykant ASTOR

Student IV roku kierunku „automatyka i robotyka” na Politechnice Krakowskiej

Newsletter Poradnika Automatyka

Czytaj trendy i inspiracje, podstawy automatyki, automatykę w praktyce

Please wait...

Dziękujemy za zapis do newslettera!

Czy ten artykuł był dla Ciebie przydatny?

Średnia ocena artykułu: 0 / 5. Ilość ocen: 0

Ten artykuł nie był jeszcze oceniony.

Zadaj pytanie

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *