pablo.mrg Inserito: 23 aprile 2009 Segnala Share Inserito: 23 aprile 2009 Ciao a tutti, non riesco a trovare una funzione che mi consenta di trasformare un DINT in un INT.In pratica devo passare da un numero reale (che varia da 0.0 a 50.0, gli Hz di un inverter per intenderci) alla sua rappresentazione intera che varia da 0 a 16383... Link al commento Condividi su altri siti More sharing options...
alfa84 Inserita: 23 aprile 2009 Segnala Share Inserita: 23 aprile 2009 In effetti mi sembra che nel siemens 300 non sia possibile rispetto al 200 effettuare tale conversione,comunque in alternativa potresti estrarre dal dato dint la word o i primi 16 bit meno significativi del tuo dato in formato doppia parola.Ciao Link al commento Condividi su altri siti More sharing options...
Foca Inserita: 23 aprile 2009 Segnala Share Inserita: 23 aprile 2009 Per trasformare un numero reale in un numero intero, lo devi primaconvertire in un numero intero a 32 bit (DINT)Nel gruppo delle operazioni di conversione l'editor Step7 mettea disposizione 4 funzioni per questo scopoROUND: Arrotonda il numero reale al numero intero più vicinoTRUNC: Come sopra ma nel caso il numero sia a metà fra l'intero superiore e l'inferiore ad esempio 1.5, arrotonda sempre all'itero inferioreCEIL: Arrotonda sempre all'intero superioreFLOOR: Arrotonda sempre all'intero inferioreTutte queste funzioni accettano come uscita un valore intero a 32 bit (DINT)se le utilizzi negli editor KOP e FUP in AWL potresti scrivere:L MDxx (numero da convertire)(normalizzazione)ROUNDT MWxxx (numero convertito)Naturalmente devi essere certo al 100x100 che il numero intero risultato della conversionesia >-32768 e <32767 Link al commento Condividi su altri siti More sharing options...
pablo.mrg Inserita: 23 aprile 2009 Autore Segnala Share Inserita: 23 aprile 2009 Grazie mille,in effetti cercavo una funzione "pronta" da tirar dentro nel KOP, alla fine ho scritto questa in AWL: L #Frequenza L 1.000000e+002 // save 2 decimal *R // 100 * #drive_f_setpoint (ACCU2 * ACCU1) RND // conversion of a 32-bit IEEE floating-point number to 32-bit integer L 16384 // 16384 = 4000HEX (rif 50Hz) *D // freq * 16384 L 5000 /D // (freq * 16384)/5000 T #FrequenzWord // store computed set point in #SEND.f_setpoint Link al commento Condividi su altri siti More sharing options...
Foca Inserita: 23 aprile 2009 Segnala Share Inserita: 23 aprile 2009 Non voglio fare il mestrino pignolo anche perchè non ho il diritto per esserloperò io avrei scritto: L #Frequenza L 1.000000e+002 // save 2 decimal *R // 100 * #drive_f_setpoint (ACCU2 * ACCU1) L 1.638400e+001 // 16384 = 4000HEX (rif 50Hz) *R // freq * 16384 L 5.000000e+001 /R // (freq * 16384)/5000 RND // conversion of a 32-bit IEEE floating-point number to 32-bit integer T #FrequenzWord // store computed set point in #SEND.f_setpoint Link al commento Condividi su altri siti More sharing options...
pablo.mrg Inserita: 23 aprile 2009 Autore Segnala Share Inserita: 23 aprile 2009 In effetti sembra meglio anche a me... Quella scritta da "me" è in realtà estrapolata da una FC in AWL che gestisce il MM420, credo sia quella del tutorial, per cui l'avevo presa per buona e debuggata. Proverò anche questa versione, grazie mille 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