====== Bitová rotace ====== {{:cs:mervis-ide:35-help:t14.png}} ===== Název bloku ===== T14_BIT_ROTATION ===== Volání v ST ===== PROGRAM TEST14 VAR INT1,INT2,INT3,INT4: INT; BOOL1,BOOL2,BOOL3,BOOL4,BOOL5,BOOL6,BOOL7,BOOL8: BOOL; FB: LIB.HVAC.V1_0.T14_BIT_ROTATION; END_VAR FB.INI[1]:=BOOL3; FB.INI[2]:=BOOL4; FB.INI[3]:=BOOL5; FB.LISTOFENABLED[1]:=INT2; FB.LISTOFENABLED[2]:=INT3; FB.LISTOFENABLED[3]:=INT4; FB(BX:= BOOL1, BXF:= BOOL2, NUMOFENABLEDOUTPUTS:= INT1); BOOL6:=FB.OUT[1]; BOOL7:=FB.OUT[2]; BOOL8:=FB.OUT[3]; END_PROGRAM ===== Knihovna ===== LIB\HVAC ===== Verze ===== V1.0 ===== Popis ===== Bitová rotace je funkční blok, který slouží k posunu bitů v definovaném vektoru na základě náběžné nebo sestupné hrany na vstupech. ===== Vstupy ===== |Vstup |Typ |Význam |Výchozí hodnota | |BX |BOOL |Vstup, reagující na náběžnou hranu: vektor při ní rotuje o jednu pozici dopředu |False | |BXF |BOOL |Vstup, reagující na sestupnou hranu: vektor při ní rotuje o jednu pozici dopředu|False | |INI |MULTIIOBOOL|Počáteční bitový vzor výstupů |[True, False,...,False]| |LIST OF ENABLED |MULTIIOINT |Pole čísel výstupů, které se účastní rotace |[1,0,...,0] | |NUM OF ENABLED OUTPUTS|INT |Počet položek, které se zúčastní rotace |1 | ===== Výstupy ===== |Výstup|Typ |Význam | |OUT |MULTIIOBOOL|Výstupní rotovaný vektor | |SHIFT |INT |Indikuje, o kolik pozic je vektor rotován| ===== Funkce ===== Pozor: Funkční blok používá vlastní typy knihovny multiiobool a multiioint, což jsou pole (array [1...16]) boolovských a integerových hodnot. Pro převod na jednotlivé binární a integerové hodnoty používejte funkce helper_multiinbool a helper_multioutbool, které rozkládají pole na řadu binárních nebo integerových hodnot. Proměnná //INI// musí obsahovat počáteční vzor, nejčastěji to je “1 z n”, “2 z n” atd., tedy např. [1, 1, 0, 0, 0, 0, 0, 0]. Při posunu vzor rotuje směrem “dopředu”, takže po prvním impulsu má výstupní vektor tvar [0, 1, 1, 0, 0, 0, 0, 0] a proměnná shift má hodnotu 1, po druhém pak [0, 0, 1, 1, 0, 0, 0, 0] a shift = 2 atd. Po počtu impulsů rovném //NUM OF ENABLED OUTPUTS// se vektor vrací do původního stavu a //SHIFT// = 0. V proměnné //NUM OF ENABLED OUTPUTS// se zadá počet výstupů, které se zúčastní rotace; maximum je 16. Proměnná ListOfEnabled je pole s čísly výstupů, které se zúčastní rotace. Tedy například pro prvních 8 výstupů bude vektor mít tvar [1, 2, 3, 4, 5, 6, 7, 8]. (Obvyklé použití bude právě n výstupů následujících za sebou. Pokud by se rotace zúčastnilo 5 výstupů, a to 1, 3, 4, 5 a 7, vektor bude mít tvar [1, 3, 4, 5, 7] a //NUM OF ENABLED OUTPUTS// bude rovno 5. Výše uvedené proměnné mají význam v případě, že některé výstupy chceme z rotace vyřadit, např. pro poruchu agregátu. ===== Příklad použití ===== Blok se používá jako zdroj signálu pro střídání pořadí kotlů, cyklické prohazování pořadí čerpadel, vícestupňových el. ohřevů apod. kvůli jejich rovnoměrnému opotřebení.