Programowanie w języku graficznym LAD

LAD (ang. Ladder Diagram) to prosty sposób programowania używany do edycji programów w sterownikach PLC. Dzięki zachowaniu podstawowych kanonów standardu języka, nie powinien on sprawić żadnych problemów użytkownikom, którzy mieli już do czynienia z podobnym sposobem programowania. Użytkownicy NEED, którzy spotykają się z nim po raz pierwszy, będą mieli możliwość zapoznania się i zastosowania tego sposobu programowania, który nawiązuje do „rysowania” schematów połączeń elektrycznych.

Symbole w LAD

Język schematów drabinkowych LAD – bazuje na symbolach logiki stykowo-przekaźnikowej. W ten sposób mogą być reprezentowane styki (elementy wejściowe), wyjścia dwustanowe (odzwierciedlenie cewek przekaźnika) oraz wyjścia funkcyjne.
Podstawowe symbole języka LAD dla odzwierciedlenia wejść są przedstawione na rys.1.


Rys. 1. Podstawowe elementy języka LAD - wejścia

Wyjścia funkcyjne to Timery rys. 2. oraz Liczniki rys. 3.


Rys. 2. Elementy języka LAD – Timery.


Rys. 3. Elementy języka LAD – Liczniki.

Symbole języka LAD dla odzwierciedlenia wyjść są przedstawione na rys. 4.



Rys. 4. Elementy języka LAD – wyjścia.

Symbole języka LAD dla odzwierciedlenia Znaczników są przedstawione na rys. 5.



Rys. 5. Elementy języka LAD – Znaczniki.

Wejścia

Z punktu widzenia programu LAD wejściem może być nie tylko fizyczny styk elementu elektrycznego (wejście dyskretne), ale także stan (poziom logiczny) Timera, Licznika, Zegara, Znacznika lub nawet wyjścia. Ponieważ elementom tym w trakcie ich działania przypisane są wartości dwustanowe (‘0’ lub ‘1’) możemy je sprawdzać i uzależniać od nich działanie wyjścia.

Uwaga: Sprawdzanie wyjść polega jedynie na uzyskaniu informacji programowej o stanie rejestru, który steruje danym wyjściem fizycznym, tzn. nie uwzględnia się sprawności przekaźnika i układu wykonawczego tego wyjścia.


Wyjścia

W najprostszym przypadku mamy do czynienia z dwustanowym elementem takim jak przekaźnik, którego cewka jest zasilana bądź nie. Możemy wtedy mówić, że przekaźnik działa (jest aktywny), jeśli jego cewka jest zasilana, – czyli przyjmujemy dla niej określony stan logiczny. W naszym wypadku będziemy stosować logikę dodatnią, czyli będzie to stan ‘1’ dla wyjścia załączonego, a dla niedziałającego wyjścia stan logiczny ‘0’.
W zależności od przypisanej funkcji (patrz tabela poniżej) wyjście może być ustawiane w ciągłej zależności od wejść (instrukcja „=”) – analogia do przekaźnika działającego, jeśli cewka jest zasilana. Inaczej zachowują się wyjścia typu SET i RESET, gdzie po spełnieniu warunków następuje ustawienie na stałe (instrukcja „S”) stanu logicznego ‘1’. Stan taki pozostaje aż do momentu wykonania operacji kasującej (R) – odpowiada to zachowaniu się przekaźnika z podtrzymaniem.
Wyjścia w LAD również mogą nie posiadać swoich fizycznych odpowiedników w strukturze przekaźnikowej, są to tzw. wyjścia funkcyjne, które umożliwiają użycie takich elementów jak Timer, Licznik, Zegar, Znacznik. Elementy te są ustawione podobnie jak fizyczne wyjścia (przyjmują stan ‘0’ lub „1’), w zależności od przypisanej im funkcji (patrz tab. 1).

Struktura programu w LAD

Symbole umieszczane są w obwodach (ang. Network). Obwody umieszczone są w sposób podobny do szczebli (ang. Rungs) w drabince. Kolejne obwody (szczeble drabiny) odczytywane są kolejno od góry do dołu. Po dojściu do ostatniego szczebla, proces śledzenia programu rozpoczyna się od początku.
Obwód ograniczony jest z lewej i prawej strony przez szyny prądowe. Prawa szyna może być widoczna, ale także może być pominięta na rysunku. Z względu na analogię ze schematem przekaźnikowym programy w LAD mogą być czytane jako przepływ prądu od lewej do prawej linii pionowej (np. lewa strona zasilanie, prawa potencjał masy) poprzez poszczególne obwody.


