Instruções TIA Portal

Operações de Movimentação
Transferência & Gestão de Dados

A transferência de dados é o sistema circulatório do seu programa PLC. Gira eficientemente as cópias de variáveis, a serialização de estruturas e as manipulações de blocos de memória.

O que são operações de movimentação no TIA Portal?

As operações de movimentação permitem copiar dados de um local de memória para outro. Vão desde a simples cópia de uma variável (MOVE) até à manipulação complexa de estruturas inteiras para comunicação (Serialize/Deserialize) ou gestão de áreas de dados contíguas (MOVE_BLK).

O TIA Portal oferece instruções modernas para acesso simbólico, gestão dinâmica via tipos Variant e funções otimizadas para Array DBs, mantendo simultaneamente instruções Legacy para compatibilidade com sistemas S7-300 antigos.

Transferência Básica

Instruções fundamentais de cópia e formatação

MOVE — Copiar valor

MOVE

O que faz

Copia o conteúdo da entrada IN para a saída OUT. Se o tipo de dados diferir, pode ocorrer uma conversão implícita se for segura.

Quando usar

Inicializar variáveis, copiar setpoints de HMI ou transferir resultados de cálculos.

Dicas Pro

Pode adicionar várias saídas (OUT1, OUT2...) para copiar um valor para vários destinos em simultâneo.

Em SCL, utilize simplesmente a atribuição: destination := source;

Funciona com quase todos os tipos de dados (Bool, Int, Real, Struct, String).

Serialize / Deserialize

SER

O que fazem

Serialize converte uma estrutura complexa num fluxo de bytes sequenciais (Array of Byte). Deserialize faz o inverso.

Quando usar

Preparação de dados para envio via protocolos de comunicação (TCP/IP, UDP) ou armazenamento compacto.

Dicas Pro

Utilize o parâmetro POS para seguir o índice de preenchimento no buffer de destino.

Essencial para trocas com sistemas de terceiros que não compreendem os UDTs da Siemens.

Certifique-se de que o tamanho do buffer é suficiente para evitar erros de execução.

SWAP — Inverter

SWAP

O que faz

Inverte a ordem dos bytes (Endianness) no operando IN.

Quando usar

Comunicação com dispositivos que utilizam o formato 'Little-Endian' enquanto o PLC utiliza 'Big-Endian'.

Dicas Pro

Geralmente utilizado em tipos Word ou DWord.

Útil para o processamento de dados de certos sensores Modbus.

Pode ser utilizado para reorganizar códigos ASCII recebidos ao contrário.

Movimentação de Blocos

Manipulação de áreas de memória massivas e contíguas

MOVE_BLK / UMOVE_BLK

MOVE_BLK

O que faz

Copia um número definido de elementos de um Array de origem para um Array de destino. UMOVE_BLK é a versão não interrompível (atómica).

Quando usar

Gestão de buffers, arquivo de dados históricos ou duplicação de receitas de fabrico.

Dicas Pro

O índice de início (COUNT) define o número de elementos a copiar.

UMOVE_BLK garante que os dados não são modificados por um OB de alarme durante a cópia.

Os tipos de dados de origem e destino devem ser idênticos.

MOVE_BLK_VARIANT

O que faz

Versão avançada de MOVE_BLK que suporta tipos de dados Variant para um endereçamento flexível.

Quando usar

Desenvolvimento de blocos de biblioteca reutilizáveis que trabalham com arrays de tamanhos ou tipos diferentes.

Dicas Pro

Permite copiar entre arrays cujos tipos são determinados em tempo de execução.

Utilize CountOfElements para automatizar o parâmetro COUNT.

Muito potente no S7-1500 para programação genérica.

Preenchimento de Área

Inicialização rápida de intervalos de memória

FILL_BLK / UFILL_BLK

FILL

O que faz

Preenche uma área de memória (Array) com um valor único especificado na entrada IN.

Quando usar

Repor um array de medidas a zero, ou inicializar um buffer com um valor por defeito.

Dicas Pro

UFILL_BLK é preferível para áreas críticas partilhadas com interrupções.

Muito mais performante do que um ciclo FOR para inicializar um array grande.

COUNT especifica o número de elementos a preencher a partir do ponteiro especificado.

Scatter / Gather

Decomposição e composição de bits

SCATTER / GATHER

O que fazem

