Vai al contenuto
PLC Forum


Word vs Integer


Folder

Messaggi consigliati

Come da titolo, domanda da un milione di euro, voglio porre fine a questo mio grande quesito, nonché le differenza tra una Word ed una Int.

Ho notato che il TIA in alcune situazioni mi ha obbligato ad utilizzare un tipo di variabile di uno o dell' altro, ma anche discudendo tra colleghi, non c'è mai stata una risposta esaudiente.... "sono più o meno uguali" 🤣

Link al commento
Condividi su altri siti


normalmente la differenza principale è che INT è tra -32768 e +32767 e invece WORD tra 0 e 65535.

Se tu appoggi un dato negativo in una word non lo vedrai con il segno meno, ma troverai un valore che non ha nulla a che fare con quello che hai messo. Se invece fai una somma di INT il cui risultato è maggiore di 32767 e lo appoggi in un INT vedrai un valore con il segno -.

Su alcune schede analogiche con risoluzione 16 bit di altri fornitori non siemens per esempio devi appoggiare il valore in una word altrimenti ti perdi il bit 16.

In altre parole WORD e INT è sempre a 16 bit. La differenza è che WORD hai tutti i 16 bit per il valore da 0 a 65536. INT hai 15 bit per il valore e il 16 è il segno quindi -32768 a +32767

Link al commento
Condividi su altri siti

2 ore fa, 84paolo ha scritto:

normalmente la differenza principale è che INT è tra -32768 e +32767 e invece WORD tra 0 e 65535.

Ad essere pignoli, questa è la differenza tra Int e UInt. Generalmente una Word viene visualizzata in esadecimale (0000..FFFF). Ma sempre variabili a 16 bit sono. Tutto sta solo nel decidere come si vuole interpretare e visualizzare il contenuto. Per esempio, se interpreto la variabile con il segno (Int), FFFF corrisponde a -1; se interpreto la variabile senza segno (UInt), FFFF corrisponde a 65535.

Poi ricordiamoci anche che questo vale nei PLC Siemens, e nella stragrande maggioranza dei PLC. Ma, se si cambia ambiente, le variabili a 16 bit sono Short, mentre le Int sono a 32 bit, e le Long Int a 64 bit. Il concetto, comunque, non cambia: tutto sta solo nel modo in cui si decide di interpretare il contenuto.

Link al commento
Condividi su altri siti

Banalmente le Word si potrebbero utilizzare per fare un contaore che arrivi a 65535  a parità di un Int che a parità di spazio mi limiterebbe a 32767

Peccato che le comparazioni sulle word lavorino solo con l'uguale e non con gli altri operandi , patto di farsi un qualcosa di dedicato per gestirle

Link al commento
Condividi su altri siti

3 ore fa, ifachsoftware ha scritto:

Banalmente le Word si potrebbero utilizzare per fare un contaore che arrivi a 65535  a parità di un Int che a parità di spazio mi limiterebbe a 32767

A dire il vero, questa è la differenza tra UINT (senza segno) e INT (con segno).

Link al commento
Condividi su altri siti

10 ore fa, Yiogo ha scritto:

quello delle UINT 0 - 65535., quello delle WORD 0 - FFFF

 

Cambia solo la visualizzazione del dato; il primo è espresso in base 10, mentre il secondo in base 16.

Potrei anche scrivere 1777778 e sarebbe la stessa cosa. Fisicamente, nella memoria, è 1111 1111 1111 1111b;)

Link al commento
Condividi su altri siti

del_user_281384
Il 2/2/2020 alle 21:37 , Folder ha scritto:

Come da titolo, domanda da un milione di euro, voglio porre fine a questo mio grande quesito, nonché le differenza tra una Word ed una Int.

Ho notato che il TIA in alcune situazioni mi ha obbligato ad utilizzare un tipo di variabile di uno o dell' altro, ma anche discudendo tra colleghi, non c'è mai stata una risposta esaudiente.... "sono più o meno uguali" 🤣

Nei manuali Schenider, per il software Unity, la WORD è indicata come variabile di tipo stringa anche se non ho mai capito la differenza con UINT perchè la rappresentazione sembra la medesima.

