Podsumowanie roku 2010

Miniony rok był dla systemu SZARP kolejnym rokiem ewolucyjnego rozwoju – utrzymaliśmy tempo średnio ponad jednej zmiany dziennie, wykonując w ciągu roku ponad 400 commitów. Oto podsumowanie najważniejszych wydarzeń zeszłego roku.

  • W kwietniu nastąpiła zmiana używanego przez projekt systemu kontroli wersji – git zastąpił Subversion. Wymagało to z naszej strony zmiany pewnych przyzwyczajeń, ale git niewątpliwie jest lepszym narzędziem – bardziej niezawodnym, o większych możliwościach i co ważne, nieporównywalnie szybszym. Co ciekawe, pełne repozytorium git SZARP’a zajmuje na dysku mniej miejsca, niż pojedyncza kopia robocza używająca Subversion. Zmiana ta jest też w pewien sposób widoczna dla użytkowników, gdyż zmienił się sposób wersjonowania oprogramowania. Dotychczas najmniej znacząca część numeru wersji (czyli np. 508 dla 3.1.508) była skorelowana z numerem wersji całego repozytorium i zmieniała się po każdej zmianie kodu. Git nie używa rosnących numerów wersji, więc obecnie każde podniesienie wersji jest robione ręcznie przez developerów i związane jest z wypuszczeniem nowej wersji paczek dla gałęzi stable czy unstable, lub nowej wersji dla Windows. Zmiany wersji są więc rzadsze, ale każda z nich oznacza rzeczywistą nową wersję udostępnianą użytkownikom, poprawiającą jakieś błędy lub dodającą nowe funkcje.
  • Istotną zmianą w funkcjonalności oprogramowania jest udostępnienie możliwości rejestracji i analizy wartości parametrów z rozdzielczością 10 sekund, obok dotychczasowych 10 minut. Wymaga to dodatkowej konfiguracji i działa tylko przy bezpośrednim połączeniu (lokalnym lub VPN) do serwera SZARP, ale jest dobrze zintegrowane z resztą systemu, dając użytkownikom dodatkowy poziom szczegółowości danych.
  • Program przeglądający – najważniejsze narzędzie do analizy danych – został wzbogacony o sporo drobnych usprawnień, takich jak wykresy XYZ, możliwość skoku do i podążania za najnowszą daną, wyświetlanie zestawów wykresów w formie „drzewka”, wyszukiwanie momentów gdy spełniona jest dana formuła Lua. Jednocześnie nadal kontynuowano prace nad zwiększeniem jego wydajności. Poza poprawkami w mechanizmie cache’owania danych, pojawił się cały nowy moduł prekompilujący formuły w języku Lua opisujące parametry definiowalne. Program analizuje formuły parametrów i te, które składają się wyrażeń arytmetycznych i instrukcji warunkowych, są zamieniane na wewnętrzną reprezentację i wykonywane bezpośrednio przez SZARP, bez odwołania do interpretera języka Lua. W efekcie Lua staje się zalecanym narzędziem do konstrukcji nowych parametrów, zapewniając bezkompromisową wydajność w przypadku prostych formuł i jednocześnie możliwość stosowania bardziej zaawansowanych funkcji języka programowania.
  • Jedną z najważniejszych zmian „pod maską” systemu jest wprowadzenie zmodyfikowanej architektury dla sterowników urządzeń. Dotychczas każdy z nich był oddzielnym programem, komunikującym się z resztą systemu za pomocą mechanizmów IPC, w myśl tradycyjnej uniksowej filozofii „jednego programu do jednej rzeczy”. Podejście to jest bardzo elastyczne, ale ma swoje ograniczenia. Nie jest możliwe np. współdzielenie jednego portu szeregowego przez urządzenia używające różnych protokołów (a więc obsługiwane przez różne sterowniki). Dla konfiguracji obsługujących setki urządzeń (tak, mamy takie) wymagane było uruchomienie takiej samej ilości programów, z których każdy musiał wczytać do pamięci całą konfigurację systemu, co prowadziło do problemów wydajnościowych. Nowe podejście reprezentowane jest za pomocą meta-demona „boruta”, który zapewnia wspólną platformę do obsługi konfiguracji, połączeń szeregowych czy sieciowych. Poszczególne protokoły komunikacyjne zaimplementowane są jako moduły do boruty. Boruta dzięki wykorzystaniu mechanizmu sterowania przez zdarzenia pozwala na wydajną obsługę wielu urządzeń. Obecnie dostępne są moduły dla kilku najczęściej wykorzystywanych w naszych instalacjach protokołów, takich jak ZET czy Modbus RTU/TCP.
    Liczba wdrożeń systemu zwiększyła się w zeszłym roku według naszej wiedzy o 6 nowych instalacji, osiągając od 1992 roku ogólną liczbę 60, z których 58 (!) jest aktywnych do dzisiaj. Użytkownicy cenią sobie szczególnie możliwość wygodnego zdalnego dostępu do danych. Instalacje objęte płatnym wsparciem oferowanym przez firmę Newterm otrzymują regularne aktualizacje oprogramowania i pomoc w konfiguracji i rozwiązywaniu pojawiających się problemów.

