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, różnicę, mnożenie albo dzielenie.
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 i inne wartości, których nie da się odczytać jako liczby, nie biorą udziału w obliczeniach.
Bloczek nie obsługuje sterowania grupowego. Nie jest dostępny jako typ odbiorcy w bloczku group-broadcast.
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, div, max, min, mul, 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 liczbowychdiff_smaller_than_bigger: różnica większej i mniejszej z dwóch wartości wejściowych, zawsze nieujemnadiff_tags: różnicatag1 - tag2div: iloraztag1 / tag2max: największa z poprawnie odczytanych wartości liczbowychmin: najmniejsza z poprawnie odczytanych wartości liczbowychmul: iloczyn dwóch wartości wejściowychsum: 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,minisumkażda wartość nieliczbowa jest po prostu pomijana - w trybach
diff_smaller_than_biggeridiff_tagsobie wartości muszą być liczbowe; jeśli którejś nie da się odczytać liczbowo, wynik nie zostanie wyznaczony - w trybach
mulidivobie wartości muszą być liczbowe; jeśli którejś nie da się odczytać liczbowo, na wyjściu pojawi sięnull, a opis bloczka zostanie ustawiony nanull: Failed to read numeric value.
Wymagania dotyczące połączeń:
- dla
avg,max,minisumdo wejścia musi być podłączony co najmniej jeden bloczek; dopuszczalne są więcej niż dwa połączenia - dla
diff_smaller_than_biggerwymagane są dokładnie dwa połączenia wejściowe - dla
diff_tagswymagane są dokładnie dwa połączenia wejściowe i muszą to być dokładnie linietag1oraztag2 - dla
mulwymagane są dokładnie dwa połączenia wejściowe - dla
divwymagane są dokładnie dwa połączenia wejściowe i muszą to być dokładnie linietag1oraztag2
Wejścia oznaczane za pomocą bloczka tag mają znaczenie w trybach diff_tags oraz div.
| Numer i nazwa wejścia | Opis działania |
|---|---|
tag1: Pierwszy operand oznaczony. |
W trybie diff_tags z tego wejścia pobierana jest lewa strona działania tag1 - tag2. W trybie div z tego wejścia pobierana jest dzielna. |
tag2: Drugi operand oznaczony. |
W trybie diff_tags z tego wejścia pobierana jest wartość odejmowana od tag1. W trybie div z tego wejścia pobierany jest dzielnik. |
Dodatkowe zasady działania:
- tryb
avgliczy średnią wyłącznie z tych wejść, z których udało się odczytać wartość liczbową - tryb
sumsumuje wyłącznie poprawne wartości liczbowe - tryby
maximinbiorą pod uwagę wyłącznie poprawne wartości liczbowe - jeśli w trybach
avg,sum,maxalbominnie ma ani jednej poprawnej wartości liczbowej, na wyjściu pojawia sięnull - jeśli w trybach
diff_smaller_than_biggeralbodiff_tagsnie da się odczytać jednej z wymaganych wartości liczbowych, na wyjściu pojawia sięnull - jeśli w trybie
divdzielnik ma wartość0, na wyjściu pojawia sięnull, a opis bloczka przyjmuje postaćnull: Division by zero. - jeśli w trybie
mulalbodivwystąpi przepełnienie arytmetyczne podczas obliczania wyniku, na wyjściu pojawia sięnull, a opis bloczka przyjmuje postaćnull: Multiplication overflow.albonull: Division overflow. - błędy runtime w trybach
mulidivnie zmieniają statusu pracy bloczka; po kolejnej poprawnej zmianie wejść bloczek wraca do zwykłego obliczania wyniku
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_biggeridiff_tagszwracają wynik dokładny w granicach tej precyzjimulidivobcinają wynik do maksymalnie 3 miejsc po przecinkuavgdzieli 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
integeralbodouble - 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:
2518.50
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.
Wyjątek stanowią błędy runtime w trybach mul i div. Wtedy opis przyjmuje postać null: <komunikat>, na przykład:
null: Failed to read numeric value.null: Division by zero.null: Multiplication overflow.null: Division overflow.
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ł. |
Mul requires two connections. |
Tryb mul został wybrany, ale do wejścia nie podłączono dokładnie dwóch źródeł. |
Tag1 and tag2 required. |
Tryb diff_tags albo div 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 = sumi na wejściach dostępne są wartości2,3.5i4, to na wyjściu pojawi się9.5. - Jeśli
operation = avgi poprawne wartości wejściowe to1,2i2, to na wyjściu pojawi się1.666. - Jeśli
operation = maxi do bloczka docierają wartości21,18i tekstopen, to tekst zostanie pominięty, a na wyjściu pojawi się21. - Jeśli
operation = diff_smaller_than_biggeri dwa wejścia mają wartości7oraz10, to na wyjściu pojawi się3. - Jeśli
operation = diff_tags,tag1 = 24.5, atag2 = 20, to na wyjściu pojawi się4.5. - Jeśli
operation = muli dwa wejścia mają wartości2.5oraz4, to na wyjściu pojawi się10. - Jeśli
operation = div,tag1 = 7, atag2 = 2, to na wyjściu pojawi się3.5. - Jeśli
operation = div,tag1 = 7, atag2 = 0, to na wyjściu pojawi sięnull, a opis bloczka zmieni się nanull: Division by zero.. - Jeśli
operation = min, ale wszystkie wejścia mają wartości nieliczbowe, to na wyjściu pojawi sięnull, a opis bloczka zmieni się naUnknown value..