Rys. 6. Przykładowa aplikacja zrealizowana w języku LAD.

Struktura obwodu LAD

Obwód musi posiadać odpowiedni format i składnię. Oto kilka najważniejszych zasad:
każdy obwód może posiadać do 16 linii równoległych
ostatnim elementem szeregowego połączenia w danym obwodzie musi być jeden z elementów wykonawczych (wyjście dwustanowe lub funkcyjne),
obwód może posiadać maksymalnie do 16 elementów wyjściowych,
nie może wystąpić rozgałęzienie mające początek lub koniec wewnątrz innego odgałęzienia, które łączy się z „linią zasilającą” lub wyjściami.

Niedozwolone połączenia

Poniżej przedstawiono przykłady niedozwolonych połączeń:

Opis używanych elementów

Elementowi logicznemu (symbolowi – patrz tab. 1), który pełni w języku LAD funkcję wejścia bądź wyjścia sygnału, mogą być przyporządkowane różne zmienne tzn. wejściem sygnału może być nie tylko napięcie podawane na sprzętowe wejścia (ozn. I1..I8), ale także wejściem może być stan Timera, Licznika, Zegara oraz stan wyjścia. Decyduje o tym opis na symbolu elementu. Cyfra w oznaczeniu wskazuje numer wejścia, które ma być sprawdzane. Analogicznie możemy ustawiać (bądź kasować) nie tylko fizyczne wyjścia, ale także Znaczniki (wyjścia bez fizycznego wyprowadzenia) oraz stan Timerów, Liczników itp.
W tabeli 1 przedstawiono symbole języka LAD z opisem i dopuszczalnymi zmiennymi XY sygnału dla danego elementu (X – wejścia, Y – wyjścia).
Wejście aktywne – wejście, którego stan pozwala na przepływ sygnału. (Logiczne ‘1’ dla wejścia NO, logiczne ‘0’ dla wejścia NC).
Wyjście aktywne – wyjście, które posiada sygnał logiczny ‘1’. 

Tabela 1. Podstawowe symbole języka LAD

LAD

Opis

Zmienna

 

Wejście normalnie otwarte – NO.

Wejście aktywne (styk zwarty), gdy wartość logiczna przypisanej zmiennej wynosi ‘1’. (Normally Open)

X: I, A, H, Q,M, T, C

n: numer wejścia danego rodzaju

 

Wejście normalnie zamknięte – NC.

Wejście aktywne (styk rozwarty), gdy wartość logiczna przypisanej zmiennej wynosi ‘0’.
(Normally Closed)

 

Przekaźnik impulsowy – pełni rolę przerzutnika wyzwalanego zboczem narastającym. Każdy narastający impuls zmienia stan wyjścia na przeciwny.(FP)

Y: Q, M
m: numer wyjścia danego rodzaju

 

Wyjście Przyporządkowujące

Ustawia wartość przypisanej zmiennej na ‘1’, gdy podany zostanie do niego sygnał. Odpowiednik przekaźnika o stykach otwartych (przepisanie stanu wejściowego na wyjście) (Assign)

Y: Q, M
m: numer wyjścia danego rodzaju

Wyjście Set

Ustawia wartość przypisanej zmiennej na ‘1’, gdy podany zostanie do niego sygnał i utrzymuje ten stan aż do momentu wykonania instrukcji ‘Reset’ lub do wyłączenia zasilania przekaźnika programowalnego (przekaźnik z podtrzymaniem)

Y: Q, M
m: numer wyjścia danego rodzaju

Wyjście Reset

Ustawia wartość przypisanej zmiennej na ‘0’, gdy podany zostanie do niego sygnał i utrzymuje ten stan aż do momentu wykonania instrukcji ‘Set (S–STL)’ lub do wyłączenia zasilania przekaźnika programowalnego (kasowanie wyjścia)

Timer Opóźnione załączenie

Ustawia wartość Tn = ‘1’ po upłynięciu zadanego czasu „N” od momentu uaktywnienia.

 

Timer Opóźnione wyłączenie

Utrzymuje wartość Tn = ‘1’ przez zadany czas „N” po zdjęciu sygnału aktywacji.


Timer Pojedynczy impuls

