Vai al contenuto
PLC Forum


Impianto Di Diffusione Sonora Bticino


meccanico

Messaggi consigliati


Se ti riferisci ai PLC di questa sezione, sicuramente no; ma anche tutti gli altri,in pratica, gestisono numeri con e senza segno. Nel caso della serie 300 poi hai a disposizione interi e interi doppi con e senza segno

Link al commento
Condividi su altri siti

se provo a scrivere per esempio il valore 33000 in una word ottengo come risultato l'inserimento di un valore negativo, da quì l'abitudine di considerare tutti i valori numerici dotati di segno, pratica che sicuramente mi mette al riparo da risultati indesiderati .

In effetti facendo un confronto tra la word di cui sopra con il valore 32000 il risultato non è attendibile.

Alla fine , come fa il plc a riconosere se il dato in questione è da considerarsi con segno oppure no ?

grazie

Link al commento
Condividi su altri siti

Alla fine , come fa il plc a riconosere se il dato in questione è da considerarsi con segno oppure no ?
Dunque, l'architettuta in S7 e fondata sulla rappresentazione binaria in complemento a due. Il valore e' positivo se il bit N. 15 = 0 e negativo se = 1. Quindi per confrontare una variabile con il numero 33000 ( >32767 = 0111 1111 1111 1111 ) dovresti utlizzare una word doppia ( 4 bytes)
      L     DB120.DBD    0              //  4 bytes  
      L     L#33000                 
      ==D   
      =     M      6.0  
oppure
      L     DB120.DBD    0              //  4 bytes 
      L     DW#16#80E8                  // 33000 decimale
      ==D   
      =     M      6.0
DD 0 = DW0 1 2 3

DB120.DW0 = W#16#0000

DB120.DW2 = W#16#80E8 

33000 = 0000_0000_0000_0000_1000_0000_1110_1000

Link al commento
Condividi su altri siti

da questo consegue che per scrivere un valore superiore a 32767 non posso usare una word senza segno ma devo usare una doppia word con segno ........ma allora se devo scrivere un valore superiore a 2147483647 (01111111111111111111111111111111) come devo comportarmi??

ciao

Link al commento
Condividi su altri siti

Se necessario, si può anche confrontare un intero senza segno come se fosse segnato. Si complicano un poco le cose ma si può fare. Io comunque, quando prevedo valori che superino il massimo valore con segno, passo alla rappresenzaione in real.

Comunque il problema segno si pone esclusivamente nelle comparazioni e nell'uso degli analogici.

Link al commento
Condividi su altri siti

da questo consegue che per scrivere un valore superiore a 32767 non posso usare una word senza segno ma devo usare una doppia word con segno ........ma allora se devo scrivere un valore superiore a 2147483647 (01111111111111111111111111111111) come devo comportarmi??
Allora, nella architettura del PLC, le diverse "elementary data type" hanno una lunghezza definita. Il tipo di dati INT e DINT sono fondati sulla rappresentazione binaria in complemento a due ... -32768 to 32767 per l'intervallo INT, L#-2147483648 to L#2147483647 per l'intervallo DINT. Per i tipo di dati WORD e DWORD incambio la rappressentazione del segno non conta... l'intervalli sono:

WORD bin 11111111_11111111 Hex FF FF

DWORD Bin 11111111_11111111_11111111_11111111 Hex FF FF FF FF.

Nel mio esempio del post precedente, l'utilizzo della word doppia permetterebbe il monitoraggio della variable in DINT gia' che in singola INT per il numero 33000 sarebbe stato il -32536

   DD0         33000
+-------------------------+
   DW0 0   DW2 -32536
Questo codice sarebbe equivalente :
      L     DB120.DBD    0              //  4 bytes 
      L     DW#16#80E8                  // 33000 decimale senza segno ( non tipo INT)  
      ==D                                // oppure -32536 con segno (INT)
      =     M      6.0

     L     DB120.DBW    2              // 2 bytes piu' significativi
     L     DW#16#80E8                  // 33000 decimale senza segno oppure -32536 con segno     
      ==I   
      =     M      6.0
