Wady i zalety funkcjonalnych schematów blokowych

Obraz jest wart tysiąca słów – to znane przysłowie mówi o tym, że skomplikowana fabuła może być wyrażona za pomocą prostej ilustracji. Dotyczy to także oprogramowania bazującego na interfejsie człowiek-maszyna w automatyce przemysłowej.

Wykonanie obliczeń bloku funkcyjnego jest zależne od pozycji bloku w sieci FBD.

Język funkcjonalnych schematów blokowych (z ang. FBD – Function Block Diagram) może zastąpić tysiące linii kodu programu. Programowanie z wykorzystaniem elementów graficznych jest metodą, która w sposób intuicyjny pozwala określić funkcjonalność systemu za pomocą składania i łączenia bloków funkcyjnych. Język FBD został zaproponowany w normie IEC 61131-3 jako odpowiedź na słabości języków listy rozkazów i schematów drabinkowych. Sieć FBD składa się z funkcji i bloków funkcyjnych, które przedstawiają zachowanie układu. Bloki funkcyjne zostały zaproponowane, aby umożliwić wielokrotne wykorzystywanie powtarzających się operacji, takich jak: regulacja PID, odliczanie czasu czy zliczanie liczby zdarzeń w różnych fragmentach aplikacji bądź w różnych projektach. Blok funkcyjny jest zbiorem przepisów określających zachowanie się danych, strukturą i jednocześnie zewnętrznym interfejsem zdefiniowanym jako zbiór parametrów wejściowych i wyjściowych. Pod wieloma względami bloki funkcyjne mogą być porównywane z układami scalonymi używanymi w obwodach elektronicznych. Blok funkcyjny jest przedstawiany jako prostokątny bloczek mający wejścia z lewej strony i wyjścia z prawej (zobacz schemat typowego bloku funkcyjnego z wejściami i wyjściami).

Główną cechą bloków funkcyjnych jest zachowywanie danych w czasie kolejnych wywołań, upakowanie i ukrywanie informacji. Zachowywanie danych jest możliwe, ponieważ przy każdym wywołaniu w pamięci tworzone są osobne kopie bloku. Upakowanie oznacza, że pod postacią bloku ukryte są różne zabiegi programistyczne tworzące jedną całość. Ukrywanie informacji polega na tym, że dostęp z zewnątrz do danych i procedur zawartych w bloku jest ograniczony. Efektem upakowania i ochrony danych jest fakt, że nie ma możliwości przypadkowego zmodyfikowania kodu lub wewnętrznych danych w trakcie kopiowania fragmentu kodu z wcześniej wykonanego projektu. 

Łączenie funkcji

Funkcja jest elementem programistycznym, który w wyniku wykonania wraz z odpowiednim zbiorem danych wejściowych zwraca wartość wyjściową, ale nie przechowuje jej. Funkcje są zazwyczaj powiązane z blokami funkcyjnymi, które umożliwiają składowanie danych i mogą mieć kilka wyjść. Jednymi z przykładów są funkcje trygonometryczne, jak sin() i cos(), funkcje arytmetyczne, takie jak mnożenie i funkcje operujące na danych w postaci słów. Bloki funkcyjne zwierają także regulatory PID, liczniki i układy czasowe.

FBD jest programem, który powstaje przez łączenie wielu funkcji i bloków funkcyjnych. Efektem jest utworzenie jednego bloku, który staje się wejściem do bloku kolejnego. W przeciwieństwie do programowania z użyciem poleceń tekstowych nie ma konieczności przekazywania zmiennych z jednego fragmentu do drugiego, gdyż połączenia pomiędzy blokami automatycznie przekazują dane. Język FBD może być używany do opisu zachowania bloków funkcyjnych oraz programów. Może być także użyty do opisu kroków, działania kroków i warunków wyjścia z kroku w języku zdarzeń SFC.

Blok funkcyjny nie jest wykonywany, dopóki wszystkie wejścia pochodzące od innych bloków nie są dostępne. Kiedy następuje wykonanie bloku funkcyjnego, określane są wartości wszystkich jego zmiennych włącznie ze zmiennymi wejściowymi i zmiennymi wewnętrznymi, a także wartości zmiennych wyjściowych. W czasie wykonywania algorytm oblicza nowe wartości zmiennych wyjściowych oraz wewnętrznych. Funkcje i bloki funkcyjne są podstawowymi elementami składowymi języka schematów blokowych. W FBD sygnały przenoszone są z wyjść funkcji lub bloków funkcyjnych na wejścia innych funkcji lub bloków funkcyjnych.

Sygnały będące wejściami bloków funkcyjnych mogą stać się wejściami innych funkcji. 

Wartości wyjść bloków funkcyjnych są efektem obliczeń wewnątrz bloku. W sieci FBD zmiany wartości sygnałów przenoszone są w sposób naturalny od strony lewej do prawej. Istnieje możliwość tworzenia sprzężeń zwrotnych z wyjścia danego bloku do wejścia bloku, który go poprzedza. Wartość sygnału na ścieżce sprzężenia zwrotnego jest zapamiętywana i wykorzystywana jako wartość startowa przy następnymwywołaniu (zobacz schemat sieci FBD).