Po uaktywnieniu zostaje wygenerowany pojedynczy impuls o czasie trwania „N”.

 

Timer Impulsy

Jeśli aktywny – to generowana jest fala prostokątna (impulsy) o wypełnieniu 50% (czas trwania „N” stanu wysokiego i czas trwania „N” stanu niskiego impulsów).

 

Licznik w górę

Po uaktywnieniu zliczane są impulsy – stan Licznika jest zwiększany na, przypisanym do danego Licznika wejściu. Po osiągnięciu przez licznik bieżący progu „N” przyjmuje wartość ‘1’


Licznik w dół

Po uaktywnieniu zliczane są impulsy – stan Licznika jest zmniejszany na, przypisanym do danego Licznika wejściu. Po zmniejszeniu licznika wartości bieżącej poniżej progu „N” przyjmuje wartość ‘0’





Konfiguracja

Konfiguracja wejść 

Każdemu wejściu w programie (obwodzie) musimy przyporządkować rodzaj i zmienną. Rodzaj przyporządkowujemy w sposób graficzny – wybierając styk normalnie otwarty lub styk normalnie zwarty, zmienną umieszczamy nad symbolem graficznym. Zmienna, która określa typ wejścia składa się z oznaczenia literowego i numeru.
Do dyspozycji mamy następujące zmienne:
Do dyspozycji mamy następujące zmienne:
I – wejścia,
H – Zegary,
A – komparacje analogowe,
Q – stany wyjść,
M – stany Znaczników,
C – stany Liczników,
T – stany Timerów.
HC – szybki licznik/miernik częstotliwości 0-20 kHz.
MDIR – systemowy znacznik kierunku faz



Rys. 7. Konfiguracja wejść.

Konfiguracja wyjść

Fizyczne wyjścia, przedstawiamy za pomocą symbolu graficznego jak na rys. 8. W zależności od oczekiwanego zachowania wyjścia, stosujemy odpowiedni symbol graficzny. Nad symbolem graficznym umieszczamy literę Q, która oznacza wyjście oraz numer tegoż wyjścia.


Rys. 8. Konfiguracja wyjść.

Konfiguracja Znaczników

Znaczniki, podobnie jak wyjścia przedstawiamy za pomocą tego samego symbolu graficznego zamieniając Q na M (rys. 8). W zależności od oczekiwanej reakcji stosujemy odpowiedni symbol wewnątrz graficznego oznaczenia Znacznika. Nad symbolem graficznym umieszczamy literę M, która oznacza Znacznik (ang. Marker) oraz numer.

 
Rys. 9. Konfiguracja Znaczników.

Konfiguracja Timerów

Timery, przedstawiamy za pomocą tego samego symbolu graficznego jak wyjścia – rys. 8. W zależności od oczekiwanego sposobu działania stosujemy odpowiedni symbol wewnątrz graficznego oznaczenia Timera. Nad symbolem graficznym umieszczamy literę T oraz numer.

 
Rys. 10. Konfiguracja Timerów.

Dla przekaźników NEED DC istnieje możliwość używania, do odmierzania czasów dla Timerów, wartości napięć czytanych z wejść analogowych I7, I8 dla NEED-12DC-x1-08-4, NEED-24DC-x1-08-4 lub I14, I15, I16 dla NEED-12DC-x1-16-8, NEED-24DC-x1-16-8.. W takim przypadku ustawienie może przyjmować wartości czasów jak dla potencjometru wewnętrznego. Zakres regulacji 1..255.

Konfiguracja Liczników

Licznik, przedstawiamy za pomocą tego samego symbolu graficznego jak wyjścia – rys. 8. W zależności od oczekiwanego sposobu działania Licznika stosujemy odpowiednie symbole wewnątrz graficznego oznaczenia Licznika. Nad symbolem graficznym umieszczamy literę C, która oznacza Licznik (ang. Counter) oraz numer Licznika.

 
Rys. 11. Konfiguracja Liczników.

Dla przekaźników NEED DC istnieje możliwość używania, do ustawiania progu dla Liczników, wartości napięć czytanych z wejść analogowych I7, I8 dla NEED-12DC-x1-08-4, NEED-24DC-x1-08-4 lub I14, I15, I16 dla NEED-12DC-x1-16-8, NEED-24DC-x1-16-8.. W takim przypadku ustawienie może przyjmować wartości czasów jak dla potencjometru wewnętrznego. Zakres regulacji 1..255.

