marcob1984 Inserito: 4 luglio 2018 Segnala Share Inserito: 4 luglio 2018 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 More sharing options...
acquaman Inserita: 4 luglio 2018 Segnala Share Inserita: 4 luglio 2018 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 More sharing options...
marcob1984 Inserita: 6 luglio 2018 Autore Segnala Share Inserita: 6 luglio 2018 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 More sharing options...
DesmoGiec Inserita: 6 luglio 2018 Segnala Share Inserita: 6 luglio 2018 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ì: Ciao Link al commento Condividi su altri siti More sharing options...
marcob1984 Inserita: 6 luglio 2018 Autore Segnala Share Inserita: 6 luglio 2018 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 More sharing options...
DesmoGiec Inserita: 9 luglio 2018 Segnala Share Inserita: 9 luglio 2018 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: (mw456 per comodità così cambio i valori del pointer da vat) Come vedi, mw456 = 0, quindi partirò dal byte 0 della db 2345 (assegnata dal richiamo fc). Se scrivo 16 in mw456 avrò: 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora