Vai al contenuto
PLC Forum


Concatenare 2 stringhe dichiarate in un DB


marcob1984

Messaggi consigliati

Buonasera a tutti voi,

apro questa discussione perchè non riesco a superare questi 2 problemini, collegati uno all'altro, che dovrebbero essere una stupidaggine:

 

1: ho un dato di tipo REAL, che rappresenta il numero progressivo di secondi di lavoro di un motore. Tramite FC30 "REAL_TO_STRING" converto questo numero in una stringa dichiarando al parametro di uscita RET_VAL una variabile locale del blocco in cui ho scritto il codice, dichiarata come "STRING" e fin qui tutto bene. Problema: come posso trasferire questa stringa locale ad una variabile correttamente formattata di un DB (es: DB12.DBD292 | STRING[6] ) per poter utilizzarla dove e come voglio?

 

2: la mia variabile locale di tipo STRING [6] che rappresenta il numero di secondi di lavoro di un motore la voglio concatenare ad una variabile dichiarata in un DB (es: DB12.DBD296 | STRING [1] | 's' ) 

ma il blocco FC2 "CONCAT" non mi permette di inserire in IN2 la variabile ne in questo formato: DB12.DBD296 ne in questo formato:p#DB12.DBX296 byte 8. Ovviamente al parametro di uscita RET_VAL riscontro lo stesso problema descritto al punto 1

 

Qualcuno si è già imbattuto in questo problema? Avete qualche spunto da suggerire?

 

Grazie mille a tutti

Link al commento
Condividi su altri siti


Allora l'FC30 converte un numero reale in una stringa contenente il numero in formato esponenziale quindi 14 caratteri contenenti:

Il segno

un numero prima della virgola

un punto

7 numeri dopo la virgola 

E

Piu o meno

2 cartteri per l'esponente

(bastava premere F1 sull'FC30)

 

Essendo la prima stringa in ingresso all Fc2 più lunga di quella in uscita l'FC2 non funziona.

 

Per poter avere un risultato decente secondo me ti conviene convertire il numero reale in intero convertirlo in stringa con l'FC16 e passarlo come primo parametro all'fc2.

 

Impara ad usare . in linea trovi quasi tutte le spiegazioni che ti servono.

 

Aggiornaci

ciao

 

Link al commento
Condividi su altri siti

Grazie acquaman, ma ancora non riesco a darne fuori.

Ti faccio un altro esempio per semplificare il mio problema:

 

db10.dbd0 | stringa1 | STRING[2] | 'h'

db10.dbd4 | stringa2 | STRING[2] | 'm'

db10.dbd8 | stringa3 | STRING[2] | 'hm'

 

in FC1 richiamo il blocco CONCAT FC2 e ai parametri di IN1, IN2 e RET_VAL vorrei passare le 3 variabili dichiarate precedentemente.

Ma non mi permette di farlo ne in modo simbolico ne come formato any.

 

Dove sbaglio? Sono alle prime armi con le stringhe e probabilmente mi sto perdendo in un bicchier d'acqua

 

 

Link al commento
Condividi su altri siti

6u5EZJC.png

hBtwogd.png

 

l'fc 30 lo usi allo stesso modo.

Puoi appoggiare, nel campo ret_val, la variabile string direttamente della db.

Invece di assegnare tramite indirizzo, vai di simbolico.

In sostanza, se non vuoi scrivere a mano, pigia ctrl+j nel campo in1 (e anche negli altri campi), in modo che ti compaia la scelta rapida.

così:

6UC5mj4.png

 

Ciao :)

Link al commento
Condividi su altri siti

forum.thumb.jpg.608d05e653218097f028e6eb54b34885.jpg

 

 

 

 

 

DesmoGiec, sei sempre il mio angelo custode. Grazie mille

Ora però, dopo aver superato questo ostacolo, se ne presenta un altro:

in una funzione, in cui concateno delle stringhe temporanee, ho bisogno che la stringa risultante dal mio codice temp: 'HMS' (vedi allegato) venga passata ad una variabile di tipo OUT o IN-OUT "TimeString" | STRING[12] | , per poter usare l'FC come funzione parametrica. Finora non ho trovato soluzione.

Ho anche provato a collegare al parametro di uscita RET_VAL dell'ultimo blocco FC2 il parametro "TimeString", ma non me lo permette.

 

 

Link al commento
Condividi su altri siti

fbOqzfv.png

 

Nel tuo fc prevedi, nelle in di interfaccia, i campi Lenght, db_target e address start (tutti interi)

In srcblk dell'sfc20 io mi son preso una stringa da db, tua avrai il tuo #hms

Nel richiamo avrai:

5sPiadh.png

(mw456 per comodità così cambio i valori del pointer da vat)

3x6o12a.png

Come vedi, mw456 = 0, quindi partirò dal byte 0 della db 2345 (assegnata dal richiamo fc).

Se scrivo 16 in mw456 avrò:

yLnWiYQ.png

Come vedi ha scritto a partire da offset 16.

 

In questo modo puoi indirizzare a tuo completo piacimento dove andare a scrivere hms, nel caso tu avessi bisogno di scrivere in zone diverse del programma.

Spero sia chiaro!

 

Ciao!

 

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