Instrucciones TIA Portal

Operaciones de Movimiento
Transferencia y Gestión de Datos

La transferencia de datos es el sistema circulatorio de su programa PLC. Gestione eficientemente las copias de variables, la serialización de estructuras y la manipulación de bloques de memoria.

¿Qué son las operaciones de movimiento en TIA Portal?

Las operaciones de movimiento permiten copiar datos de una ubicación de memoria a otra. Van desde la simple copia de una variable (MOVE) hasta la manipulación compleja de estructuras completas para la comunicación (Serialize/Deserialize) o la gestión de áreas de datos contiguas (MOVE_BLK).

TIA Portal ofrece instrucciones modernas para el acceso simbólico, gestión dinámica mediante tipos Variant y funciones optimizadas para Array DB, manteniendo instrucciones Legacy para la compatibilidad con sistemas S7-300.

Transferencia Básica

Instrucciones fundamentales de copia y formateo

MOVE — Copiar valor

MOVE

Qué hace

Copia el contenido de la entrada IN a la salida OUT. Si el tipo de datos difiere, puede ocurrir una conversión implícita si es segura.

Cuándo usarlo

Inicializar variables, copiar consignas HMI o transferir resultados de cálculos.

Consejos Pro

Puede añadir varias salidas (OUT1, OUT2...) para copiar un valor a varios destinos simultáneamente.

En SCL, use simplemente la asignación: destino := fuente;

Funciona con casi todos los tipos de datos (Bool, Int, Real, Struct, String).

Serialize / Deserialize

SER

Qué hacen

Serialize convierte una estructura compleja en un flujo de bytes secuencial (Array of Byte). Deserialize hace lo contrario.

Cuándo usarlo

Preparación de datos para envío mediante protocolos de comunicación (TCP/IP, UDP) o almacenamiento compacto.

Consejos Pro

Use el parámetro POS para seguir el índice de llenado en el buffer de destino.

Esencial para intercambios con sistemas de terceros que no entienden los UDT de Siemens.

Asegúrese de que el tamaño del buffer sea suficiente para evitar errores de ejecución.

SWAP — Intercambiar

SWAP

Qué hace

Invierte el orden de los bytes (Endianness) en el operando IN.

Cuándo usarlo

Comunicación con dispositivos que usan el formato 'Little-Endian' mientras que el PLC usa 'Big-Endian'.

Consejos Pro

Generalmente se usa en tipos Word o DWord.

Útil para procesar datos de ciertos sensores Modbus.

Puede usarse para reorganizar códigos ASCII recibidos al revés.

Movimiento de Bloques

Manipulación de zonas de memoria masivas y contiguas

MOVE_BLK / UMOVE_BLK

MOVE_BLK

Qué hace

Copia un número definido de elementos de un Array origen a un Array destino. UMOVE_BLK es la versión no interrumpible (atómica).

Cuándo usarlo

Gestión de buffers, archivado de datos históricos o duplicación de recetas de fabricación.

Consejos Pro

El índice de inicio (COUNT) define el número de elementos a copiar.

UMOVE_BLK garantiza que los datos no sean modificados por un OB de alarma durante la copia.

Los tipos de datos de origen y destino deben ser idénticos.

MOVE_BLK_VARIANT

Qué hace

Versión avanzada de MOVE_BLK que admite tipos de datos Variant para un direccionamiento flexible.

Cuándo usarlo

Desarrollo de bloques de biblioteca reutilizables que trabajan con arrays de diferentes tamaños o tipos.

Consejos Pro

Permite copiar entre arrays cuyos tipos se determinan en tiempo de ejecución.

Use CountOfElements para automatizar el parámetro COUNT.

Muy potente en S7-1500 para programación genérica.

Llenado de Zona

Inicialización rápida de rangos de memoria

FILL_BLK / UFILL_BLK

FILL

Qué hace

Llena una zona de memoria (Array) con un valor único especificado en la entrada IN.

Cuándo usarlo

Reiniciar un array de medidas a cero o inicializar un buffer con un valor por defecto.

Consejos Pro

UFILL_BLK es preferible para zonas críticas compartidas con interrupciones.

Mucho más eficiente que un bucle FOR para inicializar un array grande.

COUNT especifica el número de elementos a llenar a partir del puntero especificado.

Scatter / Gather

Descomposición y composición de bits

SCATTER / GATHER

Qué hacen

