Vai al contenuto
PLC Forum


Composizione Stringa Di Caratteri Speciali


Lucos68

Messaggi consigliati

Ciao a tutti,

PLC 1214C

CM1241 (RS232)

TIA Portal V12 SP1

Devo inviare una stringa composta da una serie di caratteri speciali che leggo da un DB.

I caratteri sono:

  1. ASCII=(CTRL+A) o (SOH); DEC=1; HEX=01
  2. ASCII=('G'); DEC=71; HEX=47
  3. ASCII=(CTRL+B o (STX); DEC=2; HEX=02
  4. ASCII=(CTRL+C) o (ETX); DEC=3; HEX=03
  5. ASCII=(CTRL+M) o (CR); DEC=13; HEX=0D

Non riesco in nessun modo a comporre la stringa corretta :blink::wacko:

Grazie

Link al commento
Condividi su altri siti


Giuseppe Signorella

Le stringhe non sono altro che degli array di byte

Infatti se in un DB ti crei una stringa, puoi accedere hai singoli byte che formano la stringa.

Creati un DB con indirizzamento assoluto (quindi non ottimizzato).

All'interno del DB ti definisci una variabile di tipo stringa con la lunghezza da te definita,(esempio "dati_TX[4]" ) e poi trasferisci con l'istruzione MOVE nella stringa i singoli caratteri ascii, ognuno all'interno della posizione che serve a te per comporre la tua stringa.

Per non crearti istruzioni ripetitive, ti consiglio di crearti un LOOP che incrementi di una unità fino al raggiungimento della lunghezza della stringa , utilizzando l'indice del''array.

Fai però attenzione a non mandare in stop la CPU ;)

Non solo, il TIA portal mette a disposizione anche alcuni strumenti molto utili per lavorare con le stringhe, come ad esempio l'istruzione CONCAT che serve a raggruppare più stringe secondo le tue esigenze, oppure l'istruzione INSERT che inserisce all'interno di una stringa uno o più caratteri.

Insomma a te la scelta su come crearti la tua stringa.

Visto che comunque utilizzi un modulo CM1241 (RS232), puoi trasferire i dati sulla seriale anche in esadecimale creandoti sempre un array. (in tal modo fai fare meno lavoro alla CPU)

Buon lavoro

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

Grazie Giuseppe,

il mio problema è proprio quello di "scrivere" i caratteri ASCII speciali; se riesco a scriverli come byte, poi TIA portal non mi lascia manipolare la stringa dichiarata perchè mi dice che il tipo di dati non è corretto.

Inoltre alcune istruzioni con le stringhe mi chiedono di inputare indirizzi simbolici che non posso fare con un DB con indirizzamento assoluto.

Nel frattempo ho risolto così:

  • Ho creato un DB con indirizzamento ottimizzato con tante variabili String quanti sono i caratteri speciali da iiserire nell stringa da trasmettere. Variabili String con lunghezza non definita e ritentive.
  • In OB 100, per sicurezza e per non ripeterlo inutilmente ma solamente all'accensione, ho usato l'istruzione S_CONV (Char to String) per trasferire il valore decimale del carattere speciale alla Stringa corrispondente.
  • Ho usato CONCAT per formare la stringa risultante che poi trasmetto.

c0dcce04d84ca0ee28df785716bb9120.jpg

Link al commento
Condividi su altri siti

Giuseppe Signorella

Secondo me ti stai solo complicando la vita.

Utilizzando il metodo che ti ho descritto sopra, e cioè utilizzando l'istruzione move, puoi trasferire i singoli caratteri in formato chars all'interno della variabile stringa.

Poi la variabile che stringa era e stringa resta, la puoi utilizzare all'interno del programma senza alcun problema.

Dai un'occhiata all'immagine allegata.

Poi se ho compreso male io ciò che vuoi fare, be all'ora spiegati meglio.

stringa.gif

Ciao

Link al commento
Condividi su altri siti

  • 4 weeks later...

Ok Giuseppe, effettivamente la tua soluzione è ottima, grazie mille!

Nell'ottica del "grammaticamente corretto" però non sarebbe più giusto e "facilmente comprensibile" ai più una soluzione come la mia?

Nel senso che se il tutto deve essere dato "in pasto" ad un cliente o usato didatticamente o semplicemente ripreso dopo un lungo periodo, non sarebbe più di facile comprensione?

Non è una critica, non fraintendermi, sono autodidatta con una base tecnica e voglio solo cercare di migliorarmi grazie ai consigli di chi ne sa di più.

Ciao

Link al commento
Condividi su altri siti

Giuseppe Signorella

In programmazione ognuno programma come meglio crede/riesce. Lo stesso programma, 10 programmatori differenti lo farebbero in 10 modi differenti. Non c'è una vera e propria regola in merito. L'importante che funziona, e funziona bene.

Però esistono alcuni concetti fondamentali da rispettare. Fondamentali per effettuare una buona programmazione.

Ne cito solo alcune.

1) Il programma deve essere il più semplice possibile.

2) deve essere il più corto possibile.

3) Deve essere il essere il più comprensibile possibile.

Quindi meno istruzioni utilizzi e meglio è.

Per tutto il resto...............ci sono i commenti. ;)

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