ricki Inserito: 25 novembre 2005 Segnala Inserito: 25 novembre 2005 Buon Giorno , esiste un fc o quant'altro che mi trasforma una stringa ( P.es. 'Pippo') in Dint ?Grazie Ricki
STEU Inserita: 25 novembre 2005 Segnala Inserita: 25 novembre 2005 Scusami come puo' una stringa essere convertita in un valore numerico?
irpick Inserita: 25 novembre 2005 Segnala Inserita: 25 novembre 2005 Pippo = 5 caratteri = 5 byte = 2 word + 1Byte Dint= 2Word?!= ! Qualcosa sfugge...
Henon Inserita: 26 novembre 2005 Segnala Inserita: 26 novembre 2005 (modificato) Il Primo Byte della tua Stringa contiene la Lunghezza della Stringa Stessa,per Esempio "Giorgio" Byte 0 = 7 (Lunghezza Caratteri o Bytes della Stringa)Byte 1 = "G" (047 Hex)Byte 2 = "i" (069 Hex)Byte 3 = "o" (06F Hex)Byte 4 = "r" (072 Hex)Byte 5 = "g" (067 Hex) Byte 6 = "i" (069 Hex)Byte 7 = "o" (06F Hex) Puoi Leggere i Bytes con una DWord (4 Bytes) non mi ricordo se è corretto l' ordine, oppure devi usare degli Swap dei Bytes per ottenere la giusta Sequenza della Stringa.Io Normalmente uso programmare con il Linguaggio SCL perchè si riesce trattare le stringhe moltofacilmente, cosi pure per Strutture Dati etc. Modificato: 26 novembre 2005 da Henon Research
Henon Inserita: 26 novembre 2005 Segnala Inserita: 26 novembre 2005 Aggiunta:Se invece da una Stringa contenente un Valore numerico la vuoi convertirla in DINT,Esempio Stringa := "13003"Penso che esista una FC nelle Librerie Standard del Step7.Altrimenti con Pazienza devi controllare :1) che la tua stringa contenga sono Caratteri Numerici2) Esecuire un Ciclo dalla cifra più a destra verso l'ultima la più a Sinistra (Unità,decine, centinaia......) Eseguire la Somma delle Varie Cifre con il Giusto Peso (Unità *1, Decina*10, Centinaia*100.....etc)Spero che tu trovi questa FC nella Libreria Standard della Siemens, altrimenti penso che la dovrai costruire.Ciao Buona Fortuna.
Henon Inserita: 26 novembre 2005 Segnala Inserita: 26 novembre 2005 Penso che in SCL esista una Funzione che Converta un Valore Numerico Stringa in Valore Numerico Valore := String_to_Dint(String);
sassi Inserita: 27 novembre 2005 Segnala Inserita: 27 novembre 2005 Nell'esempio: Stringa := "13003"L'algoritmo e': (Byte6 - 48) + (Byte5 - 48)*10 + (Byte4 - 48)*100 + (Byte3 - 48)*1000 + (Byte2 - 48)*10000L DBXX.DBBYY (BYTE 6)L 48-IT MD AAA.B (DWORD DI APPOGGIO)///L DBXX.DBBYY (BYTE 5)L 48-IITDL L#10*DL MD AAA.B (DWORD DI APPOGGIO)+DT MD AAA.B (DWORD DI APPOGGIO).........L DBXX.DBBYY (BYTE 2)L 48-IITDL L#10000*DL MD AAA.B (DWORD DI APPOGGIO)+DT MD AAA.B (DWORD DI APPOGGIO)Devi sottrarre 58 al byte perche' 48 e' il valore di '0'; da cui, per esempio, '3' ha valore 51 e sottraendo 48 ottieni proprio 3.I byte 0 e 1 sono riservati per il tipo string.Spero di essere stato chiaro; l'esempio e' teorico e non e' stato testato.Salutoni,Sassi
RAMSON Inserita: 13 dicembre 2005 Segnala Inserita: 13 dicembre 2005 Le stringhe in realtà vengono implementate come sequenza di bytes.La differenza è che i primi due bytes contengono la lunghezza massima possibile dell'area di stringa (0..255) e la lunghezza della stringa attuale (0...255) a seguire poi ci sono i bytes corrispondenti ai caratteri ascii della stringa stessa.Il tuo esempio viene codificato con [LMAX] [LSTR][P][P][P][O] quindi lunga 6 bytes non 4.Se la stringa l'hai memorizzata da MW0, occuperà fino a MW5 compreso (vale anche per le DB)Se tu scrivi L MD2, hai già caricato un DINT con la tua stringa !!Se la tua stringa è una variabile temporanea in una FC od anche statica in una FB la cosa è leggermente più complicata in quanto il sistema si accorge del formato diverso.Allora devi aggirare il controllo facendo:L P#MiaStringa // Ptr alla stringaLAR1L D[AR1,P#2.0] // Quì ti trovi il DINT (P#2.0 per scavalcare i bytes lunghezza)Se la tua FB è multiistanza devi aggiungere AR2 al pointer.N.B. Non l'ho testato ma dovrebbe funzionare.Ciao
walterword Inserita: 10 luglio 2016 Segnala Inserita: 10 luglio 2016 se hai una variabile DINT puoi scriverci dentro , e visualizzare , fino a 4 caratteri L 'ciao' T DB10.DBD0 ****** U( L DB10.DBD0 L 'ciao' ) = M40.0 Se hai 2 variabili DINT ..... 8 caratteri , senza porcherie alla fine come usualmente siemens usa fare Se hai un array di int o dint puoi scriverci e visualizzare caratteri quanti ne vuoi
pigroplc Inserita: 11 luglio 2016 Segnala Inserita: 11 luglio 2016 sbaglio o dal dicembre 2005 siamo saltati all' 11 luglio 2016????
Giuseppe Signorella Inserita: 11 luglio 2016 Segnala Inserita: 11 luglio 2016 Considerata la vetustà della discussione, non ha più senso tenerla aperta . ********Dscussione è chiusa. *********
Messaggi consigliati