Dziękujemy wszystkim użytkownikom za kolejny wspólny rok i życzymy, aby następny był jeszcze lepszy!

Pakiety SZARP dla Ubuntu 10.04 „Lucid Lynx”

SZARP jest rozwijany głównie dla systemu operacyjnego Debian GNU/Linux. Kompilacja nawet na bardzo zbliżonych dystrybucjach Linuksa, takich jak Ubuntu, może czasami nastręczać problemy. Staramy się w związku z tym udostępniać od czasu do czasu pakiety dla Ubuntu. Ostatnia wersja SZARP, zawierająca obsługę przechowywania historii próbek 10-sekundowych, jest obecnie dostępna w postaci gotowych pakietów dla dustrybucji Ubuntu Lucid Lynx 10.04 LTS. Instalacja jest prosta – wystarczy dodać wpis:

  • deb http://newterm.pl/debian lucid main non-free

do listy repozytoriów oprogramowania, a następnie użyć dowolnego programu do zarządzania pakietami w celu instalacji oprogramowania SZARP.

Próbki 10-sekundowe już dostępne.

Najmocniejszą stroną systemu SZARP są jego możliwości analizowania danych historycznych. Dotychczas analiza ta była ograniczona do rozdzielczości 10-minut na pojedynczą dostępną próbkę. Zwykle jest to wystarczające w głównych zastosowaniach SZARP, czyli wolnozmiennych procesach w systemach ciepłowniczych. Większość systemów SCADA potrafi jednak lepiej lub gorzej prezentować trendy historyczne z większą rozdzielczością. Najnowsza niestabilna wersja SZARP zawiera więc możliwość zapisywania i wyświetlania próbek z rozdzielczością 10-sekundową.

Program przeglądający wyświetlający próbki 10-sekundowe

SZARP od początku umożliwiał zbieranie i wyświetlanie próbek z kilkusekundową rozdzielczością, ale do bazy danych historycznych zapisywane były średnie 10-minutowe i jedynie one dostępne były do późniejszej analizy na wykresach. Nowa wersja wprowadza dodatkowy proces (prober) zajmujący się zapisywaniem na dysk także próbek 10-sekundowych. Zapis odbywa się w specjalizowanym formacie, zbliżonym do używanego do zapisu próbek 10-minutowych. Dodatkowe dane zapisywane są jednak w oddzielnej lokalizacji na dysku i ze względu na swój sporo większy rozmiar nie podlegają standardowemu mechanizmowi replikacji za pomocą sieci Internet. Udostępnianiem próbek 10-sekundowych zajmuje się inny proces (probes_server), który umożliwia dostęp do próbek za pomocą sieci TCP/IP. Główna biblioteka dostępu do danych systemu SZARP została rozszerzona o możliwość odpytywania na bieżąco przez sieć o żądane przez aplikacje wartości próbek. W ten sposób funkcjonalność próbek 10-sekundowych staje się dostępna w programie przeglądającym a także dla skryptów w języku Lua i tradycyjnych parametrów definiowalnych. Dostęp do nowych danych mogą też uzyskać inne programy, np. Ekstraktor – choć on akurat wymaga jeszcze nieco pracy. Próbki 10-sekundowe dostępne są dla każdego klienta, który może połączyć się bezpośrednio ze źródłowym systemem SZARP. Domyślnie działają więc w tradycyjnym układzie z serwerem i terminalami SZARP w sieci lokalnej. W razie potrzeby jest możliwość tunelowanie danych, np. przez połączenie VPN, w celu dostępu zdalnego.
Pozostało jeszcze sporo pracy (np. z poprawieniem wszystkich błędów w wersji dla Windows), ale nowa funkcjonalność powoli staje się na tyle dojrzała, że powinna pojawić się w kolejnej stabilnej wersji systemu SZARP.

