Vai al contenuto
PLC Forum


Numeri UINT


Andrea_hmi

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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?

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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

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