8017d65662ad868e945f5cd002dc31e283de4627
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) и предназначен для копирования кода в пользовательскую программу, а не для использования "как есть" в виде библиотечного вызова.
Languages
Smalltalk
62.8%
Python
37.2%