Tempo di lettura: 6 minuti

Il Problema

Un tecnico PLC si sta imbattendo in un problema dal quale non riesce a venire a capo; deve concatenare fino a 10 stringhe di lunghezza variabile, fino a 200 caratteri ciascuna, in un buffer di 256 byte. Le stringhe devono essere trasferite nel buffer senza essere divise e devono includere un’intestazione specifica. Questo problema è complesso perché le stringhe sono impostate casualmente da un HMI e il tutto deve essere gestito in modo da recuperare tempo ciclo.

Causa Tecnica Concatenazione Stringhe

La concatenazione di stringhe in un FB (Funzione Blocco) S7-1500 richiede una gestione precisa per rispettare le dimensioni del buffer. È necessario verificare la lunghezza totale delle stringhe con l’intestazione aggiunta e assicurarsi che il tutto non superi i 256 byte. Se le stringhe sono troppo lunghe, devono essere trasferite nel buffer in cicli successivi.

Soluzione Definitiva per Concatenazione Stringhe

Step 1: Calcola la Lunghezza Totale

Inizia calcolando la lunghezza totale delle stringhe con l’intestazione inclusa. Ogni stringa di lunghezza massima 200 caratteri deve avere un’intestazione di lunghezza fissa. Calcola la lunghezza totale delle stringhe e verifica se è inferiore o uguale a 256 byte.

Step 2: Concatena le Stringhe

Se la lunghezza totale è inferiore o uguale a 256 byte, concatena le stringhe nel buffer. Se supera la lunghezza, metti quelle che ci stanno nel buffer e trasferisci le rimanenti nel ciclo successivo.

Step 3: Aggiungi l’Intestazione

Aggiungi l’intestazione a ogni stringa prima della concatenazione. L’intestazione deve essere fissa e includere informazioni come ‘WX PRG=1 BLK=001 CharacterString=’.

Step 4: Verifica la Lunghezza

Dopo aver concatenato le stringhe, verifica la lunghezza totale nel buffer. Se è superiore a 256 byte, trasferisci le stringhe rimanenti nel buffer nel ciclo successivo.

Step 5: Salva il Buffer

Una volta che tutte le stringhe sono concatenate nel buffer senza superare la lunghezza massima, salva il buffer per l’utilizzo successivo.

Codice e Configurazione Concatenazione Stringhe

FUNCTION_BLOCK FB_Concatenazione << INP : IN; OUT : OUT >> VAR strings : ARRAY [1..10] OF STRING(200); buffer : STRING(256); header : STRING(30) := 'WX PRG=1 BLK=001 CharacterString='; BEGIN header := 'WX PRG=1 BLK=001 CharacterString='; LEN := 0; FOR i := 1 TO 10 DO IF LEN + LENGTH(strings[i]) <= 256 THEN LEN := LEN + LENGTH(strings[i]); buffer := buffer + header + strings[i]; END_IF; END_FOR; OUT := buffer; END_FUNCTION_BLOCK

Verifica e Test della Soluzione

Per verificare la soluzione, esegui il FB con diverse combinazioni di stringhe e verifica che il buffer non superi i 256 byte. Assicurati che le stringhe siano concatenate correttamente con l’intestazione inclusa.

documentazione Siemens

Errori Comuni Concatenazione Stringhe

Un tecnico può incorrere in vari errori durante la concatenazione delle stringhe, come superare la lunghezza massima del buffer, omissione dell’intestazione o errori di calcolo della lunghezza delle stringhe.

Domande Frequenti su Concatenazione Stringhe

Domanda 1: Come posso verificare la lunghezza totale delle stringhe con l’intestazione aggiunta?
Risposta: Calcola la lunghezza dell’intestazione fissa e somma le lunghezze delle stringhe con essa.
Domanda 2: Cosa devo fare se le stringhe superano i 256 byte?
Risposta: Trasferisci quelle che ci stanno nel buffer e le rimanenti nel ciclo successivo.
Domanda 3: Come posso aggiungere l’intestazione a ogni stringa?
Risposta: Aggiungi l’intestazione fissa prima di concatenare le stringhe.

Conclusione

La concatenazione di stringhe in un FB S7-1500 richiede una gestione precisa delle lunghezze e delle intestazioni. Segui i passaggi sopra descritti per risolvere il problema e ottimizzare il ciclo del tuo programma.

forum PLC

Approfondimento Tecnico Avanzato

Nell’ambito della concatenazione di stringhe in un FB S7-1500, è fondamentale comprendere il funzionamento interno del PLC TIA (Totally Integrated Automation). Le stringhe devono essere concatenate senza essere divise, rispettando la dimensione massima del buffer di 256 byte. Per gestire questa complessità, è necessario utilizzare registri speciali come i DB (Data Blocks) per memorizzare le stringhe intermedie e l’intestazione. Il registro DB1, ad esempio, può essere utilizzato per accumulare le stringhe mentre DB2 può servire per il controllo della lunghezza totale. È importante tenere traccia delle posizioni di inserimento e delle lunghezze delle stringhe per garantire che la concatenazione avvenga senza eccedere la dimensione del buffer. L’uso di registri di controllo può anche aiutare a gestire il passaggio delle stringhe tra cicli, garantendo un’esecuzione efficiente e rispettando i tempi del ciclo.

Un esempio pratico potrebbe essere l’uso di una struttura di dati composta da vari DB per memorizzare le singole stringhe e l’intestazione. Ogni stringa, insieme alla sua lunghezza, viene memorizzata in un DB separato. Questo approccio consente di verificare facilmente la lunghezza totale delle stringhe e di calcolare la posizione di inserimento nel buffer. Inoltre, l’uso di funzioni di concatenazione avanzate, come quelle offerte da TIA Portal, può semplificare il processo e ridurre l’errore umano.

Metodi Alternativi e Varianti

Esistono diverse strade per affrontare il problema della concatenazione di stringhe in un FB S7-1500. Una variante è l’uso di un approccio basato su tabelle, dove ogni stringa viene memorizzata in una riga di una tabella. Questo metodo offre la flessibilità di gestire stringhe di lunghezza variabile senza dover calcolare manualmente le posizioni di inserimento. Tuttavia, questo può richiedere più risorse di memoria e può essere più complesso da implementare rispetto a un approccio basato su registri.

Un altro metodo alternativo è l’uso di una struttura di dati dinamica, dove le stringhe vengono concatenate e gestite in memoria. Questo approccio è particolarmente utile quando le stringhe devono essere concatenate in tempo reale e possono variare frequentemente. Tuttavia, richiede una gestione più attenta delle dimensioni del buffer e può essere più suscettibile a errori se non gestito correttamente.

Infine, un approccio basato su ciclo di concatenazione può essere utilizzato per trasferire le stringhe nel buffer in cicli successivi. Questo metodo è ideale quando le stringhe superano la dimensione del buffer in un singolo ciclo. Tuttavia, richiede una gestione accurata del ciclo di tempo e può essere più complesso da implementare rispetto agli altri metodi.

Stanco di andare a tentativi?

Se errori come questo ti mandano in panico, probabilmente ti mancano le basi solide della programmazione PLC.

Smetti di risolvere problemi uno alla volta e impara il metodo giusto dall’inizio.


Scopri i Corsi TIA Portal per Principianti →

IT EN ES FR HI DE ZH