meccanico Inserito: 11 agosto 2007 Segnala Share Inserito: 11 agosto 2007 è corretto affermare che il plc può gestire solo numeri con segno??grazie Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 11 agosto 2007 Segnala Share Inserita: 11 agosto 2007 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 More sharing options...
meccanico Inserita: 11 agosto 2007 Autore Segnala Share Inserita: 11 agosto 2007 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 More sharing options...
Savino Inserita: 11 agosto 2007 Segnala Share Inserita: 11 agosto 2007 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 More sharing options...
meccanico Inserita: 11 agosto 2007 Autore Segnala Share Inserita: 11 agosto 2007 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 More sharing options...
Livio Orsini Inserita: 11 agosto 2007 Segnala Share Inserita: 11 agosto 2007 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 More sharing options...
Savino Inserita: 11 agosto 2007 Segnala Share Inserita: 11 agosto 2007 (modificato) 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: 11 agosto 2007 da Savino Link al commento Condividi su altri siti More sharing options...
Savino Inserita: 11 agosto 2007 Segnala Share Inserita: 11 agosto 2007 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 More sharing options...
batta Inserita: 11 agosto 2007 Segnala Share Inserita: 11 agosto 2007 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 More sharing options...
Livio Orsini Inserita: 12 agosto 2007 Segnala Share Inserita: 12 agosto 2007 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 More sharing options...
MARCODF83 Inserita: 29 dicembre 2008 Segnala Share Inserita: 29 dicembre 2008 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 stanzeIl 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 More sharing options...
mzara Inserita: 29 dicembre 2008 Segnala Share Inserita: 29 dicembre 2008 ....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 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