Vai al contenuto
PLC Forum


Numeri UINT


Messaggi consigliati

Inserito:

Buongiorno a tutti

Chiedo aiuto per questa cosa...

 

Con CJ utilizzo per un DM assegnata come UINT per un contatore di posizionamento

 

Con le istruzioni ++ e -- incremento e decremento il valore della DM

Succede che sottraendo, il valore della DM vada sotto lo 0 , però anche se assegnata come UINT io non vedo il numero con segno - , la DM assume valore 36535 e da li continua a diminuire.

Quindi se io uso una funzione ad esempio CF113 DM<0 OUT , la condizione che dovrebbe attivare OUT non si verifica mai.

Come posso elaborare il dato con segno negativo o positivo?

 

Grazie


Inserita:

Scusami ma UINT non è un intero senza segno? U sta per Un e INT sta per intero con segno se la definisci UINT non dovrebbe avere segno ed è per quello che non la vedi andare in negativo, non so come usi il contatore veloce ma il contatore lavora a doppia parola e quindi non puè essere un Intero ma un doppio Intero a 32 bit, aggiungo che il valore del contatore mi sembra che Omron lo metta sui registri di stato A e quindi li dovresti leggere il valore del contatore, penso tu usi un registro di appoggio per trasferire il valore giusto?

Inserita:

Ovviamente lavorando con gli interi senza segno, non potrai mai avere un numero negativo (è nel nome...) ed è giusto che arrivati a 0 si ricominci da 65535...

Se vuoi che il valore non vada mai al di sotto di 0 con un UINT, dovrai fare un confronto e se il valore della D (le DM erano dei vecchi Cxxx) è uguale a 0, inibisci il conteggio (ci sono dei bit di abilitazione per i contatori veloci, e disattivi il contatore se normale Cxxx).

Altrimenti hai due strade: utilizzare gli INT (a 16 bit) se ti bastano valori da -32768 a +32767, oppure usare i DINT (a 32bit) che contengono valori da - a + 2 miliardi circa. E poi se il valore va sotto 0, lo riporti te a 0.

Inserita:
52 minuti fa, Ctec ha scritto:

Ovviamente lavorando con gli interi senza segno, non potrai mai avere un numero negativo (è nel nome...) ed è giusto che arrivati a 0 si ricominci da 65535...

Se vuoi che il valore non vada mai al di sotto di 0 con un UINT, dovrai fare un confronto e se il valore della D (le DM erano dei vecchi Cxxx) è uguale a 0, inibisci il conteggio (ci sono dei bit di abilitazione per i contatori veloci, e disattivi il contatore se normale Cxxx).

Altrimenti hai due strade: utilizzare gli INT (a 16 bit) se ti bastano valori da -32768 a +32767, oppure usare i DINT (a 32bit) che contengono valori da - a + 2 miliardi circa. E poi se il valore va sotto 0, lo riporti te a 0.

Scusatemi, mi sono espresso male

 

La variabile è assegnata INT lunghezza 16 bit es DM300

Uso un ++ e -- con CF100 0,1 sec per contare.

 

Anche con INT se seleziono la visualizzazione con segno la vedo espressa correttamente, ma su uso la ISTRUZIONE  < D300 &0 , OUT non funziona

Inserita:

Ah, ora capisco. E' perché la "<" è un confronto da UINT. Se confronti due valori INT, devi usare "<S" (la S sta per Signed).

Inserita:
6 minuti fa, Ctec ha scritto:

Ah, ora capisco. E' perché la "<" è un confronto da UINT. Se confronti due valori INT, devi usare "<S" (la S sta per Signed).

Proverò

 

Grazie

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