Procesy przetwarzania danych
Nie musisz znać języków programowania, by samodzielnie tworzyć procesy przetwarzania i wydobywać z danych to, co dla Ciebie i Twojego zakładu produkcyjnego najważniejsze. Pomoże Ci w tym kreator ETL (ang. Extraction, Transformation and Load), w którym za pomocą elementów (tzw. węzłów przetwarzania) działających na zasadzie „przeciągnij i upuść” (drag&drop) stworzysz samodzielnie (lub ze wsparciem naszych ekspertów) własny proces. Możesz również skorzystać z gotowych szablonów wbudowanych w system IPLAS.
Po uruchomieniu procesu z napływających strumieni danych przemysłowych otrzymasz to, co dla Ciebie najważniejsze – wiedzę, która pozwoli Ci usprawnić produkcję w Twoim zakładzie. To tutaj utworzysz indywidualny system alarmów i powiadomień, zweryfikujesz i zagregujesz dane. A co, jeśli w pewnym momencie stwierdzisz, że w ramach jednego procesu chciałbyś analizować coś innego? Nie ma problemu! Możesz go elastycznie modyfikować. Zobacz, jak to działa.
Przykład budowy procesu ETL
Zobacz, jak zbudowaliśmy prosty proces ETL, który generuje, a następnie zapisuje do bazy danych sumy wyprodukowanych sztuk w ramach zmiany dla konkretnej maszyny.
Kilka słów wyjaśnienia do powyższego materiału wideo:
- Dane wejściowe
- Wykorzystane węzły i ich zastosowanie
- Efekt
Zmienna określająca liczbę sztuk wyprodukowanych w pewnych okresach.
Węzeł 1. Kanał wejściowy, określa się w nim dane wejściowe oraz ich źródło, przekazuje zmienne na podstawie których tworzona jest pozostała część procesu przetwarzania.
Węzeł 2. Stempel czasowy, użytkownik określa dodatkowe zmienne tworzone na podstawie czasu wygenerowania ramek. Węzeł dodaje do procesu przetwarzania zmienne dotyczące czasu.
Węzeł 3. Zmiany pracy, ustala się w nim godziny pracy poszczególnych zmian oraz wybiera zmienne wynikowe, które ich dotyczą. Generuje nowe zmienne pozwalające określić dane dotyczące zmian.
Węzeł 4. Grupowanie, wybiera się w nim typ agregacji oraz zmienne grupujące dzielące dane na pewne grupy np. sumę wartości zmiennych dla podanych numerów zmian pracy.
Węzeł 5. Tabela wynikowa, tutaj określa się bazę danych, miejsce docelowe oraz przypisuje zmienne do konkretnych kolumn. Na podstawie danych zapisanych w bazie generowane są analizy.
Efektem są przetworzone, znajdujące się w bazie danych wartości, potrzebne do utworzenia analizy. Dane przedstawiają sumę wyprodukowanych sztuk dla poszczególnych zmian.
Dane wygenerowane przez proces ETL można zaprezentować na analizie, co zostało pokazane na filmie .
Dokumentacja
W graficznym kreatorze ETL wybierasz, a następnie przeciągasz do obszaru roboczego elementy, z których tworzysz własny proces przetwarzania danych. Te wszystkie „bloczki”, „kwadraciki” czy jakkolwiek inaczej je określisz, to tzw. węzły przetwarzania. Można je podzielić na 4 kategorie ze względu na działanie: węzły wejściowe, filtry, transformacje i węzły wynikowe. Poniżej znajdziesz opis, dostępne opcje oraz przykład zastosowania każdego z nich. Jeśli coś jest dla Ciebie nadal niejasne, nie wahaj się do nas napisać: iplas@spiid.pl.
- Węzły wejściowe
- Filtry
- Transformacje
- Węzły wynikowe
Węzły wejściowe (Kanał wejściowy), odpowiadają za wprowadzenie zmiennych wejściowych do procesu przetwarzania.

Kanał wejściowy
OPIS:
Węzeł „Kanał wejściowy” służy do wprowadzenia ramek ze zmiennymi do procesu przetwarzania. Pozwala na wybór instalacji, kanału oraz wybranie konkretnych zmiennych. Węzeł jest wymagany w każdym przetwarzaniu.
PRZYKŁAD ZASTOSOWANIA:
W celu poprawnej konfiguracji węzła „Kanał wejściowy” w pierwszym kroku należy wybrać instalację, w tym przypadku „Linie_Produkcyjne” oraz kanał np. „Linia_nr_1”. Następnie wymagane jest zaznaczenie zmiennych potrzebnych użytkownikowi w dalszym procesie przetwarzania, tutaj – Sztuki i Kod_produktu. Po zapisaniu konfiguracji do kolejnego węzła będą przesyłane ramki ze zmiennymi Sztuki oraz Kod_produktu.
OPCJE:
Nazwa | Opis |
---|---|
Instalacja | Logiczne odwzorowanie lokalizacji w której ustanawiane są połączenia między źródłem danych (np. sterownikiem PLC). |
Kanał | Połączenie pomiędzy źródłem danych, a instalacją na serwerze IPLAS, za pomocą którego przesyłane są dane. |
Ramki | Niewymienione w węźle. Dane przesyłane są do przetwarzania za pomocą ramek zawierających zmienne z konkretnymi wartościami. |
Zmienne | Elementy przetwarzania, przechowujące konkretne wartości.Części składowe ramek. |
Filtry (Ostatnie ramki, Wartości wymagane), pozwalają na utrzymanie tylko bieżących danych, optymalizują przetwarzanie.

Wymagane
OPIS:
Filtr „Wymagane” pozwala na określenie zmiennych, które warunkują przepuszczenie danych do kolejnych węzłów.
Każda ramka danych, dla której w wyszczególnionych kolumnach wymaganych będzie brakowało wartości (w dowolnej wyszczególnionej zmiennej), zostanie odrzucona przez filtr. Oznacza to, że cała ramka nie zostanie przekazana do kolejnych węzłów.
W konfiguracji węzła istnieje możliwość odwrócenia opisanej operacji. W takim przypadku ramki, w których dla zmiennych wymaganych nie zostały określone wartości, zostaną przekazane do następnych węzłów przetwarzania.
PRZYKŁAD ZASTOSOWANIA:
Jeżeli w filtrze ustawimy wymagane zmienne A i B, to każda ramka, która nie będzie posiadała określonej wartości A lub B zostanie odrzucona przez filtr. Wartość lub jej brak w zmiennej C nie będzie mieć wpływu na działanie filtra.
Włączenie trybu odwrotnego spowoduje, że każda ramka, nie posiadająca określonej wartości A i B zostanie przekazana do kolejnego węzła. W przeciwnym razie, nie zostanie przekazana dalej. Wartość lub jej brak w zmiennej C nie będzie miała wpływu na działanie filtra.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Jeśli zaznaczymy zmienną, która będzie przesyłała dane, filtr pozwoli przepuścić wszystkie pozostałe zmienne do dalszego bloku. W innym przypadku nie przepuści żadnej wartości. |
Włączony tryb odwrotny | Checkbox służący do odwrócenia sytuacji – blok będzie przesyłał zmienne dalej, tylko w wypadku, w którym zaznaczona zmienna nie posiada wartości. |

Stare Ramki
OPIS:
Filtr „Stare Ramki” pozwala na odfiltrowanie ramek, na podstawie limitu czasu życia ramki podanego przez użytkownika w konfiguracji węzła. Jeśli różnica czasu między aktualnym czasem zegarowym, a stemplem czasowym przetwarzanej ramki jest większa niż limit czasu życia ramki podany w węźle, ramka zostanie odrzucona.
Istotą działania filtra „stare ramki” jest przekazanie tylko bieżących ramek. Filtr znajduje zastosowanie wszędzie tam, gdzie konieczne jest zwizualizowanie aktualnych danych. Przykładem wykorzystania może być miernik, na którym widoczna jest temperatura pieca w danej chwili. Wówczas dane sprzed dziesięciu minut nie są istotne, do zobrazowania analizy tego odczytu.
PRZYKŁAD ZASTOSOWANIA:
Stare ramki ze zmiennymi A, B i C zostaną przekazane do kolejnych węzłów przetwarzania tylko wtedy, gdy nie będą starsze od czasu bieżącego o więcej niż minutę.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Do kolejnego węzła przetwarzania zostaną przekazane tylko te ramki, dla których różnica między nimi, a czasem bieżącym jest mniejsza niż „limit czasu życia ramki”. |
Limit czasu życia ramki | Pole tekstowe określające maksymalną różnicę czasu między bieżącą a poprzednią ramką w określonej jednostce czasu. |
Określenie jednostki czasu | Milisekunda, sekunda, minuta, godzina, dzień |

