Język dla dyskretnych

Współcześnie inżynierowie mają do dyspozycji wiele języków i narzędzi do tworzenia i programowania systemów kontrolno-pomiarowych. Wybór właściwego ułatwia wyszukiwanie błędów i rozbudowę aplikacji oraz sprawia, że pomiary i sterowanie przebiegają efektywnie. Pozostaje pytanie: co wybrać? Otóż nie zawsze najbardziej znane narzędzie jest w danej sytuacji najlepsze.

Pięć najpopularniejszych sposobów programowania systemów kontrolno- pomiarowych obejmuje: język schematów drabinkowych, języki tekstowe, języki bloków funkcyjnych i przepływu danych oraz schematy stanów logicznych. Metody te są użyteczne nie tylko podczas modelowania, ale także symulacji pracy systemu przed implementacją w rzeczywistym układzie. Z danych Control Engineering Polska wynika, że najbardziej popularnym narzędziemw Polsce jest język schematów drabinkowych. Blisko 90% rodzimych inżynierów twierdzi, że zna ten język programowania (więcej na ten temat w CE Polska nr 1/2007). I trudno się dziwić, gdyż charakteryzuje się kilkoma niepowtarzalnymi zaletami. Przede wszystkim jest intuicyjny i ?samodokumentujący się?. Wydruk programu użytkownika z opisami zmiennych, ich deklaracjami i czytelnymi komentarzami sam w sobie stanowi większą część dokumentacji projektu. Ponadto język drabinkowy jest doskonałą graficzną reprezentacją projektu do złudzenia przypominającą schematy elektryczne klasycznych układów stycznikowo-przekaźnikowych. Z uwagi na to podobieństwo jest bardzo łatwy do nauczenia także dla elektryków i automatyków z działów utrzymania ruchu, którzy nie zawsze są biegli w obsłudze oprogramowania. Dodatkowym atutem są znakomite narzędzia diagnostyczne tworzonych programów. Współczesne programy narzędziowe przeznaczone do programowania PLC bardzo często zawierają opcję animacji sygnału zasilania przepływającego w układzie (z ang. power flow ? przepływ mocy). Narzędzia te wspomagają analizę ewentualnych błędów w programach użytkownika. Język drabinkowy został stworzony, aby odzwierciedlać schematy elektryczne układów sterowania i w naturalny sposób stanowi idealne narzędzie reprezentacji układów logicznych. W przypadku układów dyskretnych niemalże intuicyjne.

Język schematów drabinkowych jest bardzo korzystny w programowaniu zadań sterowania dyskretnego. Jednakże nastręcza wielu problemów w przypadku, gdy chcemy z jego użyciem programować zadania regulacji automatycznej. Znajomość innych metod programowania może być czasem wręcz konieczna.

Im dłużej, tym gorzej

Z drugiej strony trzeba zdawać sobie sprawę z pewnych ograniczeń i niedoskonałości języka drabinkowego. Warto przede wszystkim zwrócić uwagę na hierarchiczność danych i obudowę funkcji logicznych języka. Jednym z ograniczeń stosowania czystego języka schematów drabinkowych (niezawierającego funkcji) jest niemożność gromadzenia fragmentów kodu programu w zwarte bloki do ponownego użycia. Pisanie programu sterowania tylko za pomocą języka drabinkowego sprawia, że program może stać się nieprawdopodobnie długi. W takim przypadku pisanie dalszych fragmentów kodu, diagnozowanie, poszukiwanie błędów czy edycja istniejącego kodu stają się trudne i męczące. Nie wspominając, że zbyt długi program jest po prostu trudny do ogarnięcia.

Współcześnie hierarchiczny układ programów sterujących jest jednym z podstawowych wymogów. Dlatego większość nowych programów narzędziowych do programowania sterowników programowalnych umożliwia korzystanie z funkcji i bloków funkcyjnych w ramach programu języka drabinkowego. Niektóre mają dodatkowo narzędzia do tworzenia funkcji i bloków funkcyjnych użytkownika. Jednakże wiele pakietów do programowania w języku drabinkowymumożliwia wykorzystanie jedynie ograniczonej liczby tego typu bloków. A to może utrudnić podzielenie dużego programu na fragmenty kodu, które są wygodne do dalszej analizy i rozbudowy.

Uwaga na adres

