step7-pro
голосование
Чего не хватает сайту
поиска
новых статей
статей о подключении оборудования
примеров решения задач
форума
ничего не нужно
поиск


новости
Появился поиск по сайту. Обещаю его улучшить и сделать более адекватным
--------------11.10.11
Новая гостевая книга надеюсь избавит от спама. Еще немного и появится поис и многое другое
--------------11.07.11
C НАСТУПАЮЩИМ НОВЫМ ГОДОМ И РОЖДЕСТВОМ!
--------------30.12.10
Новые статьи по системным функциям и блокам
--------------25.12.10
Теперь у нас новый дизайн, конечно не супер но надеюсь всем понравиться
--------------05.12.10
Форум закрыт по причине ненадобности
--------------08.09.10
Гостевая книга временно отключена из спама
--------------15.10.10
Наш форум forum.step7-pro.ru общайтесь на здоровье!
--------------03.06.10
Наш сайт в twitter Вы сможете подписаться на рассылку новостей и узнавать о новых статьях на нашем сайте.
--------------20.03.10
После долгого перерыва наш сайт снова начал работать
--------------26.02.10
реклама

 

Копирование переменных с помощью SFC20 "BLKMOV"

SFC20 "BLKMOV" (block move [перемещение блока]) используется для копирования содержимого области памяти (= исходной области) в другую область памяти (= целевую область). С помощью SFC20 "BLKMOV" можно копировать любые области памяти, кроме

Исходные параметры могут быть включены в загружаемую память (область памяти блока, который не имеет значения для исполнения программы) (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", Вы можете копировать все области памяти, кроме

Исходные параметры могут также быть включены в загружаемую область памяти несвязанных блоков данных (скомпилированных с опцией 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.

 

<-- Предыдущая статья   Следующая статья -->
сделано djoni политика конфидициальности Rambler's Top100