Kolejność wykonywania bloków funkcyjnych w sieci FBD zależy od pozycji bloku w FBD. Na przykład blok „symulator obiektu” z diagramu sieci FBD jest wykonywany po bloku „sterowanie”. Kolejność wykonywania operacji może być kontrolowana przez zezwolenie na uruchamianie danego bloku oraz ustalenie wyjść bloków w taki sposób, że zmieniają one stan natychmiast po wystąpieniu wykonania. Za kompletne wykonanie programu zawartego w sieci FBD uznaje się tylko takie, kiedy wszystkie wyjścia wszystkich funkcji i bloków funkcyjnych zostaną zaktualizowane.

Mocne strony FBD

Intuicyjność i łatwość programowania. Ponieważ FBD to język graficzny, praca z nim jest prosta nawet dla projektantów systemów sterowania, którzy nie mają doświadczenia w programowaniu. Korzystają na tym programiści, którzy nie muszą być specjalistami w pisaniu algorytmów sterowania w językach tekstowych, a jedynie znać algorytm sterowania. Mogą wykorzystywać istniejące już bloki funkcyjne do łatwego tworzenia programów, zbierania danych, sterowania procesem i wartościami zmiennych dyskretnych.

Języki wykorzystujące wizualizację przepływu danych (na przykład National Instruments LabView) mogą automatycznie wykonywać równoległe bloki funkcyjne w oddzielnych wątkach. 

 

 

Możliwość ponownego wykorzystania kodu. Jedną z głównych korzyści używania bloków funkcyjnych jest możliwość ich ponownego wykorzystania. Projektanci mogą wykorzystywać istniejące już bloki funkcyjne – regulatory PID, filtry lub stworzone przez siebie algorytmy. Ponieważ przy każdym wywoływaniu tych bloków tworzone są ich oddzielne kopie, nie ma obawy o utratę danych. Dodatkowo, bloki funkcyjne mogą być wywoływane z poziomu języka LD oraz ST, co pozwala na ich elastyczne wykorzystanie do różnych typów obliczeń.

Równoległe wykonywanie. Od czasu zaprezentowania systemów wieloprocesorowych programowalne urządzenia automatyki oraz komputery klasy PC mogą przetwarzać kilka poleceń jednocześnie. Za pomocą graficznych języków programowania – takich jak FBD – można skutecznie zaprezentować układy z równoległym wykonywaniem instrukcji. W czasie, gdy programiści języków tekstowych używają specjalnych wątków i bibliotek do korzystania z wielowątkowości, języki graficzne, FBD oraz języki wykorzystujące wizualizację przepływu danych (na przykład National Instruments LabView), mogą automatycznie wykonywać równoległe bloki funkcyjne w oddzielnych wątkach. Jest to bardzo przydatne w zaawansowanych algorytmach sterowania, w tym implementacji równoległych regulatorów PID.

Czytelność i proste debugowanie. Przepływ sygnałów w graficznym interfejsie FBD czyni debugowanie łatwym, ponieważ projektanci mogą śledzić połączenia pomiędzy funkcjami i blokami funkcyjnymi. Wiele edytorów FBD (takich jak Siemens Step 7) wyświetla animacje przedstawiające przepływ danych w układzie, co jest dodatkowym ułatwieniem.

Słabe strony FBD

Rozwijanie algorytmu. Proste funkcje oraz algorytmy matematyczne są zazwyczaj przedstawiane przy użyciu opisu słownego, a nie graficznego. Dotyczy to także algorytmów realizowanych przez blok funkcyjny. Co więcej, algorytmy zagnieżdżane są w bloku funkcyjnym, co utrudnia późniejszy podgląd zastosowanych technik przetwarzania isterowania.

Ograniczona kontrola wykonania. Wykonywanie w FBD operacji od lewej do prawej strony pozwala wykonywać operacje ciągłe. Za pomocą funkcji skoków oraz odpowiednich zależności między danymi używanymi między blokami funkcyjnymi, projektanci systemu mogą kontrolować przebieg programu. Jednak FBD nie jest idealnym językiem do rozwiązywania zagadnień sekwencyjnych. Dla przykładu zmiana stanu z „napełniaj zbiornik” do „mieszaj w zbiorniku” wymaga obliczenia wszystkich stanów w układzie. Zależnie od wyjścia tranzycja musi zostać wykonana przed przejściem do kolejnego stanu. Warunek ten może zostać spełniony przez odpowiednie zależności danych w blokach funkcyjnych. Wymaga to jednak znacznego wysiłku i czasu.

