Vai al contenuto
PLC Forum


Decimale / Esadecimale


meccanico1

Messaggi consigliati

Buona sera , mi sono accorto che non posso caricare un valore fisso superiore a  16#FFFF su di una operazione  a virgola fissa nel mio caso una DIVDI  mentre lo posso fare usando il valore in decimale.

C'è un motivo particolare ?

grazie

Link al commento
Condividi su altri siti


Giuseppe Signorella

Non è molto chiaro ciò che intendi dire in quanto non indichi che tipologia di variabile stai utilizzando (Se a 16 o 32 bit)
 
Se è un numero reale, parliamo di 32 bit. Se è un numero intero (probabilmente) parliamo di 16 bit (Lo deduco da ciò che hai scritto "16#FFFF") e non da un numero intero a 32 bit.
 
Esprimere un valore in esadecimale,  in decimale, o in binario è la medesima cosa. Non cambia nulla se non il modo con viene espresso il valore.
 
Il valore espresso in esadecimale "16#FFFF" Corrisponde al valore decimale "65535", il quale è il massimo valore che può contenere una WORD, pertanto non puoi inserire in una word una valore maggiore di 65535 o di 16#FFFF.
 
Se riesci ad inserire nel blocco un valore superiore a 65535, probabilmente ti viene fatta una conversione di tipo coercion "implicita", ma anche la variabile di uscita a questo punto deve essere a 32 bit.

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

ciao,

 

se stai programmando in kop (con step7) con una operazione di divisione DIV_DI (divisione di doppi interi quindi 32 bit),

non è permesso mettere come parametro di ingresso un numero in esadecimale.

Giustamente come ha detto Giuseppe devi esprimere il valore che vuoi mettere invece che in esadecimale in decimale.

esempio 16#FFFFFF  =  16777215 in decimale.

 

 

se lo fai in awl, il software è un pò meno fiscale

e ti lascia più libertà.

 

un saluto

Valvolina

Link al commento
Condividi su altri siti

in effetti è quello che ho fatto , ma avevo la curiosità di  capire se c'è un motivo particolare perchè  in un modo si può fare ( con i valori in decimale ) e nell'altro no ( con i valori in esadecimale).

Grazie

Link al commento
Condividi su altri siti

Io me lo sono spiegato così:

la funzione DIV_DI richiede in ingresso un numero intero a 32 bit (tipo DINT). In quanto numero vuole la rappresentazione in decimale. Se tu usi la rappresentazione esadecimale il compilatore lo interpreta come una (DWORD) che non è accettato come ingresso della funzione.

In AWL invece la funzione va a leggere direttamente sui registri e perciò non fa controlli sul tipo di dati

Link al commento
Condividi su altri siti

Io ho provato con una divisione KOP DIV_DI con 16#FFFF sia al dividendo che al divisore e non mi ha dato problemi;

Hai eliminato la spunta sulla casella "Strumenti-Impostazioni-Kop/Fup-Controllo tipo di operandi?


Ops...

Scusate, avevo letto male la domanda...

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