Files
PLC_Library/plc_src/POU/Общие/STACK_I16.st
T

56 lines
1.3 KiB
Smalltalk

(*
===============================================================================
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