Kolejnym minusem języka drabinkowego jest nienajlepsza struktura danych. W większości przypadków język ten korzysta z pamięci sterownika w sposób statyczny: przypisuje pojedyncze bity lub rejestry pamięci, aby następnie z nich odczytywać i do nich zapisywać. Rozwiązanie tego typu utrudnia ochronę danych, jak również grupowanie danych w formie struktur (zestawów zmiennych różnych typów). Ponieważ adresowanie zmiennych odbywa się na bardzo niskim poziomie, bardzo łatwo o pomyłkę przy próbie dostania się do właściwych rejestrów. Tymczasem ewentualny błąd spowoduje niepożądane działanie całego systemu. Możliwe jest równieżniebezpieczeństwo modyfikacji danych wewnętrznych przez pomyłkę w adresacji. W tej sytuacji bardzo pomocne jest adresowanie z użyciem nazw. Jednak nawet wtedy nieodpowiednie zadeklarowanie zmiennych może spowodować ich nakładanie się w pamięci sterownika. Przykładem może być adresacja bitowa, bajtowa lub dwubajtowa, w przypadku której zdeklarowanie zmiennej słowowej przypisuje określonej zmiennej 16 kolejnych bitów w pamięci. Należy wówczas uważać, aby któregoś z nich nie przypisać zmiennej adresowanej bitowo. Większość współcześnie używanych programów do edycji programu języka drabinkowego zawiera narzędzia, dzięki którym kontrolowane jest rozmieszczenie zmiennych w pamięci sterownika. Pozwala to na uniknięcie błędów opisanych powyżej, a grożących ?dziwnym? zachowaniem programu sterowania logicznego. 

Jeden szczebel schematu drabinkowego odwzorowuje schemat połączeń elektrycznych.

Problem z wielością zadań

Programy w języku drabinkowym wykonywane są zwykle od lewej do prawej i od góry do dołu. Czas wykonania programu (a tym samym czas jednego skanu) zależy przy tym od prędkości jednostki centralnej sterownika (oczywiście również od liczby instrukcji programu). Ten dość prosty sposób doskonale sprawdza się w przypadku prostych aplikacji, o dyskretnym charakterze działania. Z drugiej jednak strony nastręcza wielu problemów w sytuacji, gdy chcemy, aby realizowane były algorytmy wielozadaniowe, o różnych czasach skanu programu. Na przykład z uwagi na bezpieczeństwo sterowanych elementów procesu. Co prawda można skorzystać z instrukcji typu ?skok bezwzględny? czy ?skok warunkowy?, jednakże nie załatwiają one problemu, gdy konieczny jest determinizm fragmentów kodu programu (rozumiany jako przewidywalny czas wykonania instrukcji sterowania). Zorganizowanie programu może wówczas okazać się dość trudne. Problem znacząco narasta w sytuacjach, gdy sterownik uczestniczy w regulacji wielkości ciągłych. Regulacja ciągła, jak np. PID, wymaga stałego czasu cyklu obliczeń ? czasu próbkowania.

Za kolejny słaby punkt języka drabinkowego należy uznać operacje arytmetyczne. Na początku język schematów drabinkowych przeznaczony był jedynie do programowania sterowania procesami dyskretnymi. Z jego użyciem realizowane były dodatkowo funkcje czasowe oraz licznikowe. Współcześnie język schematów drabinkowych zawiera również instrukcje związane z funkcjami i blokami funkcyjnymi operacji arytmetycznych. Niestety, tworzenie złożonych algorytmów obliczeniowych z użyciem języka drabinkowego jest uciążliwe i czasochłonne.

Siła w dyscyplinie

Jak widać, język schematów drabinkowych jest bardzo korzystny w programowaniu zadań sterowania dyskretnego. Jednakże nastręcza wielu problemów w przypadku, gdy chcemy z jego użyciem programować zadania regulacji automatycznej. Znajomość innych metod programowania może być czasem wręcz konieczna. Badacze z Uniwersytetu Kalifornijskiego w Berkeley zajmujący się systemami wbudowanymi i czasu rzeczywistego nazywają różne reprezentacje oprogramowania ?modelami obliczeniowymi?. ?Modele obliczeniowe? to swego rodzaju opis zachowania systemu, podobnie jak ma to miejsce w przypadku skończonej maszyny stanów czy reprezentacji systemu w postaci grafu przepływu sygnałów.

Praktycznie rzecz ujmując podejście modeli obliczeniowych może być użyte w wielu aspektach współczesnej automatyzacji do reprezentacji zachowania i programowania systemów przemysłowych. Mówiąc dokładniej, można rozróżnić dwaaspekty funkcjonowania systemu automatyzacji: estetyczny i funkcjonalny. Innymi słowy: jak coś wygląda, a z drugiej strony jak to coś działa. Rozmaitość narzędzi służących do programowania umożliwia obecnie inżynierom i projektantom bliższe przyjrzenie się automatyzowanemu systemowi z kilku różnych perspektyw. Przykładowo, inżynier procesu jest zadowolony, gdy może przyjrzeć się procesom współbieżnym (na przykład wielu pętlom regulacji PID ? jednocześnie), przeanalizować sposób działania sekwencji sterowania wsadowego, gdy ma dobrze zaprojektowany interfejs operatora, system alarmów itp. Podobnie inżynier zajmujący się projektowaniem maszyny chciałby mieć dostęp do informacji na temat fragmentów logicznych systemu sterowania, operacji sekwencyjnie wykonywanych przez sterowniki, możliwość podglądu i edycji warunków zmian pomiędzy stanami, w jakich znajduje się projektowana przez niego maszyna (tzw. tranzycji). 

