comparator
Opis
Bloczek comparator porównuje dwie wartości i zwraca na wyjściu wynik logiczny true albo false.
Bloczek może pracować w dwóch trybach:
- porównanie wartości z wejść
tag1itag2 - porównanie każdej odebranej wartości z jedną stałą wartością zapisaną w konfiguracji
Bloczek obsługuje trzy grupy porównań:
- wartości logiczne
boolzbool - wartości tekstowe
textztext - wszystkie wartości liczbowe między sobą:
integer,float,temperature,percent
Gdy porównanie nie może zostać wykonane, na wyjściu pojawia się null, a opis bloczka pokazuje przyczynę błędu.
Parametry konfiguracyjne
| Nazwa parametru | Wartość |
|---|---|
Operator (operator) |
Parametr obowiązkowy typu tekstowego. Dozwolone wartości to >, >=, <, <=, ==, !=. Dla wartości bool i text poprawne są wyłącznie == oraz !=. |
Histereza (hysteresis) |
Parametr obowiązkowy typu liczbowego. Działa tylko dla porównań liczbowych. Wartość ujemna jest traktowana tak samo jak dodatnia. Parametr określa pełną szerokość strefy nieczułości, a bloczek używa połowy tej wartości po każdej stronie punktu przełączenia. Przykładowo hysteresis = 2 oznacza pasmo +-1. |
Blokuj powtarzające się wartości (filter_duplicated_values) |
Obowiązkowa wartość logiczna true albo false. Gdy ustawione jest true, bloczek nie wyśle ponownie tego samego wyniku true albo false. Gdy ustawione jest false, każda kolejna udana kalkulacja zostanie wysłana na wyjście, nawet jeśli wynik się nie zmienił. Parametr nie blokuje ponownego wysyłania błędów zakończonych wartością null. |
Porównuj ze stałą wartością (compare_with_const_value) |
Parametr opcjonalny typu tekstowego. Tylko wartość true włącza tryb porównywania wejścia z wartością stałą. Brak parametru albo każda inna wartość pozostawia tryb porównywania tag1 z tag2. |
Typ stałej (const_value_type) |
Parametr wymagany tylko wtedy, gdy compare_with_const_value = true. Dozwolone wartości to bool, num, str. |
Stała wartość (const_value) |
Parametr wymagany tylko wtedy, gdy compare_with_const_value = true. Dla bool musi to być tekst true albo false. Dla num musi to być niepusta wartość liczbowa różna od null. Dla str musi to być niepusty tekst. |
Obsługa wejścia
Tryb pracy zależy od parametru compare_with_const_value.
Tryb porównywania tag1 z tag2
W tym trybie bloczek wymaga dokładnie jednego połączenia tag1 oraz dokładnie jednego połączenia tag2. Do wejścia nie mogą być podłączone inne bloczki niż tag.
Zasady działania:
- gdy zmiana przyjdzie z
tag1, zostaje porównana z ostatnią znaną wartością ztag2 - gdy zmiana przyjdzie z
tag2, zostaje porównana z ostatnią znaną wartością ztag1 - jeśli druga strona nie ma jeszcze ostatniej znanej wartości, na wyjściu pojawia się
null
Tryb porównywania ze stałą wartością
W tym trybie każda odebrana zmiana wejściowa jest porównywana z wartością const_value.
Zasady działania:
tag2nie może być podłączonytag1może być użyty jako nazwane wejście danych, ale nie jest wymagany- każda odebrana zmiana jest traktowana jako lewa strona porównania, a skonfigurowana stała jako prawa strona porównania
Linie wejściowe oznaczane bloczkiem tag
| Numer i nazwa wejścia | Opis działania |
|---|---|
tag1: Pierwsza wartość porównania |
W trybie dwóch wejść jest wymagane i dostarcza pierwszą porównywaną wartość. W trybie porównania ze stałą może być użyte jako wejście danych, ale nie jest obowiązkowe. |
tag2: Druga wartość porównania |
W trybie dwóch wejść jest wymagane i dostarcza drugą porównywaną wartość. W trybie porównania ze stałą nie może być podłączone. |
Obsługiwane typy i operatory
boolmożna porównywać tylko operatorami==oraz!=textmożna porównywać tylko operatorami==oraz!=integer,float,temperatureipercentmożna porównywać wszystkimi operatorami- różne typy liczbowe mogą być mieszane; bloczek traktuje je po prostu jako wartości liczbowe i nie sprawdza zgodności jednostek
Przypadki ignorowane:
- ponowne uzyskanie tego samego wyniku
truealbofalse, jeślifilter_duplicated_values = true - w porównaniach liczbowych z operatorami
>oraz<niewielkie zmiany mieszczące się w strefie histerezy, jeśli bloczek ma już wcześniej ustalony wynik
Histereza i porównania liczbowe
Histereza jest używana wyłącznie dla porównań liczbowych.
Bloczek oblicza bezwzględną różnicę pomiędzy dwiema wartościami i porównuje ją z połową parametru hysteresis.
Zasady działania:
- dla
==wynik jest true, gdy różnica jest mniejsza lub równa połowie histerezy - dla
!=wynik jest true, gdy różnica jest większa od połowy histerezy - dla
>=oraz<=wartości mieszczące się w strefie histerezy są traktowane jako równe, więc oba te operatory zwracają wtedy true - dla
>oraz<wejście w strefę histerezy nie wymusza natychmiastowej zmiany wyniku; bloczek utrzymuje poprzedni stan, dopóki różnica nie wyjdzie poza strefę histerezy - jeśli porównanie
>albo<jest wykonywane po raz pierwszy i bloczek nie ma jeszcze poprzedniego wyniku, wynik jest wyliczany na podstawie zwykłego porównania obu wartości
Wyjścia bloczka
Bloczek posiada jedno wyjście.
Na wyjściu pojawia się:
- wartość logiczna true albo false, jeśli porównanie zostało wykonane poprawnie
- wartość
null, jeśli nie da się wykonać porównania z powodu błędu konfiguracji, braku drugiej wartości,nullna wejściu albo niekompatybilnych typów
Opis statusu bloczka
Opis widoczny pod bloczkiem przyjmuje jedną z następujących postaci:
nullprzed pierwszym udanym porównaniemtruealbofalsepo poprawnym wykonaniu porównania- komunikat błędu, jeśli ostatnia próba porównania zakończyła się błędem
Błędy widoczne dla użytkownika
Bloczek może pokazywać następujące komunikaty błędów:
| Kod błędu | Opis błędu |
|---|---|
Missing operator configuration. |
W konfiguracji brakuje parametru operator albo nie da się go odczytać jako niepustego tekstu. |
Invalid operator configuration. |
Parametr operator ma wartość spoza obsługiwanej listy. |
Invalid hysteresis configuration. |
Parametr hysteresis nie jest poprawną wartością liczbową. |
Missing filter_duplicated_values configuration. |
W konfiguracji brakuje parametru filter_duplicated_values albo nie da się go odczytać jako wartości logicznej. |
Missing const_value_type configuration. |
W trybie porównywania ze stałą brakuje parametru const_value_type. |
Missing constant value configuration. |
W trybie porównywania ze stałą nie podano parametru const_value albo podano pusty tekst tam, gdzie oczekiwany jest niepusty tekst. |
Invalid constant value configuration. |
Parametr const_value ma niepoprawną wartość dla wybranego typu stałej. Dotyczy to między innymi null albo nieobsługiwanej wartości logicznej. |
Expected numeric constant value configuration. |
Dla const_value_type = num podano wartość inną niż liczbowa. |
Invalid constant value type configuration. |
Parametr const_value_type ma wartość inną niż bool, num albo str. |
Non-tag block connected. |
W trybie porównywania tag1 z tag2 do wejścia podłączono bloczek inny niż tag. |
Multiple tag1 blocks connected. |
Do bloczka podłączono więcej niż jedną linię tag1. |
Multiple tag2 blocks connected. |
Do bloczka podłączono więcej niż jedną linię tag2. |
Only tag1 and tag2 blocks supported. |
Do bloczka podłączono linię tag inną niż tag1 albo tag2. |
Missing tag1 block connection. |
W trybie dwóch wejść nie podłączono tag1. |
Missing tag2 block connection. |
W trybie dwóch wejść nie podłączono tag2. |
Invalid tag2 connection with constant value enabled. |
W trybie porównywania ze stałą podłączono tag2, co nie jest dozwolone. |
Missing value from tag1. |
Przyszła zmiana z tag2, ale bloczek nie zna jeszcze ostatniej wartości z tag1. |
Missing value from tag2. |
Przyszła zmiana z tag1, ale bloczek nie zna jeszcze ostatniej wartości z tag2. |
Invalid tag1 value. |
Pierwsza porównywana wartość jest niepoprawna. |
Invalid tag2 value. |
Druga porównywana wartość jest niepoprawna. |
Null tag1 value. |
Pierwsza porównywana wartość ma postać null. |
Null tag2 value. |
Druga porównywana wartość ma postać null. |
Invalid operator for bool value. |
Wybrano operator inny niż == albo !=, a obie porównywane wartości są logiczne. |
Invalid operator for text value. |
Wybrano operator inny niż == albo !=, a obie porównywane wartości są tekstowe. |
Can't compare <typ1> with <typ2> |
Bloczek otrzymał dwa niekompatybilne typy, na przykład bool i text albo integer i text. |
W rzadkich sytuacjach niespójności runtime mogą pojawić się również komunikaty defensywne, takie jak Missing tag1 or tag2 block connection. albo komunikaty Failed to get ... value.. Oznaczają one, że bloczek nie mógł bezpiecznie odczytać jednej z wartości potrzebnych do porównania.
Przykłady działania
- Jeśli
operator = ">",hysteresis = 0,tag1 = 23, atag2 = 20, to na wyjściu pojawi się true. - Jeśli
operator = "==",hysteresis = 1.0,tag1 = 20.0, atag2 = 20.4, to na wyjściu pojawi się true, ponieważ różnica0.4mieści się w paśmie+-0.5. - Jeśli
operator = ">",hysteresis = 2, a poprzedni wynik był już true dla wartości22i20, to późniejsza zmiana na21i20.4nie przełączy wyniku, ponieważ różnica nadal mieści się w paśmie+-1. - Jeśli
compare_with_const_value = "true",const_value_type = "str",const_value = "auto"i na wejście dotrze tekstauto, to wynik porównania==będzie miał wartość true. - Jeśli do porównania dwóch wartości logicznych wybierzesz operator
>, bloczek pokaże błądInvalid operator for bool value.i wyśle na wyjścienull.