Skip to content

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ść tag1 i tag2
  • 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 bool z bool
  • wartości tekstowe text z text
  • 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ą z tag2
  • gdy zmiana przyjdzie z tag2, zostaje porównana z ostatnią znaną wartością z tag1
  • 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:

  • tag2 nie może być podłączony
  • tag1 moż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

  • bool można porównywać tylko operatorami == oraz !=
  • text można porównywać tylko operatorami == oraz !=
  • integer, float, temperature i percent moż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 true albo false, jeśli filter_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, null na wejściu albo niekompatybilnych typów

Opis statusu bloczka

Opis widoczny pod bloczkiem przyjmuje jedną z następujących postaci:

  • null przed pierwszym udanym porównaniem
  • true albo false po 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, a tag2 = 20, to na wyjściu pojawi się true.
  • Jeśli operator = "==", hysteresis = 1.0, tag1 = 20.0, a tag2 = 20.4, to na wyjściu pojawi się true, ponieważ różnica 0.4 mieści się w paśmie +-0.5.
  • Jeśli operator = ">", hysteresis = 2, a poprzedni wynik był już true dla wartości 22 i 20, to późniejsza zmiana na 21 i 20.4 nie 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 tekst auto, 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łąd Invalid operator for bool value. i wyśle na wyjście null.