Compare commits

...
4 Commits
44 changed files with 269 additions and 231 deletions
Binary file not shown.
Binary file not shown.
-1
View File
@@ -5,7 +5,6 @@
Path : Structs Path : Structs
Name : AnalogValueState Name : AnalogValueState
Type : DUT Type : DUT
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
+1 -2
View File
@@ -5,7 +5,6 @@
Path : Fastwel Path : Fastwel
Name : AIM721_AI Name : AIM721_AI
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -14,7 +13,7 @@ FUNCTION AIM721_AI : REAL
Перевод значений входов модуля AIM721 из единиц АЦП в 0..20 мА Перевод значений входов модуля AIM721 из единиц АЦП в 0..20 мА
*) *)
VAR_INPUT VAR_INPUT
ADC: DINT; ADC : DINT; (* Единицы АЦП *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
+1 -2
View File
@@ -5,7 +5,6 @@
Path : Fastwel Path : Fastwel
Name : AIM722_AI Name : AIM722_AI
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -14,7 +13,7 @@ FUNCTION AIM722_AI : REAL
Перевод значений входов модуля AIM722 из единиц АЦП в 0..20 мА Перевод значений входов модуля AIM722 из единиц АЦП в 0..20 мА
*) *)
VAR_INPUT VAR_INPUT
ADC: DINT; ADC : DINT; (* Единицы АЦП *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
+1 -2
View File
@@ -5,7 +5,6 @@
Path : Fastwel Path : Fastwel
Name : AIM723_AI Name : AIM723_AI
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -14,7 +13,7 @@ FUNCTION AIM723_AI : REAL
Перевод значений входов модуля AIM723 из единиц АЦП в 4..20 мА Перевод значений входов модуля AIM723 из единиц АЦП в 4..20 мА
*) *)
VAR_INPUT VAR_INPUT
ADC: DINT; ADC : DINT; (* Единицы АЦП *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
+38 -38
View File
@@ -5,7 +5,6 @@
Path : Fastwel Path : Fastwel
Name : AIM725_Status Name : AIM725_Status
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -13,6 +12,7 @@ FUNCTION_BLOCK AIM725_Status
(* (*
Модуль формирования статуса Модуль формирования статуса
Гистерезис по отключению и задержка по включению Гистерезис по отключению и задержка по включению
-1 - нет связи с датчиком -1 - нет связи с датчиком
0 - не определено 0 - не определено
1 - норма 1 - норма
@@ -22,33 +22,33 @@ FUNCTION_BLOCK AIM725_Status
5 - аварийный по верхнему уровню 5 - аварийный по верхнему уровню
*) *)
VAR_INPUT VAR_INPUT
Input: REAL; Input: REAL; (* Контролируемое значение *)
fail_hi: REAL:=3.402823466E+38; fail_hi: REAL:=3.402823466E+38; (* Порог аварии по верхнему уровню *)
delta_fail_hi: REAL := 0; delta_fail_hi: REAL := 0; (* Гистерезис возврата из fail_hi *)
time_fail_hi: TIME :=t#0s; time_fail_hi: TIME :=t#0s; (* Выдержка времени на срабатывание fail_hi *)
warn_hi: REAL:=3.402823466E+38; warn_hi: REAL:=3.402823466E+38; (* Порог предупреждения по верхнему уровню *)
delta_warn_hi: REAL := 0; delta_warn_hi: REAL := 0; (* Гистерезис возврата из warn_hi *)
time_warn_hi: TIME :=t#0s; time_warn_hi: TIME :=t#0s; (* Выдержка времени на срабатывание warn_hi *)
warn_low: REAL:=-3.402823466E+38; warn_low: REAL:=-3.402823466E+38; (* Порог предупреждения по нижнему уровню *)
delta_warn_low: REAL := 0; delta_warn_low: REAL := 0; (* Гистерезис возврата из warn_low *)
time_warn_low: TIME :=t#0s; time_warn_low: TIME :=t#0s; (* Выдержка времени на срабатывание warn_low *)
fail_low: REAL:=-3.402823466E+38; fail_low: REAL:=-3.402823466E+38; (* Порог аварии по нижнему уровню *)
delta_fail_low: REAL := 0; delta_fail_low: REAL := 0; (* Гистерезис возврата из fail_low *)
time_fail_low: TIME :=t#0s; time_fail_low: TIME :=T#0S; (* Выдержка времени на срабатывание fail_low *)
Modul_status: BYTE; time_no_signal: TIME :=T#0S; (* Выдержка времени на срабатывание no_signal *)
Chanel_num: BYTE; Modul_status: BYTE; (* Байт статуса модуля АЦП (биты диагностики по каналам) *)
Chanel_num: BYTE; (* Номер канала модуля (1 или 2), определяет какие биты Modul_status проверяются *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Status: INT; Status: AnalogValueState; (* Итоговый статус аналогового значения *)
T_mod: INT; T_mod: INT; (* Значение Input, приведенное к INT; -500 при отсутствии связи (no_signal) *)
END_VAR END_VAR
VAR VAR
(* !!! ВНУТРЕННИЕ НЕВЫХОДНЫЕ ПЕРЕМЕННЫЕ!!! *)
TON_fail_hi: TON; TON_fail_hi: TON;
TON_warn_hi: TON; TON_warn_hi: TON;
TON_warn_low: TON; TON_warn_low: TON;
TON_fail_low: TON; TON_fail_low: TON;
(* !!! ВНУТРЕННИЕ ВЫХОДНЫЕ ПЕРЕМЕННЫЕ!!! *) TON_no_signal: TON;
fail_hi_st: BOOL; fail_hi_st: BOOL;
warn_hi_st: BOOL; warn_hi_st: BOOL;
normal_st: BOOL; normal_st: BOOL;
@@ -57,36 +57,36 @@ VAR
no_signal_st: BOOL; no_signal_st: BOOL;
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
no_signal_st := (Input <= - REAL#200 OR ((Modul_status.0 OR Modul_status.4 OR Modul_status.5) AND Chanel_num = 1) OR ((Modul_status.1 OR Modul_status.6 OR Modul_status.7) AND Chanel_num = 2) OR Modul_status.2 OR Modul_status.3); TON_no_signal(IN := (Input <= - REAL#200 OR ((Modul_status.0 OR Modul_status.4 OR Modul_status.5) AND Chanel_num = 1) OR ((Modul_status.1 OR Modul_status.6 OR Modul_status.7) AND Chanel_num = 2) OR Modul_status.2 OR Modul_status.3), PT := time_no_signal);
IF no_signal_st THEN T_mod := - INT#500; ELSE T_mod := REAL_TO_INT(Input); END_IF; IF TON_no_signal.Q THEN T_mod := - INT#500; no_signal_st := TRUE; ELSE T_mod := REAL_TO_INT(Input); no_signal_st := FALSE; END_IF;
TON_fail_low(IN := ((Input <= fail_low) AND NOT(no_signal_st)), PT := time_fail_low); TON_fail_low(IN := ((Input <= fail_low) AND NOT(TON_no_signal.Q)), PT := Time_fail_low);
IF TON_fail_low.Q THEN fail_low_st := TRUE; ELSIF (Input > fail_low + delta_fail_low) THEN fail_low_st := FALSE; END_IF; IF TON_fail_low.Q THEN fail_low_st := TRUE; ELSIF (Input > fail_low + Delta_fail_low) THEN fail_low_st := FALSE; END_IF;
TON_warn_low(IN := ((Input <= warn_low) AND NOT(no_signal_st) AND NOT(TON_fail_low.Q)), PT := time_warn_low); TON_warn_low(IN := ((Input <= warn_low) AND NOT(TON_no_signal.Q) AND NOT(TON_fail_low.Q)), PT := Time_warn_low);
IF TON_warn_low.Q THEN warn_low_st := TRUE; ELSIF (Input > warn_low + delta_warn_low) THEN warn_low_st := FALSE; END_IF; IF TON_warn_low.Q THEN warn_low_st := TRUE; ELSIF (Input > warn_low + Delta_warn_low) THEN warn_low_st := FALSE; END_IF;
TON_fail_hi(IN := ((Input >= fail_hi) AND NOT(no_signal_st)), PT := time_fail_hi); TON_fail_hi(IN := ((Input >= fail_hi) AND NOT(TON_no_signal.Q)), PT := Time_fail_hi);
IF TON_fail_hi.Q THEN fail_hi_st := TRUE; ELSIF (Input < fail_hi - delta_fail_hi) THEN fail_hi_st := FALSE; END_IF; IF TON_fail_hi.Q THEN fail_hi_st := TRUE; ELSIF (Input < fail_hi - Delta_fail_hi) THEN fail_hi_st := FALSE; END_IF;
TON_warn_hi(IN := ((Input >= warn_hi) AND NOT(no_signal_st) AND NOT(TON_fail_hi.Q)), PT := time_warn_hi); TON_warn_hi(IN := ((Input >= warn_hi) AND NOT(TON_no_signal.Q) AND NOT(TON_fail_hi.Q)), PT := Time_warn_hi);
IF TON_warn_hi.Q THEN warn_hi_st := TRUE; ELSIF (Input < warn_hi - delta_warn_hi) THEN warn_hi_st := FALSE; END_IF; IF TON_warn_hi.Q THEN warn_hi_st := TRUE; ELSIF (Input < warn_hi - Delta_warn_hi) THEN warn_hi_st := FALSE; END_IF;
normal_st := (NOT(no_signal_st) AND NOT(fail_low_st) AND NOT(warn_low_st) AND NOT(warn_hi_st) AND NOT(fail_hi_st)); normal_st := (NOT(TON_no_signal.Q) AND NOT(fail_low_st) AND NOT(warn_low_st) AND NOT(warn_hi_st) AND NOT(fail_hi_st));
IF no_signal_st THEN IF no_signal_st THEN
Status := - INT#1; Status := AnalogValueState.no_signal;
ELSIF fail_hi_st THEN ELSIF fail_hi_st THEN
Status := INT#5; Status := AnalogValueState.fail_hi;
ELSIF fail_low_st THEN ELSIF fail_low_st THEN
Status := INT#3; Status := AnalogValueState.fail_low;
ELSIF warn_hi_st THEN ELSIF warn_hi_st THEN
Status := INT#4; Status := AnalogValueState.warn_hi;
ELSIF warn_low_st THEN ELSIF warn_low_st THEN
Status := INT#2; Status := AnalogValueState.warn_low;
ELSIF normal_st THEN ELSIF normal_st THEN
Status := INT#1; Status := AnalogValueState.normal;
ELSE ELSE
Status := INT#0; Status := AnalogValueState.undefined;
END_IF; END_IF;
END_FUNCTION_BLOCK END_FUNCTION_BLOCK
-1
View File
@@ -5,7 +5,6 @@
Path : Fastwel Path : Fastwel
Name : AIM726_AI Name : AIM726_AI
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
-1
View File
@@ -5,7 +5,6 @@
Path : Fastwel Path : Fastwel
Name : AIM727_AI Name : AIM727_AI
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
+1 -5
View File
@@ -5,20 +5,16 @@
Path : Fastwel Path : Fastwel
Name : AIM730_AO Name : AIM730_AO
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION AIM730_AO : WORD FUNCTION AIM730_AO : WORD
(* (*
Перевод значений 0..20 мА или 4..20 мА в единицы АЦП выходов модуля AIM730 Перевод значений 0..20 мА или 4..20 мА в единицы АЦП выходов модуля AIM730
Диапазон:
RANGE = 0 - 0..20 мА
RANGE = 1 - 4..20 мА
*) *)
VAR_INPUT VAR_INPUT
DAC : REAL; (*Миллиамперы*) DAC : REAL; (*Миллиамперы*)
RANGE : BYTE; (*Диапазон: 0..20 мА - 0; 4..20 мА - 1 *) RANGE : BYTE; (*Диапазон: 0 - 0..20 мА; 1 - 4..20 мА *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
IF (RANGE = 1) AND (DAC < 4) THEN AIM730_AO := WORD#4; RETURN;END_IF; IF (RANGE = 1) AND (DAC < 4) THEN AIM730_AO := WORD#4; RETURN;END_IF;
+1 -5
View File
@@ -5,20 +5,16 @@
Path : Fastwel Path : Fastwel
Name : AIM731_AO Name : AIM731_AO
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION AIM731_AO : WORD FUNCTION AIM731_AO : WORD
(* (*
Перевод значений -10..+10 В или 0..+10 В в единицы АЦП выходов модуля AIM731 Перевод значений -10..+10 В или 0..+10 В в единицы АЦП выходов модуля AIM731
Диапазон:
RANGE = 0 - -10..+10 В
RANGE = 1 - 0..+10 В
*) *)
VAR_INPUT VAR_INPUT
DAC : REAL; (*Вольты*) DAC : REAL; (*Вольты*)
RANGE : BYTE; (*Диапазон -10..+10 В - 0; 0..+10 В - 1 *) RANGE : BYTE; (*Диапазон: 0 - -10..+10 В; 1 - 0..+10 В *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
CASE RANGE OF CASE RANGE OF
+2 -8
View File
@@ -5,23 +5,17 @@
Path : Fastwel Path : Fastwel
Name : AIM791_AI Name : AIM791_AI
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION AIM791_AI : REAL FUNCTION AIM791_AI : REAL
(* (*
Перевод значений входов модуля AIM791 из единиц АЦП в 0..5 мА / 0..20 мА / 4..20 мА Перевод значений входов модуля AIM791 из единиц АЦП в 0..5 мА / 0..20 мА / 4..20 мА
Диапазон:
RANGE = 0 - 0..5 мА
RANGE = 1 - 0..20 мА
RANGE = 2 - 4..20 мА
*) *)
VAR_INPUT VAR_INPUT
ADC: WORD; ADC: WORD; (* Значение АЦП *)
RANGE: BYTE := 0; RANGE: BYTE := 0; (* Диапазон: 0 - 0..5 мА; 1 - 0..20 мА; 2 - 4..20 мА *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
CASE RANGE OF CASE RANGE OF
0 : AIM791_AI := WORD_TO_REAL(ADC) * REAL#7.820248722E-005; 0 : AIM791_AI := WORD_TO_REAL(ADC) * REAL#7.820248722E-005;
+4 -3
View File
@@ -5,14 +5,15 @@
Path : Fastwel Path : Fastwel
Name : DIM764_DI Name : DIM764_DI
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION DIM764_DI : REAL FUNCTION DIM764_DI : REAL
(*На выходе - Частота в Гц*) (*
На выходе - Частота в Гц
*)
VAR_INPUT VAR_INPUT
IN: DWORD; IN: DWORD; (* Значение периода/интервала с модуля, единицы АЦП *)
RANGE: BYTE; (* 0-Period; 1-Interval; *) RANGE: BYTE; (* 0-Period; 1-Interval; *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
-1
View File
@@ -5,7 +5,6 @@
Path : Filters Path : Filters
Name : ExpRunAverage Name : ExpRunAverage
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -5,7 +5,6 @@
Path : Filters Path : Filters
Name : ExpRunAverageAdaptive Name : ExpRunAverageAdaptive
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
+5 -1
View File
@@ -5,11 +5,15 @@
Path : Filters Path : Filters
Name : MultipleClick Name : MultipleClick
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK MultipleClick FUNCTION_BLOCK MultipleClick
(*
Детектор серии кликов кнопки (одиночный/двойной/тройной клик).
Считает нажатия, пока пауза между ними не превысит TimeToWait, затем фиксирует
результат на выходах Click1/Click2/Click3 на время TimeRelease.
*)
VAR_INPUT VAR_INPUT
In: BOOL;(* Вход кнопки *) In: BOOL;(* Вход кнопки *)
TimeToWait: TIME:=T#500MS; (* Максимальное время между нажатиями *) TimeToWait: TIME:=T#500MS; (* Максимальное время между нажатиями *)
+6 -5
View File
@@ -5,19 +5,20 @@
Path : Filters Path : Filters
Name : RunMiddleArifm Name : RunMiddleArifm
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK RunMiddleArifm FUNCTION_BLOCK RunMiddleArifm
(* Скользящая средняя *) (*
Скользящая средняя
*)
VAR_INPUT VAR_INPUT
In : REAL; In : REAL; (* Входное значение *)
N : INT:=32; (* Размер выборки 0...32 *) N : INT:=32; (* Размер выборки 0...32 *)
RST : BOOL; RST : BOOL; (* Сброс/переинициализация буфера текущим значением In *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Y : REAL; Y : REAL; (* Значение скользящей средней *)
END_VAR END_VAR
VAR VAR
init: BOOL; init: BOOL;
-1
View File
@@ -5,7 +5,6 @@
Path : Иное Path : Иное
Name : DFS Name : DFS
Type : PROGRAM Type : PROGRAM
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
-1
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : ALARM_1 Name : ALARM_1
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
-1
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : ALARM_2 Name : ALARM_2
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
-1
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : ALARM_3 Name : ALARM_3
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
+1 -2
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : BLINK_LMP Name : BLINK_LMP
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -20,7 +19,7 @@ VAR_INPUT
Inp_BL_3: BOOL := FALSE; (* Пульсар миганич с частотой 3 *) Inp_BL_3: BOOL := FALSE; (* Пульсар миганич с частотой 3 *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
LMP: BOOL; LMP: BOOL; (* Управляющий сигнал на лампу *)
END_VAR END_VAR
VAR VAR
END_VAR END_VAR
+2 -3
View File
@@ -5,13 +5,12 @@
Path : Общие Path : Общие
Name : BUZZER_CTRL Name : BUZZER_CTRL
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK BUZZER_CTRL FUNCTION_BLOCK BUZZER_CTRL
(* (*
Звучание звонком лампами в завистмости от статуса с возможностью отключения звука Упрвелние звонком лампами в завистмости от статуса с возможностью отключения звука
*) *)
VAR_INPUT VAR_INPUT
State: WORD:=0; (* 0 - выключено; 1 - включено; 2 - мигание с частотой 1; 3 - мигание с частотой 2; 4 - мигание с частотой 3; *) State: WORD:=0; (* 0 - выключено; 1 - включено; 2 - мигание с частотой 1; 3 - мигание с частотой 2; 4 - мигание с частотой 3; *)
@@ -23,7 +22,7 @@ VAR_INPUT
T_PermanentOFF: TIME := T#10S; (* Время удержания кнопки отключения звука для перманентного отключения *) T_PermanentOFF: TIME := T#10S; (* Время удержания кнопки отключения звука для перманентного отключения *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
BUZZER: BOOL; BUZZER: BOOL; (* Управляющий сигнал на звонок/зуммер *)
END_VAR END_VAR
VAR VAR
R_TRIG_0: R_TRIG; R_TRIG_0: R_TRIG;
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : Button_acceleration Name : Button_acceleration
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
-1
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : CONFIRMATION Name : CONFIRMATION
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
+9 -7
View File
@@ -5,21 +5,23 @@
Path : Общие Path : Общие
Name : HYST Name : HYST
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK HYST FUNCTION_BLOCK HYST
(*
Гистерезисный компаратор с зоной нечувствительности между ON и OFF.
Поддерживает как прямую (ON >= OFF), так и обратную (ON < OFF) логику переключения.
*)
VAR_INPUT VAR_INPUT
In : REAL; In : REAL; (* Входное контролируемое значение *)
ON : REAL; ON : REAL; (* Порог включения (срабатывания) *)
OFF : REAL; OFF : REAL; (* Порог выключения (возврата) *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Q : BOOL; Q : BOOL; (* Выходное состояние компаратора *)
win : BOOL; win : BOOL; (* Флаг: входное значение находится в зоне гистерезиса *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
IF ON >= OFF THEN IF ON >= OFF THEN
IF IN < OFF THEN IF IN < OFF THEN
+5 -7
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : Norm_real Name : Norm_real
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -14,13 +13,12 @@ FUNCTION Norm_real : REAL
Нормирует значение аналогового входа X по двум заданным граничным точкам нормировки (X1,Y1) (X2,Y2) Нормирует значение аналогового входа X по двум заданным граничным точкам нормировки (X1,Y1) (X2,Y2)
*) *)
VAR_INPUT VAR_INPUT
X: REAL; X: REAL; (* Входное (ненормированное) значение *)
X1: REAL; X1: REAL; (* Первая точка нормировки, вход *)
Y1: REAL; Y1: REAL; (* Первая точка нормировки, выход *)
X2: REAL; X2: REAL; (* Вторая точка нормировки, вход *)
Y2: REAL; Y2: REAL; (* Вторая точка нормировки, выход *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
IF (X2-X1 = 0) THEN Norm_real:=Y1; RETURN; END_IF; IF (X2-X1 = 0) THEN Norm_real:=Y1; RETURN; END_IF;
Norm_real:=(X-X1)*(Y2-Y1)/(X2-X1)+Y1; Norm_real:=(X-X1)*(Y2-Y1)/(X2-X1)+Y1;
-1
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : PIDcontrol Name : PIDcontrol
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
+10 -8
View File
@@ -5,24 +5,26 @@
Path : Общие Path : Общие
Name : Pulse_Switch Name : Pulse_Switch
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK Pulse_Switch FUNCTION_BLOCK Pulse_Switch
(*
Формирует импульсы (500 мс) по переднему и заднему фронту управляющего сигнала.
*)
VAR_INPUT
Switch_ctrl: BOOL; (* Управляющий сигнал *)
END_VAR
VAR_OUTPUT
Switch_on: BOOL; (* Импульс 500 мс при переходе Switch_ctrl 0->1 *)
Switch_off: BOOL; (* Импульс 500 мс при переходе Switch_ctrl 1->0 *)
END_VAR
VAR VAR
R_tr_1: R_TRIG; R_tr_1: R_TRIG;
F_tr_1: F_TRIG; F_tr_1: F_TRIG;
tp_on: TP:=(PT:=t#500ms); tp_on: TP:=(PT:=t#500ms);
tp_off: TP:=(PT:=t#500ms); tp_off: TP:=(PT:=t#500ms);
END_VAR END_VAR
VAR_INPUT
Switch_ctrl: BOOL;
END_VAR
VAR_OUTPUT
Switch_on: BOOL;
Switch_off: BOOL;
END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
R_tr_1(CLK:=Switch_ctrl); R_tr_1(CLK:=Switch_ctrl);
tp_on(IN:=R_tr_1.Q, Q=>Switch_on); tp_on(IN:=R_tr_1.Q, Q=>Switch_on);
+66
View File
@@ -0,0 +1,66 @@
(*
===============================================================================
Project : PLC_Library
Device : -
Path : Общие
Name : QUEUE_I16
Type : FUNCTION_BLOCK
===============================================================================
*)
FUNCTION_BLOCK QUEUE_I16
(*
Очередь FIFO на 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
queue : ARRAY[0..n] OF INT;
Head : INT; (* индекс чтения *)
Tail : INT; (* индекс записи *)
Count : INT; (* количество элементов *)
END_VAR
VAR CONSTANT
n : INT := 15; (* 16 элементов *)
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
+6 -5
View File
@@ -5,12 +5,13 @@
Path : Общие Path : Общие
Name : STACK_I16 Name : STACK_I16
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK STACK_I16 FUNCTION_BLOCK STACK_I16
(* стек на 16 элементов типа INT*) (*
Стек на 16 элементов типа INT
*)
VAR_INPUT VAR_INPUT
Din : INT; (* Переменная для записи в стек *) Din : INT; (* Переменная для записи в стек *)
E : BOOL := TRUE; (* Включение стека *) E : BOOL := TRUE; (* Включение стека *)
@@ -19,9 +20,9 @@ VAR_INPUT
RST : BOOL; (* Обнуление стека *) RST : BOOL; (* Обнуление стека *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Dout : INT; Dout : INT; (* Значение, извлеченное из стека при POP *)
EMPTY : BOOL := TRUE; EMPTY : BOOL := TRUE; (* Флаг "стек пуст" *)
FULL : BOOL; FULL : BOOL; (* Флаг "стек заполнен" (достигнут предел n) *)
END_VAR END_VAR
VAR VAR
stack: ARRAY[0..n] OF INT; stack: ARRAY[0..n] OF INT;
+22 -23
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : STATUS_ANALOG_M Name : STATUS_ANALOG_M
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -23,31 +22,31 @@ FUNCTION_BLOCK STATUS_ANALOG_M
5 - аварийный по верхнему уровню 5 - аварийный по верхнему уровню
*) *)
VAR_INPUT VAR_INPUT
Input: REAL; Input: REAL; (* Контролируемое значение *)
fail_hi: REAL:=3.402823466E+38; fail_hi: REAL:=3.402823466E+38; (* Порог аварии по верхнему уровню *)
delta_fail_hi: REAL := 0; delta_fail_hi: REAL := 0; (* Гистерезис возврата из fail_hi (снятие при Input < fail_hi - delta_fail_hi) *)
time_fail_hi: TIME :=t#0s; time_fail_hi: TIME :=t#0s; (* Выдержка времени на срабатывание fail_hi *)
warn_hi: REAL:=3.402823466E+38; warn_hi: REAL:=3.402823466E+38; (* Порог предупреждения по верхнему уровню *)
delta_warn_hi: REAL := 0; delta_warn_hi: REAL := 0; (* Гистерезис возврата из warn_hi *)
time_warn_hi: TIME :=t#0s; time_warn_hi: TIME :=t#0s; (* Выдержка времени на срабатывание warn_hi *)
warn_low: REAL:=-3.402823466E+38; warn_low: REAL:=-3.402823466E+38; (* Порог предупреждения по нижнему уровню *)
delta_warn_low: REAL := 0; delta_warn_low: REAL := 0; (* Гистерезис возврата из warn_low *)
time_warn_low: TIME :=t#0s; time_warn_low: TIME :=t#0s; (* Выдержка времени на срабатывание warn_low *)
fail_low: REAL:=-3.402823466E+38; fail_low: REAL:=-3.402823466E+38; (* Порог аварии по нижнему уровню *)
delta_fail_low: REAL := 0; delta_fail_low: REAL := 0; (* Гистерезис возврата из fail_low *)
time_fail_low: TIME :=t#0s; time_fail_low: TIME :=t#0s; (* Выдержка времени на срабатывание fail_low *)
no_signal: REAL:=-3.402823466E+38; no_signal: REAL:=-3.402823466E+38; (* Порог отсутствия связи с датчиком *)
delta_no_signal: REAL := 0; delta_no_signal: REAL := 0; (* Гистерезис возврата из no_signal *)
time_no_signal: TIME :=T#0S; time_no_signal: TIME :=T#0S; (* Выдержка времени на срабатывание no_signal *)
In_fail_hi: BOOL := FALSE; In_fail_hi: BOOL := FALSE; (* Принудительная установка статуса fail_hi извне *)
In_warn_hi: BOOL := FALSE; In_warn_hi: BOOL := FALSE; (* Принудительная установка статуса warn_hi извне *)
In_warn_low: BOOL := FALSE; In_warn_low: BOOL := FALSE; (* Принудительная установка статуса warn_low извне *)
In_fail_low: BOOL := FALSE; In_fail_low: BOOL := FALSE; (* Принудительная установка статуса fail_low извне *)
In_no_signal: BOOL := FALSE; In_no_signal: BOOL := FALSE; (* Принудительная установка статуса no_signal извне *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Status: AnalogValueState; Status: AnalogValueState; (* Итоговый статус аналогового значения *)
END_VAR END_VAR
VAR VAR
fail_hi_st: BOOL; fail_hi_st: BOOL;
+22 -26
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : STATUS_ANALOG_M_I Name : STATUS_ANALOG_M_I
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -23,42 +22,39 @@ FUNCTION_BLOCK STATUS_ANALOG_M_I
5 - аварийный по верхнему уровню 5 - аварийный по верхнему уровню
*) *)
VAR_INPUT VAR_INPUT
Input: INT; Input: INT; (* Контролируемое значение *)
fail_hi: INT:=32767; fail_hi: INT:=32767; (* Порог аварии по верхнему уровню *)
delta_fail_hi: INT := 0; delta_fail_hi: INT := 0; (* Гистерезис возврата из fail_hi (снятие при Input < fail_hi - delta_fail_hi) *)
time_fail_hi: TIME :=t#0s; time_fail_hi: TIME :=t#0s; (* Выдержка времени на срабатывание fail_hi *)
warn_hi: INT:=32767; warn_hi: INT:=32767; (* Порог предупреждения по верхнему уровню *)
delta_warn_hi: INT := 0; delta_warn_hi: INT := 0; (* Гистерезис возврата из warn_hi *)
time_warn_hi: TIME :=t#0s; time_warn_hi: TIME :=t#0s; (* Выдержка времени на срабатывание warn_hi *)
warn_low: INT:=-32768; warn_low: INT:=-32768; (* Порог предупреждения по нижнему уровню *)
delta_warn_low: INT := 0; delta_warn_low: INT := 0; (* Гистерезис возврата из warn_low *)
time_warn_low: TIME :=t#0s; time_warn_low: TIME :=t#0s; (* Выдержка времени на срабатывание warn_low *)
fail_low: INT:=-32768; fail_low: INT:=-32768; (* Порог аварии по нижнему уровню *)
delta_fail_low: INT := 0; delta_fail_low: INT := 0; (* Гистерезис возврата из fail_low *)
time_fail_low: TIME :=t#0s; time_fail_low: TIME :=t#0s; (* Выдержка времени на срабатывание fail_low *)
no_signal: INT:=-32768; no_signal: INT:=-32768; (* Порог отсутствия связи с датчиком *)
delta_no_signal: INT := 0; delta_no_signal: INT := 0; (* Гистерезис возврата из no_signal *)
time_no_signal: TIME :=T#0S; time_no_signal: TIME :=T#0S; (* Выдержка времени на срабатывание no_signal *)
In_fail_hi: BOOL := FALSE; In_fail_hi: BOOL := FALSE; (* Принудительная установка статуса fail_hi извне *)
In_warn_hi: BOOL := FALSE; In_warn_hi: BOOL := FALSE; (* Принудительная установка статуса warn_hi извне *)
In_warn_low: BOOL := FALSE; In_warn_low: BOOL := FALSE; (* Принудительная установка статуса warn_low извне *)
In_fail_low: BOOL := FALSE; In_fail_low: BOOL := FALSE; (* Принудительная установка статуса fail_low извне *)
In_no_signal: BOOL := FALSE; In_no_signal: BOOL := FALSE; (* Принудительная установка статуса no_signal извне *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Status: AnalogValueState; Status: AnalogValueState; (* Итоговый статус аналогового значения *)
END_VAR END_VAR
VAR VAR
(* !!! ВНУТРЕННИЕ ВЫХОДНЫЕ ПЕРЕМЕННЫЕ!!! *)
fail_hi_st: BOOL; fail_hi_st: BOOL;
warn_hi_st: BOOL; warn_hi_st: BOOL;
normal_st: BOOL; normal_st: BOOL;
warn_low_st: BOOL; warn_low_st: BOOL;
fail_low_st: BOOL; fail_low_st: BOOL;
no_signal_st: BOOL; no_signal_st: BOOL;
(* !!! ВНУТРЕННИЕ НЕВЫХОДНЫЕ ПЕРЕМЕННЫЕ!!! *)
TON_fail_hi: TON; TON_fail_hi: TON;
TON_warn_hi: TON; TON_warn_hi: TON;
TON_warn_low: TON; TON_warn_low: TON;
@@ -5,19 +5,20 @@
Path : Общие Path : Общие
Name : Status_Connect_Counter Name : Status_Connect_Counter
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK Status_Connect_Counter FUNCTION_BLOCK Status_Connect_Counter
(* Статус связи с СВУ по счетчику*) (*
Статус связи с СВУ по счетчику
*)
VAR_INPUT VAR_INPUT
Counter: WORD; Counter: WORD; (* Счетчик, инкрементируемый удаленным устройством (СВУ) *)
T_Error: TIME; (* время для диагностирования ошибки*) T_Error: TIME; (* Время отсутствия изменений счетчика для диагностики обрыва связи *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
CounterIsChanged: BOOL; CounterIsChanged: BOOL; (* Флаг: счетчик изменился в текущем цикле *)
ERROR_CONNECT: BOOL; ERROR_CONNECT: BOOL; (* Флаг ошибки связи: счетчик не менялся дольше T_Error *)
END_VAR END_VAR
VAR VAR
CounterOld: WORD; CounterOld: WORD;
+6 -5
View File
@@ -5,18 +5,19 @@
Path : Общие Path : Общие
Name : Status_SU_Connect Name : Status_SU_Connect
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK Status_SU_Connect FUNCTION_BLOCK Status_SU_Connect
(* Статус связи с СВУ по серцебиению*) (*
Статус связи с СВУ по серцебиению
*)
VAR_INPUT VAR_INPUT
HeartBit: BOOL; HeartBit: BOOL; (* Сигнал "сердцебиения" от СВУ *)
T_Pulse: TIME; T_Pulse: TIME; (* Максимально допустимая длительность одного состояния HeartBit *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
ERROR_CONNECT: BOOL; ERROR_CONNECT: BOOL; (* Флаг ошибки связи: HeartBit не меняется дольше T_Pulse *)
END_VAR END_VAR
VAR VAR
TON_SU_1: TON; TON_SU_1: TON;
+5 -1
View File
@@ -5,11 +5,15 @@
Path : Общие Path : Общие
Name : TOF_RST Name : TOF_RST
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK TOF_RST FUNCTION_BLOCK TOF_RST
(*
Таймер выключения (TOF) с возможностью принудительного сброса RST.
При снятии IN выход Q остается TRUE еще в течение PT.
RST немедленно сбрасывает выход и таймер вне зависимости от IN.
*)
VAR_INPUT VAR_INPUT
IN: BOOL; // Управляющий сигнал IN: BOOL; // Управляющий сигнал
PT: TIME; // Время задержки выключения PT: TIME; // Время задержки выключения
+4 -5
View File
@@ -5,7 +5,6 @@
Path : Общие Path : Общие
Name : TONOF Name : TONOF
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -15,12 +14,12 @@ TONOF генерирует TON и TOF задержки для переменно
Задержка на вход T_ON, задержка на выход T_OFF Задержка на вход T_ON, задержка на выход T_OFF
*) *)
VAR_INPUT VAR_INPUT
IN : BOOL; IN : BOOL; (* Входной сигнал *)
T_ON : TIME := T#0s; (* Задержка на вход *) T_ON : TIME := T#0S; (* Задержка на вход *)
T_OFF : TIME := T#0s; (* Задержка на выход *) T_OFF : TIME := T#0S; (* Задержка на выход *)
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Q : BOOL; Q : BOOL; (* Выходной сигнал с учетом задержек включения/выключения *)
END_VAR END_VAR
VAR VAR
X : TON; X : TON;
+5 -1
View File
@@ -5,11 +5,15 @@
Path : Общие Path : Общие
Name : TP_RST Name : TP_RST
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION_BLOCK TP_RST FUNCTION_BLOCK TP_RST
(*
Формирователь одиночного импульса (TP) длительностью PT с возможностью принудительного сброса RST.
Повторный передний фронт IN во время выполнения импульса игнорируется.
RST немедленно прерывает выполняющийся импульс.
*)
VAR_INPUT VAR_INPUT
IN: BOOL; // Управляющий сигнал IN: BOOL; // Управляющий сигнал
PT: TIME; // Длительность импульса PT: TIME; // Длительность импульса
@@ -5,16 +5,15 @@
Path : Преобразование значений Path : Преобразование значений
Name : DWORD_OF_2WORD Name : DWORD_OF_2WORD
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION DWORD_OF_2WORD : DWORD FUNCTION DWORD_OF_2WORD : DWORD
(* Сборка DWORD из двух WORD *)
VAR_INPUT VAR_INPUT
W1 : WORD; W1 : WORD; (* Старшее слово (биты 16..31 результата) *)
W0 : WORD; W0 : WORD; (* Младшее слово (биты 0..15 результата) *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
DWORD_OF_2WORD := SHL(WORD_TO_DWORD(W1),16) OR WORD_TO_DWORD(W0); DWORD_OF_2WORD := SHL(WORD_TO_DWORD(W1),16) OR WORD_TO_DWORD(W0);
END_FUNCTION END_FUNCTION
@@ -5,13 +5,13 @@
Path : Преобразование значений Path : Преобразование значений
Name : DW_TO_REAL Name : DW_TO_REAL
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION DW_TO_REAL : REAL FUNCTION DW_TO_REAL : REAL
(* Побитовое переинтерпретирование DWORD как REAL (без преобразования значения) *)
VAR_INPUT VAR_INPUT
X : DWORD; X : DWORD; (* Значение для переинтерпретации *)
END_VAR END_VAR
VAR VAR
pt : POINTER TO REAL; pt : POINTER TO REAL;
@@ -5,7 +5,6 @@
Path : Преобразование значений Path : Преобразование значений
Name : NTC_termistor_T Name : NTC_termistor_T
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
@@ -5,13 +5,13 @@
Path : Преобразование значений Path : Преобразование значений
Name : REAL_TO_DW Name : REAL_TO_DW
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION REAL_TO_DW : DWORD FUNCTION REAL_TO_DW : DWORD
(* Побитовое переинтерпретирование REAL как DWORD (без преобразования значения) *)
VAR_INPUT VAR_INPUT
X : REAL; X : REAL; (* Значение для переинтерпретации *)
END_VAR END_VAR
VAR VAR
pt : POINTER TO DWORD; pt : POINTER TO DWORD;
@@ -5,16 +5,15 @@
Path : Преобразование значений Path : Преобразование значений
Name : WORD_OF_DWORD Name : WORD_OF_DWORD
Type : FUNCTION Type : FUNCTION
Exported : 2026-07-31 11:16:16
=============================================================================== ===============================================================================
*) *)
FUNCTION WORD_OF_DWORD : WORD FUNCTION WORD_OF_DWORD : WORD
(* Извлечение одного из двух 16-битных слов DWORD *)
VAR_INPUT VAR_INPUT
in : DWORD; in : DWORD; (* Исходное значение *)
N : BYTE; N : BYTE; (* Номер извлекаемого слова: 0 - младшее (биты 0..15), 1 - старшее (биты 16..31) *)
END_VAR END_VAR
(*----- IMPLEMENTATION -----*) (*----- IMPLEMENTATION -----*)
WORD_OF_DWORD := DWORD_TO_WORD(SHR(in,SHL(n,4))); WORD_OF_DWORD := DWORD_TO_WORD(SHR(in,SHL(n,4)));
END_FUNCTION END_FUNCTION
-7
View File
@@ -32,13 +32,8 @@ from __future__ import print_function
import os import os
import codecs import codecs
import re import re
import datetime
PRAGMA_RE = re.compile(r"^\s*\{[^}]*\}\s*") PRAGMA_RE = re.compile(r"^\s*\{[^}]*\}\s*")
# Единая метка времени на весь запуск экспорта (одинаковая во всех файлах).
EXPORT_TIMESTAMP = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# Имена служебных узлов дерева, которые не нужно показывать в поле Path # Имена служебных узлов дерева, которые не нужно показывать в поле Path
# (сравнение без учёта регистра). Сами узлы всё равно обходятся -- пропускаются # (сравнение без учёта регистра). Сами узлы всё равно обходятся -- пропускаются
# только их имена при формировании пути. # только их имена при формировании пути.
@@ -197,7 +192,6 @@ def build_header(project_name, device_name, path_parts, obj_name, type_label):
Path : Application/Logic/Motion Path : Application/Logic/Motion
Name : FB_Axis Name : FB_Axis
Type : FUNCTION_BLOCK Type : FUNCTION_BLOCK
Exported : 2026-07-30 14:32:18
=============================================================================== ===============================================================================
*) *)
""" """
@@ -211,7 +205,6 @@ def build_header(project_name, device_name, path_parts, obj_name, type_label):
" Path : %s" % rel_path, " Path : %s" % rel_path,
" Name : %s" % obj_name, " Name : %s" % obj_name,
" Type : %s" % type_label, " Type : %s" % type_label,
" Exported : %s" % EXPORT_TIMESTAMP,
sep, sep,
"*)", "*)",
"", "",