Копирование переменных с помощью SFC20 "BLKMOV"
SFC20 "BLKMOV" (block move [перемещение блока]) используется для копирования содержимого области памяти (= исходной области) в другую область памяти (= целевую область). С помощью SFC20 "BLKMOV" можно копировать любые области памяти, кроме
- следующих типов блоков: FB, SFB, FC, SFC, OB, SDB
- счетчиков
- таймеров
- областей памяти периферийных входов/выходов
Исходные параметры могут быть включены в загружаемую память (область памяти блока, который не имеет значения для исполнения программы) (DB, скомпилированного с ключевым словом UNLINKED).
Возможность прерывания
Пока исходная область массив не является частью блока данных, который существует только в загрузочной памяти, нет ограничений на глубину вложения.
Если, однако, SFC20 прерывается при копировании из DB, не существенного для исполнения программы, то исполнение SFC20 более не может быть вложенным.
Параметр | Описание | Тип данных | Область памяти | Характеристика |
---|---|---|---|---|
SRCBLK | INPUT | ANY | I, Q, M, D, L | Указывает области памяти, которая должна копироваться (исходная область). Массивы, относящиеся к типу данных STRING, недопустимы. |
RET_VAL | OUTPUT | INT | I, Q, M, D, L | Если во время исполнения функции происходит ошибка, то возвращаемое значение содержит код ошибки. |
DSTBLK | OUTPUT | ANY | I, Q, M, D, L | Указывает область памяти, в которую будут копироваться данные (целевая область). Массивы, относящиеся к типу данных STRING, недопустимы. |
Исходная и целевая области не должны перекрываться. Если заданная целевая область больше, чем исходная, то функция копирует лишь столько данных, сколько содержится в исходной области. Если заданная целевая область меньше, чем исходная, то функция копирует лишь столько данных, сколько может быть записано в целевую область. Если указатель ANY (источника или адресата) имеет тип данных BOOL, то заданная длина должна делиться на 8; в противном случае SFC не будет выполняться. Если указатель ANY имеет тип данных STRING, то заданная длина должна быть равна 1.
Особенности
Если несвязанный блок данных копируется в ОЗУ с помощью SFC 20 BLKMOV и одновременно загружается, например, посредством PG, то выполнение функции SFC может вызвать задержку на отрезок времени длительностью до единиц миллисекунд. Это приводит к увеличению длительности цикла OB, и может нарушать текущий цикл мониторинга. Избегайте загрузки блока в CPU во время копирования блока с помощью SFC 20.
Код ошибки (W#16#...) | Объяснение |
---|---|
0000 | Нет ошибок |
8091 | Превышена глубина вложения |
Непрерываемое копирование переменных с помощью SFC81 "UBLKMOV"
С помощью SFC81 "UBLKMOV" (uninterruptable block move [непрерываемое перемещение блоков]) Вы можете копировать содержимое одной области памяти (=исходная область) в другую область памяти (= целевую область). Эта операция копирования не может прерываться другими действиями операционной системы.
Используя SFC81 "UBLKMOV", Вы можете копировать все области памяти, кроме
- следующих типов блоков: FB, SFB, FC, SFC, OB, SDB
- счетчиков
- таймеров
- областей памяти периферийных входов/выходов
Исходные параметры могут также быть включены в загружаемую область памяти несвязанных блоков данных (скомпилированных с опцией UNLINKED)!
Если в CPU есть SFC83, Вы должны использовать эту функцию для чтения блоков данных в загружаемой памяти, несвязанных с выполняемой задачей. Если Вы будете использовать для этой цели SFC20, то появится сообщение об ошибке W#16#8092.
Возможность прерывания, время реакции на прерывание
Копирование не может прерываться. Помните, что, если Вы используете SFC81 "UBLKMOV", то это может увеличить время реакции Вашего CPU на прерывание.
Параметр | Описание | Тип | Область памяти | Характеристика |
---|---|---|---|---|
SRCBLK | INPUT | ANY | I, Q, M, D, L | Определяет копируемую область памяти (исходную область). Массивы типа STRING недопустимы. |
RET_VAL | OUTPUT | INT | I, Q, M, D, L | Если при выполнении функции происходит ошибка, то возвращаемое значение содержит код ошибки |
DSTBLK | OUTPUT | ANY | I, Q, M, D, L | Определяет область памяти, в которую будут копироваться данные (целевая область). Массивы типа STRING недопустимы. |
Исходная и целевая области не должны перекрываться. Если заданная целевая область больше, чем исходная область, то функция копирует в целевую область только такое количество данных, какое содержится в исходной области. Если указанная целевая область меньше, чем исходная область, то функция копирует только такое количество данных, какое может быть записано в целевой области. Если указатель ANY (источника или адресата) имеет тип BOOL, то заданная длина должна делиться на 8; иначе SFC не будет выполняться. Если указатель ANY имеет тип STRING, то заданная длина должна быть равна 1.
Информация об ошибках
Код ошибки (W#16#...) | Характеристика |
---|---|
0000 | Ошибки нет |
8091 | Исходная область находится в несвязанном блоке данных |
8092 | Операция "Copy Variable" (копирование переменной) не может быть выполнена, так как требует доступа к несвязанному блоку данных. Здесь необходимо использовать функцию SFC83. |
<-- Предыдущая статья | Следующая статья --> |