eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikastara pamięć nie rdzewiejeRe: stara pamięć nie rdzewieje
  • Data: 2014-06-02 00:18:08
    Temat: Re: stara pamięć nie rdzewieje
    Od: Piotrne <p...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2014-05-31 16:00, Sebastian Biały pisze:
    > najprostszy przykład to nie dawno koleś który w logice
    > drabinkowej wydziargał w miesiąc układ (skomplikowany)
    > który na oko w dowolnym imperatywnym języku programowania
    > zajął by może z 2 godzinki z unit testami. Dlaczego więc
    > dziargał? "Bo logika drabinowa jest najprostsza!".

    Pisałem w ubiegłym roku "drabinkowy" program na sterownik
    Kinco K3. Zadanie było proste: wykonać w określonej kolejności
    kilka ruchów silnikiem krokowym z ustalonymi parametrami
    (prędkość, odległość). Parametry ustawiane na module HMI
    z ekranem dotykowym. Sekwencja ruchów silnika bardzo prosta:
    szukanie położenia końcowego (z czujnikiem krańcowym),
    przejazd o wartość D1, pauza, N przejazdów o wartość D2, powrót.
    Pisanie (poprzedzone studiowaniem języka drabinkowego)
    zajęło trochę czasu, a powstały program w zasadzie był
    emulatorem interpretera języka sekwencyjnego...

    Czyli zamiast napisać:

    1) włącz silnik aż do znalezienia położenia krańcowego
    2) włącz D1 impulsów silnika
    3) for i:=1 to n { włącz D2 impulsów silnika }
    4) wróć do położenia krańcowego
    5) idź do 1

    napisałem (w uproszczeniu!) mniej więcej coś takiego:

    1) jeśli (pierwszy_cykl == TRUE) to { nr_stanu = 1 }

    2) jeśli (nr_stanu == 1 lub nr_stanu == 4) to włącz
    szukanie położenia krańcowego

    3) jeśli (nr_stanu == 1 oraz znaleziono_stan_krańcowy)
    to { nr_stanu = 2 }

    4) jeśli (nr_stanu == 4 oraz znaleziono_stan_krańcowy)
    to { nr_stanu = 5 }

    5) jeśli (nr_stanu == 2) to włącz D1 impulsów silnika

    6) jeśli (nr_stanu == 2 ORAZ wykryto_koniec_ruchu_silnika)
    to { nr_stanu = 3; licznik = n }

    7) jeśli (nr_stanu == 3) to flaga1 = (licznik>0)

    8) jeśli (nr_stanu == 3 ORAZ flaga1 == TRUE )
    to włącz D2 impulsów silnika

    9) jeśli (nr_stanu == 3 ORAZ flaga1 == FALSE )
    to { nr_stanu = 4 }

    10) jeśli (nr_stanu == 3 ORAZ wykryto_koniec_ruchu_silnika}
    to { nr_stanu = 3a }

    11) jeśli (nr_stanu == 3a) to { zmniejsz licznik o 1 }

    12) jeśli (nr_stanu == 3a) to { nr_stanu = 3 }

    13) jeśli (nr_stanu == 4 ORAZ znaleziono_stan_krańcowy)
    to { nr_stanu = 1 }

    To oczywiście takie proste nie było, bo trzeba jeszcze czytać
    parametry z HMI i przenosić do "modułu" obsługującego silnik.
    A moduł mógł wystąpić tylko jeden raz w całym programie
    drabinkowym. Czyli zależnie od numeru_stanu trzeba było
    kopiować do niego różne parametry, a potem badać sumę logiczną
    wszystkich warunków, przy których silnik powinien się włączyć
    i takim sygnałem do aktywować.

    Może ta drabinkowa koncepcja nadaje się do sterowania światłem
    na korytarzu, ale pisanie takiego kodu jest bardzo męczące.

    P.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: