Форум программистов, компьютерный форум, киберфорум
ФедосеевПавел
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Реализация обработки кнопки сброса сигнализации в Owen Logic

Запись от ФедосеевПавел размещена 06.09.2023 в 20:16
Показов 3563 Комментарии 1
Метки owenlogic

Реализация обработки кнопки сброса сигнализации в 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

Нажмите на изображение для увеличения
Название: ResetButton_AnyVariants_100.png
Просмотров: 445
Размер:	8.2 Кб
ID:	8240

Но, на примере простого, но достаточно полезного ФБ, было интересно познакомиться со стилем и миром "безопасного" программирования.

Несмотря на то, что библиотека описывает состав, названия и диапазон значений обязательных входов и выходов, для ФБ 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), сохраняющее обратную совместимость с существующими реализациями и установками, при котором проверяется как нарастающий, так и ниспадающий фронты, в дополнение к двум другим возможностям:
  • нарастающий фронт
  • ниспадающий фронт
  • задняя кромка

Схема изменения требований к обработке кнопки сброс
Нажмите на изображение для увеличения
Название: Таблица изменений требований к сбросу_ru.png
Просмотров: 286
Размер:	16.4 Кб
ID:	8239
Примечание: эта схема является неофициальным переводом немецкой версии документа "Manuelle Rückstelleinrichtung" as provided by DGUV Fachbereich Holz und Metall in DGUV-Information 02/2015

Примечание: "задняя кромка" имеет минимальное и максимальное допустимое время нажатия кнопки
Примечание: сброс при нарастающем фронте и обнаружение ошибки должны выполняться при ниспадающем фронте: перезапуск с ошибкой невозможен


2. ОПИСАНИЕ ИНТЕРФЕЙСА

Функциональный блок SF_ResetButton выделяет задний фронт сигнала от кнопки (отпускание кнопки) и формирует импульс, начинающийся с нарастающего фронта. Это делается в соответствии с EN ISO 13849-1:2015.

Входные параметры
Имя
Тип
Начальное
значение
Назначение, описание значений
ResetRequestedBOOLTRUEВход, который должен быть подключен к выходу ResetRequest (запрос сброса) сопряженного ФБ

TRUE: требуется сброс
FALSE: не требуется сброс / не проверять вход ResetIn
ResetInBOOLFALSEВход от кнопки сброса

FALSE: кнопка отпущена
TRUE: кнопка сброса нажата оператором.
TrailingMinimumTIMET#350msКонстанта

Минимальное время, в течение которого должна удерживаться нажатой кнопка сброса. Если кнопка удерживалась меньше времени - нажатие игнорируется.

Типовое значение: 350 мс
Минимальное значение: 100 мс
Минимальное значение: 2 цикла ПЛК
TrailingMaximumTIMET#2sКонстанта

Максимальное время, в течение которого должна удерживаться кнопка сброса. Если кнопка удерживалась больше времени - нажатие игнорируется.

Типовое значение: 2 с
Важно:
Выход ResetOut представляет собой импульс нарастающего фронта (R_TRIG) длительностью в один цикл, который может быть подключен к любому ФБ, имеющему вход сброса, и соответствующий соглашениям PLCopen Safety FBs version 1.0.

Вход ResetRequested соединяется с выходом ResetRequest соответствующего ФБ. При этом контролируется временной интервал, в течение которого необходимо удерживать нажатой кнопку сброса.

Этот ФБ неявно использует S_AutoReset - т.е. выход из ошибочных состояний выполняется без квитирования, сразу после устранения причины ошибки.
Выходные параметры
Имя
Тип
Начальное
значение
Назначение, описание значений
ReadyBOOLFALSEСостояние активности ФБ

TRUE: Указывает на то, что функциональный блок активирован и выходные результаты действительны (аналогично индикатору "POWER" реле безопасности).
FALSE: Функциональный блок не активен, и программа не выполняется.

Полезно в режиме отладки или для активации / деактивации дополнительных функциональных блоков. Также полезно для дальнейшей обработки в функциональной программе.
ResetOutBOOLFALSEИмпульс для инициирования процедуры сброса у сопряжённого ФБ

Этот импульс генерируется по падению фронта входного сигнала ResetIn (по отпусканию кнопки). Импульс начинается с нарастающего фронта. Длительность - не менее 1 цикла
ErrorBOOLFALSEИндикатор ошибки (такой же, как светодиод "K1/K2" реле безопасности)

TRUE: Значение TRUE указывает на то, что произошла ошибка и ФБ находится в состоянии ошибки. Соответствующее состояние ошибки отражается на выходе диагностического кода DiagCode.
FALSE: Указывает, что ошибки нет и ФБ находится в другом состоянии. Это также отражается в выходе DiagCode.

Полезен в режиме отладки, а также для дальнейшей обработки в функциональной программе.
DiagCodeWORD16#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".