Per copiare i dati da una WORD ad una UINT è stranamente necessaria una conversione di tipo...

Modificato: da Ridiculouslab
Link al commento
Condividi su altri siti

Il 8/2/2020 alle 08:55 , Livio Orsini ha scritto:

 

Cambia solo la visualizzazione del dato; il primo è espresso in base 10, mentre il secondo in base 16.

Potrei anche scrivere 1777778 e sarebbe la stessa cosa. Fisicamente, nella memoria, è 1111 1111 1111 1111b;)

 

Sinceramente mi sembra una sega mentale , dal mio punto di vista sono uguali , quello che non capisto è la possibilità di non gestire nativamente delle comparazioni di < o > ....

Link al commento
Condividi su altri siti

2 ore fa, ifachsoftware ha scritto:

Sinceramente mi sembra una sega mentale

Ma, infatti, esistono solo 0 e 1. Tutto il resto, è solo per riportare da codice binario a formati più facili da comprendere per noi esseri umani.
L'esadecimale è comodo perché raggruppa 4 bit per ogni digit. Il decimale è comodo perché siamo abituati fin quasi dalla nascita a ragionare in base 10. Poi si deve decidere se si vogliono usare solo valori positivi (nel qual caso si decide che il bit più a sinistra è un bit come gli altri), o se servono anche valori negativi (quindi, il bit a sinistra sarà il bit del segno).
Sono solo regole per dare la corretta interpretazione.

Link al commento
Condividi su altri siti

Roberto Gioachin
5 ore fa, ifachsoftware ha scritto:

quello che non capisto è la possibilità di non gestire nativamente delle comparazioni di < o >

Se una variabile viene dichiarata INT può assumere valori inferiori a zero, se è dichiarata UINT non può, se la dichiari WORD perde senso pensare solamente una comparazione su < 0. 

Link al commento
Condividi su altri siti

25 minuti fa, Roberto Gioachin ha scritto:

Se una variabile viene dichiarata INT può assumere valori inferiori a zero, se è dichiarata UINT non può, se la dichiari WORD perde senso pensare solamente una comparazione su < 0. 

 

 

< di 0 No , ma < di 50 per esempio si , e questo non è permesso , permette solo di controllare se è uguale a un valore

Link al commento
Condividi su altri siti

Una word è più sensato 'vederla' come un array di 16 bits e usarla 'pensando' in binario (o in esadecimale).

Un INT (UINT) è più sensato 'vederlo' come un numero e usarlo come tale (in decimale).

Poi, siccome hanno la stessa dimensione in memoria, è molto semplice convertirli tra loro (che tradotto significa che i bits non cambiano ma cambia il significato che viene dato ai bits).

 

Ricordo che il Modbus (RTU o TCP/IP) ragiona in Word (registri a 16 bits) ma ovviamente questo non vuol dire che gli INT, i DINT o i REAL non vengano trasferiti correttamente (o perdano qualcosa) utilizzando questo protocollo .....

Link al commento
Condividi su altri siti

Roberto Gioachin
4 ore fa, ifachsoftware ha scritto:

e questo non è permesso , permette solo di controllare se è uguale a un valore

Questa è una scelta di Siemens ed è anche condivisibile, altri lo permettono.

Quando ci si riferisce ad una WORD ci si riferisce ad una serie di 16 bit e non propriamente ad un numero, quindi è comprensibile che si possa verificarne solamente l'uguaglianza.

Se per ipotesi la nostra WORD contiene di fatto due caratteri ASCII, che senso avrebbe fare una comparazione con un valore numerico?

Se una WORD invece si sa che contiene un valore di tipo UINT, basta convertirla e poi la si può comparare.

Link al commento
Condividi su altri siti

9 ore fa, Yiogo ha scritto:

i veri programmatori ragionano in prima battuta in esadecimale

 

Solo da una trentina di anni a questa parte, mentre prima dipendeva dalla macchina che usavi al momento, spesso dovevi ragionare in ottale.

 

ma come ho scritto prima è solo una comodità rappresentativa, per la machina poi è tutto binario

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