Files
PLC_Library/AI/PLC_Library_API.md
T

30 KiB
Raw Blame History

PLC_Library — API Reference (для использования LLM/ИИ)

Формат: справочник интерфейсов (аналог API-документации). Для каждого POU указаны: тип, путь в дереве проекта, входы/выходы с типами, значениями по умолчанию и назначением, а также краткое описание поведения и особые примечания. Тела реализации (код) намеренно не включены — только то, что нужно, чтобы вызвать блок правильно.

Язык: CoDeSys 3.5, Structured Text (ST). Скармливайте этот файл ИИ вместо исходников — этого достаточно, чтобы сгенерировать корректные вызовы блоков библиотеки.


Индекс


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

Управление лампой по коду состояния.

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_signalINT (диапазон по умолчанию ±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.


Общие правила / соглашения библиотеки

  1. Приоритет статусов во всех блоках статуса аналоговых сигналов (AIM725_Status, STATUS_ANALOG_M, STATUS_ANALOG_M_I) одинаков: no_signal > fail_hi > fail_low > warn_hi > warn_low > normal.
  2. Гистерезис срабатывания/возврата: срабатывание уровня — по достижению порога с задержкой time_* (аналог TON), возврат — при пересечении порог ± delta_* (без задержки).
  3. Блоки TOF_RST/TP_RST — это стандартные МЭК TOF/TP с добавленным принудительным входом RST (сброс приоритетнее IN).
  4. DW_TO_REAL/REAL_TO_DW — это не преобразование значения (не DWORD_TO_REAL), а побитовая реинтерпретация памяти через указатель. Использовать только когда явно нужна побитовая переупаковка (например, чтение REAL-регистра Modbus, пришедшего как два WORD → DWORD → REAL).
  5. QUEUE_I16/STACK_I16 — фиксированный размер 16 (n:=15 внутри), QUEUE_I32/STACK_I32 — размер 32. Чтобы изменить ёмкость — нужно менять исходник (константу n и объявление массива).
  6. DFS — не библиотечный вызываемый блок, а шаблон программы под конкретный размер графа (n:=12); предназначен для копирования и адаптации в проекте пользователя.
  7. Все входы с VAR_IN_OUT (только у Button_acceleration.Out) передаются по ссылке — вызывающая сторона должна сама объявить и инициализировать переменную, изменения применяются напрямую.
  8. Единицы времени — везде тип TIME (T#...), единицы физических величин указаны в комментариях к каждому входу/выходу (мА, В, Гц, °C, Ом, °C и т.д.).