Szybki Licznik (HC)

Wersje DC NEED..-x1-16-8 posiadają Szybki Licznik HC1 zliczający impulsy o maksymalnej częstotliwości 20kHz. HC1 jest Licznikiem sprzętowym, zlicza impulsy pojawiające się na wejściu I11. Wejścia CU, CD przejmują wtedy, oprócz funkcji kierunku zliczania, funkcję aktywacji Szybkiego Licznika.
Szybki Licznik może pracować w trybie częstotliwościowym – zlicza ilość impulsów pojawiających się na wejściu I11 w czasie 1s.
Szybki Licznik nigdy się nie przepełnia. Próg do zliczania może być ustawiany w zakresie 0..65535. Wykonanie operacji Reset na Szybkim Liczniku kasuje stan i ilość zliczonych impulsów.

Dla wersji NEED-230AC-x1-16-8 Szybki Licznik HC1 mierzy częstotliwość sieci (50Hz lub 60Hz) jeżeli wejście I11 jest aktywne.
Ponieważ częstotliwość sieci jest stała i znana można wykorzystać szybki licznik jako dodatkowy timer. Jeżeli próg = 1000 to dla 50Hz licznik  przełączy się po 100 x 20ms = 20s.

Przykłady konfiguracji

Przykład 1: Timer SL Impulsy (Generator impulsów)



Rys. 12. Przykład konfiguracji Timera SL.

Przykład 2: Reset Timera


Rys. 13. Przykład resetu Timera.

 Zasady umieszczania elementów

Na rys 14. przedstawiono bardzo prosty obwód programu z rozmieszczeniem elementów zgodnie ze strukturą omówioną wcześniej. Dla ułatwienia na przykładach przedstawiane są dyskretne wejścia i wyjścia.


Rys. 14. Obwód w LAD.

Ogólnie obwód składa się z części wejściowej (warunkowej – poprzedzającej) i wyjściowej (wykonawczej – następującej). Pierwsza część określa warunki, jakie muszą być spełnione by zostało uaktywnione wyjście (element wykonawczy).
Elementy wejściowe mogą występować w różnych wzajemnych połączeniach, ich liczba podlega jedynie ograniczeniom ze względu na czytelność programu i możliwości edycyjne.


Uwaga: W przekaźniku NEED maksymalnie może być 150 wierszy (maksymalnie 862 bajty po kompilacji).


Rys. 15. Maksymalna ilość elementów jednego obwodu.

Rodzaje połączeń

Rozwiązanie układu sterowania wymaga stworzenia programu, który odpowiednio połączy zależności pomiędzy sygnałami wejściowymi i wyjściowymi.
Podstawowe rodzaje połączeń przedstawiono poniżej. 
Odwzorowanie wejścia na wyjście

Stan wejścia I1 będzie przepisywany na wyjście Q1. Wyjście Q1 będzie aktywne (Q1=’1’), jeśli wejście I1 będzie w stanie logicznym ‘1’.




Odwzorowanie zanegowanego wejścia na wyjście
Zanegowany stan wejścia I1 będzie przepisywany na wyjście Q1. Wyjście Q1 będzie aktywne (Q1=’1’), jeśli wejście I1 będzie w stanie logicznym ‘0’.




Połączenia szeregowe

Przedstawiony powyżej układ realizuje funkcję iloczynu logicznego. Wyjście Q2 będzie aktywne (Q2=’1’), jeśli oba wejścia I1 i I2 będą w stanie logicznym ‘1’.




Poniżej przedstawiono inne rodzaje połączeń szeregowych

Wyjście Q2 będzie aktywne (Q2=’1’), jeśli wejście I1 będzie w stanie logicznym ‘1’ a wejście I2 w stanie logicznym ‘0’.





Połączenie szeregowe 3 elementów.
Wyjście Q2 będzie aktywne (Q2=’1’), jeśli wszystkie wejścia I1..I3 będą w stanie logicznym ‘1’.





Połączenie szeregowe 3 elementów.
Wyjście Q2 będzie aktywne (Q2=’1’), jeśli wejście I1 będzie w stanie logicznym ‘1’ a wejścia I2, I3 będą w stanie logicznym ‘0’.



Połączenie równoległe

Przedstawiony obok układ realizuje funkcję sumy logicznej. Wyjście Q3 będzie aktywne (Q3=’1’), jeśli jedno z wejść I1, I2 (lub oba) będzie w stanie logicznym ‘1’.







