Język schematów blokowych (FBD) | Kurs programowania w Codesys odc. 5

Z tego artykułu dowiesz się:

  • czym jest język FBD,
  • jakie bloki FBD można wykorzystać w Codesys,
  • jak stworzyć pierwszy program w języku FBD.

Witaj w piątym odcinku odcinku kursu Codesys od podstaw. W poprzednim odcinku zdobyłeś/aś informacje na temat zmiennych. W tym odcinku kontynuujemy poznawanie języków programowania wg. normy IEC61131-3 w Codesys. Odcinek ten poświęcimy poznawaniu języka FBD.

Kurs programowania w Codesys

Część I – Podstawowe funkcjonalności środowiska Codesys

  • 1. Pierwsze kroki w Codesys. Jak stworzyć program? | Kurs programowania w Codesys odc. 1
  • 2. Pierwsze podłączenie i przygotowanie Codesys do pracy ze sterownikiem PLC | Kurs programowania w Codesys odc. 2
  • 3. Język drabinkowy (LD) | Kurs programowania w Codesys odc. 3
  • 4. Typy danych w Codesys, rodzaje zmiennych, sposoby ich tworzenia | Kurs programowania w Codesys odc. 4
  • 5. Język schematów blokowych (FBD) | Kurs programowania w Codesys odc. 5
  • 6. Tworzenie podstawowej wizualizacji HMI | Kurs programowania w Codesys odc. 6
  • 7. Język strukturalny (ST) | Kurs programowania w Codesys odc. 7
  • 8. Diagnostyka w Codesys – jak sprawdzać działanie oprogramowania i sterownika? | Kurs programowania w Codesys odc. 8
  • 9. Język bloków funkcyjnych (CFC) | Kurs programowania w Codesys odc. 9
  • 10. Funkcja, blok funkcyjny, program – zmodyfikuj program w Codesys dla lepszej funkcjonalności | Kurs programowania w Codesys odc. 10
  • Część II – Zaawansowane funkcje i możliwości środowiska Codesys

  • 11. Komunikacja EtherCAT – konfiguracja i przykładowa aplikacja | Kurs programowania w Codesys odc. 11
  • 12. Softmotion – synchronizacja serwonapędów przy pomocy sterownika PLC| Kurs programowania w Codesys odc. 12
  • 13. Komunikacja Modbus RTU i TCP/IP – jak skonfigurować najpopularniejszy protokół komunikacyjny w Codesys? | Kurs programowania w Codesys odc. 13
  • 14. Tworzenie projektów w Codesys ze sterownikami bezpieczeństwa Safety | Kurs programowania w Codesys odc. 14
  • 15. Konfiguracja maszyny CNC z wykorzystaniem sterownika PLC – obsługa G-Code | Kurs programowania w Codesys odc. 15
  • 16. Integracja sterownika PLC z systemem SCADA w Codesys| Kurs programowania w Codesys odc. 16
  • 17. Połączenie i skomunikowanie sterownika PLC z robotem Kawasaki w Codesys| Kurs programowania w Codesys odc. 17
  • Język FBD

    Na początek garść teorii. Język FBD (ang. Function Block Diagram – funkcjonalny schemat blokowy) to graficzny język programowania bazujący na przepływie sygnału pomiędzy blokami funkcyjnymi, funkcjami oraz bramkami logicznymi. Przepływ sygnału w języku FBD odzwierciedlony jest za pomocą graficznego połączenia poszczególnych bloków funkcyjnych lub funkcji. W języku FBD, podobnie jak w LD, instrukcje realizowane są zaczynając od lewej strony, następnie od góry do dołu programu.

    Język FBD a język LD

    Filozofia działania obu języków jest bardzo podobna. Bazują one na graficznym przepływie sygnału pomiędzy poszczególnymi obiektami. Swoją popularność zawdzięczają przejrzystości zapisu, dzięki której kod stosunkowo niewielkich programów można szybko zrozumieć, nawet bez większego przygotowania programistycznego.

    Przewaga języka FBD nad językiem LD zwiększa się wraz ze stopniem skomplikowania algorytmu sterującego. FBD jest łatwiejszy w interpretacji, m.in. ze względu na to, że każdej funkcji w języku FBD należy użyć jawnie.

    Język FBD zabrania np. połączenia równoległego dwóch zmiennych w celu uzyskania funkcji OR. Aby uzyskać tę funkcję logiczną w FBD należy jawnie użyć odpowiedniej funkcji logicznej:

    Funkcja OR w języku FBD, Codesys, źródło: ASTOR
    Funkcja OR w języku LD, Codesys, źródło: ASTOR

    Podobnie w przypadku innych funkcji logicznych np. AND. W języku FBD musisz używać ich jawnie:

    Funkcja AND w języku FBD, Codesys, źródło: ASTOR
    Funkcja AND w języku LD, Codesys, źródło: ASTOR

    Sposób zapisu algorytmu sterującego w FBD sprawia, że w porównaniu do języka LD, łatwiej jest śledzić zmiany w programie i szukać ewentualnych błędów podczas debugowania. To tyle teorii na temat języka FBD. Przejdźmy teraz do praktyki.

    Język FBD w Codesys

    Podobnie jak w poprzednich, również w tym odcinku posłużymy się wbudowanym w Codesys symulatorem. Jeśli jednak czujesz chęć przetestowania Codesysa na prawdziwym sterowniku PLC, zapraszam do skorzystania ze specjalnego zestawu startowego ONE START dla uczestników kursu, w którym jest wszystko co potrzebne do rozpoczęcia Twojej przygody z programowaniem PLC w Codesys.

    Zapraszam również do sekcji Tips&Tricks dla subskrybentów kursu, w którym znajdziesz wiele ciekawych wskazówek, między innymi wskazówki, jak za pomocą kilku kliknięć skonwertować program z symulatora Codesys na sterownik PLC Astraada One.

    A w dzisiejszym odcinku w sekcji Tips&Tricks dowiesz się, jak jednym kliknięciem skonwertować program napisany w języku LD na program napisany w języku FBD. Ciekawe, prawda?

    Zaczynajmy! Najpierw utwórz pierwszy program, w sposób opisany w pierwszym odcinku kursu kursu. Podczas wyboru języka wybierz opcję FBD:

    Tworzenie nowego projektu w Codesys, źródło: ASTOR

    Następnie w drzewku projektu, przejdź do programu głównego PLC_PRG:

    Program główny FBD w Codesys, źródło: ASTOR

    Po prawej stronie okna zmiennych oraz edytora programu znajdziesz okno ToolBox, w którym znajdziesz najważniejsze elementy używane w języku FBD, pogrupowane w kilka zbiorów. Pierwszym z nich jest grupa General:

    ToolBox w Codesys, źródło: ASTOR

    Poznaj teraz poszczególne elementy grupy General:

    Network – jest to podstawowa jednostka programu FBD. Umieścisz w niej poszczególne elementy Twojego algorytmu.

    Box – reprezentuje funkcje oraz bloki funkcyjne. Element Box może odnosić się do zdefiniowanych już bloków funkcyjnych jak np. Timer TON lub reprezentować zdefiniowany przez Ciebie blok funkcyjny. O tym, jak tworzyć w Codesys własne bloki funkcyjne, dowiesz się w dalszej części kursu.

    Box with EN/ENO – zasada jego działania jest dokładnie taka sama jak elementu Box. Posiada on natomiast dodatkowe wejście aktywacyjne EN oraz wyjście indykacyjne ENO. W przypadku, gdy na wejściu EN występuje sygnał 0 (FALSE), operacje zawarte w bloczku nie są wykonywane. Wykonywane są jedynie w przypadku, gdy na wejściu EN pojawi się sygnał 1 (TRUE). Jest to bardzo przydatna funkcjonalność pozwalająca kontrolować pracę poszczególnych bloków funkcyjnych.

    Assignment – użyj tego elementu chcąc przypisać zmienną do wyjścia danego bloku funkcyjnego

    Funkcja Assigment w Codesys, źródło: ASTOR

    Jump – instrukcja skoku w dowolne miejsce w programie oznaczone daną etykietą. W dalszej części odcinka znajdziesz przykład zastosowania tej instrukcji

    Return – instrukcja skoku na koniec programu

    Input – instrukcja dodania dodatkowego wejścia do bloku funkcyjnego

    Branch – za pomocą tej instrukcji możesz utworzyć dodatkową gałąź programu

    Execute – bloczek, w którym możesz zdefiniować algorytm napisany w języku ST. Więcej na temat języka ST dowiesz się w kolejnych odcinkach kursu Codesys.

    Przykład:

    Bloczek Execute w FBD w oprogramowaniu Codesys, źródło: ASTOR

    Kolejne grupy zakładki ToolBox zostały opisane w odcinku Język LD w Codesys, odc.3 i bloki funkcyjne w nich zawarte działają analogicznie zarówno w języku LD jak i FBD. Jeśli nie zdążyłeś/aś jeszcze się z nimi zaznajomić, polecam wrócić do odcinka nr 3, gdzie krótko opisaliśmy każdy z bloków funkcyjnych.

    Przykład zastosowania elementu Jump w FBD w Codesys

    W celu zobrazowania działania instrukcji Jump zbuduj następujący mini-program:

    Bloczek Jump w Codesys, źródło: ASTOR

    Program, który właśnie stworzyłeś/aś, pozwoli łatwo i przejrzyście pokazać działanie instrukcji Jump.

    Przetestuj jego działanie. W tym celu połącz się z wirtualnym sterownikiem PLC (lub z realnym sterownikiem Astraada One), zaloguj się do niego (ikonka Login) oraz uruchom program klikając na ikonkę Start:

    Instrukcja Jump w Codesys, źródło: ASTOR

    Zauważ, że w momencie, kiedy wynik działania iloczynu logicznego AND jest dodatni (True), instrukcja Jump jest aktywna. Powoduje ona „skok” programu do gałęzi oznaczonej Etykietą „Etykieta_1”. Tym samym procesor omija wszystkie instrukcje, które znajdują się po instrukcji Jump oraz przed gałęzią programu oznaczoną etykietą. W naszym wypadku ominięta zostaje instrukcja ADD – wynik równy jest 0 (zamiast 6).

    W przypadku, kiedy wynik iloczynu logicznego jest równy 0 (False), instrukcja Jump jest nieaktywna. Program wykonywany jest w standardowej kolejności, nie omijając gałęzi z instrukcją ADD (prawidłowy wynik dodawania 6).

    Przykład zastosowania elementu Return

    W celu zrozumienia działania instrukcji Return, stwórz następujący mini-program:

    Zastosowanie bloczka Return w Codesys, źródło: ASTOR

    Przetestuj go:

    Test programu z funkcją Return w Codesys, źródło: ASTOR

    Działanie instrukcji Return jest analogiczne do instrukcji Jump. W przypadku, gdy wynik iloczynu logicznego jest równy 1 (True), instrukcja Return jest aktywna. Powoduje ona „skok” programu na jego koniec, bez wykonywania kolejnych instrukcji – w naszym przypadku procesor nie wykonuje instrukcji ADD (wynik 0 zamiast 6).

    W przypadku, kiedy wynikiem działania bloczku AND jest logiczne 0 (False), instrukcja Return nie jest aktywowana. Procesor wykonuje wówczas wszystkie instrukcje zawarte w programie, jedna po drugiej, od góry algorytmu do dołu, zgodnie z zasadą programowania w języku FBD. W tym przypadku bloczek ADD jest wykonywany przez program i na jego wyjściu pojawia się prawidłowy wynik.

    Analizując dwa mini-programy, które mam nadzieję jasno przedstawiają działanie instrukcji Jump oraz Return, pewnie zauważyłeś/aś już podstawową różnicę między nimi: za pomocą instrukcji Jump program „skacze” do zdefiniowanej etykiety w dowolnym miejscu algorytmu, natomiast instrukcja Return realizuje zawsze na „skok” na koniec algorytmu.

    Negacja wejścia/wyjścia bloczku funkcyjnego

    Aby zanegować wejście lub wyjście bloczku funkcyjnego, kliknij na niego oraz wybierz opcję Negation:

    Negacja wejścia lub wyjścia FBD w Codesys, źródło: ASTOR

    Wykrywanie impulsu (Edge Detection)

    Jeśli Twój algorytm wymaga, aby dany bloczek funkcyjny reagował na zmianę sygnału tzw. impuls, możesz aktywować tę funkcję na wejściu danego bloczka funkcyjnego. Jest to przydatna funkcja np. jeśli do wejścia danego bloczku podłączysz zmienną skojarzoną z przyciskiem monostabilnym, który jest skonstruowany do sterowania impulsem (nie stanem):

    Edge Detection w Codesys, źródło: ASTOR

    Zwiększanie liczby wejść bloczku funkcyjnego:

    Potrzebujesz, aby Twój bloczek wykonywał operację na większej liczbie zmiennych? Nic prostszego, użyj opcji Append Input:

    Zwiększanie liczby wejść FBD w Codesys, źródło: ASTOR

    To wszystko w tym odcinku kursu Codesys. W kolejnym odcinku poznasz tworzenie wizualizacji w Codesys.

    Dowiesz się krok po kroku, jak przygotować projekt w środowisku Codesys do wyświetlania wizualizacji, zarówno w symulatorze, jak i na sterowniku Astraada One.

    Dodatkowo skonfigurujesz wizualizację webową, dzięki czemu będziesz mógł/mogła wyświetlić wizualizację w przeglądarce internetowej np. w smartfonie. Jeśli brzmi to zachęcająco, zapraszam na kolejny odcinek kursu, który pojawi się już niebawem!

    A w sekcji Tips&Tricks czka już na Ciebie kolejna ciekawa dawka wiedzy. Zaglądniesz?

    Czy ten artykuł był dla Ciebie przydatny?

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

    Ten artykuł nie był jeszcze oceniony.

    Mateusz Pijanowski
    Mateusz PijanowskiAbsolwent Akademii Górniczo-Hutniczej w Krakowie, studiów magisterskich kierunku Elektrotechnika na wydziale EAIiIB, specjalność Automatyka Przemysłowa i Automatyka Budynkowa. Menedżer produktów marki Astraada w ASTOR.

    One thought on “Język schematów blokowych (FBD) | Kurs programowania w Codesys odc. 5”

    Opublikuj

    Twój adres email nie zostanie opublikowany.

    Czytaj więcej