Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Cast Da Dint A Int - In KOP


Messaggi consigliati

Inserito:

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


Inserita:

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

Inserita:

Per trasformare un numero reale in un numero intero, lo devi prima

convertire in un numero intero a 32 bit (DINT)

Nel gruppo delle operazioni di conversione l'editor Step7 mette

a disposizione 4 funzioni per questo scopo

ROUND: Arrotonda il numero reale al numero intero più vicino

TRUNC: 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 inferiore

CEIL: Arrotonda sempre all'intero superiore

FLOOR: Arrotonda sempre all'intero inferiore

Tutte 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)

ROUND

T MWxxx (numero convertito)

Naturalmente devi essere certo al 100x100 che il numero intero risultato della conversione

sia >-32768 e <32767

Inserita:

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

Inserita:

Non voglio fare il mestrino pignolo anche perchè non ho il diritto per esserlo

però 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

Inserita:

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

roverò anche questa versione, grazie mille

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