PLC - hazardy w jezyku drabinkowy

Sep 27, 2010 21 Replies

Ponoc jezyk drabinkowy doczekal sie normy, a ja czytam sobie materialy od unitronicsa .. i paru rzeczy zapomnieli napisac :-)



Poszczegolne "linie" sa wykonywane kolejno ? jest to zagwarantowane ?



A i tak widze mozliwy hazard w jednej "linii", np


--|B1|--*---(S2)----(R1)--- | | ---(S3)---(S4)--(S5)---


jak bit1 jest ustawiony, to zalaczamy bit2, potem (?) resetujemy bit1,



Czyli bit1 mignie tylko chwile. Ustawia sie bity 3, 4, 5, czy nie zdaza ?



Bardziej mnie interesuja inne bloki funkcyjne, gdzie jest wejscie EN i wyjscie(?) ENO, domyslam sie ze sluzy wlasnie do ustalenia kolejnosci .. ale zapomnieli tego napisac :-)


W dniu 2010-09-27 10:28, J.F. pisze:

Tak bardzo skrótowo i ogólnie... Wyobraź sobie że operujesz na pamięci nie na wejściach i wyjściach. Znane mi PLCki mają niejako 3 fazy obróbki danych (które składają się na jeden cykl wykonawczy).

1 - Zeskanowanie stanu wejść do pamięci 2 - Obróbka danych w pamięci na podstawie drabinki (od góry w dół, od lewa do prawa) 3 - Ustawienie wyjść na podstawie pamięci.

Czyli to co ustawisz w danym cyklu na wyjściu pojawi się dopiero w następnym cyklu jeśli odczytasz to na wejściu...

Dla Twojego przykładu (o ile B1 będzie zanegowane czyli -|\B1|-) to będzie tak że w pierwszym cyklu: Jeżeli B1 = 0 to ustawi S2 = 1 R1 = 1 w kolejnej drabince ustawi S3 = 1 S4 = 1 S5 = 1 Wypchnie dane na wyjście. W kolejnym cyklu: Ponieważ B1 = 1 to S2 = 0, R1 = 0 S3 = 0 S4 = 0 S5 = 0 Wypchnie dane na wyjście W kolejnym cyklu powtórzy od początku i będzie tak machał z częstotliwością wykonywania cykli.

Poza tym wydaje mi się że wyjścia nie powinny być łączone szeregowo tylko równolegle, przynajmniej zawsze tak robiłem. Trochę dawno temu miałem kontakt z drabinkami i PLC ale na 80% wydaje mi się że napisałem dobrze. Niech mnie ktoś potwierdzi lub poprawi. Poza tym pamiętam że na stronie Alan i Bradley mieli całe oprogramowanie z symulatorem parę lat temu.

W dniu 2010-09-27 12:56, Miłosz Skowyra pisze:

W sumie to on chyba ma na myśli komórki pamięci/markery a nie I/O. Na komórkach możesz działać i zmienia ci natychmiast (?). Swoją drogą po co pisać tak żeby prosić się o kłopoty. Mógł przecież stanem bitu 1 poustawiać wszystkie inne a dopiero później go skasować.

U¿ytkownik "Mi³osz Skowyra" snipped-for-privacy@wyciecie.epf.pl> napisa³

Akurat mialem na mysli wlasnie operowanie na pamieci [MB] S i R - set i reset

Nie, ma wlasnie byc niezanegowane. Jesli bit 1 jest ustawiony - to go skasuj. Ale zrob tez cos wiecej.

Ustawianie jest w innym miejscu.

Choc oczywiscie moglbym zrobic buzzer

--|\B1|--*---(S2)----(B1)---

i tez sie pytac co wtedy :-)

Rozsadnie - ale w przykladach maja szeregowo. Poza tym wlasciwie to pytanie pozostaje - polacze powiedzmy

--|B1|--*---(S2)--

*--(S3)--- *--(R1)--- *--(S4)---

i co z tego wyjdzie ?

Wlasciwie to mnie interesuja funkcyjne, gdzie jest niby jakies wejscie/wyjscie sterujace.

Bardziej mnie interesuje co norma na to, bo jesli nic ... no to chyba najlepiej unikac hazardow podwojnie :-)

J.

W dniu 2010-09-27 13:59, J.F. pisze:

[...]

Niestety... dalej nie pomogę. Pamięć nie ta ;(

Nie, jest to wymuszone. Sterownik nie jest w stanie uruchomiæ tylu w±tków jednocze¶nie, aby przetworzyæ ka¿dy szczebel LD w tym samym czasie. Dlatego robi to sekwenycjnie.

Co nazywasz hazardem? nie widzê tutaj stanów niedozwolonych.

--| Not S1 |--(Q1)-- Czy tutaj jest hazard? Brzêcz±cy przeka¼nik nie jest hazardem, a raczej dobrym odwzorowaniem rzeczywisto¶ci: identycznie zachowa siê prawdziwy przeka¼nik.

Tak, dok³adnie.

Nie, bit1 zga¶nie dopiero w nastêpnym cyklu

Zd±¿±. Wszystkie wej¶cia czytane s± przed rozpoczêciem cyklu, Dane wej¶ciowe danej linii nie s± aktualizowane w czasie wyliczania tej linii. Dane wyj¶ciowe aktualizowane s± po zakoñczeniu cyklu. Je¿eli w pascalu napiszesz a := not a to program siê zawiesi? przecie¿ po wykonaniu linii a, jest not a, wiêc wej¶ciowe a nie jest a tylko not a, ale wcze¶niej by³o a, czyli teraz powinno byæ a czy not a ? :-)))))

W dniu 2010-09-27 14:59, J.F. pisze:

Normą jest, że jak program wejdzie do gałęzi to wykonuje ją do końca, nawet jak w niej zmienisz stan bitu zezwalającego. Po prostu, jak już wejdzie to stan bitu inicjującego nie ma w tym przebiegu znaczenia. Twój reset wpłynie na wykonanie programu dopiero w następnym cyklu. Chyba że zrobisz coś takiego :

-|B1|--*--S2 *--S3 *--R1 *--|B1|--S8 *--S4

tu s8 nie zostanie nigdy ustawiony, ale S4 jak najbardziej.

Pozdrawiam A

Je¿eli wyjdzie buzzer to chyba nic? przecie¿ chcia³e¶ zrobiæ buzzer.

Chyba Need ma tak± opcjê edytora, ¿e mo¿na prze³±czaæ siê pomiêdzy dwiema opcjami jêzyka LD. Jedna jest taka standardowa - pionowa, z tymi wszystkimi znaczkami. Druga pozioma. Zamiast -( )- jest cewka przeka¼nika, zamiast --| |-- jest rysunek zwyk³ego styku, itd. Programowanie nie jest programowaniem, tylko rysowaniem schematu. Tylko przekrêcaj±c monitor o 90* zobaczymy LD.

W dniu 2010-09-27 17:05, Desoft pisze:

OIDP to porty we są czytane na początku skanu a Out są zapisywane na jego koniec. Markery czy komórki pamięci są aktualizowane na bieżąco.

U¿ytkownik "Desoft" snipped-for-privacy@interia.pl napisa³ w wiadomo¶ci news:i7qbr9$d9j$ snipped-for-privacy@news.onet.pl...

Ja sie pytam czy to jest zagwarantowane :-) Czy obliczenia beda w kolejnosci numeracji "linii" programu, czy w dowolnej, czy sterownik moze miec dwa procesory/rdzenie i wykonac dwie naraz czy nie, no i najciekawsze - jak to wyglada dla jednej "linii" "programu".

No dobra, to by wyjasnialo wiele niejasnosci. Czyli wszystkie "linie" sa obliczane niejako rownoczesnie ?

i np prosty zapis

-|1|-(2)-

-|2|-(3)-

-|3|-(4)-

to jest rejestr przesuwajacy o jeden bit na cykl ?

Pascal to prosty jezyk, powiedz co wyjdzie w C z a=5 ; b=a++ - a-- ; :-) a wykorzystujac obiekty .. no, jestem ciekaw czy udaloby sie doprowadzic do zawieszania pierwszego przykladu :-)

Stop, zaraz wrocmy do laddera - nawet jest przyklad jak realizowac petle, umieszczamy etykiete np w linii siodmej programu, a w linii np dziewiatej dajemy do niej skok. I wedle opisu bêda sie wykonywaly linie 7,8,9,7,8,9,7,8,9,.. az warunek nie dopusci do skoku. Czyli obliczane jest jednak na biezaco.

Pomysl Unitronicsa, czy wszystko zgodnie z norma ?

J.

U¿ytkownik "Desoft" snipped-for-privacy@interia.pl napisa³ w wiadomo¶ci news:i7qbr9$d9j$ snipped-for-privacy@news.onet.pl...

cyklu pzetwarzania sterownika? zgasnie od razu. w normalnych PLC operacje sa wykonywane na pamieci od razu w miejscu instrukcji. W kolejnym szczeblu bedzie juz niski. Problemem nie jest to czy on zgasnie od razu tylko jak dziala "kompilator". zrobilem test w Melsecu IEC - bit1 jest czytany oddzielnie dla drugiej galezi (paskudztwo). W Stepie RLO po operacji przeczytania bitu1 na poczatku bedzie przechowane do konca networka jako rezultat posredni.

Maly komentarz... Po pierwsze bit1 nie jest wejsciem (w sensie IO) i nie mozna na nim wykonac operacji wyj¶ciowej.

Po drugie dane wyjsciowe (w sensie IO) nie sa owszem aktualizowane od razu (chyba ze z uzyciem specjalnych instrukcji w niektorych typach sterownikow), ale tablica wyjsc (obszar pamieci) jest odswiezony natychmiast. Myle sie?

Dla J.F. Tam w srodku jest w koncu zwykly procesor:)

Pozdrawiam, Szymon

To musisz sprawdziæ w dokumentacji sterownika. Nie spotka³em takiego który nie robi³by tego sekwencyjnie.

W kolejno¶ci numeracji linii

raczej 32k rdzeni, jak ma³a pamiêæ to 8k rdzeni

Podstawowym jêzykiem programowania jest IL. I takie dywagacje nale¿a³oby sprowadzaæ do tego jêzyka. Nie wiem czy Ka¿dy kompilator t³umaczy STL do IL... IL te¿ musi byæ t³umaczony na jêzyk maszynowy, mimo wszystko to nie jest prawdziwy asembler.

Tutaj pewnie zale¿y to od producenta sterownika. To jest kwestia "czy z tego sterownika mo¿na zrobiæ buzzer"

Zbyt ogólnie. Norma wrêcz zabrania przenoszenia pionowego pomiêdzy liniami. Wiêc musisz u¶ci¶liæ: czy to jedna linia czy trzy. Je¿eli bêdê mai³ czas jutro to potestujê te "hazardy"

Bardzo czêsto ¶rodowiska jêzyka LD umo¿liwiaj± prze³±czenie siê z LD na STL za pomoc± jednego klikniêcia. A jêzykowi STL bli¿ej do pascala ni¿ C

My tu siê licytujemy czy dyskutujemy o w³a¶ciow¶ciach LD?

W LD? Norma nie przewiduje pêtli, wiêc musia³by byæ to indywidualny pomys³ producenta sterownika.

Norma nie przewiduje bardzo wielu rzeczy, wrêcz nic nie normuje. Od kilku tygodni gryzê ten temat i nic nie wynika z tej normy. Nie znalaz³em ¿adnego sterownika który by³by w 100% zgodny z norm±.

No ba, gdyby bylo to bym nie pytal :-)

Trudno nie robic sekwencyjnie jak jest jeden procesor. Ale sterowniki sie rozwijaja, kiedys wstawia Core4 :-)

Nie bardzo sobie wyobrazam az tyle rdzeni sprzetowych. Moze za 10 lat. Chyba ze ktos to zacznie robic na FPGA

Buzzer akurat sie daje i moich watpliwosci nie budzi.

Trzy osobne linie. Tylko czy druga wezmie stan bitu 2 z poczatku cyklu, czy ten przed chwila obliczony w linii pierwszej ?

Az sobie spojrzalem do konkurencji - S7 tez maja takie skoki.

I ma "midline output", czyli jak rozumiem - natychmiastowe.

J.

Na Moellerze wyszedł piękny buzer.

Chyba że zrobisz coś takiego :

-|B1|--*--S2 *--S3 *--R1 *--|B1|--S8 *--S4

tu s8 nie zostanie nigdy ustawiony, ale S4 jak najbardziej.

Pomijając błąd logiczny, wszystko się zgadza. Najprawdopodobniej każde wyjście (każde dojście do prawej pionowej linii) to nowa linia w STL.

Nie wiem, czy rejestr przesuwny (kwestia interpretacji zapisu), ale zapala mi kolejno poszczególne wyj¶cia - co cykl.

LD jest "prze³±czalny" na STL, z tym ¿e w STL mo¿na zrobiæ wiêcej. STL z definicji posiada pêtle. W LD trzeba aby producent utworzy³ taki bloczek. Nie znalaz³em nigdzie coby norma IEC61131-3 co¶ mówi³a o pêtlach dla LD. Tak jak wspomnia³em wcze¶niej ta norma to raczej _próba_ znormalizowania tych jêzyków. Podstawowe rzeczy robione s± zgodnie z norm±, pozosta³e wed³ug uznania producenta.

U¿ytkownik "Desoft" snipped-for-privacy@interia.pl napisa³ w wiadomo¶ci news:i7sc5a$f7e$ snipped-for-privacy@news.onet.pl...

Pomy³ka, wszystkie jednocze¶nie.

W dniu 2010-09-28 11:34, Desoft pisze:

Zmień kolejność to będzie cyklicznie.

-|4|------S(1) | --R(4)

-|3|------S(4) | --R(3)

-|2|------S(3) | --R(2)

-|1|------S(2) | --R(1)

U¿ytkownik "Desoft" snipped-for-privacy@interia.pl napisa³ w

Buzzer to jedna sprawa, ma wyjsc, ale do dalszych galezi po * wezmiemy stan wejsciowy B1 czy przed momentem wyliczony ? :-)

Jak to Szymon pisze - Step przydziela zmienna tymczasowa, Moeller nie, czeski film :-)

J.

U jakiego producenta można łączyć cewki szeregowo?

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required