Istruzioni TIA Portal

Operazioni di Spostamento
Trasferimento e Gestione Dati

Il trasferimento dei dati è il sistema circolatorio del tuo programma PLC. Gestisci efficacemente le copie delle variabili, la serializzazione delle strutture e le manipolazioni dei blocchi di memoria.

Cosa sono le operazioni di spostamento in TIA Portal?

Le operazioni di spostamento consentono di copiare dati da una posizione di memoria a un'altra. Vanno dalla semplice copia di una variabile (MOVE) alla manipolazione complessa di intere strutture per la comunicazione (Serialize/Deserialize) o la gestione di aree dati contigue (MOVE_BLK).

TIA Portal offre istruzioni moderne per l'accesso simbolico, la gestione dinamica tramite i tipi Variant e funzioni ottimizzate per gli Array DB, mantenendo al contempo le istruzioni Legacy per la compatibilità con i vecchi sistemi S7-300.

Trasferimento di Base

Istruzioni fondamentali di copia e formattazione

MOVE — Copia valore

MOVE

Cosa fa

Copia il contenuto dell'ingresso IN nell'uscita OUT. Se il tipo di dati differisce, può verificarsi una conversione implicita se sicura.

Quando usarlo

Inizializzare variabili, copiare setpoint HMI o trasferire risultati di calcolo.

Consigli Pro

È possibile aggiungere più uscite (OUT1, OUT2...) per copiare un valore a più destinazioni simultaneamente.

In SCL, usa semplicemente l'assegnazione: destinazione := sorgente;

Funziona con quasi tutti i tipi di dati (Bool, Int, Real, Struct, String).

Serialize / Deserialize

SER

Cosa fanno

Serialize converte una struttura complessa in un flusso di byte sequenziale (Array of Byte). Deserialize fa l'opposto.

Quando usarlo

Preparazione dei dati per l'invio tramite protocolli di comunicazione (TCP/IP, UDP) o archiviazione compatta.

Consigli Pro

Usa il parametro POS per tracciare l'indice di riempimento nel buffer di destinazione.

Essenziale per gli scambi con sistemi di terze parti che non comprendono gli UDT Siemens.

Assicurarsi che la dimensione del buffer sia sufficiente per evitare errori di runtime.

SWAP — Inverti

SWAP

Cosa fa

Inverte l'ordine dei byte (Endianness) nell'operando IN.

Quando usarlo

Comunicazione con dispositivi che utilizzano il formato 'Little-Endian' mentre il PLC utilizza il 'Big-Endian'.

Consigli Pro

Generalmente utilizzato su tipi Word o DWord.

Utile per l'elaborazione di dati provenienti da alcuni sensori Modbus.

Può essere utilizzato per riorganizzare codici ASCII ricevuti al contrario.

Spostamento di Blocchi

Manipolazione di aree di memoria massicce e contigue

MOVE_BLK / UMOVE_BLK

MOVE_BLK

Cosa fa

Copia un numero definito di elementi da un Array sorgente a un Array destinazione. UMOVE_BLK è la versione non interrompibile (atomica).

Quando usarlo

Gestione buffer, archiviazione dati storici o duplicazione di ricette di produzione.

Consigli Pro

L'indice di partenza (COUNT) definisce il numero di elementi da copiare.

UMOVE_BLK garantisce che i dati non vengano modificati da un OB di allarme durante la copia.

I tipi di dati sorgente e destinazione devono essere identici.

MOVE_BLK_VARIANT

Cosa fa

Versione avanzata di MOVE_BLK che supporta i tipi di dati Variant per un indirizzamento flessibile.

Quando usarlo

Sviluppo di blocchi di libreria riutilizzabili che lavorano su array di diverse dimensioni o tipi.

Consigli Pro

Consente di copiare tra array i cui tipi sono determinati a runtime.

Usa CountOfElements per automatizzare il parametro COUNT.

Molto potente in S7-1500 per la programmazione generica.

Riempimento Area

Inizializzazione rapida di intervalli di memoria

FILL_BLK / UFILL_BLK

FILL

Cosa fa

Riempe un'area di memoria (Array) con un valore unico specificato all'ingresso IN.

Quando usarlo

Reimpostare un array di misure a zero o inizializzare un buffer con un valore predefinito.

Consigli Pro

UFILL_BLK è preferibile per le aree critiche condivise con gli interrupt.

Molto più performante di un ciclo FOR per inizializzare un grande array.

COUNT specifica il numero di elementi da riempire a partire dal puntatore specificato.

Scatter / Gather

Decomposizione e composizione di bit

SCATTER / GATHER

Cosa fanno

SCATTER decompone una parola (Word, DWord...) in singoli bit verso una struttura o un array. GATHER fa l'opposto.

Quando usarlo

Estrazione di bit di stato da una parola di diagnostica o composizione di una parola di comando da bit di controllo.

Consigli Pro

Sostituisce vantaggiosamente una moltitudine di accessi ai bit (es: %X0).

Disponibile su S7-1200 e S7-1500.

Garantisce un codice più pulito e facile da mantenere.

Accesso Array DB

Lettura e scrittura in blocchi dati di tipo array

ReadFromArrayDB / WriteToArrayDB

Cosa fanno

Consentono di leggere o scrivere un elemento specifico in un blocco dati configurato come 'Array DB'.

Quando usarlo

Gestione di grandi elenchi di dati in cui l'indicizzazione deve essere dinamica e veloce.

Consigli Pro

Le versioni 'L' (es: ReadFromArrayDBL) accedono alla memoria di caricamento (Load Memory) per dati poco frequenti.

L'uso di Array DB è spesso più performante del classico accesso indicizzato.

Verificare che l'indice sia entro i limiti per evitare errori di accesso.

Manipolazione Variant

Strumenti per la programmazione dinamica

VariantGet / VariantPut

Cosa fanno

VariantGet estrae il valore di una variabile Variant in una variabile tipizzata. VariantPut scrive un valore tipizzato in una variabile Variant.

Quando usarlo

Elaborazione di dati il cui tipo esatto è noto solo al momento della chiamata del blocco.

Consigli Pro

Usa EQ_Type per verificare il tipo prima di estrarre il valore.

Fondamentale per creare funzioni di comunicazione generiche.

CountOfElements restituisce il numero di elementi se il Variant punta a un Array.

Limiti Array

Determinazione dinamica dei limiti

LOWER_BOUND / UPPER_BOUND

Cosa fa

Restituisce il limite inferiore (LOWER) o superiore (UPPER) di un array passato come parametro Variant.

Quando usarlo

Eseguire un ciclo su un array di dimensioni sconosciute (es: Array[*] of MyUDT).

Consigli Pro

Indispensabile per scrivere cicli FOR robusti: FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO

Funziona sia su array mono che multidimensionali.

Il parametro DIM specifica la dimensione desiderata (1 per impostazione predefinita).

Istruzioni Legacy

Compatibilità con i vecchi sistemi S7-300/400

Istruzioni come BLKMOV, FILL e FieldRead/FieldWrite sono conservate per compatibilità. Per i nuovi progetti S7-1200/1500, preferisci MOVE_BLK, FILL_BLK e accessi simbolici diretti.

Confronto dei metodi di copia

Scegliere la giusta istruzione di trasferimento

Devi...Istruzione consigliataEsempio
Copiare una variabile sempliceMOVESetpoint -> Attuale
Copiare un'area di memoriaMOVE_BLKBuffer FIFO
Inizializzare un arrayFILL_BLKReset guasti
Preparare un messaggio TCPSerializeStruttura -> Flusso byte
Suddividere una parola in bitSCATTERDiagnostica parola -> struttura
Accesso dinamicoVARIANTBlocco libreria universale

Domande Frequenti

Qual è la differenza tra MOVE e MOVE_BLK?

MOVE è destinato a copiare un singolo valore o una struttura completa in una volta sola. MOVE_BLK è ottimizzato per copiare una parte di un array (un certo numero di elementi consecutivi).

Perché usare UMOVE_BLK invece di MOVE_BLK?

La 'U' sta per Uninterruptible (non interrompibile). Questa istruzione garantisce che l'operazione di copia non venga interrotta da un ciclo di allarme (OB prioritari), assicurando la totale coerenza dei dati copiati.

Quando usare Serialize e Deserialize?

Queste istruzioni sono vitali quando è necessario inviare dati strutturati tramite protocolli 'grezzi' come TSEND/TRCV o verso apparecchiature di terze parti. Gestiscono l'allineamento dei byte in modo standardizzato.

MOVE_BLK funziona con indirizzi assoluti (P#DB1.DBX0.0...)?

Sì, ma TIA Portal incoraggia l'uso di accessi simbolici. Per l'indirizzamento assoluto complesso, viene ancora utilizzato BLKMOV (Legacy), sebbene MOVE_BLK_VARIANT sia la soluzione moderna consigliata.

Automatizza i tuoi trasferimenti dati

Descrivi la tua esigenza di manipolazione dati e T-IA Connect genererà i blocchi MOVE e Serialize ottimizzati per la tua applicazione.