Stabilny SZARP 3.1.406 – szybsze parametry Lua

Wydana została nowa stabilna wersja SZARP – 3.1.406. Najważniejsze zmiany w tej wersji:

  • Kilka istotnych poprawek, w tym naprawienie błędu z uruchamianiem demonów linii (sterowników urządzeń) przez proces parcook.
  • Automatycznie generowana dokumentacja dla wszystkich sterowników urządzeń.
  • Nowy sterownik setdmn pozwalający na ustawianie wartości parametrów przez sieć oraz towarzyszący mu klient graficzny setter (tłumaczone jako ustawiacz). Funkcjonalność ta mogła być uzyskana przez połączenie istniejących wcześniej elementów systemu, ale nowe rozwiązanie jest prostsze w konfiguracji i bardziej niezawodne.
  • Import i eksport zestawów definiowalnych w programie przeglądającym draw3. Definiowane przez użytkownika zestawy parametrów mogą być zapisywane do pliku i importowane przez innych użytkowników czy na innym komputerze. Nowa funkcja Edytuj jako nowy w programie przeglądającym, upraszczająca tworzenie zestawu parametrów użytkownika na podstawie istniejącego zestawu.
  • Optymalizator parametrów Lua. Język Lua pozwala na dużą elastyczność w tworzeniu parametrów definiowalnych, ale obliczanie przez komputer parametrów w Lua może być wolne – przynajmniej jak na standardy SZARP – czyli użytkownicy mogą w przypadku bardziej skomplikowanych formuł nawet zauważać proces obliczania i wyświetlania parametrów. Nowy moduł SZARP potrafi zrozumieć dużą część języka Lua, łącznie z odwołaniami do funkcji specyficznych dla SZARP. Większość formuł może być sparsowana i trzymana w postaci przetworzonej, dzięki czemu wartości parametrów są obliczane nawet szybciej niż tradycyjne parametry SZARP zapisywane w Odwrotnej Notacji Polskiej (RPN). Jeśli parametr jest zbyt złożony, aby został przetworzony przez optymalizator, jest przekazywany do wykonania przez interpreter Lua. Nowa funkcjonalność pozwala użytkownikom SZARP na jeszcze szybsze analizowanie danych historycznych.

Ta wersja SZARP jest jednocześnie ostatnią opublikowaną wersją bazującą na repozytorium Subversion. Warto także wypróbować nową wersję niestabilną 3.1.409, zawierającą całkowicie nową funkcjonalność – wykresy trójwymiarowe (3D) do analizy zależności między 3 parametrami. Prace nad tą funkcjonalnością nie jest jeszcze zakończona, można spodziewać się błędów.

Przeprowadzka z Subversion na Git

Począwszy od dzisiaj, SZARP używa Git jako systemu kontroli wersji kodu źródłowego. Git jest otwartym, darmowym systemem kontroli wersji, stworzonym przez Linusa Torvaldsa na potrzeby jądra Linuksa. Jest używany przez wiele innych projektów, w tym Android, Debian, Fedora, GIMP, GNOME,  Perl, Qt,  Samba, Wine, X.Org. Powody zmiany są zapewne podobne jak dla wielu innych projektów, które porzuciły scentralizowane systemy kontroli wersji na rzecz posiadających większą funkcjonalność systemów rozproszonych, takich jak Git, Baazar czy Mercurial. Git został wybrany ze względu na swoją stabilność i dojrzałość, dużą prędkość działania i doskonałe wsparcie dla tworzenia/łączenia gałęzi kodu. Nadal używamy SourceForge, kod źródłowy może być pobrany za pomocą komendy:

  • git clone git://szarp.git.sourceforge.net/gitroot/szarp/szarp

