BD55_INT_COMPOSITION
PROGRAM BD55 VAR LINT1:LINT; ARRAY1 : ARRAY [0..3] OF DINT := [3, 6, 10, 5]; LOW : ARRAY[0..3] OF LIB.CORE.V1_0.BIT32:= [1, 5, 9, 13]; HIGH : ARRAY[0..3] OF LIB.CORE.V1_0.BIT32:= [4, 8, 12, 16]; END_VAR LINT1:= LIB.CORE.V1_0.BD55_INT_COMPOSITION(LOW := LOW ,HIGH := HIGH ,BS:=TRUE,IN:=ARRAY1); END_PROGRAM
LIB\CORE
V1.0
Blok složí ze vstupních dat výstupní hodnotu Integer podle zadaného umístění vstupů.
Vstup | Typ | Význam | Výchozí hodnota |
IN | ARRAY[0..3] OF DINT | Vstupní data | [0] |
BS | BOOL | Znaménko výstupní hodnoty | False |
LOW | ARRAY[0..3] OF LIB.CORE.V1_0.BIT32 | první bit z rozsahu, pole o velikost [1..4] s hodnotami 1 až 32 | [1] |
HIGH | ARRAY[0..3] OF LIB.CORE.V1_0.BIT32 | poslední bit z rozsahu, pole o velikost [1..4] s hodnotami 1 až 32 | [1] |
Výstup | Typ | Význam |
⇒ | lint | Výstupní hodnota |
Blok složí vstupní data v rozsahu podle zadaných parametrů in, low a high. Výstupní hodnotu lze složit z až čtyř částí. Znaménko výstupu se určí pomocí proměnné bs. Příklad: bity 5 až 8 představují hodnotu 0110, tedy dekadicky 6. Tuto hodnotu chceme interpretovat jako součást čísla integer. Použijeme první pozice vektorů low, high a in, tedy nastavení pro uložení hodnoty 0110 do pátého až osmého bitu bude vypadat takto: low = [5,0,0,0], high = [8,0,0,0] a samotná hodnota in = [6,0,0,0]. POZOR: v případě, kdy se budou rozsahy překrývat, může dojít k chybě.
Složení výstupní hodnoty podle zadaných požadavků low = [1,5,9,13] a high = [4,8,12,16]. Jednotlivé čtveřice bitů (1…4, 5…8, 9…12 a 13…16, jak určují vektory low a high) obsahují čísla 3, 6, 10 a 5 (viz vstupy dint1…dint3); seřazeno od nejvyššího bitu k nejnižšímu a binárně má číslo tvar 0101 1010 0110 0011, což je dekadicky 23139 - výsledek operace na výstupu bloku.