Architektura działania PLC oparta jest na technice ?skanowania? ? dane odczytywane są z procesu i przechowywane następnie w pamięci sterownika; program zapisany z użyciem języka drabinkowego wykonywany jest na danych w pamięci; po wykonaniu programu sterującego wyjścia sterownika aktualizowane są zgodnie ze stanem zmiennych w pamięci sterownika. 

Dwaj inżynierowie projektanci mogą korzystać z tego samego sprzętu, ale różnych narzędzi programistycznych. Każdy model obliczeniowy ma swoje dobre i złe strony ? może być wygodniejszy w przypadku jednego z rozwiązań, podczas gdy do innego będzie go bardzo trudno zastosować. Językiem programowania sterowników najczęściej używanych przez inżynierów w Stanach Zjednoczonych jest, podobnie jak w Polsce, język schematów drabinkowych. Inżynierowie, którzy pracują na co dzień ze sterownikami PLC oraz programują je z użyciem języka schematów drabinkowych, stają się coraz większymi ekspertami nabierając lepszych nawyków w programowaniu. Nawet bardzo złożone aplikacje mogą być efektywnie zbudowane z użyciem tego języka.

Na początku było koło

Język schematów drabinkowych rozwinął się w latach sześćdziesiątych, kiedy to przemysł samochodowy zaczął domagać się większej elastyczności oraz lepszego opracowywania dokumentacji projektu. Nowe narzędzie miało być alternatywą dla istniejących układów przekaźnikowych oraz układów czasowych. Kolejnym etapem było coraz powszechniejsze stosowanie układów mikroprocesorowych. Oprogramowanie zaczęło być projektowane tak, aby odwzorowywać schematy elektryczne sterujących układów przekaźnikowych. Oprogramowanie to, nazywane logiką drabinkową bądź diagramem drabinkowym, wygląda i wykonywane jest podobnie, jak ma to miejsce w przypadku schematów elektrycznych. Istotną różnicę stanowi fakt, że oile w przypadku układu elektrycznego wykonanie funkcji sterujących odbywało się w sposób równoległy, to instrukcje programu w języku drabinkowym wykonywane są przez system mikroprocesorowy w sposób szeregowy.

Rysunek 1. pokazuje, jak lewa szyna (zasilająca) połączona jest poprzez układ styków z szyną uziemiającą (z prawej strony). Energia z zasilania przepływa przez cały układ styków normalnie otwartych, normalnie zamkniętych, aby następnie zasilić cewkę. Otwarte styki blokują przepływ zasilania, podczas gdy styki zamknięte przekazują energię dalej. W programie logicznym drabinkowym każdy styk i cewka połączone są zgodnie z zasadami operacji boolowskich. Połączenie szeregowe styków odpowiada operacji logicznego ?I?, zaś połączenie równoległe to nic innego jak logiczne ?LUB?. Program w języku schematów drabinkowych zwykle wykonywany jest od lewej do prawej i od góry do dołu.

Nieodłącznym elementem języka schematów drabinkowych jest sposób wykonywania programów użytkownika, jak i ogólnego działania sterownika programowalnego. Mechanizm działania sterownika oparty jest na tzw. skanowaniu oraz wykorzystaniu stosu w pamięci. Skanowanie polega na tym, że wejścia fizyczne sterownika (informacje z tych wejść) są odczytywane, a dane zapisywane w pamięci sterownika. Program sterujący jest następnie wykonywany na zmiennych obecnych w pamięci, a nie na sygnałach, które w trakcie obliczeń sterownika mogą ulegać zmianom. Po wykonaniu wszystkich obliczeń stan zmiennych wyjściowych ze sterownika jest aktualizowany, a następnie ustawiane są sygnały na fizycznych modułach wyjściowych sterownika. Ta właśnie kolejność: odczyt i zapis zmiennych wejściowych w pamięci, następnie obliczenia i zapis zmiennych wyjściowych, a potem ustawienie wyjść fizycznych sterownika stanowi o charakterze techniki skanowania w działaniu sterowników programowalnych. Współcześnie wiele modeli sterowników umożliwia natychmiastowy odczyt / zapis wejść / wyjść fizycznych sygnałowych, co jest szczególnie przydatne w układach zabezpieczeń.