Integracja z systemami IT. Dzisiaj duże wagę przykłada się do poszukiwania dróg łączących wszystkie warstwy przedsiębiorstwa – od warstwy procesu aż po warstwę zarządzenia firmą (ERP), możliwości podłączenia do Internetu oraz baz danych. Języki tekstowe mają możliwość logowania danych oraz różne opcje kontroli wykonywania programu, natomiast FBD nie mają tych cech, co w ogólnym przypadku nie pozwala integrować ich z systemami IT. Co więcej, programiści IT posiadają zazwyczaj przeszkolenie tylko w językach tekstowych.

Potrzeba szkolenia. Chociaż tworzenie programu w FBD jest intuicyjne, technika data flow (graficznego obrazowania przepływu danych w programie) nie jest zazwyczaj postrzegana jako język programowania. W Stanach Zjednoczonych, podobnie jak w Polsce, inżynierowie w czasie kształcenia nabywają zdolności programowania w językach tekstowych (C++, Fortran i Visual Basic), natomiast technolodzy w języku drabinkowym oraz z użyciem schematów elektrycznych. Wykorzystanie języka FBD wymaga dodatkowego treningu, jako że reprezentuje inne podejście do programowania.

Podsumowując: FBD przedstawia w sposób graficzny program sterujący. Intuicyjność, łatwość programowania i możliwość wielokrotnego wykorzystania czyni FBD bardzo popularnym w środowisku inżynierów. FBD jest idealnym językiem do skomplikowanych aplikacji wykorzystujących wielowątkowość oraz do procesów ciągłych. Efektywnie uzupełnia braki funkcjonalności języka drabinkowego: zdolność zagnieżdżania oraz możliwość wielokrotnego wykorzystania fragmentu programu. Aby przezwyciężyć niektóre ze słabości FBD, inżynierowie muszą stosować różne metody wykonywania obliczeń. Sieci FBD są wykorzystywane wspólnie z językami tekstowymi do obliczeń i integracji z systemami IT. Zadania wsadowe oraz operacje na zmiennych dyskretnych są wspomagane przez wykorzystanie języka zdarzeń SFC.

Język SFC, będący rozwiązaniem na niektóre z problemów występujących przy użyciu FBD, będzie omówiony w czwartym odcinku tej pięcioczęściowej serii artykułów.

ce

Arun Veeramani jest Product Managerem,
zaś Todd Walter Group Managerem
w National Instruments.
 

Artykuł pod redakcją Łukasza Urbańskiego,
doktoranta w Instytucie Automatyki
Przemysłowej Politechniki Szczecińskiej

W czwartym odcinku tej pięcioczęściowej serii artykułów inżynierowie National Instruments omówią język SFC, który jest sposobem na rozwiązanie niektórych problemów występujących przy użyciu FBD.

Intuicyjność, łatwość programowania i możliwość wielokrotnego wykorzystania czyni FBD bardzo popularnym w środowisku inżynierów. FBD jest idealnym językiem do skomplikowanych aplikacji wykorzystujących wielowątkowość oraz do procesów ciągłych.


Dla wielu procesorów

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

Podobnie jak autorzy artykułu uważam, że szczególnie ważna jest możliwość wykorzystania języka FBD do programowania sterowników wieloprocesorowych. Sterowniki takie stosowane są bowiem coraz częściej, lecz ich możliwości niejednokrotnie nie są w pełni wykorzystywane. Dzięki dużej mocy obliczeniowej współczesnych sterowników PLC stosowane są one także coraz częściej do regulacji procesów ciągłych. Język FBD pozwala na stosunkowo łatwe zaprogramowanie sterownika do realizacji takich układów. Pomimo zalet języka FBD myślę jednak, że język sekwencyjnego schematu funkcjonalnego SFC jest najwygodniejszy do projektowania algorytmów sterowania wykorzystywanych w typowych aplikacjach sterowników PLC, czyli w układach sterowania procesami dyskretnymi.

W początkowym okresie rozwoju sterowników PLC do ich programowania wykorzystywano trzy tzw. języki podstawowe, czyli język schematu drabinkowego (LD), listy instrukcji (IL) i funkcjonalnych schematów blokowych (FBD). Języki te wykorzystywane są także obecnie, chociaż ich znaczenie – zwłaszcza w przypadku dużych aplikacji – znacznie się zmniejszyło na rzecz języków typu tekst strukturalny (ST) lub języka sekwencyjnego schematu funkcjonalnego SFC. Dwa z najstarszych – wykorzystywanych także obecnie – języków programowania, czyli język schematu drabinkowego (LD) i język listy instrukcji (IL) zmieniły się w ostatnich latach stosunkowo nieznacznie. W przeciwieństwie do nich współczesne wersje języka funkcjonalnych schematów blokowych (FBD) różnią się znacznie od swojego pierwowzoru. Dawne wersje języka FBD miały w zasadzie możliwości takie same, jak język LD, jednak programy zapisane z użyciem tego ostatniego były znacznie bardziej czytelne – zwłaszcza dla elektryków. Być może dlatego też język FBD był dotychczas stosowany znacznie rzadziej, niż dwa pozostałe podstawowe języki programowania.