Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Podprogramy w FATEK - Watchdog error

fantasta 12 Nov 2010 18:37 2239 3
SterControl
  • #1
    fantasta
    Level 29  
    Witam.

    Mam mały problem.Kiedyś używałem podprogramów w Fateku ale teraz coś mi nie wychodzi.

    Wywołuje podprogram funkcja CALL,w polu Sub_unit1 piszę podprogram zaczynając od instrukcji LBL czyli etykiety oznaczającej podprogram. Mój podprogram niestety nie wykona się w jednym cyklu bo musi zliczyć określoną liczbę impulsów więc na końcu przed instrukcją RTS wstawiłem JMP czyli skok do etykiety podprogramu aby wykonywał sie cały czas aż do czasu aż nie zliczy danej liczby impulsów. Wtedy już nie aktywuje funkcji JMP tylko przechodzi do RTS.
    Myślałem że tak zadziała. Niestety program leci w pole, watchdog wywala błąd i koniec.

    Może ktoś mi podpowiedzieć jak to napisać aby sie nie wysypało wszystko?
  • SterControl
  • #2
    kemot55
    Level 31  
    Generalnie każdy PLC ma zaszyty system czasu rzeczywistego i jeżeli program zacznie się wykonywać za długo system zatrzyma jego przetwarzanie. Niestety wymusza to zupełnie inną filozofię programowania (moim zdaniem jedną z lepszych) niż to co tam wciskają na różnych kursach. Po co robisz pętlę wewnętrzną? Przecież cykl też jest jedną dużą pętlą. A jeżeli czekasz na wynik jakiś pomiarów to wstaw flagi (w stylu pomiar zakończony ->ustaw flagę, obliczenia skończone -> zeruj flagę -- to w skrócie). Poza tym pewnie i w takim sterowniku jak Fatek (nie miałem tego w ręku niestety) jest jakiś mechanizm typu WATCHDOG RESET. W Siemensach i Mitsubishi można przedłużyć trwanie cyklu na kilka sposobów. Tylko takie rozwiązanie trzeba rozważyć na spokojnie (w czasie przedłużonego cyklu nie ma np. diagnostyki sterownika, czytania wejść/wyjść, tracisz pętle sterowania w czasie rzeczywistym itd.)
  • SterControl
  • #3
    *paweł*

    Automation specialist
    Generalnie w fateku jest funkcja 90 i 91 WDT i RSWDT gdzie ustawiamy czas po którym wyrzuci błąd(max 1,2s) lub resetujemy, ale tutaj się zgodzę z kolegą powyżej. Przecież funkcję CALL, LBL, RTS możesz wywoływać nieskończoną ilość razy i sterownik będzie realizował cały program, a nie tylko liczenie. Jeśli natomiast masz coś ważnego to użyj przerwania lub HSC.

    Pozdrawiam
  • #4
    fantasta
    Level 29  
    Generalnie już sobie poradziłem.

    Problem wynikł z nieznajomości dokładnego cyklu sterownika. Czyli:
    I . odczyt stanu wejść (potem, w kroku II sterownik "nie będzie widział" zmian stanów na wejściach)
    II. wykonanie programu w oparciu o zaczytane w kroku I stany wejść i stany zmiennych wewnętrznych (markerów, etc.)
    III. Ustawienie stanu wyjść na takie jakie wynikły z wykonanego w kroku II programu

    I tak u mnie sterownik w kroku II skakał w podprogramie przez etykiete LBL, zapętlał się, cykl się wydłużał i watchdog wywalał błąd.

    Teraz setuje podprogram czyli wywołuje go do czasu spełnienia warunku a w programie głównym mam po CALL wstawioną instrukcje END która nakazuje skonczyć cykl programu w tym miejscu. Dzieki temu nie wykonuje mi sie główny podczas gdy ma być wykoany tylko podprogram.