Poniżej przedstawiono inne rodzaje połączeń równoległych.

Wyjście Q3 będzie aktywne (Q3=’1’), jeśli jedno z wejść I1, I2 (lub oba) będzie w stanie logicznym ‘0’.









Przedstawiony obok układ realizuje funkcję sumy logicznej 3 elementów. Wyjście Q3 będzie aktywne (Q3=’1’), jeśli przynajmniej jedno z wejść I1, I2, I3 będzie w stanie logicznym ‘1’.











Suma logiczna 3 elementów. 
Wyjście Q3 będzie aktywne (Q3=’1’), jeśli wejście I1 będzie aktywne (stan ‘1’) lub gdy jedno z wejść I2, I3 (lub oba) będzie w stanie logicznym ‘0’.











Połączenie szeregowo-równoległe
W celu przedstawienia układu sterowania opisane powyżej połączenia podstawowe można łączyć ze sobą w ramach dopuszczalnej ilości elementów wejściowych poziomych (3) i pionowych (150) zgodnie z zasadami tworzenia połączeń.
Jeśli algorytm wymaga użycia, dla wysterowania wyjścia, większej ilości elementów wejściowych, to należy odpowiednio zmodyfikować drabinkę połączeń używając do tego celu Znaczników tzn. podzielić zadania na mniejsze.
Poniżej przedstawiono przykłady obwodów wykorzystujących kombinacje połączeń szeregowo-równoległych wraz z interpretacją działania.

Układ realizujący połączenie szeregowe elementu I1 z równolegle połączonymi elementami I2, I3.
Działanie wyjścia Q1 jest następujące:
Q1=’1’, jeśli I1 jest aktywne (stan ‘1’) i jedno z wejść I2, I3 (lub oba) jest w stanie logicznym ‘1’.






Układ realizujący połączenie szeregowe elementu I1 z równolegle połączonymi elementami I2, I3 oraz dalej szeregowo I4.
Działanie wyjścia Q3 jest następujące:
Q3=’1’, jeśli I1 i I4 jest aktywne (stan ‘1’) i jedno z wejść I2, I3 (lub oba) jest nieaktywne (stan ‘0’).






Równoważny powyżej układ przedstawiony jest w innej postaci: najpierw połączenie szeregowe I1, I4, a następnie połączenie równoległe I2 i I3.







Nazwy symboliczne

Dla przekaźników NEED istnieje możliwość przypisania  nazw symbolicznych do zmiennych. Ułatwia to analizę programu i czyni go bardziej przejrzystym.
Możliwe jest przełączanie widoku zmienna/nazwa symboliczna. Na rys. 16. przedstawiono obwód w zapisie zwykłym i poniżej z użyciem nazw symbolicznych.


Rys. 16. Przykład użycia symboli w LAD.

Program w LAD

Program składa się z obwodów, najprostszy program zawierać może tylko 1 obwód (linię programu). Poniżej przedstawiono program składający się z trzech obwodów.


Rys. 17. Przykładowy program zapisany w LAD.

Opis programu:
W pierwszym obwodzie jak na rys. 17. użyto wejść podłączonych bezpośrednio do przekaźnika programowalnego. Pierwsze wejście (I1) jest typu NC (normalnie zamknięte), drugie (I2) typu NO (normalnie otwarte), czyli załączenie Timera T1 nastąpi, jeśli I1 = ‘0’ i I2 = ‘1’. W drugim obwodzie (T1, I3, Q1) sprawdzamy stan Timera T1 (ustawianego w obwodzie 1) i wejścia I3. Jeśli Timer zostanie załączony (po czasie 500ms od spełnienia warunku I1=’0’ i I2 =’1’) i wejście I3 będzie aktywne (I3 = ‘1’), to wyjście Q1 będzie w stanie wysokim (zasilane). Gdy wejście I3 zostanie wyłączone (I3 = ‘0’) wyjście Q1 zostanie wyłączone. Obwód 3 służy do zapamiętania załączenia wejścia Q1. Jeśli tylko wejście Q1 przyjmie stan „1, to nastąpi ustawienie (na stałe) Znacznika M1 (M1 = ‘1’). Zauważmy, że powyższy program w zasadzie kończy się na ustawieniu Znacznika M1, gdyż dalsze operacje na Znaczniku M1 (np. resetowanie) nie są wykonywane.