Ostatnie Ramki
OPIS:
Filtr „Ostatnie Ramki” pozwala na odfiltrowanie ramek w ilości jaka została podana w konfiguracji węzła. Z pakietu ramek, które trafiają do węzła, użytkownik definiuje ilość najświeższych ramek jaka ma zostać przekazana do kolejnych węzłów przetwarzania.
Filtr posiada również opcję aktywacji lub dezaktywacji – checkbox „Filtr aktywny”.
Filtr służy do optymalizacji przetwarzania. Pozwala na ograniczenie ilości danych, na jakich operujemy w procesie przetwarzania, w celu zwiększenia jego wydajności.
PRZYKŁAD ZASTOSOWANIA:
Do kolejnego węzła przekazane zostanie tylko ostatnie 15 ramek ze zmienną A. W przypadku gdy odznaczymy checkbox „Filtr aktywny”, filtr zostanie zdezaktywowany i przekaże wszystkie ramki dalej. Filtr znajduje zastosowanie w przetwarzaniach używanych do zasilenia analiz przedstawiających bieżącą sytuację np. miernik przedstawiający aktualną temperaturę.
OPCJE:
Nazwa | Opis |
---|---|
Ostatnie ramki | Liczba ramek przekazywanych do kolejnego węzła przetwarzania |
Filtr aktywny | Aktywuje lub dezaktywuje filtr |
Zmienne wejściowe | Zmienne, których ramki zostaną przekazane do kolejnego węzła |
Transformacje (Grupowanie, Wyznaczanie przyrostów), przetwarzają dane, generują nowe zmienne na podstawie zmiennych wejściowych.

Generator HeartBeat
OPIS:
Węzeł „Generator HeartBeat” służy do podtrzymywania informacji o działaniu przetwarzania. W przypadku, w którym ramki z danymi pojawiają się rzadko, węzeł generuje ramki nie zawierające wartości zmiennych. W konfiguracji należy określić opóźnienie – odstęp czasu między czasem obecnym, a momentem wygenerowania ramki, interwał – odstęp czasu pomiędzy generowanymi ramkami, jednostkę w ramach której zdefiniowano opóźnienie, oraz interwał. Dodatkowo można zaznaczyć opcję „Opóźnienie adaptacyjne”, które pozwoli na automatyczne dostosowanie wielkości opóźnienia na podstawie danych o częstotliwości pojawiania się kolejnych ramek z danymi, opóźnienie nigdy nie będzie mniejsze niż to podane przez użytkownika.
„Failmode” – w przypadku, w którym ramki zawierające dane przyszłyby z opóźnieniem większym niż przewidziane opóźnienie generowanych „heartbeatów” (pustych ramek), nastąpi zatrzymanie się przetwarzania. Przy wyłączonej opcji, przetwarzanie będzie działało dalej, ale czasy wygenerowania się ramek zostaną sztucznie zamienione w celu zachowania chronologii odczytów.
PRZYKŁAD ZASTOSOWANIA:
Na przedstawionym przykładzie zdefiniowano Opóźnienie o wartości 5, interwał równy 1, oraz jednostkę minuta. Oznacza to, że gdy w ciągu ostatnich pięciu minut nie pojawi się żadna ramka, węzeł wygeneruje pustą ramkę o czasie wygenerowania opóźnionym o pięć minut w stosunku do czasu bieżącego. Będzie to robił co minutę, o ile do przetwarzania nie zostanie dostarczona ramka z danymi. Wówczas cykl rozpocznie się od początku.
Zaznaczona opcja „Opóźnienie adaptacyjne” wpłynie na czas wygenerowania ramek bez wartości. Według przykładu, puste ramki zaczną pojawiać się najwcześniej po 5 minutach od pojawienia się ostatniej ramki zawierającej wartość. Funkcja sprawi, że w przypadku większego opóźnienia w dostarczeniu danych czas oczekiwania na spóźnione ramki wydłuży się, następnie, gdy zaczną one przychodzić w krótszym czasie, opóźnienie adaptacyjne będzie się stopniowo skracać do zdefiniowanej wyżej przez użytkownika wartości opóźnienia.
Zaznaczona opcja „failmode” sprawi, że w przypadku, gdy nastąpi problem z ustaleniem chronologii ramek z danymi oraz pustych ramek przetwarzanie zatrzyma się. Taka sytuacja może zaistnieć, gdy z jakiegoś powodu ramki z danymi zostaną dostarczone z opóźnieniem większym, niż przewidziany czas opóźnienia generowania pustych ramek.
OPCJE:
Nazwa | Opis |
---|---|
Opóźnienie | Liczba całkowita, czas w jakim mają być generowane puste ramki w stosunku do czasu bieżącego, jednostkę czasu wybiera się w sekcji jednostka. |
Opóźnienie adaptacyjne | Funkcjonalność pozwalająca na automatyczne wydłużanie lub skracanie opóźnienia w stosunku do czasu bieżącego, zależnie od opóźnienia z jakim dostarczane są ramki. Opóźnienie to nigdy nie będzie mniejsze od opóźnienia zdefiniowanego przez użytkownika. |
Interwał | Odstęp czasu pomiędzy generowanymi ramkami, jednostkę czasu wybiera się w sekcji jednostka. |
Failmode | Powoduje zatrzymanie przetwarzania, w przypadku wystąpienia problemu z ustaleniem chronologii ramek. |
Jednostka | Jednostka czasu w ramach której zostały podane interwał oraz opóźnienie. Dostępne jednostki to: milisekunda, sekunda, minuta, godzina, dzień. |

Grupowanie
OPIS:
Węzeł „Grupowanie” pozwala na wyznaczenie nowych zmiennych na podstawie zmiennych wejściowych, w pewnych określonych przez użytkownika grupach, na przykład dni/miesięcy/linii produkcyjnej. Do poprawnej konfiguracji węzła potrzebne są przynajmniej dwie zmienne – agregowana oraz grupująca.
PRZYKŁAD ZASTOSOWANIA:
Według podanego przykładu, do kolejnego węzła zostaną przekazane 4 zmienne. Zmienne AVG, COUNT, MAX oraz godz. Zmienne AVG, COUNT, MAX będą wyliczane dla konkretnych wartości zmiennej godz. Oznacza to, że wartości zmiennych będą zmieniały się w ramach każdej z godzin (skutkuje to osobną średnią/sumą/innym rodzajem agregacji dla każdej godziny).
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Węzeł potrzebuje przynajmniej dwóch zmiennych wejściowych – do agregacji oraz do grupowania. Na ich podstawie użytkownik otrzyma zmienne wynikowe z wartością zależną od funkcji agregującej. |
Agregacja | Użytkownik wybiera zmienną wejściową, a następnie funkcję agregującą oraz nazwę wynikową zmiennej, która ma powstać na podstawie zmiennej wejściowej. |
Średnia | Zlicza średnią ze zmiennych przychodzących w pakiecie ramek, zmienna wynikowa to zawsze liczba zmiennoprzecinkowa. Funkcja dostępna w przypadku, gdy typem danych zmiennej jest liczba całkowita lub liczba zmiennoprzecinkowa. |
Zlicz | Zlicza ilość przychodzących ramek w pakiecie. Zmienna wynikowa to zawsze liczba całkowita. Dostępna dla każdego typu danych. |
Pierwsza wartość | Ramka wychodząca, zawiera pierwszą wartość zmiennej jaka została otrzymana w pakiecie ramek. Zmienna wynikowa będzie o tym samym typie danych co zmienna wejściowa. |
Ostatnia wartość | Ramka wychodząca, zawiera ostatnią wartość zmiennej jaka została otrzymana w pakiecie ramek. Zmienna wynikowa będzie o tym samym typie danych co zmienna wejściowa. |
Maksymalna wartość | Ramka wychodząca zawiera największą wartość zmiennej w dostarczonym pakiecie ramek. W przypadku tekstu największą wartością jest pierwsza wartość w kolejności alfabetycznej. Funkcja niedostępna dla zmiennych wejściowych o typach danych wartość logiczna oraz tablica. |
Minimalna wartość | Ramka wychodząca zawiera najmniejszą wartość zmiennej w dostarczonym pakiecie ramek. W przypadku tekstu wartością najmniejszą jest ostatnia wartość w kolejności alfabetycznej. Funkcja niedostępna dla zmiennych wejściowych o typach danych wartość logiczna oraz tablica. |
Suma | Dodaje wartości zmiennych przychodzących w pakiecie ramek. Zmienna będzie o tym samym typie danych co zmienna wejściowa. Funkcja jest dostępna dla zmiennych o typach danych liczba całkowita oraz liczba zmiennoprzecinkowa. |
Najczęściej występujące | Najczęściej występujące wartości zmiennej w przychodzącym pakiecie ramek. Dostępne dla wszystkich typów danych. |
Grupowanie | Zmienne na podstawie których zostanie przeprowadzone grupowanie. Nie mogą to być zmienne użyte do agregacji. |

