Vai al contenuto
PLC Forum


Suddivisione Di Word O Dword In Byte


coquinati

Messaggi consigliati

ciao ragazzi ho un dubbio , che non riesco pienamente colmare, guardando i manuali mi sono confuso ancora di più;allora mettiamo il caso che un varole di W#16#1002 , se io divido in 2 byte o un valore di 10(hex) sul primo byte e 02 hex sul secondo byte, leggendo i manuali vedo che le word sono suddivise in BCD .

senza confusionarvi con li mie idee che mi passano per testa, come è possibile una cosa del genere?

grazie e ciao

Link al commento
Condividi su altri siti


A quale PLC fai riferimento ?

Comunque W#16# è relativo alla rappresentazione di un valore Esadecimale di una word .

bigalex :blink:

Modificato: da bigalex
Link al commento
Condividi su altri siti

Scusate mi sono dimenticato di specificare il plc .. Ormai non ne faccio più caso ., vedo solo siemens , di specifico s7 300 .

Si infatti vedo che possiede una maschera in esadecimale , ma penso che riguarda solo la lettura , ho sbaglio ? . Perchè da quanto leggo al interno del sistema è rappresentato in BCD,

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Link al commento
Condividi su altri siti

Ma a quale manuale ti stai riferendo? Con Siemens se tu scrivi W#16#1002, che equivale al decimale 4098, ti troverai a 1 il secondo e il tredicesimo bit della word.

La codifica BCD è basata su 4 bit (nibble) ed è un modo per rappresentare numeri ad es. su display classici a sette segmenti facendo corrispondere ad ogni display una cifra.

Link al commento
Condividi su altri siti

Ma a quale manuale ti stai riferendo?

sul html di siemens .

Con Siemens se tu scrivi W#16#1002, che equivale al decimale 4098, ti troverai a 1 il secondo e il tredicesimo bit della word.

ok , praticamente è cosi:

byte 0 byte1

word binario : 00010000/00000010

| |

| |

dec : 16 02 // tenendo conto di due byte e non di una word

hex : 10 02 // tenendo conto di due byte e non di una word

ma è giusto il mio ragionamento?

Link al commento
Condividi su altri siti

ma è giusto il mio ragionamento?

Si perchè, Siemens usa la modalità big-endian per memorizzare i dati perciò il byte di indirizzo più basso contiene il peso alto del dato.

Nel caso specifico, ipotizzando che tu stia lavorando su MW0 ti troverai:

MB0 = 16 (0x10)

MB1 = 2 (0x2)

Link al commento
Condividi su altri siti

grazie mille lucios :thumb_yello:

se posso faccio un altra domanda , prendendo l'esempio sottostante:

VAR_TEMP

Sorgente : ANY;

Destinazione : ANY;

END_VAR

BEGIN

LAR1 P#sorgente;

L B#16#10;
T LB[AR1,P#0.0];

L B#16#02;
T LB[AR1,P#1.0];

L 10;
T LW[AR1,P#2.0];

L 22;
T LW[AR1,P#4.0];
L P#DBX11.0;
T LD[AR1,P#6.0];


LAR1 P#destinaz.;

L B#16#10;
T LB[AR1,P#0.0];

L B#16#02;
T LB[AR1,P#1.0];

L 10;
T LW[AR1,P#2.0];

L 33;
T LW[AR1,P#4.0];
L P#DBX202.0;
T LD[AR1,P#6.0];


CALL SFC 20 (
SRCBLK := sorgente,
RET_VAL := MW 12,
DSTBLK := destinazione
);

END_FUNCTION

dove ho sottolineato di rosso non riesco capire molto bene quelle che succede, praticamente carico DBX XX.X su un formato pointer ( in questo caso step 7 automaticamente mi alloca area di memoria, byte.bit, nei 48bit del formato pointer, in teoria dovrebbe essere cosi) poi li trasferisco nella DW any da indirizzo da 6.0 a 9. 7 , se si nota il formato pointer è preciso identico al formato any ( partendo da byte 6 chiaramente ), in questo modo riesco a trasferire tutti i 48 bit del pointer gia ordinati , nel 48 bit del ANY? . essendo le prime volte che uso questi parametri vorrei acertarmi che sto seguendo un ragionamento corretto .

grazie milleee :thumb_yello::smile:

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