Vai al contenuto
PLC Forum


Scrivere In Una Stringa


Messaggi consigliati

Inserito: (modificato)

Salve a tutti,

ho bisogno di scrivere '0000000000' in una stringa (una STRING[10] definita in un datablock), come faccio usando LADDER?

PS. è possibile farlo evitando di muovere BYTE a BYTE? graziee

Modificato: da avafab
  • 2 weeks later...

Inserita:

ciao

una soluzione potrebbe essere :

definisci in una db un campo string che inizzializzi direttamente nel db con il valore che ti interessa

poi con la sfc20 (blkmov) muovi blocchi di dati

utilizzando i puntatori

U "E0.0"

SPBN eti1

CALL "BLKMOV"

SRCBLK :=P#DB4.DBX0.0 BYTE 10 (con questo puntatore definisci il punto iniziale dei dati che devi muovere, specificando poi quanti byte vuoi muovere. sarebbe il "dato_testo"

del db4)

RET_VAL:=DB4.DBW24

DSTBLK :=P#DB4.DBX12.0 BYTE 10 (con questo puntatore definisci il punto iniziale dei dati che devono riceve il valore, specificando poi quanti byte vuoi muovere. sarebbe il "dato_testo_out"

del db4)

eti1: NOP 0

i dati che vedi nell'esempio sono del db4

di seguito il codice del db

DATA_BLOCK DB 4

TITLE =

VERSION : 0.1

STRUCT

dato_testo : STRING [10 ] := 'testa'; //Variabile jolly provvisoria

dato_testo_out : STRING [10 ];

ret_val_testo : INT ;

END_STRUCT ;

BEGIN

dato_testo := 'testa';

dato_testo_out := '';

ret_val_testo := 0;

END_DATA_BLOCK

saluti Valvolina

Inserita:

Potresti usare l'istruzione SFC20 "BLKMOV" (come suggerito da "valvolina"), oppure l'istruzione SFC21 "FILL".

Ma per 10 byte potresti risolvere semplicemente con tre move: due DWORD e una WORD.

Se poi lo fai in AWL, diventa ancora più semplice.

Esempio:

L '0000'

T DBxxx.DBD0

T DBxxx.DBD4

T DBxxx.DBW8

Qualunque sia il metodo che utilizzi per inizializzare la stringa, ricorda però che una variabile di tipo STRING da 10 caratteri è lunga 12 byte. I due byte in più contengono rispettivamente la lunghezza totale e la lunghezza effettiva della stringa.

Quindi se, per esempio, hai definito una variabile di tipo STRING da 10 caratteri a partire da DB10.DBB0, per riempire la variabile con i dati corretti dovrai impostare i byte DB10.DBB0 e DB10.DBB1 con valore 10, e riempire con il carattere '0' i byte da DB10.DBB2 a DB10.DBB11.

L'esempio precedente andrebbe quindi corretto come segue:

L 10

T DBxxx.DBB0

T DBxxx.DBB1

L '0000'

T DBxxx.DBD2

T DBxxx.DBD6

T DBxxx.DBW10

Per tener conto dell'intestazione della stringa, se utilizzi SFC20 "BLKMOV" c'è da fare una piccola modifica all'esempio di "Valvolina", e considerare le lunghezze delle aree dati pari a 12 byte e non 10 byte.

Se la stringa sorgente la inizializzi direttamente impostando '0000000000' nella colonna "Valore iniziale" quando dichiari la variabile nel DB, i due byte di intestazione vengono impostati automaticamente.

Se poi nell'utilizzo di BLKMOV passi alla funzione i parametri delle aree sorgenti e destinazione utilizzando il simbolico ("NomeDB".NomeVariabile), anche la lunghezza viene presa in automatico.

Inserita:

grazie a tutti e due, come sempre molto disponibili ed esaurienti :D

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...