SCATTER descompone una palabra (Word, DWord...) en bits individuales hacia una estructura o array. GATHER hace lo contrario.

Cuándo usarlo

Extracción de bits de estado de una palabra de diagnóstico o composición de una palabra de mando desde bits de control.

Consejos Pro

Reemplaza ventajosamente a multitud de accesos a bits (ej: %X0).

Disponible en S7-1200 y S7-1500.

Garantiza un código más limpio y fácil de mantener.

Acceso a Array DB

Lectura y escritura en bloques de datos tipo array

ReadFromArrayDB / WriteToArrayDB

Qué hacen

Permiten leer o escribir un elemento específico en un bloque de datos configurado como 'Array DB'.

Cuándo usarlo

Gestión de grandes listas de datos donde la indexación debe ser dinámica y rápida.

Consejos Pro

Las versiones 'L' (ej: ReadFromArrayDBL) acceden a la memoria de carga (Load Memory) para datos poco frecuentes.

El uso de Array DB suele ser más eficiente que el acceso indexado clásico.

Verifique que el índice esté dentro de los límites para evitar errores de acceso.

Manipulación de Variant

Herramientas para programación dinámica

VariantGet / VariantPut

Qué hacen

VariantGet extrae el valor de una variable Variant a una variable tipada. VariantPut escribe un valor tipado en una variable Variant.

Cuándo usarlo

Procesamiento de datos cuyo tipo exacto solo se conoce en el momento de la llamada al bloque.

Consejos Pro

Use EQ_Type para verificar el tipo antes de extraer el valor.

Fundamental para crear funciones de comunicación genéricas.

CountOfElements devuelve el número de elementos si el Variant apunta a un Array.

Límites de Array

Determinación dinámica de límites

LOWER_BOUND / UPPER_BOUND

Qué hace

Devuelve el límite inferior (LOWER) o superior (UPPER) de un array pasado como parámetro Variant.

Cuándo usarlo

Recorrer un array de tamaño desconocido (ej: Array[*] of MyUDT).

Consejos Pro

Indispensable para escribir bucles FOR robustos: FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO

Funciona tanto en arrays unidimensionales como multidimensionales.

El parámetro DIM especifica la dimensión deseada (1 por defecto).

Instrucciones Legacy

Compatibilidad con sistemas antiguos S7-300/400

Instrucciones como BLKMOV, FILL y FieldRead/FieldWrite se mantienen por compatibilidad. Para nuevos proyectos S7-1200/1500, prefiera MOVE_BLK, FILL_BLK y accesos simbólicos directos.

Comparación de métodos de copia

Elegir la instrucción de transferencia adecuada

Usted debe...Instrucción recomendadaEjemplo
Copiar una variable simpleMOVEConsigna -> Actual
Copiar una zona de memoriaMOVE_BLKBuffer FIFO
Inicializar un arrayFILL_BLKReset fallos
Preparar un mensaje TCPSerializeEstructura -> Flujo bytes
Dividir palabra en bitsSCATTERDiagnóstico palabra -> estructura
Acceso dinámicoVARIANTBloque librería universal

Preguntas Frecuentes

¿Cuál es la diferencia entre MOVE y MOVE_BLK?

MOVE está destinado a copiar un solo valor o una estructura completa de una vez. MOVE_BLK está optimizado para copiar una parte de un array (un cierto número de elementos consecutivos).

¿Por qué usar UMOVE_BLK en lugar de MOVE_BLK?

La 'U' significa Uninterruptible (no interrumpible). Esta instrucción garantiza que la operación de copia no sea interrumpida por un ciclo de alarma (OB prioritarios), asegurando la coherencia total de los datos copiados.

¿Cuándo usar Serialize y Deserialize?

Estas instrucciones son vitales cuando necesita enviar datos estructurados mediante protocolos 'brutos' como TSEND/TRCV o hacia equipos de terceros. Gestionan la alineación de bytes de forma estandarizada.

¿MOVE_BLK funciona con direcciones absolutas (P#DB1.DBX0.0...)?

Sí, pero TIA Portal fomenta el uso de accesos simbólicos. Para direccionamiento absoluto complejo, todavía se usa BLKMOV (Legacy), aunque MOVE_BLK_VARIANT es la solución moderna recomendada.

Automatice sus transferencias de datos

Describa su necesidad de manipulación de datos y T-IA Connect generará los bloques MOVE y Serialize optimizados para su aplicación.