Andrea_hmi Inserito: 24 settembre 2021 Segnala Share Inserito: 24 settembre 2021 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 More sharing options...
leleviola Inserita: 24 settembre 2021 Segnala Share Inserita: 24 settembre 2021 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 More sharing options...
Ctec Inserita: 24 settembre 2021 Segnala Share Inserita: 24 settembre 2021 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 More sharing options...
Andrea_hmi Inserita: 24 settembre 2021 Autore Segnala Share Inserita: 24 settembre 2021 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 More sharing options...
Ctec Inserita: 24 settembre 2021 Segnala Share Inserita: 24 settembre 2021 Ah, ora capisco. E' perché la "<" è un confronto da UINT. Se confronti due valori INT, devi usare "<S" (la S sta per Signed). Link al commento Condividi su altri siti More sharing options...
Andrea_hmi Inserita: 24 settembre 2021 Autore Segnala Share Inserita: 24 settembre 2021 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora