Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Diagnostyka SIEMENS

Irek_kerI 30 Mar 2004 09:25 5090 13
  • #1 30 Mar 2004 09:25
    Irek_kerI
    Poziom 10  

    Witam

    Chciałbym rozpocząć temat dotyczący diagnostyki w siemensie (S7 300 i 400). Powiem szczerze, nie za bardzo wychodzą mi pierwsze próby. Chciałbym na początek wpisywać stan całego hardwaru do jakiejś DB (brak baterii, analog nie zasilony itp.). Docelowo chcę diagnozować rozproszone I/O z modułów ET200M. Jak w tym przypadku przepisywać z danego OB i rozbijać dane o każdej stacji do osobnych DB? Czy ktoś wykonywał podobne zadania ? Proszę o wskazówki.

    pozdrawiam

    0 13
  • #2 30 Mar 2004 16:15
    s95
    Poziom 17  

    Witam
    Poruszony temat przez Ciebie to inaczej „diagnostyka systemów S7”. Bardzo ciekawy temat, w którym programista musi przewidzieć nietypowe zachowania się systemu PLC. Można na tym przysłowiowe zęby zjeść. :roll:
    Większość opisów do OB. jest w helpie S7, tylko potrzeba to jakoś ugryźć. :D Jutro postaram się przygotować jakiś przykład dla Ciebie.
    Pozdrawiam S95
    PS. Wszystko jest proste do czasu jak nie zaczniesz programować

    1
  • #3 31 Mar 2004 08:55
    s95
    Poziom 17  

    Witam
    Do celów diagnostyczny w systemie S7 mamy dostępne między innymi następujące bloki OB.
    OB81 – Błąd zasilania
    OB82- Przerwanie diagnostyczne
    OB85 – Błąd klasy priorytetowej
    OB86 – Błąd konfiguracji rozszerzającej
    OB122 – Błąd dostępu obszaru wejść/wyjść
    Oczywiście nie jest to pełna lista bloków OB. Resztę można znaleźć w helpie do S7
    Do celów diagnostycznych można wykorzystać statusy zwracane przez wbudowane funkcje SFC Np. funkcja SFC 14 w statusie RET_VAL, zwracać będzie W#16#000, gdy nie będzie błędów w czasie czytania, a wartość W#16#80A0, gdy jest błąd dostępu do adresu peryferii I/Q DP.

    Przykłady poniżej pokazują jak obsłużyć np.: Błąd baterii w OB81
    Listing bloku OB81
    L #OB81_FLT_ID
    L B#16#22
    ==I
    JCN nie0
    S DB6.DBX 0.0 //ustaw znacznik w DB - ZŁA BATARIA

    nie0: NOP 0
    L #OB81_EV_CLASS
    T MB 120
    AN M 120.0
    A DB6.DBX 0.0
    R DB6.DBX 0.0 //zeruj znacznik w DB - ZŁA BATARIA

    Jaką wartość zwraca #OB81_FLT_ID w przypadku wystąpienia błędu możesz odszukać w helpie S7.
    W podanym przykładzie czytamy zmienne wewnętrzne bloku OB. Ustawiane są one w przypadku wystąpienia problemu lub jego zaniku.

    Pozdrawiam S95.
    PS. Wszystko jest proste do czasu jak nie zaczniesz programować

    0
  • #4 31 Mar 2004 09:08
    Irek_kerI
    Poziom 10  

    Witam
    Zawsze programuję w LAD i chyba czas aby poznać STL'a. Przeanalizuje i zobaczymy co z tego wyjdzie :).
    Dziękuję i pozdrawiam

    0
  • #5 31 Mar 2004 09:38
    Irek_kerI
    Poziom 10  

    Witam
    Zawsze programuję w LAD i chyba czas aby poznać STL'a. Przeanalizuje i zobaczymy co z tego wyjdzie :).
    Dziękuję i pozdrawiam

    0
  • #6 31 Mar 2004 10:03
    Irek_kerI
    Poziom 10  

    Witam
    Zinplementowałem programik ale o dziwo nie ustawia mi nic w DB a sygnał BATF mam zaświecony. Chiałem ten błąd, bo myslałem że nie będę miał problemu z generowaniem go. W Helpie jest mowa o że w S7 300 ( mam na stole 315-2DP) może być obsługiwany błąd 22 a reszta w innej rodzinie S7. Czyli powinno dzialać a tu :cry: . Czy o czymś zapomiałem?
    pozdrawiam

    0
  • #7 31 Mar 2004 10:25
    s95
    Poziom 17  

    Cześć
    A teraz jeszcze jeden przykład na zastosowanie OB86 do kontroli czy jest obecna stacja DP.
    System CPU wywołuje OB86 w przypadku wystąpienia następujących błędów:
    1. Uszkodzenie lub brak w sieci stacji DP Slave.
    2. Problem z szyną rozszerzającą czyli modułem IM, ET, przewodem etc.
    3. Błąd z zasilaniem szyny rozszerzającej

    Jeśli wystąpi któryś z błędów, a OB86 nie ma w PLC, to przejdzie on do stanu STOP

    Opis zmiennych bloku:
    Ob86_EV_CLASS->BYTE->Identyfikator zdarzenia: B#16#38 – przyczyna zanika; B#16#39 – powstanie zdarzenia
    OB86_FLT_ID->BYTE-> kod błędu – identyfikator zdarzenia
    OB86_RACKS_FLTD->DWORD->znaczenie zależne od błędu

    Przykład wartości zwracanej przez słowo OB86_RACKS_FLTD -> wartość-DW#16#03FD0104
    03FD -> jest to adres diagnostyczny stacji master
    01-> ID nr Mastera w sieci
    04-> adres niedostępnej stacji DP; wszystkie liczby są w formacie HEX.

    W podanym przykładzie czytamy zmienne wewnętrzne bloku OB. Ustawiane są one w przypadku wystąpienia problemu lub jego zaniku. Wynik jest zapisywany w DB 10.
    Kontrolujemy czy są dostępne stacje DP o adresach 4 i 5. Master ma ID nr 01. Adres diagnostyczny stacji CP Master, pomijamy jeśli jest tylko jeden Master DP, a jeśli nie to zamiast L W#16#104, powinno być L DW#16#03FD0104, oraz porównanie na liczby Double Integer czyli ==D, zamiast ==I.

    Przykład proga OB86;
    L #OB86_EV_CLASS
    T MB 100

    L #OB86_RACKS_FLTD
    L W#16#104 // adres mastera 1, DP nr 4
    ==I
    JCN ADr5
    A M 100.0
    = DB10.DBX 0.2 // Dostep lub brak dostepu do peryferi adres nr 4
    ADr5: NOP 0

    L #OB86_RACKS_FLTD
    L W#16#105 // adres mastera 1, DP nr 5
    ==I
    JCN ADr6
    A M 100.0
    = DB10.DBX 0.3 // Dostep lub brak dostepu do peryferii adres nr 5
    ADr6: NOP 0


    Opis OB122
    Jeśli czytamy bezpośredni I/Q z peryferii DP, to pomocny może się okazać OB122, oraz jego zmienne wewnętrzne. Takie jak:
    OB122_EV_CLASS - Identyfikator zdarzenia
    OB122_BLK_TYPE – Typ bloku w którym powstał błąd
    OB122_MEM_AREA- adres obszaru pamięci oraz rodzaj odwołania
    OB122_MEM_ADDR. – Adres do którego nie można się odwołać
    Za pomocą zmiennych wewnętrznych bloku można określić adres do którego nie ma przypisania adresu.

    OB122 jest wywoływany gdy instrukcja czytania lub zapisu odwołuje się do peryferii które nie zostały przypisane do żadnego modułu sygnałowego.

    Mam nadzieję że teraz już się troszeczkę rozjaśniło w temacie diagnostyki, ale tak jak pisałem, jest to temat morze. A konkretne zastosowania należy dobrać optymalnie do możliwych sytuacji, które mogą zaistnieć na obiekcie. :)
    Ukłony S95
    PS. Wszystko jest proste do czasu jak nie zaczniesz programować.

    0
  • #8 31 Mar 2004 10:44
    Irek_kerI
    Poziom 10  

    Serdeczne dzieki za informacje będa analizowane :).
    Jeszcze nie posiadam ET200M ale będzie zamówiony i wtedy podeprę sie sprzętem w tym temacie. Teraz posiadam jak mówiłem 315-2DP, 1x AI, 1xDI i ztym bawię się na stole.

    pozdrawiam cześć

    0
  • #9 31 Mar 2004 10:56
    s95
    Poziom 17  

    Irek_kerI napisał:
    Witam
    Zinplementowałem programik ale o dziwo nie ustawia mi nic w DB a sygnał BATF mam zaświecony. Chiałem ten błąd, bo myslałem że nie będę miał problemu z generowaniem go. W Helpie jest mowa o że w S7 300 ( mam na stole 315-2DP) może być obsługiwany błąd 22 a reszta w innej rodzinie S7. Czyli powinno dzialać a tu :cry: . Czy o czymś zapomiałem?
    pozdrawiam

    To dziwne ja też stosuje 315-2DP i u mnie jest Ok.
    Spróbuj zobaczyć wartość #OB81_FLT_ID w czasie jego wykonywania.
    czyli najlepiej przesłać wartość #OB81_FLT_ID na wolny marker np tak:
    L #OB81_FLT_ID
    T MB110
    a potem zobacz stan MB110, czy się ustawił na #16#22
    Ukłony S95.

    0
  • #10 31 Mar 2004 11:36
    Irek_kerI
    Poziom 10  

    No niestety :?
    Jak jestem w on-line w LAD OB81 to pisze "The steatments are not being processed". (stworzyłem puste OB w LAD, żeby sprawdzić) Powinien je wywolywać jak jest błąd baterii prawda?
    Powinien być wywoływany cyklicznie.
    Może gdzieś muszę uruchomić diagnostykę. Ale nie widzęnic rażacego w ustawieniach Hardware.
    pozdrawiam

    0
  • #11 31 Mar 2004 13:41
    s95
    Poziom 17  

    Faktycznie w On-line będziesz miał ten komunikat, status MB110 sprawdz w tablicy zmiennych(Vat) OB81 jest wołane tylko w momencie gdy powstaje błąd. nie jest wywoływany w sposób ciągły.
    S95

    0
  • #12 01 Kwi 2004 11:33
    Irek_kerI
    Poziom 10  

    Witam

    Wywołałem błedy zamierzone i działam w OB122. Przepisuje po prostu wartość z analoga, którego nie ma i mam fajny błąd :) .
    W związku z powyzszym mam pytanie o przypadek, kiedy wystąpią dwa momęty gdzie generuję taki błąd(w OB jest np. 1 miejce OB122_MEM_ ADRES a w tej sytuacji są dwa adresy gdzie wystapił błąd). Jak wychwycić oba?. Po próbach zaóważam że odnotowany jest ostatni błąd. (chyba, że PLC nadpisuje). :? .

    0
  • #13 02 Kwi 2004 08:25
    s95
    Poziom 17  

    Cześć
    dotyczy OB122
    Tak jak wcześniej pisałem OB122 jest wywoływany gdy instrukcja czytania lub zapisu odwołuje się do peryferii które nie zostały przypisane do żadnego modułu sygnałowego, czyli jeśli występują 2 błędy to w OB122_MEM_ADDR, będzie się znajdował cyklicznie adres błędu. Jeśli chcemy znać adres 1 błędu i 2, to musisz napisać kawałek proga, który będzie zapamiętywał powstały błąd na każdym adresie. Program możesz zrobić na podstawie przedstawionego listingu OB86, czyli porównać adres z zawartością OB122_MEM_ADDR i zapamiętać go np. w DB.
    Odpowiedz czy poradziłeś sobie z błędem baterii.
    Pozdrawiam S95
    PS. Wszystko jest proste do czasu jak nie zaczniesz programować

    0
  • #14 02 Kwi 2004 14:54
    Irek_kerI
    Poziom 10  

    Witam

    Dziekuje za info o OB122. Z bateryjka sie nie udalo, ale to moze dlatego ze jej wogule nie ma?. Jeszcze pocwicze i poczytam helpa moze sie na cos natkne.

    pozdrawiam Irek

    PS. Sorki za polskie literki ale cos sie system sypie.

    0
  Szukaj w 5mln produktów