Vai al contenuto
PLC Forum


Problema Divisione Su Step 7 Ed S7 300


southofsanity

Messaggi consigliati

Ho un problema con le funzioni matematiche dello step7

praticamente ho un valore variabile che mi arriva dalla sfb48

lo metto su una md e poi eseguo dei calcoli.

Eseguendo pero delle divisioni esempio

L MD20

L 1000

/R

T MD24

se MD20 è 90000 su MD24 non ho 90 ma ho un numero fuori dal normale

un numero a 10 cifre

ma sbaglio qualcosa

grazie a tutti

Link al commento
Condividi su altri siti


ciao,

probabilmente devi controllare i formati...

se operi in REALI come

L MD20

L 1000.0

/R

T MD 24

devi scrivere 1000.0 e non 1000. Altrimenti lo prende come intero...

Ciao

Link al commento
Condividi su altri siti

Ciao grazie per la risposta, ma ho già provato.

Se scrivo 1000.0 poi in on line vedo un numero sempre

a 1 cifre o piu e non fa nemmeno l adivisione...

Non so se può essere di aiuto ma la sfb48 mi da un DINT

che metto in una MD dato che la funzione non mi fa inserire altri

formati.

Link al commento
Condividi su altri siti

ahhh allora devi operare con i DINT...

quindi non devi fare /R, ma /D !!

L MD20

L 1000

/D

T MD24

anzi.. proprio per correttezza dovresti scrivere L L#1000 (per indicare un caricamento a 32bit)...

Ciao

Modificato: da Vince73PLC
Link al commento
Condividi su altri siti

Perché c'è sempre questa grande paura di consumare le tastiere?

Perché non scrivere subito, anziché SFB48 e basta, SFB48 "FREQUENC", in modo da fugare ogni eventuale dubbio?

E perché non scrivere qual è il valore che metti in MD20?

Immagino si tratti di MEAS_VAL o di COUNTVAL, ma dover fare supposizioni quando bastava specificarlo...

In ogni caso si tratta di valori in formato DINT, e scrivendo

L 1000

carichi nell'accumulatore il valore 1000 in formato INT.

Insomma, carichi un DINT, poi carichi un INT, e fai una divisione tra REAL.

Per forza non funziona.

Quindi, se ti basta il calcolo con interi, devi scrivere:

L MD20 //Valore in formato DINT

L L#1000 //Carica 1000 in formato DINT (trattandosi di numero compreso tra 0 e 32767 bastava scrivere 1000, ma L#1000 è più corretto)

/D //Divisione tra DINT

T MD24 //Risultato della divisione in formato DINT

Se invece vuoi il risultato in virgola mobile, devi scrivere:

L MD20 //Valore in formato DINT

DTR //Converti da DINT a REAL

L 1000.0 //Carica il valore 1000 in formato REAL (se scrivi solo 1000 il formato è INT)

/R //Divisione tra REAL

T MD24 //Risultato della divisione in REAL

Link al commento
Condividi su altri siti

Bè si diciamo che ho sintetizzato un pò, ho dato per scontato che si capiva, come per l'operazione

ho dato per scontato che fosse stata una cosa più immediata.

La prossima volta saro più dettagliato.

Mi immaginavo ce era un problema di quel genere.

Anche se non capisco perchè on line ogni qual volta ho una variabile di un tipo diverso

devo cambiare tipo di visualizzazione per controllare l'effettivo valore,

è una grossa limitazione e può indurre in errore o in confusione.

Comunque Grazie a tutti problema risolto

Link al commento
Condividi su altri siti

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