|
Реализация обработки кнопки сброса сигнализации в Owen Logic
(перевод)
ВВЕДЕНИЕ
По разным причинам заинтересовался программированием для предупредительной противоаварийной защиты (ПАЗ). Вышел на библиотеку PLCopen (набор алгоритмов, диаграмм состояния), которая реализована для различных ПЛК.
Естественно, что для программируемых реле (ПР) библиотека избыточна и невостребована, особенно в части дублирования и троирования датчиков.
Но, уже успел прочитать, перевести...
Предлагаю вольный перевод статьи об одном из элементов библиотеки функциональных блоков (ФБ) для комплекса программирования CoDeSys.
CODESYS Safety SIL2 - Library: PLCopen Safety FBs - SF_ResetButton
Перевод дополнен изображениями и пояснениями из другого источника - редакции описания библиотеки безопасных элементов PLCOpen
PLCopen - Technical Committee 5 – Safety Software Technical Specification Part 1: Concepts and Function Blocks Version 2.01 – Official Release
Функциональный блок обработки кнопки сброса сигнализации, несомненно, возможно реализовать проще, чем предлагается в статье - подключив к дискретному входу последовательно функциональные блоки подавления "дребезга" контактов и выделения нарастающего фронта или, даже, одного функционального блока выделения нарастающего фронта.
Варианты упрощённой реализации - скрин программы на FBD в среде Owen Logic
Но, на примере простого, но достаточно полезного ФБ, было интересно познакомиться со стилем и миром "безопасного" программирования.
Несмотря на то, что библиотека описывает состав, названия и диапазон значений обязательных входов и выходов, для ФБ SF_ResetButton эти правила не соблюдаются - вход Activate назван ResetRequested, вход S_AutoReset отсутствует (понятно, что с целью эффективной реализации без ненужных сущностей). В исходном тексте присутствуют ошибки - вход ResetRequested в части иллюстраций и текстов назван ResetRequest (как одноимённый выход сопряжённого ФБ).
В оригинальной статье имеются ссылки на документы:- PLCopen – Technical Committee 5 – Safety Software
- ISO 13849-1:2015
Они отсутствуют в свободном доступе и могут быть приобретены за оплату на сайтах соответствующих организаций.
Кроме того, стандарт ISO 13849-1:2015 в настоящий момент уже не действует и заменён на ISO 13849-1:2023.
1. ПРИМЕНЁННЫЕ СТАНДАРТЫ БЕЗОПАСНОСТИ
SF_ResetButton - это сертифицированный функциональный блок PLCopen. Подробнее о применяемых стандартах смотрите в разделе: "PLCopen – Technical Committee 5 – Safety Software".
Важно:
Пользователь должен выполнять требования, перечисленные в стандартах.
Дополнение переводчика
Стандарты изменяются и необходимо следить за соответствием библиотечных реализаций этим изменениям. По материалам из гл.5.6 PLCopen – Technical Committee 5 – Safety Software:
В связи с принятием стандарта ISO 13849-1:2015 функциональность входа от кнопки ручного сброса определяется иначе, чем в спецификации PLCopen: ниспадающий фронт против нарастающего.
Входной сигнал от кнопки сброса нисходящего фронта (F_TRIG) указан в ISO 13849-1, гл. 5.2.2, в то время как сигнал нарастающего фронта (R_TRIG) используется в спецификации PLCopen версии 1.0 (на основе EN 954 -1:1996).
Хотя дальнейшие исследования, проведенные BG и TÜV, оценили эти различные функциональные возможности как эквивалентные с точки зрения безопасности, такого мнения придерживаются не все (новые) эксперты. Что приводит к проблемам при утверждении установок (алгоритмов обработки) в региональных спецификациях, к продолжению дискуссий по этому вопросу или даже к неодобрению установки.
Чтобы упростить и ускорить принятие установки, что является одной из основных целей спецификации безопасности PLCopen, добавляется поведение "задняя кромка" (trailing edge), сохраняющее обратную совместимость с существующими реализациями и установками, при котором проверяется как нарастающий, так и ниспадающий фронты, в дополнение к двум другим возможностям: - нарастающий фронт
- ниспадающий фронт
- задняя кромка
Схема изменения требований к обработке кнопки сброс

Примечание: эта схема является неофициальным переводом немецкой версии документа "Manuelle Rückstelleinrichtung" as provided by DGUV Fachbereich Holz und Metall in DGUV-Information 02/2015
Примечание: "задняя кромка" имеет минимальное и максимальное допустимое время нажатия кнопки
Примечание: сброс при нарастающем фронте и обнаружение ошибки должны выполняться при ниспадающем фронте: перезапуск с ошибкой невозможен
|
2. ОПИСАНИЕ ИНТЕРФЕЙСА
Функциональный блок SF_ResetButton выделяет задний фронт сигнала от кнопки (отпускание кнопки) и формирует импульс, начинающийся с нарастающего фронта. Это делается в соответствии с EN ISO 13849-1:2015.
Входные параметры
Имя | Тип | Начальное значение | Назначение, описание значений |
|---|
| ResetRequested | BOOL | TRUE | Вход, который должен быть подключен к выходу ResetRequest (запрос сброса) сопряженного ФБ
TRUE: требуется сброс FALSE: не требуется сброс / не проверять вход ResetIn | | ResetIn | BOOL | FALSE | Вход от кнопки сброса
FALSE: кнопка отпущена TRUE: кнопка сброса нажата оператором. | | TrailingMinimum | TIME | T#350ms | Константа
Минимальное время, в течение которого должна удерживаться нажатой кнопка сброса. Если кнопка удерживалась меньше времени - нажатие игнорируется.
Типовое значение: 350 мс Минимальное значение: 100 мс Минимальное значение: 2 цикла ПЛК | | TrailingMaximum | TIME | T#2s | Константа
Максимальное время, в течение которого должна удерживаться кнопка сброса. Если кнопка удерживалась больше времени - нажатие игнорируется.
Типовое значение: 2 с |
Важно:
Выход ResetOut представляет собой импульс нарастающего фронта (R_TRIG) длительностью в один цикл, который может быть подключен к любому ФБ, имеющему вход сброса, и соответствующий соглашениям PLCopen Safety FBs version 1.0.
Вход ResetRequested соединяется с выходом ResetRequest соответствующего ФБ. При этом контролируется временной интервал, в течение которого необходимо удерживать нажатой кнопку сброса.
Этот ФБ неявно использует S_AutoReset - т.е. выход из ошибочных состояний выполняется без квитирования, сразу после устранения причины ошибки. Выходные параметры
Имя | Тип | Начальное значение | Назначение, описание значений |
|---|
| Ready | BOOL | FALSE | Состояние активности ФБ
TRUE: Указывает на то, что функциональный блок активирован и выходные результаты действительны (аналогично индикатору "POWER" реле безопасности). FALSE: Функциональный блок не активен, и программа не выполняется.
Полезно в режиме отладки или для активации / деактивации дополнительных функциональных блоков. Также полезно для дальнейшей обработки в функциональной программе. | | ResetOut | BOOL | FALSE | Импульс для инициирования процедуры сброса у сопряжённого ФБ
Этот импульс генерируется по падению фронта входного сигнала ResetIn (по отпусканию кнопки). Импульс начинается с нарастающего фронта. Длительность - не менее 1 цикла | | Error | BOOL | FALSE | Индикатор ошибки (такой же, как светодиод "K1/K2" реле безопасности)
TRUE: Значение TRUE указывает на то, что произошла ошибка и ФБ находится в состоянии ошибки. Соответствующее состояние ошибки отражается на выходе диагностического кода DiagCode. FALSE: Указывает, что ошибки нет и ФБ находится в другом состоянии. Это также отражается в выходе DiagCode.
Полезен в режиме отладки, а также для дальнейшей обработки в функциональной программе. | | DiagCode | WORD | 16#0000 | Диагностический код (состояния или ошибки). В общем случае, коды определяются по правилам из главы 5.2 PLCopen - Technical Committee 5 – Safety Software Technical Specification Part 1: Concepts and Function Blocks Version 2.01
Для данного ФБ определены значения: 0000 - ожидание активации (Idle), 83E2 - ожидание нажатия кнопки сброса, 83F2 - ожидание отпускания кнопки сброса, 8000 - формирование выходного импульса сброса, C000 - ошибочные значения входных параметров, C001 - при активации кнопка сброс уже была нажата, C3E0 - ошибка (удержание кнопки нажатой превысило максимально разрешённое время), C3F0 - ошибка (кнопка сброс нажималась, но слишком кратковременно) |
3. ОПИСАНИЕ РАБОТЫ ФУНКЦИОНАЛЬНОГО БЛОКА
Описание работы функционального блока см. в ISO 13849-1:2015, Section 5.6 "Reset Behavior".
Таблица истинности
| Входы | Выходы |
|---|
| ResetRequested | ResetIn | TrailingMinimum | TrailingMaximum | Ready | ResetOut | Error | DiagCode | | FALSE | --- | --- | --- | FALSE | FALSE | FALSE | 16#0000 | | TRUE | FALSE | >= 100 мс | TrailingMaximum >= TrailingMinimum | TRUE | FALSE | FALSE | 16#83E2 | | TRUE | FALSE → TRUE | Начало отсчёта времени удержания нажатой кнопки | TRUE | FALSE | FALSE | 16#83F2 | | TRUE | TRUE | TrailingMinimum < время удержания < TrailingMaximum | TRUE | FALSE | FALSE | 16#83F2 | | TRUE | TRUE → FALSE | TrailingMinimum < время удержания < TrailingMaximum | TRUE | TRUE | FALSE | 16#8000 | | TRUE | При следующем вызове происходит автоматический переход с 16#8000 на 16#83E2 | | | | 16#83E2 |
Примечание
В таблице истинности стрелка → обозначает переход. TRUE → FALSE означает, что значение переменной изменилось с TRUE на FALSE. 4. ДИАГРАММА СОСТОЯНИЙ
Диаграмма состояний ФБ SF_ResetButton
 Примечания