Kalkulator
OPIS:
Węzeł „Kalkulator” pozwala na przeprowadzanie obliczeń, przetwarzanie informacji czy tworzenie nowych zmiennych, przez co znajduje wiele zastosowań.
PRZYKŁAD ZASTOSOWANIA:
tabela zmienne wejściowe pozwala zobaczyć wszystkie przychodzące w ramkach zmienne, oraz ich typy danych.
DOSTĘPNE FUNKCJE KALKULATORA:
Dostępne funkcje kalkulatora to tabela zawierająca gotowe do użycia w “Polu definiowania formuł” funkcje, które po wybraniu można umieścić w miejscu kursora za pomocą przycisku “wstaw” bez potrzeby kopiowania.
Funkcje matematyczne:
- math:round(value,scale) – zaokrągla liczbę o podaną ilość miejsc po przecinku,
- math:power(value,exponent) – potęguje liczbę o podaną wartość wykładnika potęgi.
Konwersje typu zmiennych:
- string:toString(input) – konwertuje podaną wartość liczbową na wartość tekstową,
- array:toString(array,separator) – konwertuje tablicę na tekst,
- array:toJSON(array) – konwertuje tablicę do JSON,
- array:toArray(string) – konwertuje zmienną tekstową do tablicy stringów używając domyślnych separatorów “,;”,
- array:toArray(string,string) – konwertuje zmienną tekstową do tablicy stringów używając podanych separatorów,
- array:toArray(string,separators,trimTokens,string) – konwertuje zmienną tekstową do tablicy stringów używając podanych separatorów,
- date:parseDate(dateString,pattern) – zwraca datę utworzonej z zmiennej tekstowej według podanego formatu daty,
- date:parseTimestamp(timestampString,pattern) – zwraca znacznik czasu utworzony z zmiennej tekstowej według podanego formatu.
Operacje na zmiennych czasu:
- date:addDaysToDate(date,numberOfDays) – dodaje liczbę dni do podanej daty,
- date:addDaysToTimestamp(timestamp,numberOfDays) – dodaje liczbę dni do podanego znacznika czasu,
- date:addHoursToTimestamp(timestamp,numberOfHours) – dodaje liczbę godzin do podanego znacznika czasu,
- date:addMinutesToTimestamp(timestamp,numberOfMinutes) – dodaje liczbę minut do podanego znacznika czasu,
- date:addSecondsToTimestamp(timestamp,numberOfSeconds) – dodaje liczbę sekund do podanego znacznika czasu,
- date:getYear(timestamp) – zwraca rok z podanego znacznika czasu,
- date:getMonth(timestamp) – zwraca miesiąc z podanego znacznika czasu,
- date:getWeek(timestamp) – zwraca numer tygodnia z podanego znacznika czasu,
- date:getDay(timestamp) – zwraca dzień z podanego znacznika czasu,
- date:getHour(timestamp) – zwraca godzinę z podanego znacznika czasu,
- date:getMinute(timestamp) – zwraca minuty z podanego znacznika czasu,
- date:getSecond(timestamp) – zwraca sekundy z podanego znacznika czasu,
- date:getYear(date) – zwraca rok z podanej daty,
- date:getMonth(date) – zwraca miesiąc z podanej daty,
- date:getWeek(date) – zwraca numer tygodnia z podanej daty,
- date:getDay(date) – zwraca dzień z podanej daty,
- date:truncateToDate(timestamp) – przycina znacznik czasu do formatu daty,
- date:toDate(timestamp) – konwertuje znacznik czasu do daty,
- date:diffTS(ts1,ts2) – oblicza różnicę czasu w milisekundach pomiędzy podanymi znacznikami czasu,
- date:diffTSWithWeeklyBreaks(ts1,ts2,exclusionArray) – oblicza różnicę czasu w milisekundach pomiędzy podanymi znacznikami czasu nie obejmując cotygodniowych przerw.
Funkcje Konwersji zmiennych czasu:
- date:formatDate(date) – konwertuje datę do tekstu używając formatu “yyyy-MM-dd”,
- date:formatDate(date,format) – konwertuje datę do tekstu używając podanego formatu,
- date:formatTime(timestamp) – konwertuje znacznik czasu do tekstu używając formatu “HH:mm:ss”,
- date:formatTimestamp(timestamp) – konwertuje znacznik czasu do tekstu używając formatu “yyyy-MM-dd HH:mm:ss”,
- date:formatDate(timestamp,format) – konwertuje znacznik czasu do tekstu używając podanego formatu,
Szacowanie danych:
- prod:estimateQty(startTime,endTime,actTime,soFar) – szacuje ilość wyprodukowanych sztuk po upływie podanego okresu czasu,
- prod:estimateEndTime(startTime,actTime,expectedQty,actualQty) – szacuje czas zakończenia produkcji,
- prod:avgProductionSpeed(startTime,endTime,quantity) – szacuje średnią prędkość produkcji w [sztukach/godzinę].
Funkcje związane z słownikami:
- dict:checkKey(dicionaryId,key) – sprawdza, czy podany klucz istnieje w słowniku,
- dict:get(dicionaryId,key) – zwraca nazwę dla podanego klucza,
- dict:get(dicionaryId,key,defaultValue) – zwraca nazwę dla podanego klucza, lub daną wartością domyślną w przypadku gdy taki klucz w słowniku nie istnieje.
Wstawianie znaków specjalnych:
- string:cr() – zwraca “\r” (carriage return),
- string:lf() – zwraca “\n” (line feed),
- string:eol() – zwraca “\r\n” (end of line).
Kodowanie base64:
- string:encodeBase64(string) – koduje zmienną tekstową do base64,
- string:decodeBase64(input) – dekoduje base64 do typu zmiennej tekstowej.
JĘZYK PROGRAMOWANIA:
Język programowania kalkulatora jest podobny do Javy, lecz ma kilka odstępstw:
- Przy definiowaniu nowej zmiennej nie należy podawać jej typu, kalkulator sam przydziela jej postać.
- Nie należy stosować znaku końca linii (eol)
- Dostępne operacje matematyczne: dodawanie (“+”), odejmowanie (“-”), mnożenie(“*”), dzielenie (“/”), a także reszta z dzielenia (“%”). Należy pamiętać, że znak “^” to nie potęgowanie, a znak logiczny xor!
W kalkulatorze można zastosować short if (“ condition ? true : false”), lecz należy pamiętać, aby użyte zmienne były zdefiniowane w poprzednich węzłach i znajdowały się w tabeli “zmienne wejściowe”.
Na powyższym przykładzie widzimy zastosowanie takiego wyrażenia, jeżeli liczbaImpulsow będzie równa 10 to zmiennaTekstowa = “prawda”, jeżeli nie zmiennaTekstowa = “fałsz”
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Węzeł przesyła dalej ramki ze zmiennymi wejściowymi, dokonując na nich zmiany lub dodając zmienne zdefiniowane przez użytkownika (w języku programistycznym podobnym do Java). |
Nazwa wynikowa | Nazwa zmiennej, powstałej w wyniku przetwarzania w węźle. Musi być unikalna w obrębie całego procesu przetwarzania. Inaczej istniejąca już zmienna o tej nazwie zostanie nadpisana. |
Przycisk “Pokaż” | Rozwija tabelę zawierającą dostępne do użycia funkcje. |
Przycisk “Wstaw” | Pozwala na umieszczenie funkcji z tabeli na “Pole definiowania formuł” bez kopiowania. |
Przycisk “Ukryj” | Ukrywa tabelę dostępnych funkcji, aby usprawnić korzystanie z kalkulatora. |

Łączenie strumieni danych
OPIS:
Węzeł „Łączenie strumieni danych” do poprawnego działania wymaga podłączenia dwóch węzłów z różnymi zmiennymi wejściowymi. Łączy on ramki na podstawie pierwszego wejścia. Pozwala to na przykład na zapisanie dwóch równolegle działających przetwarzań do jednej tabeli wynikowej. Nazwy zmiennych wejściowych w poszczególnych przetwarzaniach muszą być od siebie różne.
PRZYKŁAD ZASTOSOWANIA:
Na podstawie pierwszego wejścia, węzeł będzie generował ramki zawierające kolumny z drugiego wejścia. Oznacza to, że gdy dostarczona zostanie ramka z drugiego wejścia i nie będzie można dopasować do niej ramki z wejścia pierwszego, ramka ta zostanie pominięta. Jako zmienne wyjściowe przekazywane będą ramki zawierające kolumny z obu wejść.
Na rysunku poniżej przedstawione zostały trzy sytuacje, obrazujące w jaki sposób mogą być generowane ramki z danymi z dwóch wejść.
W pierwszym przypadku ramki z obu wejść przychodzą w podobnych odstępach czasowych, jednak ramki z wejścia drugiego są nieznacznie opóźnienie w stosunku do ramek z wejścia drugiego. W zaistniałej sytuacji ostatnia ramka z pierwszego wejścia będzie łączyć się z ostatnią ramką z wejścia drugiego.
Innym przypadkiem może być sytuacja, w której ramki z danymi będą przychodzić z różną częstotliwością- tak jak na rysunku. Gdy częstotliwość generowania ramek z wejścia drugiego jest rzadsza niż z wejścia pierwszego. W wyniku takiego generowania ramek z danymi kolejne ramki z wejścia pierwszego będą łączyć się z ostatnią ramką z wejścia drugiego, do momentu, aż na drugim wejściu nie zostanie wygenerowana nowa ramka.
Odwrotna sytuacja będzie miała miejsce, gdy ramki z wejścia pierwszego będą generowane rzadziej, niż ramki z wejścia drugiego. W takim przypadku ramki z wejścia drugiego, które zostały wygenerowane w czasie, gdy nie dostarczono żadnej ramki z wejścia pierwszego, nie będą łączyć się z innymi ramkami i zostaną pominięte.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Węzeł wymaga podłączenia 2 węzłów ze zmiennymi wejściowymi. |
Wejście pierwsze | Na podstawie jego ramek będą generowane ramki z kolumnami obu wejść. |
Wejście drugie | Drugie wejście zawierające ramki ze zmiennymi wejściowymi, jego ramki przypisywane są do ramek wejścia pierwszego. |
Zmienne wynikowe | Ramki zawierające kolumny obu wejść, ramki wyjściowe tworzone są na podstawie ramek przychodzących w wejściu pierwszym. |

Okno agregacji
OPIS:
Węzeł „Okno agregacji” pozwala na zdefiniowanie okna czasowego, wyznaczenie nowych zmiennych agregowanych w podanym oknie oraz grupowanie. W wyniku zastosowania węzła użytkownik może otrzymać różne zmienne wynikowe (np. średnia, minimalna wartość, zliczenie ramek z daną zmienną), w ramach zdefiniowanego okna czasu(czas wstecz od bieżącej chwili) i zmiennej grupującej. Pozwala to na przeprowadzenie szczegółowej analizy danych w danym okresie jak dzień, miesiąc czy godzina (rozmiar okna czasu) oraz w kontekście np. Linii produkcyjnej (zmienna grupująca zawierająca nazwę linii). Do poprawnej konfiguracji wymagane jest zdefiniowanie okna czasu i wybranie zmiennej agregowanej w ramach podanego czasu. W odróżnieniu od węzła „Grupowanie”, „Okno agregacji” przekazuje dalej wszystkie zmienne wejściowe oraz zmienne utworzone w ramach agregacji.
PRZYKŁAD ZASTOSOWANIA:
W wyniku działania tego węzła, kolejny węzeł otrzyma wszystkie zmienne wejściowe oraz pojawią się zmienna AVG będąca średnią z dostarczonych w ciągu ostatniego dnia zmiennych A, zmienna SUM – wynik dodawania wartości B z ostatnich dwudziestu minut oraz zmienna SUM_5, zawierającą sumę zmiennych A z ostatnich pięciu przychodzących ramek.
Węzeł umożliwia także zastosowanie operacji grupowania. Na zamieszczonym przykładzie jako zmienną grupującą wybrano zmienną Produkt. Oznacza to, że wartość średnia dla zmiennej AVG oraz wartości sumy dla zmiennych SUM i SUM5 będą wyliczane w ramach tego samego produktu.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Na ich podstawie użytkownik otrzyma zmienne wynikowe z wartością zależną od wybranej funkcji agregującej. Do poprawnego skonfigurowania bloczka wystarczy jedna zmienna. |
Okno czasowe | Czas brany pod uwagę podczas agregacji zmiennych. |
Jednostki w oknie czasowym | Milisekundy, sekundy, minuty, godziny, dni, wiersze (ramki). |
Agregacja | Użytkownik wybiera zmienną wejściową, a następnie funkcję agregującą oraz nazwę wynikową zmiennej, która ma powstać na podstawie zmiennej wejściowej. |
Średnia | Zlicza średnią ze zmiennych przychodzących w pakiecie ramek, zmienna wynikowa to zawsze liczba zmiennoprzecinkowa. Funkcja dostępna w przypadku, gdy typem danych zmiennej jest liczba całkowita lub liczba zmiennoprzecinkowa. |
Zlicz | Zlicza ilość przychodzących ramek w pakiecie. Zmienna wynikowa to zawsze liczba całkowita. Dostępna dla każdego typu danych. |
Pierwsza wartość | Ramka wychodząca, zawiera pierwszą wartość zmiennej jaka została otrzymana w pakiecie ramek. Zmienna wynikowa będzie o tym samym typie danych co zmienna wejściowa. |
Ostatnia wartość | Ramka wychodząca, zawiera ostatnią wartość zmiennej jaka została otrzymana w pakiecie ramek. Zmienna wynikowa będzie o tym samym typie danych co zmienna wejściowa. |
Maksymalna wartość | Ramka wychodząca zawiera największą wartość zmiennej w dostarczonym pakiecie ramek. W przypadku tekstu największą wartością jest pierwsza wartość w kolejności alfabetycznej. Funkcja jest niedostępna dla zmiennych wejściowych o typach danych wartość logiczna oraz tablica. |
Minimalna wartość | Ramka wychodząca zawiera najmniejszą wartość zmiennej w dostarczonym pakiecie ramek. W przypadku tekstu wartością najmniejszą jest ostatnia wartość w kolejności alfabetycznej. Funkcja jest niedostępna dla zmiennych wejściowych o typach danych wartość logiczna oraz tablica. |
Suma | Dodaje wartości zmiennych przychodzących w pakiecie ramek. Zmienna będzie o tym samym typie danych co zmienna wejściowa. Funkcja jest dostępna dla zmiennych o typach danych liczba całkowita oraz liczba zmiennoprzecinkowa. |
Grupowanie | Zmienne na podstawie których zostanie przeprowadzone grupowanie. |

Okres pracy maszyny
OPIS:
Węzeł „Okresy pracy maszyny” służy do uzyskania odpowiednich danych dla analizy typu wykres Gantt. Pozwala na określenie cykli w jakich pracowała maszyna oraz określenie zmiennej alternatywnej, zawierającej dane na temat czasu przestoju. Węzeł na podstawie ramek ze zmienną wybraną jako „zmienna impulsów” generuje i przekazuje do kolejnych węzłów informacje o dacie, nazwie serii, czasie rozpoczęcia, zakończenia okresu pracy oraz o liczbie impulsów.
Określenie czasu pracy maszyny może być rozpatrywane na dwóch płaszczyznach. W przypadku w którym opcja „tylko zmiany” jest wyłączona, w okresie pracy znajdą się wszystkie ramki zawierające zmienną impulsów, dla których różnica między jedną, a kolejną mieści się w limicie czasu. W przeciwnym razie, aby zmienna trafiła do okresu, poza koniecznością spełnienia warunku limitu czasu, wartość zmiennej impulsów musi różnić się w stosunku do poprzedniej zarejestrowanej w okresie.
Użytkownik ma również możliwość zaznaczenia opcji „dzielenie według dat”. Po użyciu tej funkcji, jeśli okres pracy maszyny będzie trwał na przełomie dwóch dat, zostanie rozdzielony na dwa osobne okresy o godzinie 00:00:00, co ułatwi późniejsze filtrowanie na podstawie dat.
PRZYKŁAD ZASTOSOWANIA:
Według podanego przykładu dodano dwie serie danych. Wybrano dla nich zmienne impulsów – linia_A oraz linia_B, po czym je nazwano – Maszyna_A, Maszyna_B. Dla serii Maszyna_A ustalono limit czasu 30 sekund oraz zaznaczono opcję tylko zmiany. Oznacza to, że do jednego okresu pracy zaliczane będą zmienne, dla których różnica czasu między poprzednią ramką, a bieżącą mieści się w zakresie trzydziestu sekund oraz wartość zmiennej impulsów w bieżącej ramce zmieniła się w stosunku do poprzedniej w danym okresie. Dla serii Maszyna_B limit czasu to jedna minuta, a opcja „tylko zmiany” jest wyłączona. Zatem zmienne będą zaliczane do okresów tylko jeśli różnica czasu między dwiema kolejnymi ramkami mieści się w zakresie jednej minuty. W odróżnieniu do serii Maszyna_A różnica wartości zmiennej impulsów nie ma tutaj znaczenia.
Wybrano nazwę serii alternatywnej „STOP”. Zostanie ona wyświetlona na wykresie w przypadku, gdy zmienne impulsów obu serii nie będą spełniały warunków różnicy czasu, lub zmiany wartości (Maszyna_A).
Na przykładzie zaznaczono również opcję „Dzielenie według dat”. Gdyby któryś z okresów zaczynał się jednego dnia, a kończył kolejnego zostanie on podzielony na 2 okresy, co ułatwi późniejsze filtrowanie na podstawie dat.
Ostatnią zaznaczoną opcją jest grupowanie. Wybrano tutaj zmienną grupującą „dzień”. Oznacza to, że wygenerowane zmienne, będą liczone w ramach poszczególnych wartości zmiennej dzień.
Według podanego przykładu zostaną wygenerowane zmienne date (data), seriesName (tekst), startTS (znacznik czasu), endTS (znacznik czasu), pulses (liczba całkowita). Po przypisaniu wszystkich wymienionych zmiennych do miejsca docelowego – używając węzła „Tabela wynikowa”, możliwe jest stworzenie analizy typu „wykres Gantt”.
OPCJE:
Nazwa | Opis |
---|---|
Nazwa serii | Nazwa okresu pracy maszyny dla danej zmiennej impulsów |
Zmienna impulsów | Zmienna traktowana jako impuls. Na podstawie różnicy czasu pomiędzy impulsami generowany jest okres pracy – jeśli różnica mieści się w limicie czasu. |
Tylko zmiany | Impulsy będą brane pod uwagę tylko w przypadku, w którym wartość zmiennej impulsów będzie się zmieniać. |
Limit czasu | Maksymalny czas od dostarczenia ostatniej ramki ze zmienną impulsów do kolejnej, zliczanej do tego samego okresu pracy |
Jednostka czasu | Milisekunda, Sekunda, Minuta, Godzina, Dzień |
Nazwa serii alternatywnej | Nazwa okresu przestoju maszyny |
Dzielenie według dat | W przypadku, gdy okres pracy będzie zaczynał się jednego dnia, a kończył następnego węzeł podzieli go na poszczególne dni. |
Zmienne grupujące | Zmienne w ramach których liczone będą wygenerowane przez węzeł zmienne, np. numer linii, zmiana, brygada, data. W grupowaniu nie można użyć zmiennych o nazwach: date, seriesName, startTS, endTS, pulses. |

Operacje na kolumnach
OPIS:
Węzeł „Operacje na kolumnach” pozwala na:
- zmianę nazwy istniejących kolumn,
- definiowanie wartości stałych,
- oraz na ustalenie wartości domyślnych dla istniejących kolumn.
Zmiana nazwy kolumny powoduje aktualizację jej nazwy i sprawia, że w kolejnych węzłach przetwarzania kolumna ta będzie figurować pod nową nazwą nadaną przez użytkownika. Zabieg ten pozwala w prosty sposób na spersonalizowanie nazw zmiennych w obrębie tworzonego przetwarzania.
W węźle możliwe jest zdefiniowanie nowej zmiennej o wybranym typie danych (wartość logiczna, liczba całkowita, liczba zmiennoprzecinkowa lub tekst) i przypisane jej wartości stałej, która będzie występować w całym utworzonym przetwarzaniu.
Węzeł pozwala także na dopisanie domyślnych wartości do istniejących kolumn (o typie danych wartość logiczna, liczba całkowita, liczba zmiennoprzecinkowa lub tekst). W sytuacji, gdy do istniejącego kanału instalacji zostanie dopisana nowa zmienna, wówczas ramki danych wygenerowane przed jej dopisaniem będą niekompletne. Dzięki określeniu wartości domyślnych w węźle „Operacje na kolumnach” w ramkach gdzie wybrana zmienna nie posiada wartości zostanie wpisana wartość podana przez użytkownika, co pozwoli na poprawne działanie całego przetwarzania
PRZYKŁAD ZASTOSOWANIA:
Konfiguracja węzła „Operacje na kolumnach” podzielona jest na 3 sekcje. W pierwszej z nich możliwa jest zmiana nazwy istniejących kolumn. Po wybraniu zmiennej z poprzedniego węzła użytkownik podaje nową nazwę, która będzie obowiązywać w kolejnych węzłach przetwarzania. Zgodnie z przedstawionym przykładem zmienna A_01 będzie figurować dalej w przetwarzaniu pod nazwą zmienna_1, zmienna C_03 pod nazwą zmienna_3, a zmienna G_07 pod nazwą zmienna_7.
W kolejnej sekcji użytkownik ma możliwość zadeklarowania nowych zmiennych o wybranym przez siebie typie danych i ustalonej wartości stałej. Dostępne są 4 typy danych – wartość logiczna, liczba całkowita, liczba zmiennoprzecinkowa lub tekst.
W ostatniej sekcji użytkownik może nadać wartości domyślne dla poszczególnych kolumn. Oznacza to, że dla ramek z wyżej podanymi zmiennymi, brak wartości zostanie zastąpiony wartością domyślną, zarówno w przypadku przeszłych jak i bieżących ramek. Według przedstawionego przykładu w przypadku, w którym ramki nie będą zawierały wartości w którejkolwiek ze zmiennych (zmienna_A, zmienna_B, zmienna_C lub zmienna_D) brak wartości zostanie zamieniony na podaną przez użytkownika wartość (odpowiednio 9, 9.99, Produkt_C, false).
OPCJE:
Nazwa | Opis |
---|---|
Zmiana nazwy istniejących kolumn | |
Nazwa wynikowa | Wybór zmiennej z poprzedniego węzła, której nazwa ma zostać zmieniona |
Nowa nazwa | Nowa nazwa kolumny nadana przez użytkownika, która będzie występować w obrębie tworzonego przetwarzania |
Wartości stałe | |
Nazwa zmiennej | Pole do zdefiniowania nazwy nowej zmiennej |
Typ | Wybór jednego z 4 typów danych jaki ma przyjąć deklarowana zmienna – wartość logiczna, liczba całkowita, liczba zmiennoprzecinkowa lub tekst. |
Wartość | Wartość stała jaką ma przyjąć definiowana zmienna w zależności od wybranego typu danych. W przypadku wartości logicznej możliwe jest podanie wartości – true/false, 0 lub 1. Dla liczb całkowitych należy podać tylko liczby całkowite, dla zmiennoprzecinkowych – liczby wymierne, a dla tekstu wartość tekstową. |
Wartości domyślne dla istniejących kolumn | |
Nazwa zmiennej | Wybór zmiennej z poprzedniego węzła, dla której mają zostać dopisane domyślne wartości do istniejącej kolumny. W przypadku, gdy nazwa zmiennej została już zmieniona w obrębie konfigurowanego węzła, w polu tym będzie figurować już pod nowo nadaną nazwą. |
Typ | Pole uzupełniane automatycznie na podstawie wyboru dokonanego w polu Nazwa zmiennej. |
Wartość | Ustalenie jaką wartość domyślną ma przyjąć zmienna w zależności od wybranego typu danych. W przypadku wartości logicznej możliwe jest podanie wartości – true/false, 0 lub 1. Dla liczb całkowitych należy podać tylko liczby całkowite, dla zmiennoprzecinkowych – liczby wymierne, a dla tekstu wartość tekstową. |

