PLC_Library

Библиотека функций (FUNCTION) и функциональных блоков (FUNCTION_BLOCK) на языке Structured Text (ST) для CoDeSys 3.5. Библиотека содержит фильтры сигналов, обработку кнопок и дискретных сигналов, работу со статусами и авариями аналоговых величин, преобразование типов данных, драйверы модулей Fastwel и вспомогательные структуры/алгоритмы.

Структура

PLC_Library/
├── Filters/                    — фильтрация и усреднение сигналов
├── Fastwel/                    — преобразование сигналов модулей Fastwel (АЦП/ЦАП)
├── Преобразование значений/    — преобразование типов данных
├── Общие/                      — общие блоки (кнопки, таймеры, статусы, очереди/стеки, ПИД, сигнализация)
├── Иное/                       — прочие алгоритмы
└── Structs/                    — пользовательские типы данных

Filters — Фильтры

Имя Тип Описание
ExpRunAverage FUNCTION (REAL) Экспоненциальное скользящее среднее с постоянным коэффициентом K.
ExpRunAverageAdaptive FUNCTION (REAL) Экспоненциальное скользящее среднее с адаптивным коэффициентом: если изменение входа превышает Delta, используется увеличенный коэффициент K2 вместо K1 (быстрая реакция на резкие изменения).
RunMiddleArifm FUNCTION_BLOCK Скользящее среднее арифметическое по кольцевому буферу размером до 32 отсчётов (N), с возможностью сброса/переинициализации (RST).
MultipleClick FUNCTION_BLOCK Детектор серии нажатий кнопки (одиночный/двойной/тройной клик) по паузе между нажатиями TimeToWait, с удержанием результата на TimeRelease.

Fastwel — Модули ввода/вывода Fastwel

Функции перевода "сырых" значений АЦП/кодов модулей Fastwel в физические единицы (мА, В, Гц) и обратно (ЦАП), а также формирование статуса аналогового канала.

Имя Тип Описание
AIM721_AI FUNCTION (REAL) АЦП → 0…20 мА.
AIM722_AI FUNCTION (REAL) АЦП → 0…20 мА (свой коэффициент модуля).
AIM723_AI FUNCTION (REAL) АЦП → 4…20 мА.
AIM726_AI FUNCTION (REAL) АЦП (DWORD) → 0…40 В.
AIM727_AI FUNCTION (REAL) АЦП (DINT) → 0…40 В.
AIM791_AI FUNCTION (REAL) АЦП → 0…5 мА / 0…20 мА / 4…20 мА (выбор диапазона через RANGE).
AIM730_AO FUNCTION (WORD) мА (0…20 или 4…20, выбор RANGE) → код ЦАП модуля AIM730.
AIM731_AO FUNCTION (WORD) В (±10 или 0…10, выбор RANGE) → код ЦАП модуля AIM731.
DIM764_DI FUNCTION (REAL) Период/интервал импульсного входа модуля → частота в Гц (выбор режима RANGE).
AIM725_Status FUNCTION_BLOCK Формирование статуса аналогового канала (AnalogValueState): аварии/предупреждения по верхнему и нижнему порогам с гистерезисом и выдержками времени, а также диагностика обрыва связи по битам Modul_status конкретного канала (Chanel_num). Дополнительно выдаёт T_mod — значение, приведённое к INT.

Преобразование значений — Conversions

Имя Тип Описание
DW_TO_REAL FUNCTION (REAL) Побитовая реинтерпретация DWORD как REAL (без изменения значения, через указатель).
REAL_TO_DW FUNCTION (DWORD) Побитовая реинтерпретация REAL как DWORD (обратное преобразование).
DWORD_OF_2WORD FUNCTION (DWORD) Сборка DWORD из двух WORD (старшее + младшее слово).
WORD_OF_DWORD FUNCTION (WORD) Извлечение младшего или старшего слова (WORD) из DWORD по флагу N.
Norm_real FUNCTION (REAL) Линейная нормировка значения X по двум точкам (X1,Y1)(X2,Y2) (масштабирование диапазона).
NTC_termistor_T FUNCTION (REAL) Перевод сопротивления NTC-термистора в температуру по уравнению Бета (R0, T0, b).

Общие — Common

Дискретные сигналы / кнопки / таймеры

Имя Тип Описание
Button_acceleration FUNCTION_BLOCK Ускоренное изменение значения (Out, VAR_IN_OUT) при удержании кнопки: одиночный клик даёт приращение D_0, короткое удержание — приращения D_1 с шагом T_D_1 после T_W_1, длительное удержание — D_2 с шагом T_D_2 после T_W_2. Есть опция обнуления Zeroes.
Pulse_Switch FUNCTION_BLOCK Формирует импульсы по 500 мс по переднему (Switch_on) и заднему (Switch_off) фронтам управляющего сигнала.
TONOF FUNCTION_BLOCK Комбинированная задержка включения/выключения (TON + TOF) для одного сигнала.
TOF_RST FUNCTION_BLOCK Таймер выключения (TOF) с принудительным сбросом RST.
TP_RST FUNCTION_BLOCK Одиночный импульс (TP) с принудительным сбросом RST; повторный фронт во время импульса игнорируется.
BLINK_LMP FUNCTION_BLOCK Управление лампой по коду состояния State (выкл/вкл/мигание с одной из 3 частот, задаваемых внешними пульсарами).
BUZZER_CTRL FUNCTION_BLOCK Управление звонком/зуммером по коду состояния, с возможностью временного и перманентного отключения звука (Sound_off, PermanentOFF_Enable).
CONFIRMATION FUNCTION_BLOCK Логика квитирования аварии: формирует сигналы ламп аварии/квитирования и управления звонком.

Пороговые сигналы / гистерезис

Имя Тип Описание
HYST FUNCTION_BLOCK Гистерезисный компаратор с раздельными порогами включения (ON) и выключения (OFF); поддерживает прямую и обратную логику.
ALARM_1 FUNCTION_BLOCK Контроль значения X на выход за один диапазон [LO_1…HI_1] с гистерезисом HYS.
ALARM_2 FUNCTION_BLOCK То же для двух диапазонов одновременно.
ALARM_3 FUNCTION_BLOCK То же для трёх диапазонов одновременно.

Статус аналоговых сигналов

Имя Тип Описание
STATUS_ANALOG_M FUNCTION_BLOCK Формирование статуса аналогового значения REAL (AnalogValueState) с гистерезисом возврата и задержками срабатывания по каждому из уровней (fail/warn hi/low, no_signal); поддерживает принудительную установку каждого статуса извне.
STATUS_ANALOG_M_I FUNCTION_BLOCK Аналог STATUS_ANALOG_M, но для входа типа INT.

Диагностика связи

Имя Тип Описание
Status_SU_Connect FUNCTION_BLOCK Контроль связи по "сердцебиению" (HeartBit): авария, если сигнал не меняет состояние дольше T_Pulse.
Status_Connect_Counter FUNCTION_BLOCK Контроль связи по счётчику Counter от удалённого устройства: авария, если счётчик не меняется дольше T_Error.

Регулирование

Имя Тип Описание
PIDcontrol FUNCTION_BLOCK ПИД-регулятор с фильтрацией дифференциальной составляющей, зоной нечувствительности (DBmin/DBmax), ограничением выхода, антивиндапом и ручным режимом (ManOn/Manual).

Структуры данных

Имя Тип Описание
QUEUE_I16 FUNCTION_BLOCK Кольцевая очередь FIFO на 16 элементов типа INT (PUSH/POP, флаги EMPTY/FULL, сброс RST).
QUEUE_I32 FUNCTION_BLOCK Кольцевая очередь FIFO на 32 элемента типа INT (PUSH/POP, флаги EMPTY/FULL, сброс RST).
STACK_I16 FUNCTION_BLOCK Стек LIFO на 16 элементов типа INT (PUSH/POP, флаги EMPTY/FULL, сброс RST).
STACK_I32 FUNCTION_BLOCK Стек LIFO на 32 элемента типа INT (PUSH/POP, флаги EMPTY/FULL, сброс RST).

Иное — Other

Имя Тип Описание
DFS PROGRAM Обход графа в глубину (Depth-First Search) по матрице смежности graph фиксированного размера (12 вершин); использует STACK_I16. Возвращает список посещённых из Start вершин в массиве connected. Предназначен для копирования в пользовательскую программу.

Structs — Пользовательские типы

Имя Тип Описание
AnalogValueState DUT (перечисление, qualified_only, strict) Статус аналогового значения: undefined(0), normal(1), warn_low(2), fail_low(3), warn_hi(4), fail_hi(5), no_signal(-1). Используется в AIM725_Status, STATUS_ANALOG_M, STATUS_ANALOG_M_I.

Замечания по использованию

  • Функции DW_TO_REAL / REAL_TO_DW выполняют побитовую реинтерпретацию через указатель (ADR), а не преобразование значения — использовать осторожно, с учётом платформозависимости работы с указателями.
  • Блоки STATUS_ANALOG_M[_I] и AIM725_Status используют единый тип AnalogValueState и схожую логику приоритетов статусов: no_signal > fail_hi > fail_low > warn_hi > warn_low > normal.
  • TOF_RST и TP_RST — версии стандартных МЭК-таймеров TOF/TP с добавленным входом принудительного сброса RST.
  • QUEUE_I16 и STACK_I16 имеют фиксированный размер 16 элементов (константа n:=15); для изменения размера нужно менять константу n и размер массива.
  • DFS рассчитан на графы фиксированного размера (константа n:=12) и предназначен для копирования кода в пользовательскую программу, а не для использования "как есть" в виде библиотечного вызова.
S
Description
No description provided
Readme MIT
2.6 MiB
Languages
Smalltalk 62.8%
Python 37.2%