[KURS PLC, CZĘŚĆ 15] Sterowniki SIMATIC S7-1200 (CPU1211C) – pobieranie informacji o błędach
Uwaga! Lista wszystkich opublikowanych odcinków kursu jest dostępna pod adresem.
W tym odcinku kursu zajmiemy się ważnym zagadnieniem, jakim są błędy. Dobrze napisany program potrafi zareagować, gdy pojawi się błąd. Aby to zrobić, to trzeba wiedzieć, że wystąpił. Jedną z najważniejszych cech dobrych programistów jest przewidywanie sytuacji, które mogą spowodować błąd. Teraz powiem Ci, jak to zrobić.
Schemat elektryczny
Sposób podłączenia sterownika S7-1200 przedstawiono poniżej:
Zestaw startowy do kursu programowania SIMATIC S7-1200
Sklep KAMAMI.pl przygotował specjalną ofertę dla osób zainteresowanych poznaniem w praktyce możliwości sterowników SIMATIC S7-1200 oraz podstaw ich programowania. W ramach tej oferty dostępny jest zestaw startowy o nazwie Siemens SIMATIC S7-1200 PROMO w promocyjnej cenie (659 PLN brutto). Składa się on z następujących elementów:
|
Projekt w TIA Portal
Tworzymy nowy projekt (np. 15_Error) oraz przeprowadzamy konfiguracje dla sterownika PLC w podobny sposób, jak w poprzednich odcinkach kursu.
Zaczniemy od utworzenia bloku danych zawierającego zmienne do przechowywania informacji o błędach, które mogą się pojawić podczas pracy PLC.
Zostały utworzone cztery zmienne, a więc tyle błędów zostanie obsłużonych.
Utrata danych z pamięci trwałej
Jakiś czas temu w kursie opisano podział pamięci w sterowniku. Jeden z obszarów to pamięć trwała służąca do przechowania wartości zmiennych, które muszą być pamiętane po zaniku napięcia zasilania. Aby wartość zmiennej została zapisana do tego obszaru, musi zostać odpowiednio sparametryzowana (kolumna Retain w bloku danych).
Może się zdarzyć, że z jakiś powodów wartości zmiennych znajdujące się w tym obszarze zostaną utracone. Jedyny sposób sprawdzenia tego, to wykorzystanie bloku startowego OB100. W sekcji interfejsu tego bloku znajduje się parametr LostRetentive. W momencie uruchomienia sterownika (włączenia zasilania) ten blok jest wykonywany. Wtedy można odczytać wartość parametru. Jeżeli jego wartość to jeden, wówczas dane zostały utracone. Kod programu bloku OB100 będzie więc wyglądał następująco:
"ErrorData".LostRetentive := #LostRetentive;
Wartość parametru LostRetentive jest przypisywana do odpowiedniej zmiennej z bloku danych.
Dla zainteresowanych doskonaleniem programowania PLC Wydawnictwo BTC przygotowało książkę „Podstawy programowania sterowników SIMATIC S7-1200 w języku SCL”, której autorem jest autor naszego kursu, doświadczony projektant systemów automatyki – Tomasz Gilewski. |
Przekroczony czas cyklu
W sterowniku PLC wykonanie jednego pełnego obiegu pętli programu zajmuje pewien czas, który jest nazywany czasem cyklu. Większa objętość kodu powoduje, że okres ten jest dłuższy. Jednak sterownik PLC ciągle monitoruje jego długość. W konfiguracji sprzętowej sterownika ustawiana jest graniczna wartość, które nie powinna być przekroczona. Do tego celu służy zakładka Cycle. Jeżeli ten czas zostanie przekroczony, następuje żądanie wykonania bloku OB80 (Time Error Interrupt) pod warunkiem, że został dodany do projektu. W innym razie sterownik zostaje zatrzymany (przejście do trybu STOP).
Należy dodać do projektu blok organizacyjny Time Error Interrupt. Następnie należy dodać do tego bloku następujący kod:
"ErrorData".TimeError := TRUE;
Do zmiennej TimeError przypisujemy stan wysoki. Będzie to informacja, że pojawiło się takie zdarzenie.
Bufor diagnostyczny
Kolejnym specyficznym obszarem w pamięci sterownika jest bufor diagnostyczny. Wpisywane są do niego wszystkie zdarzenia diagnostyczne, które pojawiają się podczas pracy sterownika. Przykładem może być przełączenie trybu pracy lub wykrycie błędu w CPU. Dostęp do tego bufora jest możliwy tylko wtedy, gdy nawiązane jest połączenie pomiędzy komputerem PC (programatorem), posiadającym odpowiednie oprogramowanie, a sterownikiem S7-1200. Każde zdarzenie w tym buforze zawiera datę oraz czas jego wystąpienia. Najnowszy wpis jest wyświetlany na samej górze listy.
Liczba zdarzeń, które mogą się znajdować w buforze jest ograniczona. W przypadku zapełnienia bufora najstarsze jest nadpisywane.
Przykład zdarzeń zapisanych do bufora przedstawiono poniżej:
W bloku OB1 umieszczono następujący kod programu:
IF ("DiagStatusUpdate") THEN "ErrorData".DiagStatusUpdate := TRUE; END_IF;
Dioda ERROR
Programowy odczyt stanu diod z przedniego panelu sterownika pokazano w poprzednim odcinku kursu. Tym razem odczytam stan diody ERROR. Do bloku OB1 należy dopisać następującą linię kodu
IF (LED(LADDR:="Local~Common", LED:=2) > 0) THEN "ErrorData".ErrorLED := TRUE; END_IF;
Instrukcja warunkowa IF sprawdza, czy wartość zwrócona przez funkcję LED() jest większa od zera. Jeżeli ten warunek jest prawdziwy, to znaczy że dioda ERROR świeci światłem ciągłym lub pulsuje. Wówczas do zmiennej ErrorLED przypisujemy stan wysoki.
Reakcja na błąd
W ten sposób mamy w bloku danych informacje o błędach, jakie pojawiły się podczas pracy naszego sterownika. Teraz należy zdecydować, które są krytyczne dla naszego systemu i napisać kod programu wykonujący odpowiednią reakcję.
Tomasz Gilewski