Powtórz dane
OPIS:
Węzeł „Powtórz dane” znajduje zastosowanie w przypadku, gdy czas pomiędzy przychodzącymi ramkami jest na tyle długi, że analiza nie odwzorowywałaby właściwie kontrolowanego procesu. Dzięki użyciu węzła „Powtórz dane” możliwe jest ustalenie interwału, w czasie którego węzeł będzie powtarzał przesyłanie ramek zawierających ostatnią zanotowaną wartość.
Węzeł „Powtórz dane” zawiera również opcję „HB mode”, która sprawia że wysyłane są puste ramki, zamiast ramek z powtórzoną zmienną. Daje to informację kolejnym węzłom przetwarzania o upływie czasu.
PRZYKŁAD ZASTOSOWANIA:
Jeżeli w węźle ustawiony zostanie interwał 5, w jednostce minuta to o ile nie nadejdzie nowsza ramka danych, to poprzednia ramka będzie powtarzana co 5 minut.
Włączenie trybu „HB mode”, spowoduje wysyłanie pustych ramek, zamiast ramek z powtórzoną zmienną. Dzięki temu pozostałe węzły przetwarzania otrzymają informację o upływie czasu.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Ramka ze zmienną będzie powtarzana co określony interwał. |
Interwał | Czas opóźnienia w stosunku do czasu bieżącego z jakim będą generowane ramki. |
Jednostka | Jednostka w jakiej definiowany jest interwał (milisekunda, sekunda, minuta, godzina, dzień). |
HB mode – HeartBeat mode | Opcja która zmienia powtarzanie ramek ze zmienną, na powtarzanie pustych ramek(ramki zawsze zawierają określenie czasu w którym zostały stworzone). W przypadku w którym wartości miałyby być zliczane/sumowane, lepiej powtórzyć ramkę nie podając kolejnej wartości do działania. Da to informację o upływie czasu, jednocześnie nie fałszując wyniku. |

Przedziały czasu cyklu
OPIS:
Węzeł „Przedziały czasu cyklu” służy do uzyskania odpowiednich danych dla analizy typu wykres Gantt. Konfiguracja węzła jest bardzo zbliżona do „Okresy pracy maszyny”, jednak w przypadku przedziałów czasu cyklu celem jest przedstawienie wydajności konkretnej maszyny zamiast przedstawiania okresów jej pracy lub przestoju.
W węźle określa się:
- Zmienną impulsów – na podstawie wartości tejże zmiennej w danej ramce określa się czy maszyna jest w trakcie pracy, czy przestoju.
- Opcję „Tylko zmiana wartości” – jeśli wartość zmiennej impulsów dla dwóch ramek nie ulegnie zmianie druga nie zostanie naliczona jako czas pracy.
- Opcję dzielenie według dat. Po użyciu tej funkcji, jeśli okres pracy maszyny będzie trwał na przełomie dwóch dat, zostanie rozdzielony na dwa osobne okresy o godzinie 00:00:00, co ułatwi późniejsze filtrowanie na podstawie dat.
- Limit czasu oraz jednostkę interwału – maksymalny odstęp czasu od poprzedniej ramki uznanej jako czas pracy wymagany do zakwalifikowania do danej serii.
- Kod interwału – nazwa serii na wykresie Gantt dla danego interwału.
- Nazwę serii alternatywnej – nazwę serii generującej się w przypadku gdy okres pomiędzy dostarczeniem ramek jest dłuższy niż zdefiniowane limity czasu – czas przestoju.
- Zmienne grupujące – zmienne wejściowe dla których zmienne wynikowe będą podzielone na grupy.
Użytkownik na podstawie wprowadzonych danych otrzymuje zmienne zawierające informacje o dacie, nazwie serii, czasie rozpoczęcia, zakończenia okresu pracy oraz o liczbie impulsów.
PRZYKŁAD ZASTOSOWANIA:
Na podanym przykładzie wybrano zmienną impulsów „MaszynaNr1”, zaznaczono opcję „Tylko zmiana wartości”, oraz dodano 3 zakresy interwałów – Wysoka o limicie czasu 20 sekund, Przecietna o limicie 40 sekund oraz Niska z limitem 1 minuta. Oznacza to, że jeśli kolejne ramki będą dostarczane w odstępie mniejszym niż 20 sekund oraz wartość zmiennej będzie ulegać zmianie, zostaną one zakwalifikowane do serii „Wysoka”, jeśli zostanie przekroczony odstęp 20 sekund i wartość zmiennej ulegnie zmianie, ramka trafi do serii Przecietna, po przekroczeniu 40 sekund i zmianie wartości zmiennej trafią do serii Niska, a po przekroczeniu zdefiniowanej minuty, wygenerowana zostanie seria alternatywna – „Przestoj”.
Jeśli wartość zmiennej nie ulegnie zmianie w kolejnych ramkach, są traktowane tak, jak gdyby nie zostały dostarczone.
Według podanego przykładu zostaną wygenerowane zmienne date (data), seriesName (tekst), startTS (znacznik czasu), endTS (znacznik czasu), pulses (liczba całkowita). Po przypisaniu wszystkich wymienionych zmiennych do miejsca docelowego – używając węzła „Tabela wynikowa”, możliwe jest stworzenie analizy typu „wykres Gantt”.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Lista zmiennych przekazanych z poprzedniego węzła, z których wybierana jedna, na podstawie której wyznaczane będą interwały czasu |
Nazwa kolumny | Wybrana zmienna, dla której wyznaczane są interwały czasu |
Tylko zmiana wartości | Ramka rozpoczyna najkrótszą serię tylko gdy wartość zmiennej impulsów uległa zmianie w stosunku do poprzedniej. |
Dzielenie według dat | W przypadku, gdy przedział czasu pracy będzie zaczynał się jednego dnia, a kończył następnego węzeł podzieli go na poszczególne dni. |
Zakresy interwałów | Sekcja w której użytkownik definiuje limit czasu, kod(nazwę), oraz jednostkę dla limitu czasu w danym interwale. |
Kod interwału | Nazwa interwału |
Limit czasu | Liczba całkowita wyrażająca limit czasu, w którym musi zmieścić się kolejna ramka by trafić do danej serii. |
Jednostka czasu | Milisekunda, Sekunda, Minuta, Godzina, Dzień |
Nazwa serii alternatywnej | Nazwa okresu przestoju maszyny |
Zmienne grupujące | Zmienne w ramach których liczone będą wygenerowane przez węzeł zmienne, np. numer linii, zmiana, brygada, data. W grupowaniu nie można użyć zmiennych o nazwach: date, seriesName, startTS, endTS, pulses. |

Pusta transformacja
OPIS:
Węzeł „Pusta transformacja” przesyła ramki dalej, nie wprowadzając w nich żadnych zmian.
PRZYKŁAD ZASTOSOWANIA:
Można w nim zobaczyć wszystkie przychodzące w ramkach zmienne, oraz ich typy danych.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Węzeł przesyła ramki dalej nie dokonując w nich zmian. |

Różnica czasu
OPIS:
Węzeł „Różnica czasu” wyprowadza nową zmienną określającą w milisekundach różnicę czasu pomiędzy poszczególnymi przychodzącymi ramkami. Ponadto węzeł umożliwia grupowanie na podstawie wyznaczonych zmiennych wejściowych (różnice czasu są dzielone na grupy według wartości wybranej zmiennej, różnice liczone są dla ramek należących do tej samej grupy). Funkcja grupowania nie jest wymagana do poprawnego działania konfiguracji węzła.
PRZYKŁAD ZASTOSOWANIA:
Do zmiennej wynikowej będą zapisywane różnice czasu między ramkami w ramach wartości zmiennej Linia_1. Różnice czasu są dzielone na grupy – w tym przypadku będą liczone osobno dla poszczególnych wartości zmiennej Linia_1. Przykładowo dla zmiennej Linia_1 równej 4 różnica może wynosić 3000 milisekund, po zmianie wartości zmiennej Linia_1na 5 różnica nie będzie już brana pod uwagę, ponieważ zaczynamy obliczać różnicę dla zmiennej Linia_1 o wartości 5.
W przypadku, gdy w sekcji „Zmienne grupujące” nie zostanie wybrana żadna zmienna, wówczas różnica czasu będzie obliczana dla każdej kolejnej ramki względem ramki poprzedniej.
OPCJE:
Nazwa | Opis |
---|---|
Nazwa zmiennej | Użytkownik definiuje nazwę zmiennej wyjściowej, zawierającej różnicę czasu pomiędzy ramkami. Zmienna wychodząca to liczba całkowita, określająca ilość milisekund jakie upłynęły od czasu przyjścia poprzedniej ramki do obecnej. |
Zmienne wejściowe | W węźle pod uwagę brane są całe ramki, na ich podstawie wyliczana jest różnica czasu. |
Grupowanie | Użytkownik wybiera zmienną grupującą, której wartości dzielą ramki na zbiory – różnice czasu są obliczane w ramach konkretnego zbioru. |

Stempel czasowy
OPIS:
Węzeł „Stempel czasowy” pozwala na wygenerowanie dodatkowych zmiennych określających czas zarejestrowania ramki. Z jego pomocą można uzyskać zmienne wyjściowe takie jak minuty, sekundy, znacznik czasu, sekwencję czy datę.
PRZYKŁAD ZASTOSOWANIA:
ęzeł „Stempel czasowy” znajduje praktyczne zastosowanie w przetwarzaniu zawierającym węzeł „Zmiana pracy”. Do poprawnego działania węzła „Zmiana pracy” potrzebna jest zmienna o typie danych znacznik czasu, którą można uzyskać przy zaznaczeniu opcji „Data i czas” w węźle „Stempel czasowy”.
Węzeł „Stempel czasowy” może zostać użyty, w sytuacji gdy chcemy znać dokładny czas, lub przyrównać dane w podobnym okresie.
Węzeł „Stempel czasowy” może być także stosowany w przetwarzaniach z użyciem węzłów grupujących, grupując daną zmienną lub zmienne wejściowe w wybranej jednostce czasu. W celu uzyskania potrzebnej jednostki czasu, należy wybrać w konfiguracji adekwatną zmienną wyjściową.
Na przedstawionym przykładzie, zliczane zmienne A będą grupowane na podstawie dni.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Na podstawie czasu zarejestrowania ramek generowane są wybrane przez użytkownika zmienne wyjściowe, zawierające dokładne informacje na temat czasu. |
Nazwa wynikowa | Nazwa zmiennej, powstałej w wyniku przetwarzania w węźle. Musi być unikalna w obrębie całego procesu przetwarzania. |
Data | Data w formacie RRRR-MM-DD. |
Data i czas | Znacznik czasu w formacie RRRR-MM-DD GG-MM-SS. |
Rok | Rok jako liczba całkowita. |
Miesiąc | Miesiąc jako liczba całkowita. |
Dzień | Dzień jako liczba całkowita. |
Godzina | Godzina jako liczba całkowita. |
Minuta | Minuta jako liczba całkowita. |
Sekunda | Sekunda jako liczba całkowita. |
Sekwencja | Wartość przybierana w momencie, gdy więcej niż jedna ramka zostanie zarejestrowana w dokładnie tym samym czasie. Domyślnie wynosi 0, przyjmuje wyższe wartości, w zależności od ilości zarejestrowanych w tym samym czasie ramek. |
Czas w milisekundach | Czas w milisekundach w formie liczby całkowitej. |

Unia
OPIS:
Węzeł „Unia” służy do łączenia zmiennych w ramkach pochodzących z kilku strumieni.
PRZYKŁAD ZASTOSOWANIA:
Po podpięciu do węzła „Unia” kilku kanałów widoczne są w nim wszystkie przychodzące w ramkach zmienne oraz ich typy danych z każdego z podłączonych kanałów. Do zmiennych z pierwszego wejścia należy przyporządkować zmienne z kolejnych wejść, tak, aby ich typy danych były takie same. Kolejność wejść zależy od użytkownika, który może ją modyfikować w dowolny sposób.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Do zmiennych ze źródła wybranego jako pierwsze w kolejności wejść, należy przyporządkować zmienne z pozostałych źródeł. Typy danych zmiennych muszą się ze sobą zgadzać. |
Kolejność wejść | Kolejność porządkowania wejść. Można ją dowolnie modyfikować używając strzałek z lewej strony okna. |

Wyznaczanie
przyrostów
OPIS:
Węzeł „Wyznaczanie przyrostów” wyznacza nowe zmienne, określające różnicę wartości między aktualną, a poprzednią ramką. Pozwala na określenie maksymalnego odstępu czasu między ramkami, z których obliczane są wartości oraz na grupowanie na podstawie dostarczonych zmiennych.
PRZYKŁAD ZASTOSOWANIA:
Do zmiennej C będą zapisywane przyrosty wartości (różnica między poprzednią, a kolejną wartością) zmiennej A w ramach wartości zmiennej Godzina. Przyrosty są dzielone na grupy – w tym przypadku będą liczone osobno dla poszczególnych godzin. O 11:59:59 przyrost może przykładowo wynosić 30, o 12:00:00 ramka z poprzednim przyrostem nie będzie już brana pod uwagę, ponieważ zaczynamy obliczać przyrosty dla zmiennej Godzina o wartości 12. Dodatkowym warunkiem obliczania przyrostów jest różnica czasu pomiędzy obecną, a poprzednią ramką(w tej samej grupie), która nie może wynosić więcej niż 10 minut.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne dla których należy wyznaczyć przyrosty | Użytkownik wybiera zmienne z których chce uzyskać przyrosty, a następnie nadaje nazwy wynikowe dla zmiennych zawierających przyrosty. |
Maksymalny odstęp czasu | Odstęp czasu definiowany przez użytkownika, na podstawie którego wybierane są ramki dla których liczony jest przyrost.Przyrost będzie liczony między pierwszą a ostatnią ramką w zadanym okresie licząc od czasu bieżącego. |
Dostępne jednostki czasu | Sekundy, minuty, godziny, dni. |
Zmienne grupujące | Zmienne na podstawie których zostanie przeprowadzone grupowanie. |

