Descripción
La instrucción "Copiar área" copia los contenidos de un área de memoria (área de origen) en un área de memoria diferente (área de destino). La operación de copia se realiza por orden ascendente de direcciones. Las áreas de origen y destino se definen mediante punteros ANY.
|
Nota En esta instrucción solo se pueden utilizar tipos de datos que sean válidos en una CPU de la serie S7-300/400. |
La figura siguiente muestra el principio de la operación de copia:
Coherencia de los datos de origen y destino
Tenga en cuenta que durante la ejecución de la instrucción "Copiar área" no se modifican los datos de origen pues, de lo contrario, no se podría garantizar la coherencia de los datos de destino.
Posibilidad de interrupción
Mientras el área de origen no forme parte de un bloque de datos que solo figura en la memoria de carga, no hay limitaciones en cuanto a la profundidad de anidamiento.
Por el contrario, en caso de interrumpirse la ejecución de BLKMOV, en la que se copia desde un DB no relevante para la ejecución, no puede anidarse más la ejecución de la BLKMOV.
Áreas de memoria
La instrucción "Copiar área" copia las siguientes áreas de memoria:
-
Áreas de un bloque de datos
-
Marcas
-
Memoria imagen de proceso de las entradas
-
Memoria imagen de proceso de las salidas
-
Bloques de datos no relevantes para la ejecución
Reglas generales para copiar
Las áreas de origen y destino no deben solaparse. Si las áreas de origen y destino son de diferente longitud, se copia solo hasta la longitud del área más pequeña.
Si el área de origen es más pequeña que el área de destino, el área de origen se copiará por completo en el área de destino. Los restantes bytes del área de destino permanecen inalterados.
Si el área de destino es más pequeña que el área de origen, se escribirá en toda el área de destino. Los restantes bytes del área de origen se ignoran.
Al copiar un área del tipo de datos BOOL, la longitud indicada del área debe ser un múltiplo de 8, pues de lo contrario no se ejecutará la instrucción.
|
Nota Si el área de origen o destino realmente existente es menor que el área de origen o destino indicada en el parámetro SRCBLK o DSTBLK, el comportamiento dependerá del tipo de CPU:
|
Reglas para copiar cadenas de caracteres
La instrucción "Copiar área" copia asimismo áreas de origen y destino del tipo de datos STRING. Si solo el área de origen es del tipo de datos STRING, se copiarán los caracteres realmente contenidos en la cadena de caracteres. La información sobre la longitud real y máxima no se escribe en el área de destino. Si tanto el área de origen como el área de destino son del tipo de datos STRING, la longitud actual de la cadena de caracteres en el área de destino se pone al número de caracteres realmente copiados.
Si se desea copiar información sobre la longitud máxima y real de una cadena de caracteres, las áreas de los parámetros SRCBLK y DSTBLK deben indicarse en bytes. Alternativamente puede usar las instrucciones "Serialize" / "Deserialize".
Reglas para copiar bloques de datos no relevantes para la ejecución
El área de origen también puede encontrarse en un bloque de datos no relevante para la ejecución en la memoria de carga. Los bloques de datos no relevantes para la ejecución se identifican con la palabra clave UNLINKED.
Si en la memoria de trabajo se copia un bloque de datos no relevante para la ejecución con la instrucción "Copiar área" y, al mismo tiempo, este se vuelve a cargar p. ej. desde la programadora, la ejecución de la instrucción puede retardarse varios milisegundos. Esto prolonga el ciclo del OB y puede activar la vigilancia del tiempo de ciclo.
Si un bloque de datos no relevante para la ejecución se copia con la instrucción "Copiar área" y la operación de copia se interrumpe, la instrucción no se podrá seguir ejecutando.
Si en la CPU existe la instrucción "Leer de un bloque de datos de la memoria de carga", debe utilizarse dicha instrucción para leer los bloques de datos no relevantes para la ejecución en la memoria de carga. Si se utiliza la instrucción "Copiar área" se emite el error W#16#8092.
Parámetros
La tabla siguiente muestra los parámetros de la instrucción "Copiar área":
|
Parámetro |
Declaración |
Tipo de datos |
Área de memoria |
Descripción |
|---|---|---|---|---|
|
SRCBLK |
Input |
ANY |
I, Q, M, D, L, P |
Indicación del área de memoria que se copia (área de origen). |
|
DSTBLK |
Output 1) |
ANY |
I, Q, M, D, L, P |
Indicación del área de memoria en la que se copia (área de destino). |
|
Valor de función (RET_VAL) |
INT |
I, Q, M, D, L, P |
Información de error |
|
|
1) El parámetro DSTBLK se declara como Output, pero en la interfaz del bloque debe declararse como InOut. |
||||
Encontrará más información sobre los tipos de datos válidos en "Consulte también".
Parámetro RET_VAL
La tabla siguiente muestra el significado de los valores del parámetro RET_VAL:
|
Código de error* |
Explicación |
|---|---|
|
0000 |
Ningún error |
|
8092 |
El área de origen o destino está solo en la memoria de carga. |
|
8xyy |
Encontrará más información de error en "Consulte también". |
|
*En el editor de programas, los códigos de error se pueden representar como valores enteros o hexadecimales. Encontrará más información sobre el cambio de los formatos de visualización en "Consulte también". |
|
Ejemplo
El siguiente ejemplo muestra el funcionamiento de la instrucción:
La instrucción copia 10 bytes a partir de MB100 y los escribe en el DB1. Si ocurre un error durante la operación de copia, el respectivo código de error se indica en la variable "Tag_RetVal".