Обзор организационных блоков (OB)
Организационные блоки образуют интерфейс между операционной системой CPU и программой пользователя. OB используются для исполнения определенных разделов программы:
- при запуске CPU
- при циклическом или зависящем от времени исполнении программы
- при возникновении ошибок
- при возникновении аппаратных прерываний
Организационные блоки исполняются в соответствии с присвоенными им приоритетами. Я надеюсь что вы ознакомились с разделом STEP7 и хотя бы с одним из языков программирования, если нет то ознакомьтесь с ними и только потом переходите к изучению этого раздела.
Организационный блок циклического выполнения программы (OB1)
Операционная система CPU S7 исполняет OB1 непрерывно. Когда OB1 исполнен, операционная система начинает его обработку вновь. Циклическая обработка OB начинается по окончании стадии запуска. Вы можете вызывать в OB1 функциональные блоки (FB, SFB) или функции (FC, SFC).
OB1 имеет самый низкий приоритет среди всех OB, время выполнения которых контролируется, иными словами, все остальные OB, кроме OB90, могут прерывать выполнение OB1. Операционная система вызывает OB1 при следующих событиях:
1. Завершение запуска 2.Конец обработки OB 1 (предыдущего цикла)
Когда OB1 исполнен, операционная система отправляет глобальные данные. Перед повторным запуском OB1 операционная система записывает таблицу выходов образа процесса в модули вывода, обновляет таблицу входов образа процесса и получает глобальные данные для CPU.
S7 осуществляет контроль максимальной длительности цикла сканирования, чем гарантируется максимальное время реакции. Значение максимальной длительности цикла сканирования установлено по умолчанию на 150 мс. Вы можете установить новое значение или перезапустить контроль времени в любой точке Вашей программы при помощи SFC43 "RE_TRIGR". Если время выполнения программы превышает максимальное время цикла OB 1, то операционная система вызывает OB 80 (OB ошибок времени); если OB 80 не запрограммирован, то CPU переходит в состояние STOP. Кроме контроля максимального времени цикла может быть гарантировано также минимальное время цикла сканирования. Операционная система задержит следующий запуск нового цикла (запись таблицы выходов образа процесса в модули вывода), пока не будет обеспечено минимальное время сканирования.
Локальные данные OB1
Следующая таблица описывает временные переменные (TEMP) для OB1. Имена переменных OB1 заданы по умолчанию.
Переменная
|
Тип
|
Описание
|
OB1_EV_CLASS | BYTE | Класс события и идентификаторы: B#16#11: OB1 активен |
OB1_SCAN_1 | BYTE | B#16#01: завершение теплого рестарта B#16#02: завершение горячего рестарта B#16#03: завершение основного цикла B#16#04: завершение холодного рестарта |
OB1_PRIORITY | BYTE | Класс приоритета 1 |
OB1_OB_NUMBR | BYTE | Номер OB (01) |
OB1_RESERVED_1 | BYTE | Резерв |
OB1_RESERVED_2 | BYTE | Резерв |
OB1_PREV_CYCLE | INT | Длительность предыдущего цикла (мс) |
OB1_MIN_CYCLE | INT | Минимальная длительность цикла (мс) со времени последнего запуска |
OB1_MAX_CYCLE | INT | Максимальная длительность цикла (мс) со времени последнего запуска |
OB1_DATE_TIME | DATE_AND_TIME | Дата и время, когда был вызван OB |
Организационные блоки прерываний по времени (OB10 - OB17)
STEP 7 предоставляет в распоряжение до восьми прерываний по времени (OB 10 - OB 17), которые могут запускаться однократно или периодически. Вы можете так параметрировать Ваше CPU при помощи SFC или STEP 7, что эти OB будут обрабатываться со следующими интервалами:
- Однократно
- Ежеминутно
- Ежечасно
- Ежедневно
- Еженедельно
- Ежемесячно
- В конце каждого месяца
Чтобы запустить прерывание по времени, его необходимо вначале установить, а потом активировать. Существует три следующих способа запуска:
- Автоматический запуск прерывания по времени. Он происходит как только Вы установили, а затем активировали прерывание по времени с помощью STEP 7. Следующая таблица показывает основные возможности активации прерывания по времени с помощью STEP 7.
- Вы устанавливаете прерывания по времени при помощи STEP 7, а затем активируете их вызовом SFC 30 .ACT_TINT. в своей программе.
- Вы устанавливаете прерывание по времени вызовом SFC 28 .SET_TINT., а затем активируете его вызовом SFC 30 .ACT_TINT.
Интервал
|
Описание
|
Не активируется | Прерывание по времени не исполняется, даже когда оно загружено в CPU. Оно может быть активировано вызовом SFC30. |
Активируется только один раз | OB прерывания по времени автоматически отменяется после того, как он исполняется однократно в указанное время. Ваша программа может с помощью SFC 28 заново установить прерывание по времени и вновь его активировать через SFC 30. |
Активируется периодически | Когда происходит прерывание по времени, CPU рассчитывает момент его следующего старта исходя из текущего времени и периода. |
Если Вы конфигурируете прерывание по времени на однократную обработку OB, то заданные значения даты и времени не могут находится в прошлом (по отношению к часам реального времени CPU). Если Вы конфигурируете прерывание по времени так, что соответствующий OB будет обрабатываться периодически, а дата и время лежат в прошлом, то прерывание по времени будет обработано в следующий надлежащий момент времени. Это иллюстрируется на следующем рисунке.
Прерывания по времени можно запретить или отложить и вновь разрешить с помощью системных функции39 - 42.
Условия, влияющие на ОВ прерываний по времени
Т.к. прерывание по времени наступает через определенные интервалы времени, то определенные условия могут влиять на работу соответствующего OB во время исполнения программы. Следующая таблица представляет некоторые из таких условий и описывает их воздействие на обработку OB прерываний по времени.
Условие | Результат |
---|---|
Программа вызывает SFC29 (CAN_TINT) и отменяет прерывание по времени. | Операционная система стирает стартовое событие (дату и время) прерывания по времени. Вам необходимо вновь установить стартовое событие и активировать его прежде, чем OB прерываний по времени вновь можно будет вызвать. |
Программа пыталась активировать OB прерывания по времени, который ко времени активации не был загружен в CPU. | Операционная система вызывает OB 85. Если OB 85 не был запрограммирован (загружен в CPU), то CPU переводится в состояние STOP. |
При синхронизации или коррекции системных часов CPU Вы переставили время вперед и пропустили стартовое событие, т.е. дату или время для OB прерывания по времени. | Операционная система вызывает OB 80 и кодирует номер OB прерывания по времени и информацию стартового события в OB80. Операционная система обрабатывает затем OB прерывания по времени один раз независимо от того, сколько раз этот ОВ должен был бы обрабатываться. Информация о стартовом событии OB 80 показывает дату и время, когда OB прерывания по времени в первый раз был пропущен. |
При синхронизации или коррекции системных часов CPU Вы перевели время назад так, что стартовое событие, т.е. дата или время для ОВ прерывания по времени повторяется. | Если OB прерывания по времени был активирован до того, как часы были переведены назад, то он не будет вновь вызываться. |
CPU выполняет теплый или холодный рестарт. |
Каждый OB прерывания по времени, который был сконфигурирован через SFC, вновь возвращается к конфигурации, заданной в STEP 7. |
OB прерывания по времени еще обрабатывается, когда происходит стартовое событие для следующего интервала. | Операционная система вызывает OB 80. Если OB 80 не был запрограммирован, то CPU переходит в состояние STOP. Если OB80 загружен, то сначала исполняются OB80 и OB прерывания по времени, а затем исполняется второе затребованное прерывание по времени. |
Локальные данные OB прерываний по времени
Следующая таблица описывает временные переменные (TEMP) одного из OB прерываний по времени. В качестве имен переменных выбраны имена по умолчанию OB 10.
Переменная | Тип | Описание |
---|---|---|
OB10_EV_CLASS | BYTE | Класс события и идентификаторы: B#16#11 = прерывание активно |
OB10_STRT_INFO | BYTE | B#16#11: запрос на запуск для OB10 (B#16#12: запрос на запуск для OB11) .................... .................... (B#16#18: запрос на запуск для OB17) |
OB10_PRIORITY | BYTE | Назначенный класс приоритета; по умолчанию 2 |
OB10_OB_NUMBR | BYTE | Номер OB (10 — 17) |
OB10_RESERVED_1 | BYTE | Резерв |
OB10_RESERVED_2 | BYTE | Резерв |
OB10_PERIOD_EXE | WORD | OB обрабатывается с заданными интервалами: W#16#0000: однократно W#16#0201: ежеминутно W#16#0401: ежечасно W#16#1001: ежедневно W#16#1201: еженедельно W#16#1401: ежемесячно W#16#1801: ежегодно |
OB10_RESERVED_3 | INT | Резерв |
OB10_RESERVED_4 | INT | Резерв |
OB10_DATE_TIME | DATE_AND_TIME | Дата и время, когда был вызван OB. |
Организационные блоки прерываний с задержкой (OB20 — OB23)
Программируемые контроллеры серии S7 предоставляет в распоряжение до четырех OB (OB 20 — OB 23), которые исполняются после заданной задержки. Каждый OB прерывания с задержкой запускается посредством вызова SFC32 (SRT_DINT). Время задержки является входным параметром SFC. Когда программа вызывает функцию SFC32 (SRT_DINT), то ей передается номер OB, время задержки и индивидуальный код пользователя. Через заданное время задержки стартует соответствующий OB. Имеется возможность отменить обработку прерывания с задержкой, которое еще не стартовало.
Принцип действия
По истечении времени задержки (его значение в миллисекундах передается блоку SFC32 вместе с номером OB) операционная система запускает
соответствующий. Чтобы использовать OB прерываний с задержкой, необходимо выполнить следующие задачи:
- нужно вызвать SFC32 (SRT_DINT)
- нужно загрузить OB прерываний с задержкой в CPU как часть своей программы.
OB прерываний с задержкой исполняются только в том случае, когда CPU находится в режиме RUN. Теплый или холодный рестарт стирает любые стартовые события для OB прерываний с задержкой. Если прерывание с задержкой еще не запущено, то для отмены его исполнения можно использовать SFC33 (CAN_DINT).
Время задержки измеряется с точностью 1 мс. Время задержки может быть повторно запущено непосредственно после его окончания. С помощью SFC34 (QRY_DINT) Вы можете опросить состояние прерывания с задержкой. Операционная система вызывает OB асинхронных ошибок, если происходит одно из следующих событий:
- Если операционная система пытается запустить OB, который не загружен, а его номер Вы задали при вызове SFC32 "SRT_DINT"
- Если следующее стартовое событие для запуска прерывания с задержкой наступает прежде, чем закончилась обработка текущего OB прерывания с задержкой.
Прерывания с задержкой можно запретить или отложить и вновь разрешить с помощью SFC 39 - 42.
Локальные данные
Таблица описывает временные переменные (TEMP) OB прерывания с задержкой. В качестве имен переменных взяты имена по умолчанию OB20.
Переменная | Тип | Описание |
---|---|---|
OB20_EV_CLASS | BYTE | Класс события и идентификаторы: B#16#11: прерывание активно |
OB20_STRT_INF | BYTE | B#16#21: требование запуска для OB20 (B#16#22: требование запуска для OB21) (B#16#23: требование запуска для OB22) (B#16#24: требование запуска для OB23) |
OB20_PRIORITY | BYTE | Назначенный класс приоритета: значения по умолчанию от 3 (OB20) до 6 (OB23) |
OB20_OB_NUMBR | BYTE | Номер OB (20 - 23) |
OB20_RESERVED_1 | BYTE | Резерв |
OB20_RESERVED_2 | BYTE | Резерв |
OB20_SIGN | WORD | Идентификатор пользователя: входной параметр SIGN из вызова SFC32 (SRT_DINT) |
OB20_DTIME | TIME | Истекшая часть времени задержки в мс |
OB20_DATE_TIME | DATE_AND_TIME | Дата и время, когда был вызван OB. |
Организационные блоки циклических прерываний(OB30 - OB38)
Программируемые контроллеры SIMATIC S7 предоставляют в распоряжение до девяти OB циклических прерываний (OB30 - OB38), которые прерывают Вашу программу через фиксированные интервалы времени. Таблица показывает установленные по умолчанию интервалы времени и классы приоритета для OB циклических прерываний.
Номер OB | Интервал по умолчанию | Класс приоритета по умолчанию |
---|---|---|
OB 30 |
5c
|
7
|
OB 31 |
2c
|
8
|
OB 32 |
1c
|
9
|
OB 33 |
500мс
|
10
|
OB 34 |
200мс
|
11
|
OB 35 |
100мс
|
12
|
OB 36 |
50мс
|
13
|
OB 37 |
20мс
|
14
|
OB 38 |
10мс
|
15
|
Нужно позаботиться о том, чтобы время работы Организационных блоков циклических прерываний было значительно меньше интервала времени, через который он вызывается. Если OB циклических прерываний еще не закончен, а в следствие истечения интервала времени должен обрабатываться вновь, запускается OB ошибок времени (OB 80). Циклическое прерывание, вызвавшее ошибку, будет отработано позднее.
Диапазон значений для периодичности, классов приоритета и фазового сдвига приводятся в технических данных контроллерах. Эти настройки можно изменить с помощью программы STEP7.
Следующая таблица временные переменные (TEMP) одного из OB циклических прерываний. В качестве имен переменных по умолчанию взяты
имена OB35.
Переменная | Тип | Описание |
---|---|---|
OB35_EV_CLASS | BYTE | Класс события и идентификаторы: B#16#11: прерывание активно |
OB35_STRT_INF | BYTE | (B#16#31 : требование запуска для OB30) ............... B#16#36 : требование запуска для OB35 ................ (B#16#39 : требование запуска для OB38) |
OB35_PRIORITY | BYTE | Назначенный класс приоритета: по умолчанию от 7 (OB30) до 15 (OB38) |
OB35_OB_NUMBR | BYTE | Номер OB (30 - 38) |
OB35_RESERVED_1 | BYTE | Резерв |
OB35_RESERVED_2 | BYTE | Резерв |
OB35_PHASE_OFFSET | WORD | Фазовый сдвиг [мс] |
OB35_RESERVED_3 | INT | Резерв |
OB35_EXC_FREQ | INT | Интервал в миллисекундах |
OB20_DATE_TIME | DATE_AND_TIME | Дата и время, когда был вызван OB. |
Организационные блоки аппаратных прерываний (OB40 - OB47)
Контроллеры SIMATIC предoставляют в распоряжение до восьми независимых друг от друга аппаратных прерываний со своими собственными OB. Назначая с помощью STEP 7 параметры, необходимо для каждого сигнального модуля, который будет запускать аппаратные прерывания, указывать следующее:
- Какие каналы при каких условиях запускают аппаратное прерывание
- Какой ОВ аппаратных прерываний ставится в соответствие отдельным группам каналов (по умолчанию все аппаратные прерывания обрабатываются OB40).
Для CP и FM эти параметры назначаются с помощью их собственного программного обеспечения Классы приоритета для отдельных OB аппаратных прерываний устанавливаются с помощью STEP 7.
После запуска модулем аппаратного прерывания операционная система идентифицирует слот и соответствующий ОВ аппаратных прерываний. Если этот OB имеет более высокий приоритет, чем активный в данный момент класс приоритета, то он запускается. Соответствующее каналу квитирование выполняется после завершения этого OB аппаратных прерываний. Если в промежутке времени между идентификацией и квитированием аппаратного прерывания на том же самом модуле возникает еще одно событие, которое вызывает аппаратное прерывание, то:
- Если событие наступает на том же самом канале, который до этого вызвал аппаратное прерывание, то новое прерывание теряется. Это иллюстрируется на следующем рисунке на примере канала модуля цифрового вода. Запускающим событием является нарастающий фронт. ОВ аппаратных прерываний является OB40.
- Если событие происходит на другом канале того же самого модуля, то аппаратное прерывание в данный момент не может быть запущено. Однако это прерывание не теряется, а будет запущено после квитирования текущего активного прерывания (только для S7-400). В случае S7-300 аппаратное прерывание теряется, если вызывающее его событие закончилось раньше квитирования.
Если аппаратное прерывание запускается, а его OB в данный момент активен из-за аппаратного прерывания из другого модуля, то новый запрос
регистрируется, а ОВ обрабатывается когда он будет свободен (только на S7-400). В случае S7-300 аппаратное прерывание теряется, если событие, вызывающее прерывание, не сохранилось после квитирования. Аппаратные прерывания можно запретить или отложить и вновь разрешить с помощью SFC 39 - 42.
Вы можете назначать параметры аппаратным прерываниям модуля не только при помощи STEP 7, но и при помощи системных функций SFC 55 - 57.
таблица описывает временные переменные (TEMP) одного из OB аппаратных прерывания. В качестве имен переменных выбраны имена по умолчанию OB40.
Переменная | Тип | Описание |
---|---|---|
OB40_EV_CLASS | BYTE | Класс события и идентификаторы: B#16#11: прерывание активно |
OB40_STRT_INF | BYTE | B#16#41: прерывание через канал прерывания 1 B#16#42: прерывание через канал прерывания 2 (только для S7-400) B#16#43: прерывание через канал прерывания 3 (только для S7-400) B#16#44: прерывание через канал прерывания 4 (только для S7-400) |
OB40_PRIORITY | BYTE | Назначенный класс приоритета: по умолчанию от 16 (OB40) до 23 (OB47) |
OB40_OB_NUMBR | BYTE | Номер OB (40 - 47) |
OB40_RESERVED_1 | BYTE | Резерв |
OB40_IO_FLAG | BYTE | Модуль ввода: B#16#54 Модуль вывода: B#16#55 |
OB40_MDL_ADDR | WORD | Логический базовый адрес модуля, который запустил прерывание |
OB40_POINT_ADDR | DWORD | Для цифровых модулей: битовый массив с состояниями входов на модуле (бит 0 соответствует первому входу) Для аналоговых модулей (CP или FM): состояние прерывания модуля (для пользователя значения не имеет) |
OB20_DATE_TIME | DATE_AND_TIME | Дата и время, когда был вызван OB. |
Следующая статья--> |