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.

S7-1200, Blok OB31 i błędy w logach

viper_lasser 08 Lis 2018 23:06 177 11
  • #1 08 Lis 2018 23:06
    viper_lasser
    Poziom 17  

    Mam taki problem że sterownik s7-1200 zgłasza cyklicznie raz na jakiś czas błąd o tym że blok z OB31 nie wyrabia się w zadanym czasie. Jego cyklicznie wywołanie ustawione jest na 1ms.

    Błąd jest taki

    Code:

    A processing watchdog was triggered for the requested organization block. The number of requests issued but not completely processed has reached the configured warning limit.
     Possible cause: The call period for the block may be shorter than the program runtime of the block extended by the runtime of blocks in higher priority classes that are still waiting to be processed.
     Note the error reaction indicated in the diagnostics buffer entry. This error reaction depends on the availability of OB 80.
    Resolution:
     Check the program runtime and the call period of the blocks that have been processed since the last processing request or that are still waiting to be processed.


    A kod bloku OB31
    Code:

    IF "I_OBR_GR" AND NOT ("M_OBR_GR_PREV") THEN
        "GR1_AKT_OBROTY_TMP" := "GR1_AKT_OBROTY_TMP" + 1;
    END_IF;
    "M_OBR_GR_PREV" := "I_OBR_GR";

    "MW_CNT_GR" := "MW_CNT_GR" + 1;
    IF "MW_CNT_GR" >= 1000 THEN
        "GR1_AKT_OBROTY" := "GR1_AKT_OBROTY_TMP";// / 100;
        "MW_CNT_GR" := 0;
        "GR1_AKT_OBROTY_TMP" := 0;
    END_IF;


    Którego zadaniem jest wykrycie impulsu narastającego i wyliczenie częstotliwości. Po wykryciu zbocza rarastającego licznik zwiększa się o 1 i po 1 sekundzie resetuje zapamiętując poprzednią sumę.

    Nie wiem skąd może generować się błąd. W poprzednich wersja tia portala taki manewr działał bez zarzutu.
    Przydawało się to gdy wszystkie szybkie liczniki były zajęte a była potrzeba sprawdzenia np. jakiejś źmijki której częstotliwość zliczania impulsów z czujnika była < 500hz. (500 obr / s)

    0 11
  • #2 09 Lis 2018 10:18
    Rariusz
    Specjalista Automatyk

    Witam,

    Co ile jest wyzwalany OB31?


    Pozdrawiam,

    0
  • #3 09 Lis 2018 12:10
    Markos80

    Specjalista Automatyk

    Jakie masz CPU? Czas wykonania operacji, które zamieściłeś, teoretycznie powinien być dla każdej około 20us (zależy od CPU), więc nie powinien przekroczyć 1ms.
    Najprościej, wydłuż czas tego OB na chwilę i zmierz czas jego wykonania (dla 1200 może być komendą RUNTIME).
    Jeśli masz inne OB, to może w sumarycznym rozrachunku brakuje czasu. Sprawdź też czy możesz je przesunąć w fazie, między sobą.

    0
  • #4 09 Lis 2018 14:19
    viper_lasser
    Poziom 17  

    Sterownik to s7-1214c/dc/rly z firmwarem v4.x
    OB31 jest wywoływany co 1ms.

    0
  • #5 09 Lis 2018 16:18
    Rariusz
    Specjalista Automatyk

    Witam,

    Przekraczasz czas moim zdaniem, ustawa na więcej i powinno być po
    problemie.

    Pozdrawiam,

    0
  • #6 09 Lis 2018 21:16
    viper_lasser
    Poziom 17  

    Udało mi się usunąć problem chociaż wydaje mi się że w tia v15 coś siemens pozmieniał bo wcześniej w tia v13/14 miałem podobne rozwiązanie że jak miałem blok OB30 i OB31 ustawiony na 1ms (czas cyklicznego wykonania)
    W obydwu blokach były proste obliczenia j.w i błędów nie było

    Nie wiem jak używa się poprawnie bloku RUNTIME.
    Czy powinno się go użyć na początku i na końcu danego FB/FC/OB ?

    0
  • #8 10 Lis 2018 20:34
    elektronikq
    Poziom 24  

    Przepraszam autoa za wtrącenie. Musiał być blok przerwań cyklicznych aby zliczyć impulsy po 500Hz? Zwykły licznik tego nie obsłuży?
    Mamy wg noty: 0.2 ms, 0.4 ms, 0.8 ms, 1.6 ms, 3.2 ms, 6.4 ms and 12.8 ms,
    selectable in groups of four

    Czyli dla wejść cyfrowych możemy ustawić różne opóźnienia zliczania impulsów.
    0.2ms to 5000 Hz więc raczej spokojnie się wyrobi.
    Ten program jest rozbudowany? Bo jeśli nie to OB1 będzie miało taką samą prędkość jak przerwanie więc jaka będzie różnica?

    0
  • #9 10 Lis 2018 21:52
    viper_lasser
    Poziom 17  

    To że wejścia w plc i modułach potrafią być szybko odświeżane to oczywiście wiadomo nie od dziś.
    Cykl skanowania w tym aktualnym projekcie wynosi ok 40-50ms. W najbardziej zaawansowanym sięgał u mnie nawet do 80-90 ms. Pamięć plc zapełniona prawie na maxa (powyżej 95%).
    Pozostałe wszystkie szybkie wejścia (HSC) miałem zajęte więc jedynym sposobem było zrobienie zliczania wejść na podstawie detekcji zbocza narastającego w bloku OB30 z zadaniem wykonywanym co 1ms.

    Przed zrobieniem bloku OB30 ze zliczaniem obrotów oczywiście najpierw spróbowałem je zliczać normalnie w plc ale zmierzoną częstotliwością strasznie rzucało bo plc gubił niektóre sygnały.

    Jak ktoś ma jakiś lepszy pomysł na zliczenie częstotliwości < 500hz dodatkowych paru napędów to chętnie skorzystam z porady.

    0
  • #10 10 Lis 2018 22:45
    elektronikq
    Poziom 24  

    Dziękuje. A w tym przerwaniu liczysz tylko impulsy i wystawiasz wyjście Q?
    Czy to co liczysz w przerwaniu po 1ms trafia do Ob1 i dalej jest przetwarzane?

    Ja się doczytałem, że standardowe wejścia mają ustawiane opóźnienie (przeciwko drganiu styków) – domyślnie 3,2ms -> 312Hz. Można zejść do 0.05ms -> 20 kHz.

    A można byłoby uruchamiać przerwanie od zbocza impulsu?

    0
  • #11 10 Lis 2018 22:53
    viper_lasser
    Poziom 17  

    To co wyliczone jest w bloku OB30 później obrabiane jest bezpośrednio w OB1. Jest to zrobione w SCL'u jak w poście 1.
    Wejście które użyte jest w OB30 oczywiście ustawione jest na 0,05ms bo inaczej jest mało czułe.
    Teoretycznie tak - można uruchamiać przerwanie od zbocza impulsu.
    Może według tego pomysłu ?
    https://support.industry.siemens.com/tf/WW/en...rdware-interrupt-obs/90763?page=0&pageSize=10
    OB200, HW_Interrupt_0, assigned to rising edge of I0.0.
    OB201, HW_Interrupt_1, assigned to rising edge of I0.1.

    0
  • #12 11 Lis 2018 10:33
    elektronikq
    Poziom 24  

    Pan napisał w poście że działa trzeba by wypróbować.
    Tylko tam trzebabyło aby tą wartość z MOVE gdzieś dodawać i zapisywać bo tak to cały czas będzie 1.
    Tam widzę, że Pan korzystał z wejść I0.0: P czyli odczyt następuje bez względu na program?
    O ile Qx.x: P rozumiem, że zostanie wystawione bez względu na proces programowy to o tyle jak się ma sprawa z Ix.x: P?
    Wejścia są zawsze wczytywane na początku OB1, więc jeśli przypuśćmy mamy w OB1 100 LINIJEK, wejście I0.0: P aktywuje jakiś marker w 2 linijce, program dochodzi do 90 linijki i wejście I0.0: P staje się aktywne i nawet wtedy marker jest aktywny?
    Ale w przerwaniu chyba nie jest to konieczne?

    0
  Szukaj w 5mln produktów