Маскирование синхронных ошибок
Синхронные ошибки - это ошибки программирования и доступа. Такие ошибки происходят в результате программирования с неправильными адресными областями, номерами или неправильными адресами. При маскировании синхронных ошибок получается следующее:
- Маскированные синхронные ошибки не запускают OB ошибок и не приводят к запрограммированной альтернативной реакции.
- CPU "регистрирует" произошедшие маскированные ошибки в регистре ошибок.
Маскирование синхронных ошибок выполняется посредством вызова SFC36 "MSK_FLT".
Демаскирование ошибок означает отмену предварительно установленной маски и очистку соответствующего бита в регистре состояний событий текущего класса приоритета. Маскирование отменяется следующим образом:
- посредством вызова SFC37 "DMSK_FLT"
- когда завершится текущий класс приоритета.
Если ошибка происходит после того, как она была демаскирована, то операционная система запускает соответствующий OB ошибок. Вы можете запрограммировать OB121 для реагирования на ошибки программирования и OB122 для реагирования на ошибки доступа.
Можно использовать SFC38 "READ_ERR", чтобы считывать произошедшие замаскированные ошибки.
Обратите внимание: В S7-300 (кроме CPU 318), независимо от того, замаскирована ошибка или демаскирована, она вводится в диагностический буфер, и светится светодиод групповой ошибки CPU.
Обработка ошибок в общем случае
Если в программе пользователя происходят ошибки программирования и доступа, то можно реагировать на них разными способами:
- Можно запрограммировать OB ошибок, который вызывается операционной системой, когда происходит соответствующая ошибка.
- Можно заблокировать вызов OB ошибок индивидуально для каждого класса приоритета. В этом случае, когда ошибка данного типа происходит в конкретном классе приоритета, CPU не переходит в STOP. CPU вводит ошибку в регистр ошибок. Однако из этой записи можно узнать, когда или как часто происходила ошибка.
Фильтры
Синхронные ошибки ставятся в соответствие конкретной битовой комбинации, известной как фильтр ошибок (маска). Этот фильтр ошибок находится также во входных и выходных параметрах SFC 36, 37 и 38. Синхронные ошибки делятся на ошибки программирования и ошибки доступа, которые Вы можете маскировать, используя два фильтра ошибок. Фильтры ошибок иллюстрируются на следующих рисунках.
Фильтр ошибок программирования
Рисунок ниже показывает битовую комбинацию фильтра ошибок программирования. Фильтр ошибок программирования расположен в параметрах PRGFLT_...
Биты 29 ("SFC не загружен").и 31 ("SFB не загружен") в старшем слове фильтра для ошибок программирования применимы только для S7-400 и CPU 318.
Несущественные биты
На вышеприведенном рисунке x означает...
входные параметры | для SFC36, 37, 38 | = "0" |
выходные параметры | для SFC36, 37 для SFC38
|
= "1" для S7-300 = "0" для S7-400 = "0" |
Фильтр ошибок доступа для всех CPU
На рисунке ниже показана битовая комбинация фильтра ошибок доступа для всех CPU, кроме CPU417 и CPU 417H. Фильтр ошибок доступа находится в параметрах ACCFLT_ ...
Несущественные биты
На вышеприведенном рисунке x означает...
входные параметры | для SFC36, 37, 38 | = "0" |
выходные параметры | для SFC36, 37 для SFC38
|
= "1" для S7-300 = "0" для S7-400 и CPU318 = "0" |
Фильтр ошибок доступа для CPU 417 и CPU 417H
Следующий рисунок показывает битовую комбинацию фильтра ошибок доступа в CPU417 и CPU 417H. Фильтр ошибок доступа находится в параметрах ACCFLT_...
Несущественные биты
На вышеприведенном рисунке x означает...
входные параметры | для SFC36, 37, 38 | = "0" |
выходные параметры | для SFC36, 37 для SFC38 |
= "0" = "0" |
Пример для CPU 31x (кроме CPU 318)
Следующий рисунок показывает младшее слово фильтра ошибок доступа со всеми маскированными ошибками для всех CPU, кроме CPU 417 и CPU 417H:
- в качестве входного параметра для SFC36
- в качестве выходного параметра для SFC36
Пример для CPU 417 и CPU 417H
Следующая схема показывает, как выглядит младшее слово фильтра ошибок доступа со всеми маскированными ошибками для CPU 417 и CPU 417H
- в качестве входного параметра для SFC36
- в качестве выходного параметра для SFC36
Младшее слово фильтра ошибок программирования
В таблице перечислены ошибки, поставленные в соответствие младшему слову фильтра ошибок программирования. Таблица показывает также возможные причины ошибок.
Ошибка | ID события (W#16#...) | Ошибка происходит ... |
---|---|---|
Ошибка преобразования BCD | 2521 | ... когда преобразуемое значение не является числом в двоично-десятичном коде (например, 5E8) |
Ошибка длины области при чтении | 2522 | ... когда используется адрес, который не находится полностью в пределах возможной адресной области. Пример: нужно прочитать MW 320, хотя область памяти имеет длину только 256 байтов. |
Ошибка длины области при записи |
2523 | ... когда используется адрес, который не находится полностью в пределах возможной адресной области. Пример: нужно записать значение в MW 320, хотя область памяти имеет длину только 256 байтов. |
Ошибка области при чтении | 2524 | ... когда для адреса задан неправильный идентификатор области при использовании косвенной межсегментной адресации. Пример: правильно: LAR1 P#E 12.0 L W[AR1, P#0.0] неправильно: LAR1 P#12.0 L W[AR1, P#0.0] Для этой операции выводится сообщение об ошибке длины области. |
Ошибка области при записи | 2525 | ... когда для адреса задан неправильный идентификатор области при использовании косвенной межсегментной адресации. Пример: правильно: LAR1 P#E 12.0 T W[AR1, P#0.0] неправильно: LAR1 P#12.0 T W[AR1, P#0.0] Для этой операции выводится сообщение об ошибке длины области. |
Ошибка номера таймера | 2526 | ... когда происходит обращение к несуществующему таймеру. Пример: SP T [MW 0], где MW 0 = 129; должен запускаться таймер 129, хотя имеются только 128 доступных таймеров. |
Ошибка номера счетчика | 2527 | ... когда происходит обращение к несуществующему счетчику. Пример: CU C [MW 0], где MW 0 = 600; должно происходить обращение к счетчику 600 , хотя имеются только 512 доступных счетчиков (CPU 416-D). |
Ошибка выравнивания при чтении | 2528 | ... когда адрес байта, слова или двойного слова указан с адресом бита ≠ 0. Пример: правильно: LAR1 P#M12.0 L B[AR1, P#0.0] неправильно: LAR1 P#M12.4 L B[AR1, P#0.0] |
Ошибка выравнивания при записи | 2529 | ... когда адрес байта, слова или двойного слова указан с адресом бита ≠ 0. Пример: правильно: LAR1 P#M12.0 T B[AR1, P#0.0] неправильно: LAR1 P#M12.4 T B[AR1, P#0.0] |
Старшее слово фильтра ошибок программирования
В следующей таблице перечислены ошибки, поставленные в соответствие старшему слову фильтра ошибок программирования. Перечисляются также возможные причины ошибок.
Ошибка | ID события (W#16#...) | Ошибка происходит ... |
---|---|---|
Ошибка записи в блок данных | 2530 |
... когда блок данных, в который должна производиться запись, доступен только для чтения. |
Ошибка записи в экземпляр блок данных | 2531 |
... когда экземпляр блок данных, в который должна производиться запись, доступен только для чтения. |
Ошибка номера блока DB | 2532 |
... когда должен открываться блок данных с номером, превышающим максимальный разрешенный номер. |
Ошибка номера блока DI | 2533 |
... когда должен открываться экземпляр блок данных с номером, превышающим максимальный разрешенный номер. |
Ошибка номера блока FC | 2534 |
... когда вызывается функция с номером, превышающим максимальный разрешенный номер. |
Ошибка номера блока FB | 2535 |
... когда вызывается функциональный блок с номером, превышающим максимальный разрешенный номер. |
DB не загружен | 253A |
... когда открываемый блок данных не загружен. |
FC не загружен | 253C |
... когда вызываемая функция не загружена. |
SFC не существует | 253D |
... когда вызываемая системная функция не существует |
FB не загружен | 253E | ... когда вызываемый функциональный блок не загружен |
SFB не существует | 253F |
... когда вызываемый системный/ стандартный функциональный блок не существует. |
Ошибки доступа
В следующей таблице перечислены ошибки, поставленные в соответствие фильтру ошибок доступа во всех CPU. Перечисляются также возможные причины ошибок.
Ошибка | ID события (W#16#...) | Ошибка происходит ... |
---|---|---|
Ошибка доступа к входам/выходам при чтении | 2942 |
... когда адресу в области входов/выходов не назначен сигнальный модуль или ... когда обращение к этой области входов/выходов не подтверждается в течение выбранного контрольного времени модуля (таймаута). |
Ошибка доступа к входам/выходам при записи | 2943 |
... когда адресу в области входов/выходов не назначен сигнальный модуль или ... когда обращение к этой области входов/выходов не подтверждается в течение выбранного контрольного времени модуля (таймаута). |
<-- Предыдущая статья | Следующая статья --> |