В главе 5.2.2 стандарта ISO 13849-1 упоминается только ниспадающий фронт. Таким образом, если ниспадающий фронт появляется одновременно с включением функции безопасности / защиты, сброс от кнопки может быть доступен.
Переход из любого состояния в состояние ожидания активации (Idle) из-за Activate = FALSE не отображается. Однако эти переходы имеют наивысший приоритет. 5. ТИПИЧНАЯ ВРЕМЕННАЯ ДИАГРАММА
Типичная временная диаграмма с подключённым для примера библиотечным ФБ SF_ESPE
 Примечание
(*) Safety Function / Safety Guard Operative (Функции безопасности / защиты) - это внутреннее состояние ФБ в соответствии со стандартом ISO 13849-1:2015, (глава 5.2.2) - доступно только в том случае, если все функции безопасности и защиты работают. В данном примере это представлено параметром S_ESPE_Out функционального блока SF_ESPE. 6. ДИАГНОСТИРУЕМЫЕ ОШИБКИ
Ошибка формируется в случаях:- Если значение ResetIn = TRUE при переключении ResetRequested в TRUE.
- Если ResetRequested = ResetIn = TRUE, а длительность удержания кнопки сброс в нажатом состоянии не достигла минимального значение задержки времени TrailingMinimum или превысила максимальное значение задержки времени TrailingMaximum.
7. ОБРАБОТКА ОШИБКИ
В случае статического сигнала TRUE на входе ResetIn, на выходе DiagCode отображается соответствующий код ошибки, и на выходе Error устанавливается значение TRUE.
8. СПЕЦИФИЧНЫЕ ДЛЯ ФБ КОДЫ ОШИБОК И СОСТОЯНИЙ
Коды ошибок
Значение DiagCode | Название состояния | Описание состояния и установок выходных сигналов |
|---|
| 16#C000 | Parameter Error | Ошибочные значения входных параметров TrailingMinimum > TrailingMaximum OR TrailingMinimum < 100 мс
Ready = TRUE
ResetOut = FALSE
Error = TRUE | | 16#C001 | Reset Error | При активации ФБ кнопка сброс уже была нажата ResetIn = TRUE. Ожидание отпускания кнопки (NOT ResetIn)
Ready = TRUE
ResetOut = FALSE
Error = TRUE | | 16#C3E0 | Error Trailing Maximum | Удержание кнопки нажатой превысило максимально разрешённое время Время удержания нажатой кнопки (ResetIn) достигло TrailingMaximum до прихода ниспадающего фронта (F_TRIG) от ResetIn. Ожидание нарастающего фронта (R_TRIG) от ResetIn (отпускания кнопки) для повторной попытки сформировать сигнал сброса
Ready = TRUE
ResetOut = FALSE
Error = TRUE | | 16#C3F0 | Error Trailing Minimum | Кнопка сброс нажималась, но слишком кратковременно Ниспадающий фронт от ResetIn пришёл прежде, чем прошло время TrailingMinimum. Ожидание нарастающего фронта от ResetIn.
Ready = TRUE
ResetOut = FALSE
Error = TRUE |
Коды состояний
Значение DiagCode | Название состояния | Описание состояния и установок выходных сигналов |
|---|
| 16#0000 | Idle | The function block is not active (initial state)
Ready = FALSE
ResetOut = FALSE
Error = FALSE | | 16#83E2 | Wait for R_TRIG | The function block is enabled. Waiting for R_TRIG at ResetIn
Ready = TRUE
ResetOut = FALSE
Error = FALSE | | 16#83F2 | Wait for F_TRI | ResetIn = TRUE. Waiting for F_TRIG at ResetIn
Ready = TRUE
ResetOut = FALSE
Error = FALSE | | 16#8000 | Reset Detected | Valid reset behavior was detected. The state is valid for at least one cycle and will automatically transfer to 83E2.
Ready = TRUE
ResetOut = TRUE
Error = FALSE
|
9. ВАРИАНТЫ ИСПОЛЬЗОВАНИЯ (дополнение)
Примечание
Это дополнение - перевод раздела 5.6 из документа
PLCopen - Technical Committee 5 – Safety Software Technical Specification Part 1: Concepts and Function Blocks Version 2.01 – Official Release
Функциональный блок SF_ResetButton используется самостоятельно (раздельно от других ФБ), но при нормальной работе должен быть связан с соответствующим ФБ, которому необходим функционал сброса.
Разделение упрощает задачу разработчику. Однако по отношению к пользователю лучше инкапсулировать каждую пару ФБ и,
таким образом, предоставлять их как один объект. Это означает, что также необходимо выровнять диагностические коды DiagCode (на рисунке ниже это выравнивание DiagCodes показано не в деталях, а только через линию, ведущую к ФБ безопасности, на практике для их объединения будет достаточно сочетания AND и (исключающего) OR или их комбинации), выходы Error можно просто объединить с помощью функции AND.
Вариант использования совместно с ФБ SF_ESPE

