В этой статье мы продолжаем обсуждение различных типов организационных блоков в ПЛК Siemens. На этот раз мы рассмотрим OB121 или прерывание ошибок программирования в портале Tia.
Содержание:
- Что такое прерывание ошибок программирования OB121?
- Примеры ошибок программирования.
- Что произойдет, если будет обнаружена ошибка программирования?
- Моделирование ошибки программирования в TIA Portal.
- Как OB121 может быть полезен против ошибок программирования?
- Выводы.
Что такое прерывание ошибок программирования (OB121)?
OB121 — это организационный блок, который будет вызван операционной системой ПЛК, если во время выполнения вашей логики возникнет ошибка программирования. Обратите внимание, что мы не говорим об ошибке программирования, которая будет обнаружена компилятором при попытке загрузить вашу логику в ПЛК. См. рисунок 1.
Рисунок 1 – Некоторые ошибки программирования будут обнаружены компилятором
Как вы видите на последнем рисунке, в моей логике ПЛК есть ошибка программирования; некоторые операнды отсутствуют на входе и выходе сети 1. Но эта ошибка была обнаружена компилятором еще до загрузки логики в ПЛК. Ошибка на рисунке 1 не является типом ошибки программирования, которая может вызвать необходимость вызова OB121.
Ошибки в вашей программе ПЛК, которые не могут быть обнаружены компилятором, но все равно могут вызвать проблемы в вашей логике во время работы ПЛК, — это ошибки программирования, которые мы имеем в виду. Эти ошибки вызовут вызов OB121 операционной системой.
Примеры ошибок программирования
Вот несколько примеров ошибок в вашей логике ПЛК, которые могут вызвать ошибки программирования:
- Превышена максимальная глубина вложенности вызовов блоков.
- Вы использовали указатель NULL для обращения к операнду.
- Неизвестная инструкция.
- Адресованная строка имеет неверную информацию о длине.
- Ошибка длины области при чтении.
- Ошибка длины области при записи.
- Ошибка в номере таймера.
- Доступ к базе данных, которая не загружена; номер базы данных находится в разрешенной области.
- База данных не существует.
Эти и многие другие ошибки могут вызвать ошибки программирования в вашем ПЛК. Вы можете проверить раздел справки на портале TIA, чтобы узнать, какие еще причины могут вызвать ошибки программирования ПЛК.
Что произойдет, если обнаружена ошибка программирования?
Когда ваш ПЛК обнаруживает ошибку программирования, может произойти одно из трех событий.
- Ваш ПЛК покажет ошибку и перейдет в режим STOP.
- Ваш ПЛК покажет ошибку, но продолжит выполнять вашу логику.
- Ваш ПЛК покажет ошибку, а затем попытается устранить эту ошибку.
Эти три события будут в основном зависеть от программирования вашего ПЛК. Это означает, что ваш код будет определять, как будет вести себя операционная система при обнаружении ошибки программирования.
Моделирование ошибки программирования в TIA Portal
Чтобы лучше понять, как будет вести себя ПЛК, мы создадим простую программу, в которой вызовем ошибку программирования, а затем посмотрим, что произойдет. Смотрите рисунок 2.
Рисунок 2 — Простая логика программы
Созданная нами логика очень проста: при включении InitiateProgError значение 126 будет перемещено в область DB52.DBW16. Обратите внимание, что мы не создали DB52. поэтому это будет наша ошибка программирования. Обратите внимание, что эта ошибка не будет обнаружена во время компиляции или загрузки в ПЛК. Смотрите рисунки 3 и 4.
Рисунок 3 — Ошибка, не обнаруженная компилятором
Посмотрите, как блок был успешно скомпилирован, включая ошибку программирования.
Рисунок 4 – Блок загружен в ПЛК
И снова, блок был загружен в ПЛК с ошибкой программирования.
Теперь давайте смоделируем нашу программу ПЛК и посмотрим, что произойдет. См. анимацию 1 для моделирования кода ПЛК.
Анимация 1
Как вы видите из анимации выше, светодиод ПЛК ERROR будет мигать красным в течение нескольких секунд, а затем ПЛК перейдет в режим STOP.
Перейдите к онлайн-диагностике ПЛК, чтобы увидеть, что произошло. См. рисунок 5.
Рисунок 5 – Онлайн и диагностика ПЛК
То, что вы видели в анимации, это то же самое, что вы видите на предыдущем рисунке. Их можно разделить на 3 шага:
- ПЛК обнаруживает ошибку программирования, которая заключается в том, что OB52 не загружен.
- Операционная система инициирует вызов OB121, но в нашей логике OB121 не создан.
- Когда ПЛК обнаруживает, что в нашей логике не создан OB121, операционная система инициирует запрос STOP. И ПЛК переходит в режим STOP.
Как OB121 может быть полезен против ошибок программирования?
Давайте добавим OB121 в наш код ПЛК и посмотрим, как все изменится. См. рисунок 6.
Рисунок 6 – Добавление OB121
После создания и добавления OB121 в нашу логику ПЛК давайте посмотрим, что произойдет в симуляции.
Помните, что мы не написали никакой логики ПЛК внутри OB121. См. анимацию 2.
Анимация 2
Как видно из анимации 2, при возникновении InitiateProgError светодиод ПЛК ERROR будет мигать красным, но ПЛК продолжит работу.
Это означает, что ПЛК не перейдет в режим STOP. Давайте проверим онлайн-диагностику, чтобы увидеть, что на самом деле произошло. Смотрите рисунок 7.
Рисунок 7 — Ошибка не привела к остановке ПЛК
На рисунке видно, что ПЛК обнаруживает ошибку, но не переходит в режим STOP. Он пропустит эту ошибку, продолжит цикл и начнет все сначала с самого начала.
Когда он снова достигнет ошибки, он снова обнаружит ошибку, выдав сигнал тревоги в диагностике. Пропустите ошибку и продолжите. Это означает, что ПЛК будет выдавать тот же сигнал тревоги в каждом цикле сканирования. И именно поэтому на рисунке вы видите, что событие продолжает срабатывать, а сигнал тревоги повторяется в каждом цикле сканирования.
Таким образом, просто наличие пустого OB121 даст вам преимущество в поддержании работы ПЛК и расширения y, поддерживая работу вашего процесса.
Но мы можем сделать больше, мы можем попытаться поймать эту ошибку и устранить ее. Также мы можем попытаться показать тип обнаруженной ошибки программирования.
Определение типа ошибки
OB121 имеет внутренний идентификатор идентификатора ошибки, который мы можем использовать для отображения типа ошибки, возможно, как сигнал тревоги на HMI. Внутри OB121 мы создадим простую инструкцию MOVE, в которой мы поместим вход Fault_ID OB121 в определенную область памяти внутри нашей глобальной базы данных. См. рисунок 8.
Рисунок 8 — Определение типа ошибки
Как вы видите на предыдущем рисунке, при возникновении ошибки программирования Fault_ID будет помещен в Data.ProgErrorID. См. рисунок 9.
Рисунок 9 — Ошибка программирования Fault_ID
Вы можете увидеть, что идентификатор ошибки — 3A. Если вы посмотрите справку TIA Portal, вы можете узнать значение этой ошибки.
3A: Доступ к незагруженной базе данных; номер DB находится в разрешенной области.
Перехват ошибки
Это просто означает попытку решить ошибку программирования ПЛК после того, как вы определили причину. Это будет зависеть в основном от того, что это за ошибка и как вы хотите ее обработать. Мы просто смоделируем решение ошибки, чтобы посмотреть, как будет себя вести ПЛК.
Фактическое решение для созданной нами ошибки будет заключаться в том, чтобы просто создать DB52 или использовать уже созданный блок данных.
Но ради симуляции мы просто добавим простой контакт, который будет размыкаться при возникновении ошибки программирования, чтобы перехватить эту ошибку. Смотрите рисунки 10 и 11.
Рисунок 10 – Перехват ошибки
Всякий раз, когда вызывается OB121, будет устанавливаться CatchError.
Рисунок 11 – Устранение ошибки
Всякий раз, когда вызывается OB121, будет установлен CatchError, и он будет использоваться для перехвата ошибки программирования в Network 1. См. анимацию 3 для моделирования ПЛК.
Анимация 3
Из вышеприведенной анимации вы можете видеть, что при запуске InitiateProgError ПЛК на мгновение переходит в состояние ошибки, затем ошибка сбрасывается, и ПЛК все время находится в режиме RUN.
Заключение
Простое наличие пустого OB121 в вашей логике гарантирует, что ваш ПЛК не перейдет в режим STOP, если в вашем коде была ошибка программирования. Позже вы можете использовать OB121, чтобы также определить ошибку и устранить ее.