eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikastara pamięć nie rdzewieje › Re: stara pamięć nie rdzewieje
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: Piotrne <p...@p...onet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: stara pamięć nie rdzewieje
    Date: Tue, 03 Jun 2014 01:41:38 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 81
    Message-ID: <lmj242$emr$1@node1.news.atman.pl>
    References: <5389d4ca$0$2224$65785112@news.neostrada.pl>
    <lmclhp$kft$1@node2.news.atman.pl> <lmcmas$nn1$1@node1.news.atman.pl>
    <5389deb2$0$2231$65785112@news.neostrada.pl>
    <lmcnal$ope$1@node1.news.atman.pl> <lmg8r9$gml$1@node1.news.atman.pl>
    <lmgbht$h1c$1@mx1.internetia.pl> <lmhmoh$fl7$1@node2.news.atman.pl>
    <lmih5l$jj2$1@mx1.internetia.pl>
    NNTP-Posting-Host: pc-nest01-138.sikornik.net
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    X-Trace: node1.news.atman.pl 1401752514 15067 91.123.216.138 (2 Jun 2014 23:41:54
    GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 2 Jun 2014 23:41:54 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:24.0) Gecko/20100101 Thunderbird/24.4.0
    In-Reply-To: <lmih5l$jj2$1@mx1.internetia.pl>
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:665948
    [ ukryj nagłówki ]

    W dniu 2014-06-02 20:35, Mario pisze:

    >> Natomiast numerowanie stanów nie było takie proste. Dla każdego
    >> stanu przewidziany był oddzielny bit ("przekaźnik"), który
    >> włączał się i wyłączał w odpowiednim momencie. Czyli jeśli
    >> maszyna ma 100 stanów, to zamiast jednego licznika 7-bitowego
    >> potrzeba 100 oddzielnych bitów - "przekaźników".
    >
    > Rozumiem, że numerowanie nie było proste bo ktoś postanowił
    > żeby nie było proste. Ja tam numeruję stany w zmiennej int.

    To widocznie przeoczyłem możliwość aktywacji danej gałęzi
    przy spełnieniu warunku nr_stanu == n. Oczywiście taki
    warunek można poskładać z przekaźników i chcąc coś zrobić
    w stanie nr 10 podać jako warunek:
    (bit0 == wyłączony) ORAZ (bit1 == włączony) ORAZ
    (bit2 == wyłączony) ORAZ (bit3 == włączony)
    i podobnie ustawiać wartość nr_stanu w (prawie) każdej
    gałęzi, ale to jest jeszcze mniej czytelne od używania
    pojedynczych bitów. Operacje na liczbach też są uciążliwe
    - trzeba użyć bloku z odpowiednim działaniem, podawać
    argumenty z określonej lokalizacji, wskazywać lokalizację
    wyniku, aktywować blok działania. Jeśli to jest coś
    bardziej skomplikowanego niż A+B, to potrzeba kilku bloków
    i robi się nieczytelne. Nawet nie próbowałem umieszczać
    tego w jednej gałęzi, tylko wykonywało się "po kolei".

    Kalkulatora HP z odwrotną notacją polską dawno temu używałem
    i pisałem programiki! Był bardziej przyjazny niż LD.


    > LD można konwertować do Instruction List.
    > Ten to dopiero wygląda jak asembler.

    To właściwie były równoważne zapisy programu - można
    przełączać "widok" między LD a IL. Czasem czytelniejszy jest IL.
    Tak mniej więcej wyglądał kod IL:

    (* Network 8 *)
    (*Repetitions: wartość domyślna 10*)
    LD %Q0.7
    OR %SM0.1
    MOVE 10, %VW162
    (* Network 9 *)
    (*Czas rozpędzania/hamowania silnika w ms): wartość domyślna 20*)
    LD %Q0.7
    OR %SM0.1
    MOVE 20, %VW104
    (* Network 25 *)
    (*Obliczenie liczby kroków*)
    LD %SM0.0
    MOVE %VD150, %VD140
    MUL %VD136, %VD140
    (* Network 26 *)
    (*Obliczenie liczby kroków - c.d.*)
    LD %SM0.0
    DIV DI#10, %VD140
    (* Network 33 *)
    LD %SM0.0
    AND %Q0.5
    PHOME 1, %M8.0, %V220.3, %V220.3, %VW110, %VW174, %VW100, %VW102,
    %VW104, %M16.0, %M0.2, %VB207

    Adresy w pamięci trzeba było uzgadniać z innym urządzeniem
    - panelem HMI, który komunikował się z PLC. Narzędzia do programowania
    nie były zintegrowane, można było np. przygotować bazę zmiennych
    z adresami i wymieniać ją między środowiskami.

    Problemy były też z modułami obsługi silników krokowych, bo czasem
    po prostu nie włączały się. Doczytałem, że w razie wystąpienia
    "błędu" (chyba było to np. przedwczesne zatrzymanie innym blokiem,
    nazywanym STOP) trzeba resetować flagę błędu w określonej komórce.
    Niby logiczne, ale bez możliwości debugowania trudno czasem było
    ustalić, co się dzieje.

    Całkiem możliwe, że da się to zrobić lepiej. Doczytam przed ewentualnym
    kolejnym programem w LD...


    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: