Programowanie sterownika bezpieczeństwa w Codesys
Kurs programowania w Codesys odc. 16
Kontakt w sprawie artykułu: Mateusz Pytel - 2023-08-09
Z tego artykułu dowiesz się:
- jak skonfigurować blok FSoEMaster,
- jak poprawnie napisać aplikację Safety,
- jak uruchomić aplikację Safety.
W poprzednim odcinku przygotowaliśmy środowisko Codesys oraz skonfigurowaliśmy projekt aplikacji Safety. Teraz przejdziemy do projektowania aplikacji.
Kurs programowania w Codesys
Część I – Podstawowe funkcjonalności środowiska Codesys
1. Pierwsze kroki w Codesys. Jak stworzyć program?2. Pierwsze podłączenie i przygotowanie Codesys do pracy ze sterownikiem PLC.
3. Język drabinkowy (LD).
4. Typy danych w Codesys, rodzaje zmiennych, sposoby ich tworzenia.
5. Język schematów blokowych (FBD).
6. Tworzenie podstawowej wizualizacji HMI.
7. Język strukturalny (ST).
8. Diagnostyka w Codesys – jak sprawdzać działanie oprogramowania i sterownika?
9. Język bloków funkcyjnych (CFC).
10. Funkcja, blok funkcyjny, program – zmodyfikuj program w Codesys dla lepszej funkcjonalności.
Część II – Zaawansowane funkcje i możliwości środowiska Codesys
11. Komunikacja MQTT – jak skonfigurować w Codesys?12. Komunikacja EtherCAT – konfiguracja i przykładowa aplikacja.
13. Softmotion – synchronizacja serwonapędów przy pomocy sterownika PLC.
14. Komunikacja Modbus RTU i TCP/IP w środowisku Codesys.
15. Tworzenie projektów w Codesys ze sterownikami bezpieczeństwa Safety: architektura systemu bezpieczeństwa.
16. Programowanie sterownika bezpieczeństwa w Codesys.
17. Integracja sterownika PLC z systemem SCADA w Codesys.
18. Konfiguracja maszyny CNC z wykorzystaniem sterownika PLC – obsługa G-Code.
Dodatkowe materiały i lekcje dla kursantów:
1. Jak stworzyć wirtualny serwonapęd w Codesys? Instrukcja krok po kroku.2. Przykładowa aplikacja Codesys w języku ST i LD: napełnianie i opróżnianie zbiorników wraz z alarmowaniem.
Najczęściej zadawane pytania:
Sprawdź odpowiedzi na najczęściej zadawane pytania dotyczące środowiska Codesys.Rozpoczynając tworzenie programu Safety ważne jest, aby w pierwszej kolejności dodać blok FSoEMaster. Ten blok ma za zadanie monitorować status połączenia FSoE (FailSafe over EtherCAT) oraz diagnozować wejścia/wyjścia, decydując o kontynuacji pracy programu. Jeśli nie jest on dostępny w Toolboxie, można przeciągnąć dowolny inny blok do programu, a następnie dwukrotnie kliknąć na jego nazwę i ręcznie wpisać FSoEMaster. Po zatwierdzeniu klawiszem ENTER, blok zostanie odpowiednio zmodyfikowany.
W bloku FSoEMaster istotną rolę odgrywa zmienna, którą ten blok definiuje. Nie może to być dowolna zmienna, ale specjalnie przygotowana zmienna powiązana z modułem I/O. Aby skonfigurować odpowiednią zmienną, należy kliknąć na trzy kropki powyżej bloku i wybrać SafeApp -> Logical I/Os -> FSOES -> FSOES. Dzięki temu blok zostanie skonfigurowany wraz z połączonym modułem.
Aby zapewnić poprawne działanie bloków Safety, konieczne jest posiadanie zmiennej, która pozwoli na ich aktywację. Każdy blok funkcyjny Safety (z wyjątkiem FSoEMaster, który działa ciągle) posiada wejście o nazwie Active. Dlatego też najlepiej skorzystać z funkcjonalności diagnostycznej bloku FSoEMaster i zezwolić na aktywację pozostałych bloków tylko wtedy, gdy wejścia i wyjścia przejdą pomyślnie test diagnostyczny.
Aby stworzyć taką zmienną, należy przypisać wartość True do wejść S_ActiveOut oraz S_ActiveIn, co uruchomi diagnostykę fizycznych wejść i wyjść. Należy także przypisać wartość True do wejść StartReset oraz AutoReset, które umożliwią ciągłą i automatyczną pracę bloku. Następnie, można skorzystać z wyjść S_OutReady oraz S_InReady, które informują o poprawnym (wartość True) lub niepoprawnym (wartość False) działaniu I/O. Wyjścia te można połączyć za pomocą bloku AND, co pozwoli zdefiniować zmienną, która przyjmie wartość True tylko wtedy, gdy zarówno wejścia, jak i wyjścia pomyślnie przejdą test diagnostyczny.
Kolejnym krokiem jest kontynuowanie tworzenia programu. W tym przykładzie zostanie zdefiniowany przycisk o dwóch wejściach typu NC (Normally Closed), który aktywuje wyjście oznaczone jako Output 1.
Aby uzyskać bezpośrednie odwołanie do fizycznych wejść i wyjść modułu I/O, należy przejść do segmentu Global variables i rozwinąć drzewko opcji. Tam można znaleźć odpowiednie zmienne odnoszące się do fizycznych wejść i wyjść, z którymi można dalej pracować w programie:
Aby przetworzyć dwa sygnały wejściowe na jeden sygnał wyjściowy, można skorzystać z bloków SF_Equivalent (równorzędne) lub SF_Antivalent (przeciwnorzędne), w zależności od rodzaju styków w przycisku. W tym przykładzie styki są tego samego rodzaju (NC – Normally Closed), dlatego użyjemy bloku SF_Equivalent.
Aby poprawnie skonfigurować blok SF_Equivalent, należy:
- Na wejściu Active podać zmienną, która aktywuje działanie bloku. W tym przykładzie jest to zmienna SiecGotowa, którą wcześniej przygotowaliśmy.
- Podłączyć sygnały wejściowe z przycisku do wejść S_Channel1A oraz S_Channel1B.
- Stworzyć zmienną Czas, w której zdefiniujemy maksymalny czas, w jakim oba sygnały mają zmienić stan na True. W tym przypadku styki działają w ramach jednego przycisku, więc sygnały prawdopodobnie zmienią się niemal jednocześnie, dlatego ten czas może być krótki.
- Zdefiniować zmienną przy wyjściu Ready, która informuje o gotowości bloku do działania, oraz zmienną przy wyjściu S_EquivalentOut, która będzie główną zmienną wyjściową.
Dzięki tak skonfigurowanemu blokowi będziemy w stanie przetworzyć dwa sygnały wejściowe z przycisku na jeden sygnał wyjściowy:
Po skonfigurowaniu programu można przejść do procesu wgrywania programu. Pierwszym krokiem jest nawiązanie komunikacji z głównym sterownikiem i zalogowanie się do niego, a następnie wgranie programu. Poprawne nawiązanie komunikacji będzie sygnalizowane przez zielone strzałki, które pojawią się po przejściu sterownika w tryb RUN. Następnym krokiem jest zalogowanie się bezpośrednio do sterownika Safety. Aby to zrobić, należy kliknąć prawym przyciskiem myszy na SafetyApp i wybrać opcje Login:
Aplikacja poprosi o weryfikację logowania poprzez podanie numeru seryjnego sterownika Safety. Należy taki numer podać i wcisnąć OK:
Następnie zostanie wyświetlony komunikat informujący, że wgrana aplikacja różni się od obecnie zainstalowanej w sterowniku. Po potwierdzeniu tego komunikatu, sterownik zostanie przełączony w tryb testowy, umożliwiający wgranie nowej aplikacji i przeprowadzenie fizycznego testu na sprzęcie.
Ostatnim komunikatem będzie prośba o podanie hasła. Domyślnie hasło nie jest ustawione, więc wystarczy kliknąć przycisk OK.
Po wgraniu aplikacji należy przełączyć sterownik Safety w tryb RUN, klikając prawym przyciskiem myszy na ikonę SafetyApp i wybierając opcję Start. W tym momencie można przeprowadzić test funkcjonalności aplikacji.
W celu zapewnienia trwałości wgranej aplikacji w sterowniku Safety, po zalogowaniu się do niego i przeprowadzeniu testu poprawności działania konieczne jest przygotowanie pliku Boot. Aby to zrobić, kliknij prawym przyciskiem myszy na ikonę SafetyApp i wybierz opcję Set Active Application, a następnie udaj się do lewego górnego rogu ekranu, rozwiń opcję Online i wybierz Create boot application.
Zostanie utworzony plik Boot, który zapewni przywrócenie wgranej aplikacji po wylogowaniu się z sterownika.
Po wylogowaniu się z sterownika oprogramowanie wyświetli pytanie, czy sterownik powinien zostać zrestartowany i uruchomiony z aktualną wersją aplikacji boot, która została wgrana do pamięci. Konieczne jest potwierdzenie tego komunikatu. Od tego momentu sterownik będzie działał z zainstalowaną aplikacją i będzie realizować jej funkcje zgodnie z programem, który został napisany.
Bloki funkcyjne Safety biblioteki PLCOpen
Nazwa bloku | Opis bloku |
SF_Antivalent | SF_Antivalent monitoruje i analizuje sygnały pochodzące z dwóch zacisków wejściowych związanych z bezpieczeństwem, w celu wykrycia różnych stanów sygnału. Zadaniem tego bloku jest analizowanie sygnałów pochodzących z dwukanałowych czujników lub przełączników, takich jak urządzenia sterujące zatrzymaniem awaryjnym. |
SF_EDM | SF_EDM (External Device Monitoring) jest odpowiedzialny za monitorowanie określonego stanu początkowego oraz zachowania przełączania styczników, które są podłączone do sterownika Safety Logic Controller. |
SF_EmergencyStop | SF_EmergencyStop jest odpowiedzialny za monitorowanie stanów przełączania urządzenia sterującego, które jest przeznaczone do zatrzymania awaryjnego. Gdy podłączone urządzenie zatrzymania awaryjnego zostanie aktywowane, sygnał na wyjściu S_EStopOut zostaje ustawiony na wartość SAFEFALSE. |
SF_EnableSwitch | SF_EnableSwitch ocenia sygnały z ręcznego trzystopniowego przełącznika zezwolenia w celu określenia jego położenia i kierunku. Podłączony przełącznik zezwolenia może być wykorzystany do dezaktywacji zabezpieczeń, o ile odpowiedni tryb pracy (np. ograniczenie prędkości lub zakresu ruchu) został wybrany i jest aktywny. |
SF_Equivalent | SF_Equivalent jest blokiem, który sprawdza sygnały bezpieczeństwa pochodzące z dwóch terminali wejściowych. Zazwyczaj te sygnały są generowane przez dwukanałowe czujniki lub przełączniki, na przykład urządzenia sterujące zatrzymaniem awaryjnym. Monitor ten porównuje stany sygnałów z obu terminali i działa w oparciu o określone kryteria. Sygnał zezwolenia, oznaczony jako S_EquivalentOut, zostaje ustawiony na wartość SAFETRUE (czyli prawdziwy z punktu widzenia bezpieczeństwa), gdy spełnione są następujące warunki: blok funkcyjny jest aktywny, nie wystąpił żaden błąd, a sygnały wejściowe S_ChannelA i S_ChannelB wskazują na stan SAFETRUE przez określony czas, zwanym DiscrepancyTime. |
SF_ESPE | SF_ESPE (Electro-Sensitive Protective Equipment) jest blokiem monitorującym, który nadzoruje stany przełączania elektroczułych urządzeń ochronnych, takich jak siatki świetlne. Głównym celem tego monitora jest wykrywanie przypadków, gdy urządzenie zabezpieczające zostaje aktywowane, co oznacza, że wiązka światła siatki świetlnej została przerwana. Sygnał zezwolenia na wyjściu, oznaczony jako S_ESPE_Out, przyjmuje wartość SAFEFALSE (czyli fałszywy z punktu widzenia bezpieczeństwa), gdy urządzenie zabezpieczające zadziała. Innymi słowy, jeśli monitor wykryje przerwanie wiązki świetlnej siatki świetlnej, to sygnał na wyjściu wskazuje, że jest niebezpiecznie, tj. wystąpiło naruszenie ochrony i może być wymagane podjęcie działań naprawczych lub interwencyjnych w celu przywrócenia bezpiecznego stanu. |
SF_GuardLocking | SF_GuardLocking obsługuje monitorowanie osłony z blokadą (monitorowanie drzwi z czterostopniową blokadą zgodnie z normą EN 1088). |
SF_GuardMonitoring | SF_GuardMonitoring monitoruje osłonę (np. drzwi) z dwustopniową blokadą zgodnie z normą EN 1088. |
SF_ModeSelector | SF_ModeSelector jest blokiem oceniający stany przełącznika wyboru trybu, który ma maksymalnie osiem pozycji. Mechaniczny przełącznik wyboru trybu jest używany do ustawiania określonego trybu pracy, na przykład trybu serwisowego, trybu konfiguracji, trybu czyszczenia itp. Każdy tryb pracy może mieć przypisaną inną funkcję związaną z bezpieczeństwem. |
SF_MutingPar | SF_MutingPar to moduł, który ocenia sygnały czterech czujników mutingu oraz optoelektronicznego sprzętu związanego z bezpieczeństwem, takiego jak siatki świetlne. Moduł ten jest stosowany w aplikacji do równoległego mutingu z wykorzystaniem czterech czujników i przełącza sygnał zezwolenia na wyjściu oznaczonym jako S_AOPD_Out. Sygnał na wyjściu S_AOPD_Out pełni rolę sygnału zezwolenia dla całego procesu. Natomiast sygnał SAFEFALSE na wyjściu S_AOPD_Out powoduje zatrzymanie aplikacji w strefie działania, w celu zapewnienia bezpieczeństwa. |
SF_MutingPar_2Sensor | SF_MutingPar_2Sensor to komponent związany z bezpieczeństwem, który monitoruje sygnały dwóch czujników mutingu oraz optoelektronicznego sprzętu związanego z bezpieczeństwem, takiego jak siatka świetlna. Ten komponent jest używany w aplikacji do mutingu równoległego z dwoma czujnikami i odpowiada za przełączanie sygnału zezwolenia na wyjściu oznaczonym jako S_AOPD_Out. Sygnał generowany na wyjściu S_AOPD_Out jest odpowiedzialny za udzielenie zgody na kontynuację całego procesu. Jednakże gdy sygnał oznaczony jako SAFEFALSE pojawia się na wyjściu S_AOPD_Out, aplikacja zostaje zatrzymana w obszarze działania w celu zapewnienia bezpieczeństwa. |
SF_MutingSeq | SF_MutingSeq służy do oceny sygnałów z czterech czujników mutingu oraz optoelektronicznego sprzętu związanego z bezpieczeństwem, takiego jak siatka świetlna, w aplikacji do mutingu sekwencyjnego z czterema czujnikami. Blok ten przełącza sygnał zezwolenia na wyjściu S_AOPD_Out. Sygnał na wyjściu S_AOPD_Out pełni rolę sygnału zezwolenia dla całego procesu. Jeżeli sygnał SAFEFALSE zostanie wygenerowany na wyjściu S_AOPD_Out, oznacza to zatrzymanie aplikacji w strefie działania. |
SF_OutControl | SF_OutControl steruje wyjściem urządzenia związanego z bezpieczeństwem. Wyjście związane z bezpieczeństwem jest sterowane w zależności od sygnału ze standardowego sterownika (uruchomienie/zatrzymanie pracy) i sygnału związanego z bezpieczeństwem (monitorowanie funkcji związanej z bezpieczeństwem, np. zatrzymanie awaryjne). |
SF_SafetyRequest | SF_SafetyRequest jest modułem odpowiedzialnym za bezpieczeństwo w aplikacji, umożliwiającym żądanie uruchomienia funkcji związanych z bezpieczeństwem, takich jak bezpieczne zatrzymanie lub ograniczenie prędkości. W zależności od stanu wejściowego S_OpMode, blok funkcyjny odpowiedzialny za bezpieczeństwo wysyła żądanie uruchomienia odpowiednich funkcji bezpieczeństwa na urządzeniu peryferyjnym. |
SF_TestableSafetySensor | SF_TestableSafetySensor to komponent odpowiedzialny za monitorowanie stanu optoelektronicznego sprzętu bezpieczeństwa (np. kurtyny świetlnej). Blok funkcyjny zawiera również funkcję testową, umożliwiającą weryfikację działania podłączonego sprzętu bezpieczeństwa. |
SF_TwoHandControlTypeII | SF_TwoHandControlTypeII ocenia zachowanie przełączania dwuręcznego urządzenia sterującego typu II podłączonego do sterownika logicznego bezpieczeństwa. |
SF_TwoHandControlTypeIII | SF_TwoHandControlTypeIII ocenia zachowanie przełączania dwuręcznego urządzenia sterującego typu III podłączonego do sterownika logicznego bezpieczeństwa. |