Сжатие памяти пользователя с помощью SFC25 "COMPRESS"
Пропуски могут возникать как в рабочей, так и в загрузочной памяти вследствие многократного удаления и повторной загрузки блоков. Эти пропуски сокращают эффективную область памяти. Немного напоминает дефрагментацию дисков )))
С помощью SFC 25 .COMPRESS. Вы запускаете сжатие раздела ОЗУ как рабочей, так и загрузочной памяти. Функция сжатия здесь та же самая, что и при внешнем запуске в режиме RUN.P (положение переключателя режимов работы).
Если сжатие было запущено извне и все еще активно, то вызов SFC25 приведет к появлению сообщения об ошибке.
Блоки данных, имеющие длину более 1000 байтов, не сдвигаются функцией SFC25 "COMPRESS". Это значит, что после сжатия в рабочей памяти могут остаться пропуски.
Параметр | Описание | Тип данных | Область памяти | Характеристика |
---|---|---|---|---|
RET_VAL | OUTPUT | INT | I, Q, M, D, L | Информация об ошибке |
BUSY | OUTPUT | BOOL | I, Q, M, D, L | Показывает, активна ли еще функция сжатия, запущенная вызовом SFC25. (1 означает, что активна) |
DONE | OUTPUT | BOOL | I, Q, M, D, L | Показывает, успешно ли завершился процесс сжатия, который был запущен посредством SFC 25 (1 означает .успешно.). |
Проверка функции сжатия
При однократном вызове SFC 25 .COMPRESS. запускается функция сжатия; однако Вы не можете проверить, успешно ли выполнилось сжатие. Если Вы хотите проверить функцию сжатия, выполните описанные ниже шаги:
Вызовите SFC25 циклически. После каждого вызова сначала оценивайте параметр RET_VAL. Если его значение равно 0, можно оценить параметры BUSY и DONE. Если BUSY = 1, а DONE = 0, то это указывает, что функция сжатия еще активна. Когда BUSY примет значение 0, а DONE - значение 1, то это указывает, что функция сжатия успешно завершена. Если потом вновь вызвать SFC 25, то вновь запустится сжатие.
Информация об ошибках
Код ошибки (W#16#...) | Объяснение |
---|---|
0000 | Ошибок не было. Функция сжатия была запущена SFC 25. Только в этом случае имеет смысл оценивание в программе пользователя выходных параметров BUSY и DONE (читаем чуть выше ). |
8091 | Функция сжатия была запущена извне и еще активна |
8092 |
Функция .Сжатие памяти пользователя. в данный момент не может быть выполнена, так как
|
Передача заменяющего значения в аккумулятор 1 с помощью SFC44 "REPL_VAL"
С помощью SFC44 "REPL_VAL" (replace value [заменить значение]) Вы передаете значение в аккумулятор 1 класса приоритета, вызвавшего ошибку.
Ограничение: только в OB синхронных ошибок
Вы можете вызывать SFC 44 .REPL_VAL. только в OB синхронных ошибок (OB121, OB122).
Пример применения
Если модуль ввода поврежден до такой степени, что из него более нельзя считывать значения, то при каждом обращении к этому модулю запускается OB122. В ОВ122 с помощью SFC44 "REPL_VAL" в аккумулятор 1 прерванного класса приоритета может быть передано подходящее значение, так что программа может продолжать работу с этим заменяющим значением. Информация, нужная для выбора заменяющего значения (например, блок, в котором встретилась ошибка, или поврежденный операнд), находится локальных переменных OB122.
Параметр | Описание | Тип данных | Область памяти | Характеристика |
---|---|---|---|---|
VAL | INPUT | DWORD | I, Q, M, D, L, константа | Заменяющее значение |
RET_VAL | OUTPUT | INT | I, Q, M, D, L | Если во время обработки функции встретилась ошибка, то возвращаемое значение содержит код ошибки |
Информация об ошибках
Код ошибки (W#16#...) | Объяснение |
---|---|
0000 | Ошибок не было. Было введено заменяющее значение |
8080 |
SFC44 не вызывался ни одним из ОВ синхронных ошибок (OB121, OB122) |
<-- Предыдущая статья | Следующая статья --> |