В PLCopen - Technical Committee 5 – Safety Software Technical Specification показана возможность подачи константы TRUE на вход ResetRequested вместо выхода ResetRequest связанного блока. Но этот способ признавался спорным.
ВЫВОДЫ И РЕКОМЕНДАЦИИ
Воспроизведён функциональный блок из библиотеки PLCopen в переложении на FBD реализации Owen Logic.
Этот ФБ, являясь полезным для большинства приложений, при реализации позволяет начать знакомство с другим подходом к программированию, с готовой и хорошо продуманной, описанной библиотекой со множеством ФБ.
После появления возможности создания ФБ на ST, хорошо бы вспомнить о существовании для CoDeSys таких библиотек, как OSCAT, PLCopen. Это сократит время на реализацию давно созданных элементов.
ПРИЛОЖЕНИЕ
На FBD несколько неудобно реализовывать конечный автомат, поэтому при реализации состояния ошибок с автосбросом собственных триггеров не имеют.
Уже после реализации ФБ на языке FBD в среде Owen Logic добавилась возможность реализации функциональных блоков на языке ST. Но эти ФБ на ST не поддерживают "стандартные" макросы (TON, TOF и т.д). Поэтому реализация остаётся на языке FBD.
На настоящий момент среда программирования Owen Logic имеет ограничение на длину имени макроса (функционального блока) на языке FBD, поэтому при реализации пришлось его изменить на ResetButton.
Скрины ФБ SafeReset на FBD
Исходники макроса и тестовой программы для ПР205-230.1211.22.X.0 в OWEN Logic версия 2.4.334.0
Test_SF_ResetButton.owle.7z
|