ma allora se devo scrivere un valore superiore a 2147483647
Puoi farlo.. ma non lo puoi monitorare nella tabella VAT come DINT ma si' come DWORD in Hex oppure Bin. ... niente ti impedisce di interrogare la DD come se "si trattassi" del numero decimale 4294967295 nel codice programma...
     L     DB120.DBW    0               
     L     DW#16#FFFFFFFF            // 4294967295 decimale senza segno oppure -1 con segno     
      ==D  
      =     M      6.0
Per il tipo DWORD ce'anche ..
Decimal number unsigned 
 B#(0,0,0,0) to 
B#(255,255,255,255)

Modificato: da Savino
Link al commento
Condividi su altri siti

l'intervalli sono:

WORD bin 11111111_11111111 Hex FF FF

DWORD Bin 11111111_11111111_11111111_11111111 Hex FF FF FF FF.

Meglio dire.. intervalli :
WORD
Bin 00000000_00000000 <-> 11111111_11111111 
Hex 00 00  <-> FF FF 
DWORD 
Bin 00000000_00000000_00000000_00000000  <-> 11111111_11111111_11111111_11111111 
Hex 00 00 00 00 <-> FF FF FF FF

;)

Link al commento
Condividi su altri siti

Fino a quando confronti due valori per vedere se sono uguali non c'è nessun problema.

Il problema nasce invece quando dalla comparazione vuoi sapere se un valore è maggiore o minore di un altro.

Con Siemens S7 non ci sono istruzioni per comparazioni di valori senza segno.

Se voglio che i valori compresi tra 32768 e 65535 di una variabile INT vengano trattati come positivi (quindi maggiori di 32767) devo usare per la comparazione l'istruzione

>D al posto di >I anche se carico nell'accumulatore una variabile da 16 bit.

Non c'è invece modo invece di far risultare positivi i valori compresi tra 214483648 e 4294967295.

Ci sono plc che permettono di scegliere se la comparazione deve avvenire tra valori con segno o senza segno, ma non il Siemens S7.

Onestamente non ho mai sentito questa mancanza come una grossa limitazione. Se devo gestire valori superiori 2147483647 passo al formato REAL.

Link al commento
Condividi su altri siti

Volendo puoi sempre fare prima il test sul bit più significativo delle due variabili. E' chiaro che complichi un poco il test. Io, come ho scritto prima, faccio uso di real e non ho problemi. Però ci sono occasioni dove usare il real ti fa spendere troppo tempo macchina, le istruzioni aritmentiche in real impiegano circa 10 volte il tempo dell'equivalente in intero.

Link al commento
Condividi su altri siti

  • 1 year later...

Buona sera a tutti,

vi scrivo perchè ho qualche dubbio su un impianto di diffusione sonora bticino che sto realizzando.Limpianto è strutturato nel seguente modo:

- 1 preamplifactore per sorgente esterna

- 3 amplificatori locali suddivisi in 3 stanze

- 5 casse sempre suddivise in 3 stanze

Il mio dubbio è il seguente: posso usare come sorgente esterna un uscita audio del televisore e ascoltare la tv tramite le casse bticino?Vi domando questo perchè la bticino ti dice da collegarlo su radio,registratore o impianto hi-fi....ma se collego l audio della tv non è lo stesso?

Vi ringrazio anticipatamente

Link al commento
Condividi su altri siti

....ma se collego l audio della tv non è lo stesso?

A patto che tu utilizzi "una bassa" ossia l'uscita audio con le prese RCA predisposte sul retro o sul fronte dell'apparecchio, oppure estraendo un segnale audio out dalla scart o "in estremis" con uno spinotto jack dalla presa cuffie.

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