Efektem ubocznym zmiany może być rzadsze podnoszenie numeru wersji SZARP. Poprzednio jako numer wersji używany był numer wersji Subversion, zmieniany przy każdej zatwierdzanej zmianie w kodzie. Ponieważ Git nie używa numerycznych, rosnących nazw wersji, numer wersji SZARP nie będzie zwiększany automatycznie, ale będzie to wymagało świadomej decyzji programisty. Dzięki temu zmiany numerów wersji będą lepiej odpowiadały rzeczywistym zmianom w funkcjonalności.

 

SZARP w styczniu – DDE i spółka

Styczeń przyniósł ponad 30 większych zmian w repozytorium SZARP. Duże części programu przeglądającego draw3 zostały w poprzednim miesiącu przepisane w celu uproszczenia kodu, co spowodowało wprowadzenie sporej ilości drobnych błędów. Do czasu upewnienia się, że wszystkie zostały usunięte, wstrzymujemy jeszcze opublikowanie kolejnej wersji ‚stabilnej’. Najważniejsza funkcjonalna zmiana jaka zaszła w SZARP to usprawnienie komunikacji z aplikacjami Windows korzystającymi z mechanizmu DDE. (Dynamic Data Exchange) to starodawny protokół typu „kolejka komunikatów” wprowadzony przez Microsoft w Windows 2.0 w 1987 (!) roku. Umożliwia programom wymianę krótkich komunikatów o dowolnej treści, np. poinformowanie edytora tekstu o zmianie wartości komórki w Excelu. Firma Wonderware, producent popularnego oprogramowania SCADA – InTouch, była jedną z pierwszych, które wprowadziły DDE do zastosowań w automatyce przemysłowej. Jest także twórcą NetDDE – odmiany DDE działającej przez sieć, która była nawet licencjonowana przez Microsoft i dostępna w wielu wersjach systemu Windows. Ostatecznie z powodów bezpieczeństwa zniknęła z Windows wraz z drugim service packiem do Windows XP i wydaniem Windows Vista. Jednak stare dobre DDE dostępne jest we wszystkich wersjach, nawet w nowym ślicznym Windows 7 (przy okazji – SZARP pod Windows według raportów użytkowników działa także pod Windows 7). Poza tym zawsze można doinstalować NetDDE od Wonderware. DDE z założenia jest technologią niebezpieczną – nie ma żadnej możliwości zidentyfikowania, od kogo pochodzi komunikat dostarczony do aplikacji. Nowsze technologie, takie jak COM, OLE czy OPC miały zastąpić DDE, ale jest ono nadal popularne w wielu zastosowaniach, w tym także w wymianie danych z systemami SCADA. Nie ma żadnego prostego sposobu na połączenie się z programu działającego pod Linuksem (takiego jak serwer SZARP) do programu pod Windows korzystającego z DDE. DDE (oraz NetDDE) bazuje na własnościowych protokołach Microsoftu i nie istnieją żadne niezależne implementacje – jeśli ktoś potrzebuje DDE, korzysta po prostu z API win32. W celu umożliwienia wymiany danych z programami SCADA pracującymi pod Windows (tak naprawdę – właśnie z aplikacją InTouch), SZARP używał prostego skryptu w Pythonie – ddespy – który zamieniał zapytania XML-RPC przesyłane z komputera z Linuksem na zapytania DDE do aplikacji Windows. Początkowo skrypt obsługiwał tylko jeden szczególny przypadek aplikacji – dostępny do InToucha sterownik protokołu Modbus (MBENET). Ostatnie zmiany (w tym zmiana nazwy – z ddespy na ddeproxy) umożliwiają proste pobranie do SZARP dowolnych danych z systemu InTouch lub innej aplikacji Windows wykorzystującej DDE. Wystarczy znać nazwy ‚itemów’ (w terminologii DDE), które odpowiadają nazwom ‚tagów’ (w terminologii InTouch). Dzięki pythonowej filozofii ‚dołączonych baterii’ (batteries included) i rozszerzeniom Win32, stworzenie serwera XML-RPC, który jednocześnie jest klientem DDE, wymaga napisania w Pythonie dosłownie kilku linijek kodu. Po uruchomieniu skrypt działa w tle. Dzięki narzędziu py2exe (http://www.py2exe.org) nie jest konieczna oddzielna instalacja pod Windows Pythona i rozszerzeń Win32 – całość można zapakować w zgrabny zbiór jednego pliku EXE i kilku DLL. Jako że ddeproxy używa standardowego protokołu XML-RPC, może być wykorzystane niezależnie od SZARP – do przesyłania danych z dowolnej aplikacji używającej DDE (np. Excela) do dowolnego klienta XML-RPC.
Instalacja ddeproxy nie obniża w znaczący sposób bezpieczeństwa Windows – w każdym razie dużo mniej niż np. uruchomienie usługi NetDDE. Obsługiwane są tylko komunikaty DDE ‚Request’ (umożliwiające wyłącznie odczyt), a do komunikacji wykorzystywany jest pojedynczy, konfigurowalny port TCP, dostęp do którego można łatwo ograniczyć za pomocą firewalla. Prostota wykorzystania ddeproxy daje dobrą okazję aby wypróbować SZARP obok używanego obecnie innego systemu SCADA dla Windows – wystarczy jedynie stary komputer PC na którym zainstalujemy Debiana i ściągniemy pakiety SZARP, a możemy korzystać z zupełnie nowych możliwości analizy danych historycznych. Pozostałe styczniowe zmiany w SZARP dotyczą między innymi procesu uruchamiania przez SZARP swoich sterowników (demonów linii). Dotychczas było to robione za pośrednictwem powłoki (sh -c), co prowadziło do problemów z propagacją sygnałów oraz dość nieoczywistych zachowań w przypadku użycia w poleceniu uruchamiającym sterownik specjalnych konstrukcji powłoki (np. przekierowania wyjścia do innego procesu). Inne wymienione w pliku NEWS.pl zmiany, to początek zapewne dość długiej drogi do obsługi przez bazę danych próbek o lepszej niż obecnie rozdzielczości – np. 10 sekund zamiast obecnych 10 minut, co pozwoliłoby też rozszerzyć zakres zastosowań systemu. W tej chwili planujemy, że te dokładniejszy dane dostępne byłyby jedynie w ramach lokalnej instalacji (bez propagacji przez Internet), ale wiele szczegółów technicznych może się jeszcze zmienić.

SZARP 3.1.254

Główne zmiany jakie zaszły w SZARP’ie w grudniu obejmują refaktoring kodu aplikacji draw3. Pojawiło się także kilka nowych aplikacji. Szczegóły poniżej:

  • Zasadnicza przebudowa kodu programu przeglądającego, w celu zwiększenia czytelności i możliwości przyszłych modyfikacji. Zmiany wiązały się z wprowadzeniem wielu drobnych usterek, które w większości zostały wkrótce (mamy nadzieję) usunięte.
  • Usunięto oddzielny wątek odpowiadający za zapis na dysk bufora podręcznego programu.
  • Dodano ikony do okien dialogowych w różnych miejscach programu.
  • Wartości parametrów wyświetlane na ciemno-niebieskim tle na niektórych monitorach były słabo widoczne, zmieniono kolor wyświetlanego tła na nieco jaśniejszy.
  • Dodano nową aplikację viszio, pozwalającą na wyświetlanie bezpośrednio na ekranie wartości wybranych parametrów. Program nie jest jeszcze ukończony.
  • Dodano narzędzie ‚szbndremover’ do usuwania ‚dziur’ w bazie SZARP. Wartości ‚brak danych’ zastępowane są średnimi z okolicznych wartości.
  • Poprawiono generowanie odnośników HTML w programie paramd.
  • Dodano nową funkcję M do szybkiego odfiltrowywania za dużych wartości w parametrach definiowalnych.
  • Dodano nowy driver do protokołu Modbus, obsługujący kodowania ASCII i RTU oraz transmisję za pomocą zarówno łącza szeregowego, jak i sieci TCP/IP.

SZARP 3.1.214

W repozytoriach stable i unstable SZARP pojawiły się wersje odpowiednio 3.1.214 i 3.1.212. Najważniejsze zmiany dotyczą programu raporter3, gdzie zmieniono sposób dostępu do raportów użytkownika.
Poniżej pełna lista zmian w stosunku do wersji 3.1.163:

  • Dostępna jest nowa gałąź w repozytorium apt na szarp.org „karmic”, zawierająca
    SZARP skompilowanego dla Ubuntu w wersji „Karmic koala”.
  • Program przeglądający: możliwe jest teraz ustawienie marginesów, rozmiaru oraz orientacji wydruków przez użytkownika.
  • Niepoprawnie funkcjonujący, pochodzący z biblioteki wxWidgets, mechanizm sprawdzający
    czy kopia właśnie uruchomionego programu jest już uruchomiona (czasami wskazywał błędnie,
    że program nie uruchomiony już działa) został zastąpiony naszą własną implementacją, która nie ma takich problemów.
  • mbrtudmn(demon do komunikacji po Modbus RTU): poprawiono obsługę trybu ‚slave’.
  • ipkedit(program do edycji konfiguracji SZARP): dodano obsługę zakresów min-max wykresów oraz ustawiania ich kolorów. Uaktualniono także dokumentację programu.
  • raporter3: program został rozbudowany, wzorce użytkownika są zapisywane automatycznie i są dostępne bezpośrednio z menu – jest to bardziej zgodne z zachowaniem programu draw3, wprowadzano także liczne poprawki i usprawnienia.
  • raporter3: dostępna jest pierwsza wersja dokumentacji.
  • Poprawka w systemie pomocy: poprawnie działa wyszukiwanie dokumentacji z poziomu programów SZARP.

Co nowego w SZARP 3.1.163?

Najważniejsze zmiany od wersji 3.1.97:

  • Ukończony nowy sposób rysowania wykresów w programie przeglądającym „antyaliasowany” – bardziej odpowiedni dla monitorów o wysokich rozdzielczościach. Nowy sposób powinien zmniejszać też zużycie pamięci, ale na niektórych konfiguracjach sprzętowych może być wolniejszy. Tryb „antyaliasowany” jest obecnie domyślny zarówno dla Linuksa jak i dla Windows.
  • Poprawki i nowe funkcje w programie kontroler3: odgrywanie dźwięku przy alarmie.
  • Poprawki w driverze Modbus RTU (synchronizacja czasowa); dodana obsługa kodowania BCD.
  • Dodana obsługa różnych kolejności słów dla wartości typu float w driverze Modbus TCP.
  • Dodano driver dla ciepłomierza Calec MCP-300.
  • Dodana funkcja ‚m’ do funkcji RPN, pozwalająca na szybkie odfiltrowanie wartości spoza prawidłowego zakresu.
  • Poprawki w programie przeglądającym: rysowanie wykresów X/Y, automatyczne przydzielanie kolorów wykresów, otwieranie nowego okna, dorysowywanie nowych punktów z włączonym filtrem, informacja o aktualnie wybranym stylu rysowania wykresów, pobieranie adresu serwera poprawek.
  • Dodano skrypty do pobierania prognozy pogody ze strony Meteoprog; prognozowana temperatura może być pokazywana na wykresach.
  • Poprawka w programie sender – puste elementy <send/> w konfiguracji są ignorowane.
  • Poprawki w kompilacji/budowaniu paczek – poprawki dla najnowszego mingw32, usunięcie kodu specyficznego dla boost-1.34, usunięte „krytyczne” błędy lintiana, budowanie paczek dla najnowszej niestabilnej wersji Debiana.
  • Uaktualnienie programu isledit (wtyczki do programu graficznego Inkscape do tworzenia schematów wizualizacji w SVG); program działa pod Linuksem i pod Windows.
  • Dodano więcej przykładów schematów wizualizacji – kompletny przykład schematu ciepłowni z 4 kotłami.
  • Poprawiono brak ikon programów pod Windows.

Minimalna instalka Cygwin X.Org

Do łączenia się do serwerów SZARP z terminali z Windows w sieci lokalnej używane są emulatory X-terminala. Najczęściej wykorzystywany jest darmowy serwer X.Org z pakietu Cygwin. Plik xorg-setup.exe dostępny do pobrania ze strony projektu SZARP zawiera graficzny instalator pozwalający na podanie adresu IP serwera X. Instalator zawiera tylko niezbędne pliki, dzięki czemu jego rozmiar wynosi tylko 6 MB. Oczywiście może być używany do innych celów, niekoniecznie związanych z oprogramowaniem SZARP.