Leonvittorio Inserito: 13 luglio 2007 Segnala Inserito: 13 luglio 2007 Salve a tutti, Ho un altro bel quesito per chi è più esperto di me:esiste una funzione per la conversione di stringhe ascii in numeri rial sui Plc S7?ovviamente la stringa ascii rappresenta un numero in virgola mobile o fissa con tanto di segno.
Livio Orsini Inserita: 13 luglio 2007 Segnala Inserita: 13 luglio 2007 Attenzione che il formato real di Siemns è diverso dal real comunemente usato.Se non ricordo male no c'è neanche la funzione che converta L'ASCII in binario. Mi sa che dovrai scriverti tu la funzione di conversione ASCII-_>Real
Federico Milan Inserita: 13 luglio 2007 Segnala Inserita: 13 luglio 2007 La tua string è a dimensioni fisse? oppure ha dimensioni variabili?ad ogni modo - salvo smentite - credo che non esista una funzione pronta per questo. A suo tempo ho dovuto generarmi un semplice "interprete" che convertisse una stringa numerica in un reale/intero. Non è niente di difficile, basta solo applicare le regole della base 10 !L'unica grossa machinosità è semai controlare la presenza di un formato ingenieristico, ma tutto questo è da valutare su cme memorizzi la stringa e su come è presenata ... ciao
Luca Bab Inserita: 13 luglio 2007 Segnala Inserita: 13 luglio 2007 ad ogni modo - salvo smentite - credo che non esista una funzione pronta per questoio - salvo ulteriori smentite - confermocome ti ha gia' detto federico , 789 in char primo char - 48 x 100secondo - 48 x 10terzo - 48 x 1sommi il tutto in un int o dintgestire la virgola e' un po piu' incasinatociaoLuca
Livio Orsini Inserita: 13 luglio 2007 Segnala Inserita: 13 luglio 2007 Attenzione che se èuna stringa ASCII è un poco diversa. Ad esmepio se si ha una stringa ASCII "32383733" corrisponderà al numero 2873, cioè caratter-30h ==> cifra numerica, ovviamete se si usa l'intero esadecimale bisogna anche tenere presente che ci sono "A,B,C,D,E,F". Poi c'è da considerare il formato dell virgola mobile Siemns che è uno standard differente da quello più comune, Dovrei avere ancora in giro la routine in VB per convertire i vari formati di Real.
Luca Bab Inserita: 13 luglio 2007 Segnala Inserita: 13 luglio 2007 ASCII "32383733" corrisponderà al numero 2873, cioè caratter-30h ==> cifra numericaCiao Livio , mi interessava approfondire il discorso .perche' a 2873 ??? se in asci prendi il singolo carattere e togli 48 ( o 30h che e' la stessa cosa ) non dovresti trovare l'intero decimale relativo ??L'esempio che hai fatto con 32383733 ( letto in ascii con 8 caratteri ovviamente ) corrispondera' allo stesso numero ( doppio intero ) in decimale 32383733 o no ??CiaoLuca
Savino Inserita: 13 luglio 2007 Segnala Inserita: 13 luglio 2007 (modificato) esiste una funzione per la conversione di stringhe ascii in numeri rial sui Plc S7?No , ce solo l'FC 94, "ATH" ASCII to HEX. Se tu hai una STRING= '1.23456' allora l'FC 94 ti converte in HEX = 1023456.. quindi non ti serve.Pratticamente quello che tu avresti bisogno sarebbe convertire da Stringa to Floating Point, non neccessariamente da ASCII in floating Point. Dovresti creare la funzione...Attenzione che il formato real di Siemns è diverso dal real comunemente usato Perche' mai?Dal HTML . Floating-point numbers in STEP 7 conform to the basic format, single width, described in the ANSI/IEEE standard 754-1985, IEEE Standard for Binary Floating-Point Arithmetic. .. The sign S The exponent e = E + bias, increased by a constant (bias = +127) The fractional part of the mantissa m. The whole number part of the mantissa is not stored with the rest, because it is always equal to 1 within the valid number range. The three components together occupy one double word (32 bits): ... DB120.DBD 0 FLOATING_POINT 9999.99 DB120.DBD 0 HEX DW#16#461C3FF6 DB120.DBD 0 DEC L#1176256502 DB120.DBD 0 CHARACTER 'F?ö' DB120.DBB 0 CHARACTER 'F' DB120.DBB 1 CHARACTER '' DB120.DBB 2 CHARACTER '?' DB120.DBB 3 CHARACTER 'ö' DB120.DBB 0 HEX B#16#46 DB120.DBB 1 HEX B#16#1C DB120.DBB 2 HEX B#16#3F DB120.DBB 3 HEX B#16#F6 Come si puo' apprezzare nella VAT sopra ( Byte 0-1-2-3) , la differenza di Siemens e' la consirerazione del ordine per il LSB/MSB.SIMATIC: 15..............0 BYTE 0 BYTE 1 INTEL: 15..............0 BYTE 1 BYTE 0 Modificato: 13 luglio 2007 da Savino
Gianmario Pedrani Inserita: 13 luglio 2007 Segnala Inserita: 13 luglio 2007 ciao ragai vi devo smentire... riguardo alle funioni che non esistono....esiste in tep7 nella parte libreria-standar_librari-IEC function bloc la fc38 da stringa a nunero intero 16 bitla fc37 da stringa a nunero intero a 32 bitla fc39 da stringa a nunero reale 32 bit ciaooooooooo
Savino Inserita: 13 luglio 2007 Segnala Inserita: 13 luglio 2007 la fc39 da stringa a nunero reale 32 bit Well done Gian.. infatti era sotto la stdlibs!!
Livio Orsini Inserita: 14 luglio 2007 Segnala Inserita: 14 luglio 2007 Perche' maiSavino mi sono espresso in modo poco chiaro. Non è il numero di bit dedicati a caratteristica e mantissa che è differente, ma come vengono trattate caratteristaca e mantissa.Purtroppo sono in vacanza e non ho la documentazione, ma dispongo di una vecchia funzione in VB che avevo creato apposta per avere in contemporanea la conversione dei formati Siemens (che non è solo siemens) ed il più comunemente usato.Se vuoi, dopo Agosto quando rientrerò a casa, potrò spegare meglio la questione.Fortunatamente c'è Gianmario che è sempre perfettamente aggiornato e ci ha dato una buona informazione
Savino Inserita: 16 luglio 2007 Segnala Inserita: 16 luglio 2007 perfettamente aggiornato.. A dir la verita' il FC38 STRING_I (String To Integer) lo avevo gia' utilizzato qualche mese fa' in una programma... il FC 39 STRING_R (String To Real) si trovava nella stessa folder di libreria IEC .. accidenti alla mia dimentichezza che a volta mi tradisce !! .. ma bisogna dire che al FC39 li devi dare in input una stringa di 14 elementi, in formato notazione scientifica.es. '-' '1' '.' '5' '8' '7' '9' '1' '8' 'e' '+' '0' '2' '9' per ricavare il floating point -1.587918e+029Per una conversione a numero reale in virgola fissa, importante nello gestionale piuttosto, dove la precisione sarebbe pu' importante della dimensione, non vedo l'utilizzo del FC 39 cosi usefull. ... infatti mi era venuto subito in mente che se ti serve una conversione del tipo intervallo -9999.999 / +9999.999 allora meglio se ti costruisci la funzione apposta.
Federico Milan Inserita: 17 luglio 2007 Segnala Inserita: 17 luglio 2007 Ciao, credo di non aver mai visto la FC39 in vita mia, ma a suo tempo mi sono fatto il parser e il convertitore, proprio pechhè avrei potuto avere stringhe numeriche di lunghezza "variabile". Del resto, la compatibilità del formato reale è un tema particolare, in quanto se:il numero viene spedito (esempio in seriale) solo in caratteri, la conversione interna è un fatto di siemens.Per dare una idea, la conversione io la facevo più o meno così:Scansione della stringa per trovare il pun to decimale. A questo punto due puntatori mi scandiscono uno a ritroso i caratteri numerici moltiplicandoli per 10.0^(i) e uno in progressione che moltiplicava per 10.0^(-i). La converisone a formato reale Siemens è automatica e la funzione è trasfportabile in qualunque altro sistema .Ovviamente la mia FC controllava anchese era presente una notazione scientifica (1.2222 E 3). MA il concetto è lo stesso in quanto il parser deve lavorare come prima e poi se incontra una E eseguire un'ulteriore moltiplicazione ... è più facile farlo che spiegarlo . A dire il vero ci rabbero altri formati e cosucce da stare attenti, ma non sono diffcili ...ciao
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