Добавил Функции, сделал readme, повысил версию

This commit is contained in:
2026-08-03 11:57:48 +03:00
parent 787f875581
commit 8017d65662
6 changed files with 261 additions and 4 deletions
+66
View File
@@ -0,0 +1,66 @@
(*
===============================================================================
Project : PLC_Library
Device : -
Path : Общие
Name : QUEUE_I32
Type : FUNCTION_BLOCK
===============================================================================
*)
FUNCTION_BLOCK QUEUE_I32
(*
Очередь FIFO на 32 элемента типа 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
queue : ARRAY[0..n] OF INT;
Head : INT; (* индекс чтения *)
Tail : INT; (* индекс записи *)
Count : INT; (* количество элементов *)
END_VAR
VAR CONSTANT
n : INT := 31; (* 32 элемента *)
END_VAR
(*----- IMPLEMENTATION -----*)
IF RST THEN
Head := 0;
Tail := 0;
Count := 0;
EMPTY := TRUE;
FULL := FALSE;
Dout := 0;
ELSIF E THEN
(* Извлечение *)
IF POP AND NOT EMPTY THEN
Dout := queue[Head];
Head := Head + 1;
IF Head > n THEN
Head := 0;
END_IF;
Count := Count - 1;
END_IF;
(* Добавление *)
IF PUSH AND NOT FULL THEN
queue[Tail] := Din;
Tail := Tail + 1;
IF Tail > n THEN
Tail := 0;
END_IF;
Count := Count + 1;
END_IF;
EMPTY := (Count = 0);
FULL := (Count = n + 1);
END_IF;
END_FUNCTION_BLOCK
+2 -3
View File
@@ -10,7 +10,7 @@
FUNCTION_BLOCK STACK_I16
(*
Стек на 16 элементов типа INT
Стек LIFO на 16 элементов типа INT
*)
VAR_INPUT
Din : INT; (* Переменная для записи в стек *)
@@ -29,12 +29,11 @@ VAR
pt : INT;
END_VAR
VAR CONSTANT
n : INT := 15; (* changing this value will chage the number of stored elements in the fifo *)
n : INT := 15; (* 16 элементов *)
END_VAR
(*----- IMPLEMENTATION -----*)
IF RST THEN
(* asynchronous reset for the fifo *)
pt := 0;
EMPTY := TRUE;
FULL := FALSE;
+55
View File
@@ -0,0 +1,55 @@
(*
===============================================================================
Project : PLC_Library
Device : -
Path : Общие
Name : STACK_I32
Type : FUNCTION_BLOCK
===============================================================================
*)
FUNCTION_BLOCK STACK_I32
(*
Стек LIFO на 32 элемента типа INT
*)
VAR_INPUT
Din : INT; (* Переменная для записи в стек *)
E : BOOL := TRUE; (* Включение стека *)
POP : BOOL; (* Извлечение из стека *)
PUSH : BOOL; (* Запись в стек *)
RST : BOOL; (* Обнуление стека *)
END_VAR
VAR_OUTPUT
Dout : INT; (* Значение, извлеченное из стека при POP *)
EMPTY : BOOL := TRUE; (* Флаг "стек пуст" *)
FULL : BOOL; (* Флаг "стек заполнен" (достигнут предел n) *)
END_VAR
VAR
stack: ARRAY[0..n] OF INT;
pt : INT;
END_VAR
VAR CONSTANT
n : INT := 31; (* 32 элемента *)
END_VAR
(*----- IMPLEMENTATION -----*)
IF RST THEN
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