Vai al contenuto
PLC Forum


Scrivere In Una Stringa


avafab

Messaggi consigliati

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
Link al commento
Condividi su altri siti

  • 2 weeks later...

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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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...