30 KiB
PLC_Library — API Reference (для использования LLM/ИИ)
Формат: справочник интерфейсов (аналог API-документации). Для каждого POU указаны: тип, путь в дереве проекта, входы/выходы с типами, значениями по умолчанию и назначением, а также краткое описание поведения и особые примечания. Тела реализации (код) намеренно не включены — только то, что нужно, чтобы вызвать блок правильно.
Язык: CoDeSys 3.5, Structured Text (ST). Скармливайте этот файл ИИ вместо исходников — этого достаточно, чтобы сгенерировать корректные вызовы блоков библиотеки.
Индекс
- Filters — Фильтры
- Fastwel — Модули ввода/вывода
- Преобразование значений
- Общие — Common
- Иное
- Structs
- Общие правила / соглашения библиотеки
Filters — Фильтры
Path: Filters
ExpRunAverage — FUNCTION : REAL
Экспоненциальное скользящее среднее с постоянным коэффициентом.
FUNCTION ExpRunAverage : REAL
VAR_INPUT
In : REAL; // входное значение
Old : REAL; // предыдущее значение EMA (нужно хранить самому вызывающему)
K : REAL; // коэффициент сглаживания [0..1], чем больше — тем быстрее реакция
END_VAR
Формула: Out := (1-K)*Old + K*In. Без внутреннего состояния — вызывающий код сам хранит Old между циклами.
ExpRunAverageAdaptive — FUNCTION : REAL
Как ExpRunAverage, но коэффициент переключается на увеличенный K2, если скачок входа больше Delta (быстрая реакция на резкие изменения).
FUNCTION ExpRunAverageAdaptive : REAL
VAR_INPUT
In : REAL;
Old : REAL;
K1 : REAL; // обычный коэффициент
Delta : REAL; // порог |In-Old| для переключения на K2
K2 : REAL; // ускоренный коэффициент (обычно K2 > K1)
END_VAR
RunMiddleArifm — FUNCTION_BLOCK
Скользящее среднее арифметическое по кольцевому буферу (собственное состояние, хранит буфер сам).
FUNCTION_BLOCK RunMiddleArifm
VAR_INPUT
In : REAL; // входное значение
N : INT := 32; // размер окна усреднения, диапазон 0..32
RST : BOOL; // TRUE => переинициализация буфера текущим In
END_VAR
VAR_OUTPUT
Y : REAL; // результат — скользящее среднее
END_VAR
Особенность: при RST или на первом скане буфер заполняется значением In, а Y := In.
MultipleClick — FUNCTION_BLOCK
Детектор серии кликов кнопки (одиночный/двойной/тройной).
FUNCTION_BLOCK MultipleClick
VAR_INPUT
In : BOOL; // сигнал кнопки
TimeToWait : TIME := T#500MS; // макс. пауза между нажатиями, после — фиксация результата
TimeRelease : TIME := T#0S; // время удержания результата на выходах
END_VAR
VAR_OUTPUT
Click1 : BOOL; // TRUE — зафиксирован 1 клик
Click2 : BOOL; // TRUE — зафиксировано 2 клика
Click3 : BOOL; // TRUE — зафиксировано 3 клика
Click : WORD; // число нажатий (0, если результат уже "отпущен")
END_VAR
Fastwel — Модули ввода/вывода
Path: Fastwel
Преобразование "сырых" значений АЦП/кодов модулей Fastwel в физические единицы и обратно.
AIM721_AI — FUNCTION : REAL
FUNCTION AIM721_AI : REAL
VAR_INPUT
ADC : DINT; // код АЦП
END_VAR
АЦП → 0…20 мА (коэффициент модуля AIM721).
AIM722_AI — FUNCTION : REAL
FUNCTION AIM722_AI : REAL
VAR_INPUT
ADC : DINT;
END_VAR
АЦП → 0…20 мА (коэффициент модуля AIM722, отличается от AIM721).
AIM723_AI — FUNCTION : REAL
FUNCTION AIM723_AI : REAL
VAR_INPUT
ADC : DINT;
END_VAR
АЦП → 4…20 мА.
AIM726_AI — FUNCTION : REAL
FUNCTION AIM726_AI : REAL
VAR_INPUT
ADC : DWORD; // код АЦП (DWORD!)
END_VAR
АЦП → 0…40 В.
AIM727_AI — FUNCTION : REAL
FUNCTION AIM727_AI : REAL
VAR_INPUT
ADC : DINT; // код АЦП (DINT — отличие от AIM726)
END_VAR
АЦП → 0…40 В.
AIM791_AI — FUNCTION : REAL
FUNCTION AIM791_AI : REAL
VAR_INPUT
ADC : WORD;
RANGE : BYTE := 0; // 0=0..5мА; 1=0..20мА; 2=4..20мА
END_VAR
Универсальный вход, диапазон выбирается RANGE. Значение по умолчанию RANGE вне 0/1/2 → возвращает 0.0.
AIM730_AO — FUNCTION : WORD
FUNCTION AIM730_AO : WORD
VAR_INPUT
DAC : REAL; // миллиамперы
RANGE : BYTE; // 0=0..20мА; 1=4..20мА
END_VAR
мА → код ЦАП. При RANGE=1 и DAC<4 принудительно возвращает код, соответствующий 4 мА.
AIM731_AO — FUNCTION : WORD
FUNCTION AIM731_AO : WORD
VAR_INPUT
DAC : REAL; // вольты
RANGE : BYTE; // 0 = -10..+10В; 1 = 0..+10В
END_VAR
Вольты → код ЦАП модуля AIM731.
DIM764_DI — FUNCTION : REAL
FUNCTION DIM764_DI : REAL
VAR_INPUT
IN : DWORD; // период/интервал от модуля, единицы АЦП
RANGE : BYTE; // 0=Period; 1=Interval
END_VAR
Возвращает частоту в Гц. При IN=0 и RANGE=0 — возвращает 0 (защита от деления на 0).
AIM725_Status — FUNCTION_BLOCK
Формирование статуса аналогового канала с гистерезисом/задержками + диагностика по битам статуса модуля.
FUNCTION_BLOCK AIM725_Status
VAR_INPUT
Input : REAL; // контролируемое значение
fail_hi : REAL := 3.402823466E+38;
delta_fail_hi : REAL := 0;
time_fail_hi : TIME := T#0S;
warn_hi : REAL := 3.402823466E+38;
delta_warn_hi : REAL := 0;
time_warn_hi : TIME := T#0S;
warn_low : REAL := -3.402823466E+38;
delta_warn_low : REAL := 0;
time_warn_low : TIME := T#0S;
fail_low : REAL := -3.402823466E+38;
delta_fail_low : REAL := 0;
time_fail_low : TIME := T#0S;
time_no_signal : TIME := T#0S;
Modul_status : BYTE; // байт диагностики модуля АЦП (побитовые флаги ошибок канала)
Chanel_num : BYTE; // номер канала модуля (1 или 2) — выбирает, какие биты Modul_status проверять
END_VAR
VAR_OUTPUT
Status : AnalogValueState; // итоговый статус (см. раздел Structs)
T_mod : INT; // Input, приведённое к INT; -500 при no_signal
END_VAR
Приоритет статусов: no_signal > fail_hi > fail_low > warn_hi > warn_low > normal.
no_signal срабатывает если: Input <= -200, либо соответствующие биты Modul_status (зависящие от Chanel_num), либо биты 2/3 (общие ошибки модуля).
Преобразование значений
Path: Преобразование значений
DW_TO_REAL — FUNCTION : REAL
FUNCTION DW_TO_REAL : REAL
VAR_INPUT
X : DWORD;
END_VAR
Побитовая реинтерпретация DWORD как REAL через указатель (ADR) — НЕ конвертация значения. Платформозависимо.
REAL_TO_DW — FUNCTION : DWORD
FUNCTION REAL_TO_DW : DWORD
VAR_INPUT
X : REAL;
END_VAR
Обратная операция к DW_TO_REAL. Побитовая реинтерпретация.
DWORD_OF_2WORD — FUNCTION : DWORD
FUNCTION DWORD_OF_2WORD : DWORD
VAR_INPUT
W1 : WORD; // старшее слово, биты 16..31 результата
W0 : WORD; // младшее слово, биты 0..15 результата
END_VAR
WORD_OF_DWORD — FUNCTION : WORD
FUNCTION WORD_OF_DWORD : WORD
VAR_INPUT
in : DWORD; // исходное значение
N : BYTE; // 0 = младшее слово (биты 0..15), 1 = старшее (биты 16..31)
END_VAR
Norm_real — FUNCTION : REAL
Линейная нормировка (масштабирование по двум опорным точкам).
FUNCTION Norm_real : REAL
VAR_INPUT
X : REAL; // входное (ненормированное) значение
X1 : REAL; // точка 1, вход
Y1 : REAL; // точка 1, выход
X2 : REAL; // точка 2, вход
Y2 : REAL; // точка 2, выход
END_VAR
Если X2=X1 — возвращает Y1 (защита от деления на 0).
NTC_termistor_T — FUNCTION : REAL
Перевод сопротивления NTC-термистора в температуру (уравнение Beta).
FUNCTION NTC_termistor_T : REAL
VAR_INPUT
Res : REAL; // измеренное сопротивление
R0 : REAL; // сопротивление при температуре T0
T0 : REAL; // опорная температура, °C
b : REAL; // коэффициент Beta термистора
END_VAR
Возвращает температуру в °C. При Res<=0, R0<=0 или b=0 возвращает 0.0.
Общие — Common
Path: Общие
Дискретные сигналы / кнопки / таймеры
Button_acceleration — FUNCTION_BLOCK
Ускоренное изменение значения при удержании кнопки (для регулировки уставок и т.п.).
FUNCTION_BLOCK Button_acceleration
VAR_INPUT
Button : BOOL;
D_0 : REAL := 0; // приращение при одиночном (коротком) нажатии
T_W_1 : TIME := T#0S; // время до начала "короткого удержания"
T_D_1 : TIME := T#200MS; // шаг приращения при коротком удержании
D_1 : REAL := 0; // величина приращения на шаге T_D_1
T_W_2 : TIME := T#0S; // время до начала "длинного удержания"
T_D_2 : TIME := T#200MS; // шаг приращения при длинном удержании
D_2 : REAL := 0; // величина приращения на шаге T_D_2
Zeroes : BOOL := FALSE; // если TRUE — обнулять Out, когда |Out| < |D_0|
END_VAR
VAR_IN_OUT
Out : REAL; // изменяемое значение (передаётся и изменяется по ссылке!)
END_VAR
⚠️ Нет VAR_OUTPUT — результат только через VAR_IN_OUT Out.
Pulse_Switch — FUNCTION_BLOCK
FUNCTION_BLOCK Pulse_Switch
VAR_INPUT
Switch_ctrl : BOOL;
END_VAR
VAR_OUTPUT
Switch_on : BOOL; // импульс 500мс при фронте 0->1
Switch_off : BOOL; // импульс 500мс при фронте 1->0
END_VAR
TONOF — FUNCTION_BLOCK
Комбинированная задержка включения (TON) + выключения (TOF) для одного сигнала.
FUNCTION_BLOCK TONOF
VAR_INPUT
IN : BOOL;
T_ON : TIME := T#0S; // задержка появления TRUE на Q
T_OFF : TIME := T#0S; // задержка снятия TRUE с Q
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
TOF_RST — FUNCTION_BLOCK
Таймер выключения (TOF) с принудительным сбросом.
FUNCTION_BLOCK TOF_RST
VAR_INPUT
IN : BOOL;
PT : TIME; // задержка выключения
RST : BOOL; // немедленный сброс Q и таймера, приоритет над IN
END_VAR
VAR_OUTPUT
Q : BOOL;
ET : TIME; // текущее время таймера
END_VAR
TP_RST — FUNCTION_BLOCK
Одиночный импульс (TP) с принудительным сбросом.
FUNCTION_BLOCK TP_RST
VAR_INPUT
IN : BOOL; // фронт 0->1 запускает импульс (повторный фронт во время импульса игнорируется)
PT : TIME; // длительность импульса
RST : BOOL; // немедленно прерывает импульс
END_VAR
VAR_OUTPUT
Q : BOOL;
ET : TIME;
END_VAR
BLINK_LMP — FUNCTION_BLOCK
Управление лампой по коду состояния.
FUNCTION_BLOCK BLINK_LMP
VAR_INPUT
State : WORD := 0; // 0=выкл; 1=вкл; 2/3/4=мигание с частотой 1/2/3
Inp_BL_1 : BOOL := FALSE; // внешний "пульсар" (меандр) частоты 1
Inp_BL_2 : BOOL := FALSE; // частоты 2
Inp_BL_3 : BOOL := FALSE; // частоты 3
END_VAR
VAR_OUTPUT
LMP : BOOL;
END_VAR
BUZZER_CTRL — FUNCTION_BLOCK
Управление звонком/зуммером по коду состояния с отключением звука (временным и перманентным).
FUNCTION_BLOCK BUZZER_CTRL
VAR_INPUT
State : WORD := 0; // 0=выкл;1=вкл;2/3/4=мигание частота1/2/3
Sound_off : BOOL; // кнопка отключения звука
Inp_BL_1 : BOOL := FALSE; // пульсар частоты 1
Inp_BL_2 : BOOL := FALSE; // пульсар частоты 2
Inp_BL_3 : BOOL := FALSE; // пульсар частоты 3
PermanentOFF_Enable : BOOL := FALSE; // разрешить перманентное отключение звука
T_PermanentOFF : TIME := T#10S; // время удержания Sound_off для перманентного откл.
END_VAR
VAR_OUTPUT
BUZZER : BOOL;
END_VAR
CONFIRMATION — FUNCTION_BLOCK
Логика квитирования аварии (лампы + звонок).
FUNCTION_BLOCK CONFIRMATION
VAR_INPUT
Alarm : BOOL; // авария активна
ControlState_On : BOOL; // управление ведётся с данного поста
Sound_Off : BOOL; // сигнал снятия звука
Confirmation : BOOL; // сигнал квитирования
END_VAR
VAR_OUTPUT
Lamp_Alarm_C : WORD; // код для лампы аварии (0/1/2)
Lamp_Confirmation_C : WORD; // код для лампы квитирования (0/1)
Buzzer_C : WORD; // код для зуммера (0/2)
END_VAR
Коды ламп совместимы с входом State/Inp_BL_* блоков BLINK_LMP/BUZZER_CTRL (2 = "мигание частота 1").
Пороговые сигналы / гистерезис
HYST — FUNCTION_BLOCK
Гистерезисный компаратор с раздельными порогами включения/выключения (прямая и обратная логика).
FUNCTION_BLOCK HYST
VAR_INPUT
In : REAL; // контролируемое значение
ON : REAL; // порог срабатывания
OFF : REAL; // порог возврата
END_VAR
VAR_OUTPUT
Q : BOOL; // состояние компаратора
win : BOOL; // TRUE — значение внутри зоны гистерезиса (неопределённая зона)
END_VAR
Если ON >= OFF — прямая логика (растущий сигнал включает); если ON < OFF — обратная (падающий сигнал включает).
ALARM_1 — FUNCTION_BLOCK
Контроль выхода X за диапазон [LO_1..HI_1] с гистерезисом.
FUNCTION_BLOCK ALARM_1
VAR_INPUT
X : REAL;
LO_1 : REAL;
HI_1 : REAL;
HYS : REAL; // полный гистерезис (берётся ±HYS/2 от границы)
END_VAR
VAR_OUTPUT
Q1_LO : BOOL; // X ниже LO_1
Q1_HI : BOOL; // X выше HI_1
END_VAR
ALARM_2 — FUNCTION_BLOCK
То же, для двух независимых диапазонов одновременно.
FUNCTION_BLOCK ALARM_2
VAR_INPUT
X : REAL;
LO_1, HI_1 : REAL;
LO_2, HI_2 : REAL;
HYS : REAL;
END_VAR
VAR_OUTPUT
Q1_LO, Q1_HI : BOOL;
Q2_LO, Q2_HI : BOOL;
END_VAR
ALARM_3 — FUNCTION_BLOCK
То же, для трёх диапазонов одновременно.
FUNCTION_BLOCK ALARM_3
VAR_INPUT
X : REAL;
LO_1, HI_1 : REAL;
LO_2, HI_2 : REAL;
LO_3, HI_3 : REAL;
HYS : REAL;
END_VAR
VAR_OUTPUT
Q1_LO, Q1_HI : BOOL;
Q2_LO, Q2_HI : BOOL;
Q3_LO, Q3_HI : BOOL;
END_VAR
Статус аналоговых сигналов
STATUS_ANALOG_M — FUNCTION_BLOCK
Статус аналогового значения REAL с гистерезисом возврата и задержками срабатывания по каждому уровню; поддерживает принудительную установку статуса извне.
FUNCTION_BLOCK STATUS_ANALOG_M
VAR_INPUT
Input : REAL;
fail_hi : REAL := 3.402823466E+38;
delta_fail_hi : REAL := 0;
time_fail_hi : TIME := T#0S;
warn_hi : REAL := 3.402823466E+38;
delta_warn_hi : REAL := 0;
time_warn_hi : TIME := T#0S;
warn_low : REAL := -3.402823466E+38;
delta_warn_low : REAL := 0;
time_warn_low : TIME := T#0S;
fail_low : REAL := -3.402823466E+38;
delta_fail_low : REAL := 0;
time_fail_low : TIME := T#0S;
no_signal : REAL := -3.402823466E+38;
delta_no_signal : REAL := 0;
time_no_signal : TIME := T#0S;
In_fail_hi : BOOL := FALSE; // принудительно выставить статус fail_hi
In_warn_hi : BOOL := FALSE;
In_warn_low : BOOL := FALSE;
In_fail_low : BOOL := FALSE;
In_no_signal : BOOL := FALSE;
END_VAR
VAR_OUTPUT
Status : AnalogValueState;
END_VAR
Приоритет: no_signal > fail_hi > fail_low > warn_hi > warn_low > normal. Возврат из состояния — при пересечении порога ± delta_*, срабатывание — с задержкой time_* (TON).
STATUS_ANALOG_M_I — FUNCTION_BLOCK
Полный аналог STATUS_ANALOG_M, но все пороги/входное значение типа INT, а не REAL. Сигнатура идентична по составу переменных (см. выше), только типы Input, fail_hi, delta_fail_hi, warn_hi, delta_warn_hi, warn_low, delta_warn_low, fail_low, delta_fail_low, no_signal, delta_no_signal — INT (диапазон по умолчанию ±32767/-32768).
Диагностика связи
Status_SU_Connect — FUNCTION_BLOCK
Контроль связи по "сердцебиению" (сигнал должен периодически менять состояние).
FUNCTION_BLOCK Status_SU_Connect
VAR_INPUT
HeartBit : BOOL; // меняющийся сигнал от удалённого устройства
T_Pulse : TIME; // макс. допустимая длительность одного состояния HeartBit
END_VAR
VAR_OUTPUT
ERROR_CONNECT : BOOL; // TRUE — HeartBit не менялся дольше T_Pulse
END_VAR
Status_Connect_Counter — FUNCTION_BLOCK
Контроль связи по инкрементируемому счётчику от удалённого устройства.
FUNCTION_BLOCK Status_Connect_Counter
VAR_INPUT
Counter : WORD; // счётчик, инкрементируемый удалённым устройством
T_Error : TIME; // время без изменений счётчика для фиксации обрыва связи
END_VAR
VAR_OUTPUT
CounterIsChanged : BOOL; // TRUE в цикле, где счётчик изменился
ERROR_CONNECT : BOOL; // TRUE — счётчик не менялся дольше T_Error
END_VAR
Регулирование
PIDcontrol — FUNCTION_BLOCK
ПИД-регулятор с фильтрацией D-составляющей, зоной нечувствительности, антивиндапом и ручным режимом.
FUNCTION_BLOCK PIDcontrol
VAR_INPUT
ProcessVariable : REAL := 0.0; // измеренное значение (обратная связь)
Setpoint : REAL := 0.0; // уставка
Kp : REAL := 0.001; // пропорциональный коэффициент
Ki : REAL := 0.001; // интегральный коэффициент
Kd : REAL := 0.0; // дифференциальный коэффициент
Kdf : REAL := 1.0; // коэффициент фильтра D-части (1/Tdf)
DBmax : REAL := 0.01; // верхняя граница зоны нечувствительности (по ошибке)
DBmin : REAL := -0.01; // нижняя граница зоны нечувствительности
OutMax : REAL := 100.0; // верхний предел выхода
OutMin : REAL := 0.0; // нижний предел выхода
Ts : REAL := 0.1; // период дискретизации, с
Manual : REAL := 25.0; // значение выхода в ручном режиме
ManOn : BOOL := FALSE; // TRUE — ручной режим
Reset : BOOL := FALSE; // сброс интегратора и D-части
AntiWindup : BOOL := TRUE; // включить компенсацию накопления интегратора
END_VAR
VAR_OUTPUT
Out : REAL := 0.0; // выходной сигнал регулятора
Err : REAL := 0.0; // текущая ошибка регулирования (Setpoint-ProcessVariable)
OutLimited : BOOL := FALSE; // TRUE — выход ограничен (насыщение) или некорректны параметры
END_VAR
Если OutMin>=OutMax, DBmin>=DBmax или Ts<=0 — блок сразу выставляет Out:=0, OutLimited:=TRUE и выходит.
Структуры данных (очереди/стеки)
Общая сигнатура для всех 4 блоков (QUEUE_I16, QUEUE_I32, STACK_I16, STACK_I32) — идентична, отличаются только ёмкость и дисциплина (FIFO/LIFO):
FUNCTION_BLOCK <Имя>
VAR_INPUT
Din : INT; // значение для записи
E : BOOL := TRUE; // включение блока (при FALSE — операции не выполняются)
POP : BOOL; // извлечь элемент
PUSH: BOOL; // добавить элемент
RST : BOOL; // сброс (очистка)
END_VAR
VAR_OUTPUT
Dout : INT; // извлечённое значение (при POP)
EMPTY : BOOL := TRUE; // TRUE — пусто
FULL : BOOL; // TRUE — заполнено (достигнут предел)
END_VAR
| Имя | Дисциплина | Ёмкость |
|---|---|---|
QUEUE_I16 |
FIFO (очередь) | 16 элементов INT |
QUEUE_I32 |
FIFO (очередь) | 32 элемента INT |
STACK_I16 |
LIFO (стек) | 16 элементов INT |
STACK_I32 |
LIFO (стек) | 32 элемента INT |
Примечание: при одновременном PUSH и POP в одном скане — оба выполняются (POP обрабатывается первым в теле, затем PUSH).
Иное
Path: Иное
DFS — PROGRAM
Обход графа в глубину (Depth-First Search) по матрице смежности фиксированного размера.
PROGRAM DFS
VAR_INPUT
graph : POINTER TO ARRAY[1..n, 1..n] OF BOOL; // матрица смежности, редактируется извне: DFS.graph[i,j]
connected : POINTER TO ARRAY[1..n] OF INT; // выход: список посещённых вершин (заполняется программой)
Start : INT := 1; // вершина, с которой начинается обход
END_VAR
VAR CONSTANT
n : INT := 12; // фиксированное количество вершин графа
END_VAR
⚠️ Это PROGRAM, а не FUNCTION_BLOCK — не инстанцируется через : в декларации переменной, а копируется целиком в проект пользователя (как указано в исходном комментарии Копировать в свою программу). Использует STACK_I16 внутри. Результат — заполненный массив connected^[1..k-1] с номерами вершин, достижимых из Start.
Structs
Path: Structs
AnalogValueState — DUT (перечисление)
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE AnalogValueState :
(
undefined := INT#0,
normal := INT#1,
warn_low := INT#2,
fail_low := INT#3,
warn_hi := INT#4,
fail_hi := INT#5,
no_signal := -INT#1
) := undefined;
END_TYPE
qualified_only — обращаться только как AnalogValueState.normal и т.п. (без квалификатора не компилируется).
Используется как тип выхода Status в AIM725_Status, STATUS_ANALOG_M, STATUS_ANALOG_M_I.
Общие правила / соглашения библиотеки
- Приоритет статусов во всех блоках статуса аналоговых сигналов (
AIM725_Status,STATUS_ANALOG_M,STATUS_ANALOG_M_I) одинаков:no_signal > fail_hi > fail_low > warn_hi > warn_low > normal. - Гистерезис срабатывания/возврата: срабатывание уровня — по достижению порога с задержкой
time_*(аналог TON), возврат — при пересечениипорог ± delta_*(без задержки). - Блоки
TOF_RST/TP_RST— это стандартные МЭК TOF/TP с добавленным принудительным входомRST(сброс приоритетнееIN). DW_TO_REAL/REAL_TO_DW— это не преобразование значения (неDWORD_TO_REAL), а побитовая реинтерпретация памяти через указатель. Использовать только когда явно нужна побитовая переупаковка (например, чтение REAL-регистра Modbus, пришедшего как два WORD → DWORD → REAL).QUEUE_I16/STACK_I16— фиксированный размер 16 (n:=15внутри),QUEUE_I32/STACK_I32— размер 32. Чтобы изменить ёмкость — нужно менять исходник (константуnи объявление массива).DFS— не библиотечный вызываемый блок, а шаблон программы под конкретный размер графа (n:=12); предназначен для копирования и адаптации в проекте пользователя.- Все входы с
VAR_IN_OUT(только уButton_acceleration.Out) передаются по ссылке — вызывающая сторона должна сама объявить и инициализировать переменную, изменения применяются напрямую. - Единицы времени — везде тип
TIME(T#...), единицы физических величин указаны в комментариях к каждому входу/выходу (мА, В, Гц, °C, Ом, °C и т.д.).