Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Dati Con O Senza Segno


Messaggi consigliati

Inserito:

ogni tanto mi trovo a fare qualche piccola manutenzione su plc della siemens 200 e 300 .

Ho sempore pensato che i plc in considerassero i valori numerici in parola o doppia parola dotati di segno ,con le limitazioni ai valori massimie minimi che questo comporta.

A questo punto non mi spiego perchè nella tabella di stato del siemens 200 c'è la possibilità di visualizzare i dati con segno oppure senza segno.

Grazzie a tutti


Inserita:

ciao

per rendere le cose piu' semplici a noi , esseri umani....

dario

Inserita:

essendo certo che il plc non ha origini divine , potresti essere più chiaro?

Grazie

Inserita: (modificato)

Salve meccanico,

A questo punto non mi spiego perchè nella tabella di stato del siemens 200 c'è la possibilità di visualizzare i dati con segno oppure senza segno

Dunque,

S7200
Tipo dati elementari/descrizione                    range
    
INT : interi con segno                -32768 / +32767
Parola: interi senza segno            0 / 65535
DINT: interi con segno        -2147483648 / +2147483647               
DWORD: interi senza segno         0 / 4294967295

S7300
Tipo dati elementari/descrizione        range

INT : interi con segno           -32768 / +32767
WORD: interi senza segno     0 / 65535
DINT: interi con segno     -2147483648 / +2147483647                   
DWORD: interi senza segno    0 / 4294967295

Ciao.

Modificato: da Savino
Inserita:

In S7-300 è possibile eseguire il confronto (maggiore, minore,etc..) tra numeri senza segno?

Inserita: (modificato)
In S7-300 è possibile eseguire il confronto (maggiore, minore,etc..) tra numeri senza segno?

Devi utilizzare variabili formatate a WORD.

WORD Var1= 50980;

WORD Var2= 10980;

Poi confronti.....

Non puoi caricare -10 su Var1 e Var2 . Allora utilizzi variabile del tipo INT.

Se vuoi confrontare in un intervalo -10 / +50980 allora utlizzi del tipo DINT

-2147483648 /+2147483647 per mantenere la portabilita del tipo di data, meglio.

Ciao

Modificato: da Savino
Inserita:

INT : interi con segno -32768 / +32767

Parola: interi senza segno 0 / 65535

Ok , ma queste due tipologie di dati hanno lo stesso formato, word : 16 bit.

a questo punto come fa il plc a distinguere uno dall'altro?

Scusate ma ho bisogno di una spiegazione semplice semplice,

grazie.

Inserita:
come fa il plc a distinguere uno dall'altro?

Per il PLC sono sempre 16 bits.

E' il sistema operativo che governa che ne fa' la distinzione tra un tipo di data ed l'altra.

Se questo formata una variabile INT su i 16 bits,allora su intervalo vale -32768 / +32767 se la formata a WORD vale 0 / 65535.

Ciao.

Inserita:

Savino , per prima cosa ti ringrazio per pazienza e gentilezza, poi , se ho ben capito ;

sono io a fornire al plc l'indicazione del tipo di dato attraverso l'inserimento da pannelli operatori vari ( op7 etc..) oppure se il dato è il risultato di un calcolo il plc si arrangia in funzione del tipo di operazione che ha eseguito.

Correggimi se sbaglio

Inserita:
Savino , per prima cosa ti ringrazio per pazienza e gentilezza

Figurati.. :)

sono io a fornire al plc l'indicazione del tipo di dato attraverso l'inserimento da pannelli operatori vari ( op7 etc..)

Certo.

Quando tu selezioni un tipo di campo per la variabile sul OP, ecc.., imposti anche il suo data type.

Anche sul firmware PLC, le variabile utilizzate dal codice programma sono formatate con un determinato tipo di data.Esempio.

Suponiamo che tu hai un registro a 16 bits DW0 = 1111 1111 1111 1111.

Se la variabile DW0 e' del tipo INT rappressentera' il valore -32768.

Se e' del tipo WORD rappressentera' 65535.

Saluti.

Inserita: (modificato)
Suponiamo che tu hai un registro a 16 bits DW0 = 1111 1111 1111 1111.

Se la variabile DW0 e' del tipo INT rappressentera' il valore -32768.

Se e' del tipo WORD rappressentera' 65535.

INT rappressentera' il valore -32768. errato :( I am very sorry. Ero andato a memoria.

il valore e' -1

A -32768 corrisponde il binario 1000000000000000

Dunque, importante e' mantenere una portabilita' del tipo di data dichiarato per una determinata variabile in fase di costruzione del oggetto.

Ad esempio,in S7300/400 per costruire una DW in un DB , tu puoi impostare il tipo di dati semplici INT, WORD, ecc... quindi

DB10
DW0 (VAR1)  [INT] = 0   (intervallo -32678/32677)
DW2 (VAR2)  [WORD] = W#16#0  ( intervallo W#16#0 / W#16#FFFF)

Come vedi, sulla DW2 non puoi scrivere in decimale, ma il numero HEX FFFF deve essere considerato come

65535 perche e' stato costruito come tale.( vedi Guida Step 7 Tipi di dati semplici)

Su DW0 in cambio, ti accetta bene l'intervallo sopra definito.

E' molto importante mantenere la portabilita' del tipo di data assegnate alle variabili di un sistema in fase di costruzione. B)

Per esempio 4 bytes di dati potrebbe essere interpretato come un Long integer oppure come un Floating point number in una coda di dati per un protocollo di communicazione. ;)

Saluti.

Modificato: da Savino
Inserita: (modificato)

Ciao,

Torniamo alla base della domanda, perche sulla seconda parte ne avevi ragione ;)

Ho sempore pensato che i plc in considerassero i valori numerici in parola o doppia parola dotati di segno ,con le limitazioni ai valori massimie minimi che questo comporta
A questo punto non mi spiego perchè nella tabella di stato del siemens 200 c'è la possibilità di visualizzare i dati con segno oppure senza segno.

Dunque la tabella di stato del S7-MicroWin32 sotto la voce formato(Display format)della barra del menu presenta un sottomenu:

Con segno

Senza segno

Esadecimale

Binario

ASCII

In cambio la tabella delle variabili del S7 Manager non presenta (al meno fino la V5.2+SP1)le possibilita' di sceglire tra con segno/senza segno:

Binario

Boolean

Decimale

Esadecimale

Floating Point

ASCII

Date

Time

Simatic Time

Time of day

Counter

Pointer

Quindi sotto quel aspetto,la funzione del S7-MicroWin32 si presenta molto piu' ricca di performance.

Comunque per quanto riguarda la prima parte della domanda, per gli S7300/400 , sono valide le affermazioni dei mie post precedenti.

Ad esempio se la DB10.DBW 2 viene costruita come [WORD] = ( intervallo W#16#0 / W#16#FFFF => 0/65535)

allora questa implementazione di codice ....

.......

L DB10.DBW 2

L W#16#E964

== I

SPB ETT1

.........

..

presume un confronto del registro col numero decimale +59748 e non col -5788.

W#16#E964 = WORD +59748.

W#16#E964= INT -5788

Praticamente, la funzione Decimale della tabella delle variabile per S7300/400 formata in rappresentazione in complemento a due del numero contenuto sul registro 16 bits.

Saluti.

Modificato: da Savino

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