B48_SMART_AVERAGE
PROGRAM B48_TEST VAR IN1, IN2, IN3:REAL; FB: LIB.CORE.V1_0.B48_SMART_AVERAGE; END_VAR FB(IN[1]:=IN1, IN[2]:= IN2); O1:= FB.OUT; END_PROGRAM
LIB\CORE
V1.1
Tento blok je rozšířením bloku AVG. Blok AVG počítá obyčejný aritmetický průměr, který může způsobit problémy v reálných aplikacích. Ukažme si následující příklad: Mějme několik teploměrů (3,4,…), připojených k bloku AVG, který nám vypočítá průměrnou teplotu. Pokud se kterýkoli z teploměrů rozbije a poskytuje špatnou hodnotu (např. 10000), pak je průměrná teplota nepoužitelná, i když je počet funkčních teploměrů vysoký.
Oproti tomu blok B48 nejprve vypočítá pravděpodobnou průměrnou hodnotu vynecháním všech nerelevantních hodnot. To je dosaženo pomocí mediánu všech vstupních hodnot. Označme tento pravděpodobný průměr jako M. Všechny vstupní hodnoty X, které jsou blíže M do vzdálenosti tol jsou použity pro výpočet průměru, tj. OUT je roven aritmetickému průměru z těchto hodnot. Všechny ostatní hodnoty se neberou v úvahu.
Výstup BS určuje znaménko výstupu OUT. Když OUT>= 0 BS=TRUE, jinak BS=FALSE. Výstup BSN je negací výstupu BS.
Když je počet připojených zařízení roven třem, pak je blok schopen zvládnout jednu špatnou hodnotu. Když je počet připojených zařízení roven pěti, pak je blok schopen zvládnout dvě neplatné hodnoty. Obecně pokud je připojených n zařízení, kde n je libovolné číslo, pak je blok schopen zvládnout n-1/2×n špatných hodnot.
Vstupní signály je třeba povolit v proměnné INENABLED (například inenabled[1]:=true; pro vstup IN1).
Vstup | Typ | Význam | Výchozí hodnota |
IN | MULTIIOREAL | Vstupní hodnota | [0,0,…,0] |
INENABLED | MULTIIOBOOL | Povolení vstupu | [False,…,False] |
IN1 | REAL | Vstupní hodnota | |
IN2 | REAL | Vstupní hodnota | |
TOL | REAL | Tolerance | 2 |
Výstup | Typ | Význam |
OUT | REAL | Výstupní signál |
VAL | INT | Počet vstupů použitých při výpočtu výstupního signálu |
INVAL | INT | Počet vynechaných vstupů |
BS | BOOL | Znaménko výstupního signálu |
BSN | BOOL | Negace bs |