Таблица истинности
ВходыВыходы
ResetRequestedResetInTrailingMinimumTrailingMaximumReadyResetOutErrorDiagCode
FALSE---------FALSEFALSEFALSE16#0000
TRUEFALSE>= 100 мсTrailingMaximum >= TrailingMinimumTRUEFALSEFALSE16#83E2
TRUEFALSE → TRUEНачало отсчёта времени удержания нажатой кнопкиTRUEFALSEFALSE16#83F2
TRUETRUETrailingMinimum < время удержания < TrailingMaximumTRUEFALSEFALSE16#83F2
TRUETRUE → FALSETrailingMinimum < время удержания < TrailingMaximumTRUETRUEFALSE16#8000
TRUEПри следующем вызове происходит автоматический переход с 16#8000 на 16#83E2   16#83E2
Примечание
В таблице истинности стрелка → обозначает переход. TRUE → FALSE означает, что значение переменной изменилось с TRUE на FALSE.
4. ДИАГРАММА СОСТОЯНИЙ

Диаграмма состояний ФБ SF_ResetButton
Нажмите на изображение для увеличения
Название: StateDiagram_200.png
Просмотров: 382
Размер:	42.5 Кб
ID:	8241
Примечания

В главе 5.2.2 стандарта ISO 13849-1 упоминается только ниспадающий фронт. Таким образом, если ниспадающий фронт появляется одновременно с включением функции безопасности / защиты, сброс от кнопки может быть доступен.

Переход из любого состояния в состояние ожидания активации (Idle) из-за Activate = FALSE не отображается. Однако эти переходы имеют наивысший приоритет.
5. ТИПИЧНАЯ ВРЕМЕННАЯ ДИАГРАММА

Типичная временная диаграмма с подключённым для примера библиотечным ФБ SF_ESPE
Нажмите на изображение для увеличения
Название: uuid-2d9cb87f-d84f-8d19-9983-17f0171bd89a.png
Просмотров: 283
Размер:	13.2 Кб
ID:	8242
Примечание

(*) 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#C000Parameter ErrorОшибочные значения входных параметров
TrailingMinimum > TrailingMaximum OR TrailingMinimum < 100 мс

Ready = TRUE

ResetOut = FALSE

Error = TRUE
16#C001Reset ErrorПри активации ФБ кнопка сброс уже была нажата
ResetIn = TRUE. Ожидание отпускания кнопки (NOT ResetIn)

Ready = TRUE

ResetOut = FALSE

Error = TRUE
16#C3E0Error Trailing MaximumУдержание кнопки нажатой превысило максимально разрешённое время
Время удержания нажатой кнопки (ResetIn) достигло TrailingMaximum до прихода ниспадающего фронта (F_TRIG) от ResetIn. Ожидание нарастающего фронта (R_TRIG) от ResetIn (отпускания кнопки) для повторной попытки сформировать сигнал сброса

Ready = TRUE

ResetOut = FALSE

Error = TRUE
16#C3F0Error Trailing MinimumКнопка сброс нажималась, но слишком кратковременно
Ниспадающий фронт от ResetIn пришёл прежде, чем прошло время TrailingMinimum. Ожидание нарастающего фронта от ResetIn.

Ready = TRUE

ResetOut = FALSE

Error = TRUE

Коды состояний
Значение
DiagCode
Название состоянияОписание состояния и установок выходных сигналов
16#0000IdleThe function block is not active (initial state)

Ready = FALSE

ResetOut = FALSE

Error = FALSE
16#83E2Wait for R_TRIGThe function block is enabled. Waiting for R_TRIG at ResetIn

Ready = TRUE

ResetOut = FALSE

Error = FALSE
16#83F2Wait for F_TRIResetIn = TRUE. Waiting for F_TRIG at ResetIn

Ready = TRUE

ResetOut = FALSE

Error = FALSE
16#8000Reset DetectedValid 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
Нажмите на изображение для увеличения
Название: Sample.png
Просмотров: 351
Размер:	30.4 Кб
ID:	8243

В 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
Скриншот разделён на несколько частей из-за ограничений на размеры прикрепляемых изображений.
Нажмите на изображение для увеличения
Название: SafeReset_2.png
Просмотров: 296
Размер:	24.9 Кб
ID:	8244
Нажмите на изображение для увеличения
Название: SafeReset_3.png
Просмотров: 293
Размер:	35.6 Кб
ID:	8245
Нажмите на изображение для увеличения
Название: SafeReset_4.png
Просмотров: 317
Размер:	53.5 Кб
ID:	8251

Исходники макроса и тестовой программы для ПР205-230.1211.22.X.0 в OWEN Logic версия 2.4.334.0
Test_SF_ResetButton.owle.7z
Метки owenlogic
Размещено в АСУ ТП, ОВЕН ПР (OwenLogic)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Аватар для AlexProgramm
    Такая мощная подробная аннотация
    Запись от AlexProgramm размещена 09.09.2023 в 09:05 AlexProgramm вне форума
 
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru