Обзор организационных блоков (OB)Организационные блоки образуют интерфейс между операционной системой CPU и программой пользователя. OB используются для исполнения определенных разделов программы:
Организационные блоки исполняются в соответствии с присвоенными
им
Организационный блок циклического
выполнения
|
|
Переменная
|
Тип
|
Описание
|
| 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 |
STEP 7 предоставляет в распоряжение до восьми прерываний по времени (OB 10 - OB 17), которые могут запускаться однократно или периодически. Вы можете так параметрировать Ваше CPU при помощи SFC или STEP 7, что эти OB будут обрабатываться со следующими интервалами:
Чтобы запустить прерывание по времени, его необходимо вначале установить, а потом активировать. Существует три следующих способа запуска:
|
Интервал
|
Описание
|
| Не активируется | Прерывание по времени не исполняется, даже когда оно загружено в CPU. Оно может быть активировано вызовом SFC30. |
| Активируется только один раз | OB прерывания по времени автоматически отменяется после того, как он исполняется однократно в указанное время. Ваша программа может с помощью SFC 28 заново установить прерывание по времени и вновь его активировать через SFC 30. |
| Активируется периодически | Когда происходит прерывание по времени, CPU рассчитывает момент его следующего старта исходя из текущего времени и периода. |
Т.к. прерывание по времени наступает через определенные интервалы времени, то определенные условия могут влиять на работу соответствующего 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 прерывания по времени, а затем исполняется второе затребованное прерывание по времени. |
Следующая таблица описывает временные переменные (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. |
Программируемые контроллеры серии S7 предоставляет в распоряжение до четырех OB (OB 20 OB 23), которые исполняются после заданной задержки. Каждый OB прерывания с задержкой запускается посредством вызова SFC32 (SRT_DINT). Время задержки является входным параметром SFC. Когда программа вызывает функцию SFC32 (SRT_DINT), то ей передается номер OB, время задержки и индивидуальный код пользователя. Через заданное время задержки стартует соответствующий OB. Имеется возможность отменить обработку прерывания с задержкой, которое еще не стартовало.
По истечении времени задержки (его значение в миллисекундах передается блоку
SFC32 вместе с номером OB) операционная система запускает
соответствующий. Чтобы использовать OB прерываний с задержкой, необходимо
выполнить следующие задачи:
OB прерываний с задержкой исполняются только в том случае, когда CPU находится
в режиме RUN. Теплый или холодный рестарт стирает любые стартовые события
для OB прерываний с задержкой. Если прерывание с задержкой еще не запущено,
то для отмены его исполнения можно использовать SFC33 (CAN_DINT).
Время задержки измеряется с точностью 1 мс. Время задержки может быть повторно
запущено непосредственно после его окончания. С помощью SFC34 (QRY_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. |
Программируемые контроллеры 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
|
Диапазон значений для периодичности, классов приоритета и фазового сдвига приводятся в технических данных контроллерах. Эти настройки можно изменить с помощью программы 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. |
Контроллеры SIMATIC предoставляют в распоряжение до восьми независимых друг от друга аппаратных прерываний со своими собственными OB. Назначая с помощью STEP 7 параметры, необходимо для каждого сигнального модуля, который будет запускать аппаратные прерывания, указывать следующее:
Для CP и FM эти параметры назначаются с помощью их собственного программного обеспечения Классы приоритета для отдельных OB аппаратных прерываний устанавливаются с помощью STEP 7.
После запуска модулем аппаратного прерывания операционная система идентифицирует слот и соответствующий ОВ аппаратных прерываний. Если этот OB имеет более высокий приоритет, чем активный в данный момент класс приоритета, то он запускается. Соответствующее каналу квитирование выполняется после завершения этого OB аппаратных прерываний. Если в промежутке времени между идентификацией и квитированием аппаратного прерывания на том же самом модуле возникает еще одно событие, которое вызывает аппаратное прерывание, то:

Если аппаратное прерывание запускается, а его 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. |