Инициализация области памяти с помощью SFC21 "FILL"
С помощью SFC 21 .FILL. Вы можете предварительно заполнить область памяти (целевую область) содержимым другой области памяти (исходной области). SFC копирует содержимое в заданную целевую область, пока эта область памяти не будет полностью записана.
Исходный и целевой массив не должны перекрываться. Если целевая область, подлежащая инициализации, не является целым кратным длины входного параметра BVAL, то она, тем не менее, записывается до последнего байта. Если целевая область, подлежащая инициализации, меньше, чем исходная область, то копируется лишь столько данных, сколько может быть записано в целевую область.
Исключения
С помощью SFC 21 нельзя записывать значения в
- следующие типы блоков: FB, SFB, FC, SFC, SDB
- счетчики
- таймеры
- области памяти периферийных входов/выходов
Параметр | Описание | Тип данных | Область памяти | Характеристика |
---|---|---|---|---|
BVAL | INPUT | ANY | I, Q, M, D, L | Параметр BVAL содержит значение или описание области, содержимое которой будет использовано для инициализации целевой области(исходная область). Массивы, относящиеся к типу данных STRING, недопустимы. |
RET_VAL | OUTPUT | INT | I, Q, M, D, L | Если во время обработки функции появляется ошибка, то возвращаемое значение содержит код ошибки. |
BLK | OUTPUT | ANY | I, Q, M, D, L | Параметр BLK содержит описание области, подлежащей инициализации (целевой области). Массивы, относящиеся к типу данных STRING, недопустимы. |
Входной параметр является структурой
Если в качестве входного параметра передается структура, то помните следующую особенность: STEP 7 всегда определяет длину структуры как четное число байтов. В результате структуре потребуется один байт дополнительного пространства в памяти, если Вы опишете структуру с нечетным числом байтов.
Пример
Структура описана следующим образом:
TYP_5_BYTE_STRUCTURE : STRUCT
BYTE_1_2 : WORD
BYTE_3_4 : WORD
BYTE_5 : BYTE
END_STRUCT
Описанная структура "TYP_5_BYTE_STRUCTURE" требует 6 байтов памяти.
Создание блока данных с помощью SFC22 "CREAT_DB"
С помощью SFC22 "CREAT_DB" (create data block [создать блок данных]), Вы создаете блок данных, который не содержит предварительно установленных значений. Этот SFC создает блок данных выбираемой длины с номером, взятым из заданного диапазона. SFC присваивает DB минимально возможный номер из заданного диапазона. Если Вы хотите создать DB с конкретным номером, то просто выберите диапазон, указывая одно и то же значение для верхней и нижней границы. Вы не можете назначить номер, если DB с таким же номером уже существует в программе пользователя. Длина DB должна быть четным числом байтов.
Возможность прерывания
SFC22 "CREAT_DB" может прерываться более приоритетными OB. Если SFC22 "CREAT_DB" вновь вызывается в OB более высокого приоритета, то этот вызов отвергается с кодом ошибки W#16#8091.
Параметр | Описание | Тип данных | Область памяти | Характеристика |
---|---|---|---|---|
LOW_LIMIT | INPUT | WORD | I, Q, M, D, L, константа |
Нижнее граничное значение является минимальным номером в диапазоне номеров, которые Вы можете присвоить своему блоку данных. |
UP_LIMIT | INPUT | WORD | I, Q, M, D, L, константа |
Верхнее граничное значение является максимальным номером в диапазоне номеров, которые Вы можете присвоить своему блоку данных. |
COUNT | INPUT | WORD | I, Q, M, D, L, константа |
Числовое значение задает количество байтов данных, которое Вы хотите зарезервировать для своего блока данных. Здесь Вы должны задать четное число байтов (максимум 65534). |
RET_VAL | OUTPUT | INT | I, Q, M, D, L | Если во время обработки функции появляется ошибка, то возвращаемое значение содержит код ошибки. |
DB_NUMBER | OUTPUT | WORD | I, Q, M, D, L | Номер блока данных является номером созданного блока данных. Если происходит ошибка (бит 15 в RET_VAL был установлен), то в DB_NUMBER вводится значение 0. |
Информация об ошибках
Код ошибки (W#16#...) | Объяснение |
---|---|
0000 | Нет ошибки |
8091 | Вы выполнили вложенный вызов SFC22. |
8092 |
Функция "Создать DB" не может быть в данный момент выполнена, так как
|
80A1 |
Ошибка в номере DB
|
80A2 |
Ошибка в длине DB
|
80B1 | Нет свободных номеров DB |
80B2 | Недостаточно свободной памяти |
80B3 | Недостаточно непрерывной памяти (устранение: провести сжатие!) |
<-- Предыдущая статья | Следующая статья --> |