Zbocze sygnału
OPIS:
Węzeł „Zbocze sygnału” pozwala dokonać użytkownikowi analizy zmian kształtu sygnału. W szczególności pozwala na określenie progów górnych i dolnych. Na tej podstawie węzeł rejestruje zmiany i informuje o przekroczeniu zadanych progów. Dzięki temu użytkownik ma możliwość np. monitorowania ile razy w pełni wykonany został proces maszyny, z której pobierane są dane.
PRZYKŁAD ZASTOSOWANIA:
Węzeł „Zbocze sygnału” może znaleźć zastosowanie w sytuacji, kiedy użytkownik nie jest w stanie podać dokładnej wartości, której przekroczenie oznaczałoby wykonanie pełnego cyklu pracy maszyny. „Zbocze sygnału” stwarza możliwość zliczania ilości cykli na podstawie przekroczenia wartości progowych, z progów – dolnego, górnego lub obu z nich, w zależności od potrzeby użytkownika.
Na przedstawionym przykładzie, wybrana została zmienna wejściowa A, określono próg dolny – 10 oraz próg górny – 20. W pierwszym przypadku (dla nazwy wynikowej LiczbaCykli) ustawiono typ zbocza sygnału na rosnące i rodzaj wyniku- suma. Oznacza to, że węzeł będzie zliczał ilość wystąpień sytuacji, w których zarejestruje przekroczenie górnego progu (20), gdy wcześniej przekroczony został próg dolny (10). Natomiast w drugim przypadku (dla nazwy wynikowej MomentCyklu) ustawiono typ zbocza sygnału na opadające i rodzaj wyniku- flaga. Oznacza to, że węzeł będzie zwracał wartość -1 za każdym razem gdy zostanie zarejestrowane przekroczenie dolnego progu (10) , gdy wcześniej przekroczony został próg górny (20).
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Wybór zmiennej dostarczonej z poprzednich węzłów przetwarzania |
Próg dolny | Wartość liczbowa – dolna granica poniżej której zliczane mają być spadki zmiennej |
Próg górny | Wartość liczbowa – górna granica powyżej której zliczane mają być wzrosty zmiennej |
Zbocze sygnału | Rosnące, malejące, oba. Rosnące rejestruje przekroczenie górnego progu, pod warunkiem przekroczenia wcześniej progu dolnego. Malejące rejestruje przekroczenie dolnego progu, pod warunkiem przekroczenia wcześniej progu górnego. Oba rejestruje wartości z obu przypadków. |
Zmienna wynikowa | Podawana przez użytkownika nazwa zmiennej wynikowej. |
Rodzaj wyniku | Flaga lub suma, gdzie flaga jest odzwierciedleniem bieżącej sytuacji, może przybierać wartości -1,0,1. Flaga zwróci wartość -1 gdy zostało zarejestrowane przekroczenie dolnego progu, pod warunkiem przekroczenia wcześniej progu górnego. Flaga zwróci wartość 1 gdy zostało zarejestrowane przekroczenie górnego progu, pod warunkiem przekroczenia wcześniej progu dolnego. Flaga zwróci wartość 0 za każdym razem, gdy nie spełni warunku dla wartości 1 lub -1. Suma to łączna ilość wejść w stany -1 lub 1, w zależności od wyboru zbocza sygnału. |

Zmiana pracy
OPIS:
Węzeł „Zmiana pracy” pozwala na określenie schematu pracy zmianowej w zakładzie produkcyjnym. Na podstawie zmiennej typu znacznik czasu węzeł przesyła ramki zawierające określone przez użytkownika szczegółowe dane, takie jak dokładny czas, numer, czy data rozpoczęcia zmiany pracy.
PRZYKŁAD ZASTOSOWANIA:
W celu poprawnego skonfigurowania węzła „Zmiana pracy”, należy określić schemat zmian pracy, wprowadzając godziny ich rozpoczęcia. Na tej podstawie godziny zakończenia zostaną wygenerowane po użyciu przycisku „Przelicz zmiany”.
Użytkownik powinien wybrać zmienną zawierającą znacznik czasu, spośród dostępnych zmiennych.
Ostatnim krokiem jest wybór, oraz nazwanie zmiennych wynikowych zmiany i zapisanie węzła.
Zgodnie z zaprezentowanym przykładem, na podstawie dostarczonych ramek, węzeł wygeneruje dwie dodatkowe zmienne wyjściowe, zawierające informacje dotyczące daty rozpoczęcia, oraz numery zmiany. Zmienne wyjściowe będą zgodne z utworzonym schematem pracy zmianowej.
OPCJE:
Nazwa | Opis |
---|---|
Schemat pracy zmianowej | |
Rozpoczęcie zmiany [h] | Godzina zdefiniowana przez użytkownika. W celu dodania godziny rozpoczynającą daną zmianę należy użyć przycisku „Dodaj nowy”, wprowadzić godzinę, a następnie zatwierdzić ją przyciskiem „Przelicz zmianę” |
Zakończenie zmiany [h] | Godzina generowana automatycznie na podstawie podanych przez użytkownika godzin rozpoczęcia zmiany. Pojawia się po użyciu przycisku „Przelicz zmianę” |
Wybierz zmienną określającą czas | |
Dostępne zmienne | Dla poprawnego działania węzła niezbędne jest dostarczenie przynajmniej jednej zmiennej typu znacznik czasu. Użytkownik wybiera spośród dostarczonych do węzła zmiennych odpowiednią dla przetwarzania zmienną ze znacznikiem czasu. |
Zmienne wynikowe zmiany | |
Data rozpoczęcia zmiany | Zmienna typu date, podaje datę rozpoczęcia zmiany z dokładnością do dnia w formacie RRRR-MM-DD |
Numer zmiany | Liczba całkowita, określająca numer zmiany na podstawie zdefiniowanego przez użytkownika schematu pracy zmianowej |
Znacznik czasu rozpoczęcia | Zmienna typu timestamp, podaje dokładny czas rozpoczęcia zmiany z dokładnością do milisekundy w formacie RRRR:MM:DD GG:MM:SS.MS |
Znacznik czasu zakończenia | Zmienna typu timestamp, podaje dokładny czas zakończenia zmiany z dokładnością do milisekundy w formacie RRRR:MM:DD GG:MM:SS.MS |
Czas rozpoczęcia (milisekundy) | Liczba całkowita, podaje czas jaki upłynął od 01.01.1970 do czasu rozpoczęcia zmiany w milisekundach (EPOCH) |
Czas zakończenia (milisekundy) | Liczba całkowita, podaje czas jaki upłynął od 01.01.1970 do czasu zakończenia zmiany w milisekundach (EPOCH) |
Węzły wynikowe (Tabela wynikowa), służą do zapisania wyników procesu przetwarzania.

Tabela wynikowa
OPIS:
Węzeł „Tabela wynikowa” jest jednym z dwóch węzłów wyjściowych. Pozwala na wybór bazy danych, do której mają trafić ramki ze zmiennymi.
Użytkownik ma do dyspozycji zarówno bazę wewnętrzną jak i zewnętrzną. W pierwszym przypadku przed rozpoczęciem tworzenia procesu przetwarzania powinno zostać utworzone lub zaimportowane miejsce docelowe, do którego zapisywane będą zmienne. Natomiast przy wyborze bazy zewnętrznej należy pamiętać o utworzeniu odpowiedniej tabeli (w wybranej bazie danych), do której trafiać będą ramki z danymi. Po wyborze miejsca docelowego użytkownik wybiera zmienne, które mają zostać zapisane oraz kolumny do których będą przypisane. Zmienna może zostać oznaczona jako zmienna kluczowa – wartości pozostałych zmiennych będą aktualizowane dla tych samych wartości zmiennej kluczowej (np. tej samej nazwy miesiąca lub linii produkcyjnej).
PRZYKŁAD ZASTOSOWANIA:
Na podanym przykładzie do bazy danych trafią 3 zmienne (l_szt, kod, data). Będzie można znaleźć je w analizach wybierając miejsce docelowe Produkcja_Katowice. Wiersze będą aktualizowane na podstawie kodu produktu oraz daty. Powstaną dzięki temu wiersze z aktualnymi informacjami na temat produktów danego typu, wyprodukowanych danego dnia(dla każdej pary różnych wartości zmiennych kod oraz data otrzymamy osobny wiersz). Gdyby zmienne kluczowe nie zostały wskazane otrzymalibyśmy tyle wierszy, ile zostało zapisanych ramek. Na przykładzie wybrano zakres danych „Kwadrans”. W przypadku ciągłego działania przetwarzania ramki z danymi trafiają do bazy danych na bieżąco. Gdyby jednak zatrzymać przetwarzanie i uruchomić je ponownie np. po godzinie, brane pod uwagę będą tylko dane z ostatnich 15 minut od czasu przyjścia ostatniej ramki.
OPCJE:
Nazwa | Opis |
---|---|
Zmienne wejściowe | Dostarczone ramki trafią do wybranego miejsca docelowego na bazie danych. |
Miejsce docelowe | Tabela na bazie danych, do której trafią ramki ze zmiennymi. |
Zakres danych | W przypadku, gdy do procesu przetwarzania dostarczane są stare, nieistotne dane, możemy je wyfiltrować wybierając okres jaki nas interesuje. |
Zmienna kluczowa | Zmienna w ramach której zliczane są wartości. |
Typ danych | Typ danych zmiennej – musi zgadzać się z typem danych kolumny w miejscu docelowym. |
Zmienne zapisane do miejsca docelowego | Tabela ze zmiennymi dostarczonymi w procesie przetwarzania do tabeli wynikowej. |