Obsługa zadań bardziej złożonych niż proste operacje logiczne realizowana jest współcześnie przez programy języka drabinkowego, dzięki wykorzystaniu mechanizmów wywoływania funkcji w programach języka drabinkowego. Takie funkcje (bloki funkcyjne) mają zwykle wejście aktywujące wykonywanie danej funkcji (EN) oraz wyjście ustawiane w sytuacji, gdy funkcja zostanie wykonana poprawnie. Funkcje mogą zostać umieszczone w programie języka drabinkowego ? zostaną wykonane zgodnie z kolejnością wynikającą z działania programu w sterowniku. Stosowane są w takich operacjach, jak: obliczenia matematyczne, obsługa funkcji czasowych (a konkretnie czasomierzy), obsługa liczników (rozmaite tryby zliczania) czy funkcje regulacyjne (PID, logika rozmyta).

Todd Walter jest menedżerem działu
Pomiarów Przemysłowych i Sterowania
National Instruments.

Artykuł pod redakcją
dra Krzysztofa Pietrusewicza
z Instytutu Automatyki Przemysłowej
Politechniki Szczecińskiej

 

</><//>W kolejnych artykułach z serii poświęconej językom programowania PLC inżynierowie z firmy National Instruments wyjaśnią i porównają różne rodzaje modeli obliczeniowych. Niniejszy artykuł omawia język schematów drabinkowych, kolejne poświęcone zostaną językom tekstowym, językom bloków funkcjonalnych, ale również problematyce modelowania i symulacji.


Klasyka ciągle żywa

Dla Control Engineering Polska mówi dr inż. Bogdan Broel-Plater z Instytutu Automatyki Przemysłowej Politechniki Szczecińskiej:

Zaletą języka schematu drabinkowego jest możliwość stosunkowo łatwego testowania programu ?narysowanego? w postaci schematu stykowego. To szczególnie ważne dla tych, którzy nie są automatykami, zwłaszcza dla elektryków. Oceniając przydatność i przyjazność języka schematu drabinkowego należy także odróżnić łatwość pisania i testowania programu od łatwości projektowania algorytmu sterowania realizowanego przez ten program. Zaprojektowanie algorytmu sterowania z poziomu języka schematu drabinkowego (a także języka listy instrukcji oraz częściowo także języka tekstustrukturalnego) jest zadaniem trudnym lub nawet bardzo trudnym, zwłaszcza jeśli algorytm taki musi uwzględniać wykrywanie i obsługę sytuacji awaryjnych, pozwalać na pracę ręczną i automatyczną układu sterowania oraz bezuderzeniowe bezpieczne przełączanie pomiędzy trybami pracy.

Moim zdaniem do projektowania algorytmów sterowania należy używać znacznie czytelniejszych i przyjaźniejszych języków programowania aniżeli LD. Należą do nich przede wszystkim języki sterowania sekwencyjnego, takie jak np. Gracet, GRAPH 5 lub SCF. Niemniej każdy automatyk powinien dość dobrze znać język schematu drabinkowego.

Z jego pomocą, a także języka listy instrukcji, można większym lub mniejszym nakładem pracy zaprogramować każdy sterownik programowalny. Jednym z zadań, jakie wykonują inżynierowie automatycy pracujący w przemyśle, jest dostosowywanie maszyn i linii technologicznych do ciągłych zmian. Dotyczą one wytwarzanych wyrobów, technologii wytwarzania czy materiałów, z których wyroby są produkowane. Wymaga to oczywiście przeprogramowywania istniejących układów sterowania, a zwłaszcza pracujących w nich sterowników PLC. Ponieważ często są to sterowniki ?stare?, oprogramowanie systemowe dla tych sterowników w bardziej zaawansowanych nowoczesnych językach nie istnieje albo jest trudno dostępne (na przykład z powodu ceny). Należy także pamiętać, że bardzo wiele budowanych obecnie układów sterowania wykorzystuje małe sterowniki PLC łączone w sieci. Niektórzy producenci takich sterowników świadomie nie oferują narzędzi do pisania programów z użyciem innych języków niż język schematu drabinkowego czy język listy instrukcji.

Autor od kilkunastu lat prowadzi zajęcia z przedmiotu sterowniki programowalne dla studentów kierunków automatyka i robotyka, elektronika i telekomunikacja oraz elektrotechnika. W swojej nowej książce poświęconej projektowaniu aplikacji sterowania wykorzystujących programowalne sterowniki logiczne omawia zagadnienia wykorzystania języka SFC (z ang. Sequential Function Chart) do projektowania systemu sterowania oraz jako pierwszy proponuje efektywną i szybką metodę tłumaczenia programu napisanego w tym języku na język schematów drabinkowych.