(* =============================================================================== Project : PLC_Library Device : - Path : Общие Name : STACK_I16 Type : FUNCTION_BLOCK Exported : 2026-07-31 11:16:16 =============================================================================== *) FUNCTION_BLOCK STACK_I16 (* стек на 16 элементов типа INT*) VAR_INPUT Din : INT; (* Переменная для записи в стек *) E : BOOL := TRUE;(* Включение стека *) POP : BOOL; (* Извлечение из стека *) PUSH : BOOL; (* Запись в стек *) RST : BOOL; (* Обнуление стека *) END_VAR VAR_OUTPUT Dout : INT; EMPTY : BOOL := TRUE; FULL : BOOL; END_VAR VAR stack: ARRAY[0..n] OF INT; pt : INT; END_VAR VAR CONSTANT n : INT := 15; (* changing this value will chage the number of stored elements in the fifo *) END_VAR (*----- IMPLEMENTATION -----*) IF RST THEN (* asynchronous reset for the fifo *) pt := 0; EMPTY := TRUE; FULL := FALSE; Dout := 0; ELSIF E THEN IF NOT EMPTY AND POP THEN pt := pt - 1; Dout := stack[pt]; EMPTY := pt = 0; FULL := FALSE; END_IF; IF NOT FULL AND PUSH THEN stack[pt] := Din; pt := pt + 1; FULL := pt > n; EMPTY := FALSE; END_IF; END_IF; END_FUNCTION_BLOCK