Skip to content

math

Opis

Bloczek math wykonuje proste operacje matematyczne na wartościach liczbowych doprowadzonych do jego wejścia. W zależności od parametru operation może obliczać średnią, sumę, minimum, maksimum albo różnicę.

Bloczek posiada jedno wyjście. Do wejścia można podłączyć wiele źródeł sygnału, ale wymagania dotyczące liczby połączeń zależą od wybranego trybu pracy.

Bloczek akceptuje wyłącznie wartości liczbowe. Wartości logiczne, tekstowe, daty i inne wartości, których nie da się odczytać jako liczby, nie biorą udziału w obliczeniach.

Parametry konfiguracyjne

Nazwa parametru Wartość
Tryb operacji (operation) Parametr obowiązkowy określający rodzaj obliczeń. Dozwolone wartości to: avg, diff_smaller_than_bigger, diff_tags, max, min, sum.
Blokuj powtarzające się wartości (filter_duplicated_values) Obowiązkowa wartość logiczna true albo false. Gdy ustawione jest true, bloczek nie wyśle na wyjście kolejnej wartości identycznej z ostatnio wyemitowaną. Gdy ustawione jest false, wynik zostanie wysłany przy każdym przeliczeniu, nawet jeśli jest taki sam jak poprzednio.

Znaczenie parametru operation:

  • avg: średnia arytmetyczna ze wszystkich poprawnie odczytanych wartości liczbowych
  • diff_smaller_than_bigger: różnica większej i mniejszej z dwóch wartości wejściowych, zawsze nieujemna
  • diff_tags: różnica tag1 - tag2
  • max: największa z poprawnie odczytanych wartości liczbowych
  • min: najmniejsza z poprawnie odczytanych wartości liczbowych
  • sum: suma wszystkich poprawnie odczytanych wartości liczbowych

Obsługa wejścia

Bloczek po każdej zmianie wejściowej przelicza wynik ponownie. Dla wejścia, na którym właśnie pojawiła się nowa wartość, używana jest ta nowa wartość. Dla pozostałych połączeń używane są ich ostatnie zapamiętane wartości.

Obsługiwane są wyłącznie wejścia liczbowe typu całkowitego, zmiennoprzecinkowego, temperatury albo procentu. Wartości nieliczbowe są ignorowane albo powodują brak wyniku, zależnie od wybranego trybu:

  • w trybach avg, max, min i sum każda wartość nieliczbowa jest po prostu pomijana
  • w trybach diff_smaller_than_bigger i diff_tags obie wartości muszą być liczbowe; jeśli którejś nie da się odczytać liczbowo, wynik nie zostanie wyznaczony

Wymagania dotyczące połączeń:

  • dla avg, max, min i sum do wejścia musi być podłączony co najmniej jeden bloczek; dopuszczalne są więcej niż dwa połączenia
  • dla diff_smaller_than_bigger wymagane są dokładnie dwa połączenia wejściowe
  • dla diff_tags wymagane są dokładnie dwa połączenia wejściowe i muszą to być dokładnie linie tag1 oraz tag2

Wejścia oznaczane za pomocą bloczka tag mają znaczenie wyłącznie w trybie diff_tags.

Numer i nazwa wejścia Opis działania
tag1: Pierwszy składnik różnicy. Tylko w trybie diff_tags. Z tego wejścia pobierana jest wartość odejmowana od wyniku końcowego jako lewa strona działania tag1 - tag2.
tag2: Drugi składnik różnicy. Tylko w trybie diff_tags. Z tego wejścia pobierana jest wartość odejmowana od tag1.

Dodatkowe zasady działania:

  • tryb avg liczy średnią wyłącznie z tych wejść, z których udało się odczytać wartość liczbową
  • tryb sum sumuje wyłącznie poprawne wartości liczbowe
  • tryby max i min biorą pod uwagę wyłącznie poprawne wartości liczbowe
  • jeśli w trybach avg, sum, max albo min nie ma ani jednej poprawnej wartości liczbowej, na wyjściu pojawia się null
  • jeśli w trybach diff_smaller_than_bigger albo diff_tags nie da się odczytać jednej z wymaganych wartości liczbowych, na wyjściu pojawia się null

Precyzja i typ wyniku

Bloczek wykonuje obliczenia na wewnętrznej reprezentacji liczbowej z dokładnością do 3 miejsc po przecinku.

Zasady precyzji:

  • sum, max, min, diff_smaller_than_bigger i diff_tags zwracają wynik dokładny w granicach tej precyzji
  • avg dzieli sumę wartości przez liczbę poprawnych wejść przy użyciu dzielenia całkowitego na wewnętrznej reprezentacji, więc wynik jest obcinany do maksymalnie 3 miejsc po przecinku; bloczek nie wykonuje dodatkowego zaokrąglenia

Typ i jednostka wyniku:

  • wyjście ma postać zwykłej wartości numerycznej integer albo double
  • jeśli wynik nie ma części ułamkowej, bloczek zwraca liczbę całkowitą
  • jeśli wynik ma część ułamkową, bloczek zwraca liczbę zmiennoprzecinkową
  • jednostki wejściowe, takie jak temperatura czy procent, nie są zachowywane na wyjściu

Wyjścia bloczka

Bloczek posiada jedno wyjście.

Na wyjściu pojawia się wynik obliczenia wybranego przez parametr operation. Jeśli nie uda się wyznaczyć wyniku zgodnie z zasadami danego trybu, na wyjściu pojawia się null.

Opis statusu bloczka

Opis widoczny pod bloczkiem pokazuje tekstową reprezentację ostatnio obliczonego wyniku.

Przykłady:

  • 25
  • 18.5
  • 0

Jeśli ostatniego wyniku nie da się przedstawić tekstowo, opis przyjmuje postać Unknown value.. Dzieje się tak między innymi wtedy, gdy bieżący wynik jest null.

Błędy widoczne dla użytkownika

Bloczek może pokazywać następujące komunikaty błędów:

Kod błędu Opis błędu
Failed read operation. W konfiguracji brakuje parametru operation albo nie da się go odczytać jako tekst.
Invalid operation. Parametr operation ma wartość spoza obsługiwanej listy.
Missing filter_duplicated_values configuration. W konfiguracji brakuje parametru filter_duplicated_values.
Input disconnected. Do wejścia bloczka nie podłączono żadnego innego bloczka.
Diff requires two connections. Tryb diff_smaller_than_bigger został wybrany, ale do wejścia nie podłączono dokładnie dwóch źródeł.
Tag1 and tag2 required. Tryb diff_tags został wybrany, ale do wejścia nie podłączono dokładnie dwóch linii tag1 i tag2, albo jedna z tych linii przestała być dostępna.

Przykłady działania

  • Jeśli operation = sum i na wejściach dostępne są wartości 2, 3.5 i 4, to na wyjściu pojawi się 9.5.
  • Jeśli operation = avg i poprawne wartości wejściowe to 1, 2 i 2, to na wyjściu pojawi się 1.666.
  • Jeśli operation = max i do bloczka docierają wartości 21, 18 i tekst open, to tekst zostanie pominięty, a na wyjściu pojawi się 21.
  • Jeśli operation = diff_smaller_than_bigger i dwa wejścia mają wartości 7 oraz 10, to na wyjściu pojawi się 3.
  • Jeśli operation = diff_tags, tag1 = 24.5, a tag2 = 20, to na wyjściu pojawi się 4.5.
  • Jeśli operation = min, ale wszystkie wejścia mają wartości nieliczbowe, to na wyjściu pojawi się null, a opis bloczka zmieni się na Unknown value..