Obsługa błędów – Przycisk bezpieczeństwa

przycisk-bezpieczenstwa

W poprzednim odcinku szkoły PLC przedstawiłem Ci ogólne wprowadzenie do błędów pojawiających się w programach dla sterownika PLC. Teraz zajmiemy się obsługą kilku błędów, które przewidują założenia projektowe.

Obsługa błędów

Zaczniemy od przygotowania bloku danych, który będzie zawierał zmienne przechowujące informacje o tym, czy aktualnie wystąpił określony błąd. W przyszłości takie dane można wykorzystać np. przy tworzeniu wizualizacji.

Kod programu

W projekcie została przygotowana warstwa błędów. Do tej warstwy należy dodać nowy blok danych o nazwie ERR_Error. Następnie dodamy dwie zmienne typu Bool o nazwach: EmergencyButton oraz ChangeMode.

Te zmienne posłużą do zrealizowania punktu numer 10, którego treść brzmi „Naciśnięcie przycisku bezpieczeństwa (E-Stop) powoduje natychmiastowe zatrzymanie linii. Jest to błąd i należy włączyć czerwoną lampę (RedVSI) na kolumnie sygnalizacyjnej” oraz 9 o treści „Zmiana trybu w trakcie pracy linii powoduje natychmiastowe zatrzymanie linii. Jest to błąd i należy włączyć czerwoną lampę (RedVSI) na kolumnie sygnalizacyjnej”.

Do każdej ze zmiennych należy napisać kod, który będzie przechwycał zdarzenie powiązane właśnie z tą zmienną.

Kod obsługi tych zdarzeń umieścimy w funkcji o nazwie ERR_ClassError. Instrukcje przedstawiono na poniższym listingu

"ERR_Error".EmergencyButton := NOT "E-Stop";
"ERR_Error".ChangeMode := "MAN_LineMode".StartLine AND (("MAN_LineMode".Auto AND "Manual") OR ("MAN_LineMode".Manual AND "Auto"));
"MAN_LineMode".Error := "ERR_Error".EmergencyButton OR "ERR_Error".ChangeMode;

Pierwsza linia kodu sprawdza, czy został wciśnięty przycisk bezpieczeństwa. Trzeba pamiętać, że grzybek składa się ze styku NC. Dlatego został wykorzystany operator negacji NOT. Dopiero po wciśnięciu grzybka do zmiennej „ERR_Error”.EmergencyButton zostanie przypisana logiczna jedynka.

Wykrycie zmiany trybu pracy polega na sprawdzeniu, czy linia już została włączona oraz aktualnego trybu pracy i przycisku uruchomiającego inny tryb pracy. Przykładowo, jeżeli został wcześniej wybrany tryb pracy automatycznej i linia została uruchomiona, to naciśnięcie przycisku Manual spowoduje przypisanie do zmiennej „ERR_Error”.ChangeMode logicznej jedynki, co jest jednoznaczne z tym, że pojawił się błąd.

Ostatnia linia kodu zbiera wszystkie błędy za pomocą sumy logicznej czyli OR. Jeżeli którakolwiek ze zmiennych z bloku ERR_Error będzie jedynką logiczną, to do zmiennej „MAN_LineMode”.Error też zostanie przypisana jedynka logiczna. Jak zapewne pamiętasz, ta zmienna została użyta w warstwie Management. Dzięki temu linia zostanie natychmiast zatrzymana.

Kod programu należy teraz skompilować i wgrać do sterownika

Testowanie

Przejdźmy teraz do FactoryIO, aby przetestować działanie części związanej z błędami. Uruchamiamy linię w trybie automatycznym. Gdy jadą palety, to naciskamy przycisk bezpieczeństwa. Wówczas transportery się zatrzymują i na kolumnie sygnalizacyjnej zapala się czerwona lampa. Odciągnięcie grzybka powoduje, że czerwone światło na kolumnie gaśnie. Naciskamy przycisk Start i linia uruchamia się ponownie.

Taka sytuacja nie może się wydarzyć, ponieważ uruchomienie linii powinno być możliwe dopiero po wciśnięciu przycisku Reset. Jest to funkcjonalność, która w założeniach projektowych jest w punkcie 12. Zajmiemy się tym już w następnym wpisie.

//————-

Kurs-wideo-CZPP

Więcej w kursie wideo: Chcę zostać programistą PLC

Nagrania są dostępne w wersji online jak również na płytach DVD. Napisz mailem, jaką wersje wybierasz.

Podziel się tym wpisem na:
  • Facebook
  • Google Bookmarks
  • Twitter
  • Wykop

Komentarz

  1. karol_xx

    Witam, testuję obecnie program i w przypadku kodu/ wyrażenia ((„MAN_LineMode”.Auto AND „Manual”) OR („MAN_LineMode”.Manual AND „Auto”)) okazuję się że zawsze będzie 0. Czy jest taka możliwość ?. Wygląda to w ten sposób że gdy układ jest w stanie AUTO i naciskam przycisk manual to jednoczenie trace status Auto i nie spełnia wymaganego warunku dla „1”.(sprawdzam podgląd zmiennych).

    Powtórz
    1. Tomasz Gilewski (Autor postu)

      Wydawałoby się, że zmienna ERR_Error.ChangeMode ma taki chwilowy stan TRUE, który jest przypisywany MAN_LineMode i następuje jedynie wyłączenie linii. Natomiast, żeby paliła się czerwona lampa i migał Reset, to stan TRUE musi się utrzymywać. Dopiero zastąpienie tej linii:

      „MAN_LineMode”.Error := „ERR_Error”.EmergencyButton OR „ERR_Error”.ChangeMode;

      tym IFem:

      IF („ERR_Error”.EmergencyButton OR „ERR_Error”.ChangeMode) THEN
      „MAN_LineMode”.Error := TRUE;
      END_IF;

      pozwala na podtrzymanie MAN_LineMode w stanie TRUE i wówczas staje linia, zapala się czerwona lampa i miga Reset. Chociaż przeglądam w kilku miejscach rezultaty i nie widać zmiany tego stanu. IF nie może być jedynie spełniony, jeśli nie ma błędu. W trzech pozostałych wariantach jest zawsze TRUE.

      Powtórz
      1. karol_xx

        dobra znalazłem problem :). Generalnie wygląda na to że ta zmian wartości ERR_Error.ChangeMode jest chwilowa (niezauważana) co wpływa na stan „MAN_LineMode”.Error. Problem u mnie istniał w innym miejcu. Otóż ERR_Error.ChangeMode nie wpływał na wyłaczenie lini ze względu na taki wpis który nie „updatowałem”.
        „MAN_ControlLine_DB3″(ButtonStart:=”Start”,
        ButtonStop:=”Stop”,
        GlobalError:=FALSE,
        LineStart=>”MAN_LineMode”.StartLine,
        LineStop=>”MAN_LineMode”.StopLine);
        A powinno być GlobalError:=”MAN_LineMode”.Error, co wpływa na wyłączenie zarówno z grzyba jak przy przełaczniu auto/manual w trakcie pracy (najwyrazniej musiałem to wczesniej przeoczyć w tym kursie).

        Pozdrawiam. karol

        Powtórz

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>