SCATTER decompõe uma palavra (Word, DWord...) em bits individuais para uma estrutura ou array. GATHER faz o inverso.

Quando usar

Extração de bits de estado de uma palavra de diagnóstico ou composição de uma palavra de comando a partir de bits de controlo.

Dicas Pro

Substitui vantajosamente uma infinidade de acessos a bits (ex: %X0).

Disponível no S7-1200 e S7-1500.

Garante um código mais limpo e fácil de manter.

Acesso a Array DB

Leitura e escrita em blocos de dados do tipo array

ReadFromArrayDB / WriteToArrayDB

O que fazem

Permitem ler ou escrever um elemento específico num bloco de dados configurado como 'Array DB'.

Quando usar

Gestão de grandes listas de dados onde a indexação deve ser dinâmica e rápida.

Dicas Pro

As versões 'L' (ex: ReadFromArrayDBL) acedem à memória de carregamento (Load Memory) para dados pouco frequentes.

A utilização de Array DB é frequentemente mais performante do que o acesso indexado clássico.

Verifique se o índice está dentro dos limites para evitar erros de acesso.

Manipulação de Variant

Ferramentas para programação dinâmica

VariantGet / VariantPut

O que fazem

VariantGet extrai o valor de uma variável Variant para uma variável tipificada. VariantPut escreve um valor tipificado numa variável Variant.

Quando usar

Tratamento de dados cujo tipo exato só é conhecido no momento da chamada do bloco.

Dicas Pro

Utilize EQ_Type para verificar o tipo antes de extrair o valor.

Fundamental para criar funções de comunicação genéricas.

CountOfElements devolve o número de elementos se o Variant apontar para um Array.

Limites de Arrays

Determinação dinâmica de limites

LOWER_BOUND / UPPER_BOUND

O que faz

Devolve o limite inferior (LOWER) ou superior (UPPER) de um array passado como parâmetro Variant.

Quando usar

Iterar sobre um array de tamanho desconhecido (ex: Array[*] of MyUDT).

Dicas Pro

Indispensável para a escrita de ciclos FOR robustos: FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO

Funciona tanto em arrays unidimensionais como multidimensionais.

O parâmetro DIM especifica a dimensão desejada (1 por defeito).

Instruções Legacy

Compatibilidade com sistemas S7-300/400 antigos

Instruções como BLKMOV, FILL e FieldRead/FieldWrite são mantidas por compatibilidade. Para novos projetos S7-1200/1500, prefira MOVE_BLK, FILL_BLK e acessos simbólicos diretos.

Comparação de métodos de cópia

Escolher a instrução de transferência correta

Você deve...Instrução recomendadaExemplo
Copiar uma variável simplesMOVESetpoint -> Atual
Copiar uma zona de memóriaMOVE_BLKBuffer FIFO
Inicializar um arrayFILL_BLKReset de falhas
Preparar uma mensagem TCPSerializeEstrutura -> Fluxo de bytes
Dividir uma palavra em bitsSCATTERDiagnóstico palavra -> estrutura
Acesso dinâmicoVARIANTBloco de biblioteca universal

Perguntas Frequentes

Qual é a diferença entre MOVE e MOVE_BLK?

MOVE destina-se a copiar um único valor ou uma estrutura completa de uma só vez. MOVE_BLK está otimizado para copiar uma parte de um array (um certo número de elementos consecutivos).

Porquê utilizar UMOVE_BLK em vez de MOVE_BLK?

O 'U' significa Uninterruptible (não interrompível). Esta instrução garante que a operação de cópia não será interrompida por um ciclo de alarme (OBs prioritários), assegurando a total consistência dos dados copiados.

Quando utilizar Serialize e Deserialize?

Estas instruções são vitais quando precisa de enviar dados estruturados via protocolos 'brutos' como TSEND/TRCV ou para equipamentos de terceiros. Elas gerem o alinhamento de bytes de forma padronizada.

O MOVE_BLK funciona com endereços absolutos (P#DB1.DBX0.0...)?

Sim, mas o TIA Portal encoraja a utilização de acessos simbólicos. Para o endereçamento absoluto complexo, o BLKMOV (Legacy) ainda é utilizado, embora o MOVE_BLK_VARIANT seja a solução moderna recomendada.

Automatize as suas transferências de dados

Descreva a sua necessidade de manipulação de dados e o T-IA Connect gerará os blocos MOVE e Serialize otimizados para a sua aplicação.