Jeszcze mniej więcej 15-20 lat temu narzędzia RAD wręcz rządziły światem developmentu. Był to okres rozwijającej się mocno sieci ale już dość dobrze ugruntowanych aplikacji desktopowych. Na świecie królował Windows XP, chociaż wiele osób korzystało jeszcze z wersji 2000. Na rynku narzędzi RAD było dwóch dużych graczy: Microsoft, ze swoim Visual Basic-iem oraz Borland z Delphi i C++ Builder. Początki mojej pracy zawodowej to właśnie obok PHP – Borland Delphi. Korzystaliśmy wtedy jeszcze z wersji 5 by potem przeskoczyć do wersji 2005.
Później świat się zmienił. Anders Hejlsberg opuścił Borland aby przejść do Microsoft i stworzyć C#. Świat odważnie wkroczył w trwającą do dzisiaj erę aplikacji webowych a Delphi w dużej mierze trafiło do lamusa. Do dzisiaj oczywiście jest rozwijane i sprzedawane przez firmę Embarcadero, ale produkcyjnie wykorzystywane jest już coraz rzadziej. Podobny los podzielił Visual Basic, który przekształcił się w istniejący do dzisiaj Visual Basic .Net, który jednak ze swoim protoplastą nie ma wiele wspólnego poza elementami składni.
Narzędzia RAD istnieją na rynku nadal. W większości są to jednak dość niszowe rozwiązania, które zrzeszają wokół siebie grupki zapalonych ludzi. Duże firmy software-owe trzymają się raczej już od takich produktów z daleka i generalnie jest to zrozumiałe. Znalezienie programisty, który ogarnie cokolwiek w projekcie, jeżeli poprzedni zespół się „wysypał” może się okazać trudnym zadaniem.
Pascal też jest już dzisiaj językiem mało używanym. Nie uczy się go już raczej w szkole a o zastosowaniach produkcyjnych raczej można tylko pomarzyć. Rozwój języka również stanął w miejscu – nie można go nijak dzisiaj porównać do Javy czy do C#. Pasjonaci Pascala, a są tacy, z pewnością by się z tym stwierdzeniem nie zgodzili, ale obiektywnie tak to właśnie wydaje się wyglądać.
Zaletą narzędzi RAD był niewątpliwie bardzo niski punkt wejścia, dla osób które z programowaniem nie miały zbyt wiele do czynienia. Można było w bardzo krótkim czasie wyklikać sobie fajny interfejs prostej aplikacji i dosłownie paroma linijkami kodu sprawić aby ożył. Te czasy już jednak chyba nie wrócą.
Lazarus, o którym mowa będzie w dzisiejszym poście jest open source-ową wersją środowiska Delphi – a może inaczej – przygotowaną na wzór Delphi. Oparta jest ona o kompilator FPC (Free Pascal Compiler) i jest wieloplatformowa. Środowisko Lazarusa odpalimy zarówno na Windowsie, Linux-ie jak i na Mac-u a nawet i na Raspberry PI. Podobnież możemy targetować nasz projekt. Samo IDE, jak i repozytorium dostępnych kontrolek do złudzenia przypomina to co mieliśmy dostępne w Delphi. Programista, który miał kiedykolwiek do czynienia z Deplhi nie będzie się tutaj czuł obco. Istnieją nawet specjalne konwertery wbudowane w Lazarus-a, które pozwalają na konwertowanie projektów Delphi do formatu Lazarus-owego.
Lazarus posiada wiele dodatkowych kontrolek i bibliotek stworzonych przez osoby trzecie. Jedną z nich – bardzo interesującą – jest Pascal Scada. Biblioteka jest oparta na licencji LGPL2.
Pascal Scada zawiera sporą ilość kontrolek, które pomagają w realizacji komunikacji z urządzeniami (w tym z całą paletą sterowników Siemens) z wykorzystaniem protokołu ISOOverTCP lub Modbus. Szczerze mówiąc, kiedy po raz pierwszy zainstalowałem ten dodatek do Lazarusa to byłem w ciężkim szoku – gdybym miał coś takiego 10-15 lat temu o ile szybciej i łatwiej można by realizować pewne projekty.
Dostajemy więc bloczki do zestawiania komunikacji, ale też bloczki które reprezentują tzw tagi, odpowiadające wartościom lub grupom wartości, które chcemy odczytać/zapisać. Cała warstwa związana z nawiązywaniem połączenia, realizowaniem odczytu i zapisu jest praktycznie przed nami ukryta.
Otrzymujemy np. kontrolkę w stylu TextEdit, do której podłączamy zdefiniowany tag w sterowniku i kontrolka automatycznie wyświetla nam wartość taga a po zapisaniu nowej wartości i potwierdzeniu trafia ona do sterownika. Znajdziemy też kontrolki typowo wizualizacyjne jak np. zawór albo zbiornik, do którego też tylko podpinamy zdefiniowane tagi.
Przygotowałem prostą aplikację, która tak naprawdę jest klonem tego, co przygotowałem przy postach o bibliotekach C# do komunikacji ze sterownikami. Komunikuje się ona z dokładnie tym samym programem w S7-1200 jak ten, z którego korzystałem w poprzednich postach. Ponieważ do Pascal Scada nie ma zbyt dużo dostępnej dokumentacji część wykonałem metodą prób i błędów, ale i tak udało się to zrobić w nieprawdopodobnie krótkim czasie.
Nie testowałem co prawda na Raspberry PI, ale nie powinno być tu specjalnie różnicy w stosunku do Ubuntu.
Nie udało mi się też uruchomić tego projektu na Mac-u, ale głównie dlatego że nie bardzo chciało mi się walczyć z ustawieniami kompilatora aby poprawnie dodać do IDE Pascal Scada.
Mój projekt testowy w Lazarus-ie jest oczywiście dostępny do pobrania na github-ie.
I na koniec kilka słów podsumowania. Lazarus i Pascal Scada bardzo mi się podobają. Być może ze względu na sentyment do dawnych czasów. Trudno mi powiedzieć jak to rozwiązanie zachowało by się w dużej aplikacji, trzeba by dokładnie przeglądnąć kod biblioteki żeby zobaczyć jak jest zoptymalizowana komunikacja. Czy szarpnąłbym się na zastosowanie produkcyjne u klienta ? Być może tak, chociaż coraz częściej klienci nie chcą kupować czarnych skrzynek, wolą kupić także kod źródłowy aby nie zamykać sobie drogi do rozwijania aplikacji – nie koniecznie będąc przywiązanym do jednej firmy – ewentualnie wprowadzać proste zmiany własnymi zasobami. W związku z tym interesują się tym, jakie technologie zostaną wykorzystane i Lazarus, ze względu na swoją niszowość nie koniecznie przypadłby im do gustu.
Niewątpliwą zaletą Lazarus-a jest wieloplatformowość niemalże 1 do 1. Bardzo łatwo możemy przygotować cały soft na Windows, a potem skompilować pod Linuxem i odpalić na maszynie Linux-owej. Z Makami nie jest już tak dobrze, ale podejrzewam że trzeba tylko włożyć trochę wysiłku, żeby poprawnie skonfigurować kompilator – mnie troszkę zabrakło motywacji, żeby powalczyć z tym dalej ;).