Vai al contenuto
PLC Forum


Conversione Da Intero In Bit


Messaggi consigliati

Inserito:

Salve

Vorrei chiedervi se nelle librerie di Step7 vi è una funzione per convertire un nemero intero in bit

Grazie

Saluti da Reverendo


Inserita:

Intendi da decimale o esadecimale in binario?

Inserita:

Per come hai scritto il titolo e la domanda, sembra che tu voglia estrarre, da un numero i singoli bit. Però, appunto, non sei stato affatto chiaro:

1) un numero intero, con o senza segno, che sia ad 8, 16 o 32 bit, è contenuto all'interno, rispettivamente, di un byte, di una word, o di una dword. Questi dati possono poi essere interpretati, e ne nascono le dichiarazioni formali: char, int, unsigned int, long, etc, etc ... senza virgola od in virgola fissa; tante dichiarazioni formali per dire sempre la stessa cosa, da interpretarsi in vari modi.

2) A meno che non si tratti di numeri in formato BCD, o numeri in virgola mobile, allora non esiste più conversione, ma semmai, emplicemente adattamento di lunghezza: da byte a word oppure a dword: (8, 16 o 32 bit).

3) Quando manipoli quindi i numeri, devi, in buona sostanza, sapere se: sono in formato BCD o doppia virgola, ed allora serve un vera e propria conversione di formato. Altrimenti, devi sapere se sono memorizzati in un byte, in una word od in una dword. Un intero, ad esempio, è un numero di due byte, ovvero una word, con segno, che ha come campo possibile da -32767 a +32768. In questo caso, almeno nei PLC, non esiste la conversione da intero a bit, la variabile sarà contenuta in un area di memoria definita, con indirizzo assoluto, o simbolico che sia, basterà interrogare i 16 bit della variabile. (I PLC lo permettono). Quindi, se ad esempio la variabile "contatore" è dichiarata nella MW100, ti basterà leggere i singoli bit, nel caso di Siemens, da M101.0, fino a M100.7.

4) Non ti racconto qui la storia di little endian e big endian, prendi google, cerchi i due termini, e capirari tutto, anche perché, almeno con Siemens, bisogna sembre invertire il byte superiore con quello inferiore.

Questa la risposta per il tipo di domanda fatta nel titolo.

Inserita: (modificato)

Forse se spiegassi con qualche parola in più quello che ti serve, si riuscirebbe anche a darti qualche "dritta".

Non temere, su PLCForum scrrivere dieci parole o cento, si spende sempre la stessa cifra: 0,00€ :)

Modificato: da Livio Orsini
Inserita:
Non temere, su PLCForum scrrivere dieci parole o cento, si spende sempre la stessa cifra: 0,00€

bella questa!! :lol:

Inserita:

Scusate per la risposta un po succinta ma è stata fatta al volo in piccolissimo buci di tempo. :rolleyes:

comunque cerco di spiegarmi un po meglio:

Per come hai scritto il titolo e la domanda, sembra che tu voglia estrarre, da un numero i singoli bit

è esattamente quello che devo fare, scambiare tramite modbus verso il DCS, sia in lettura che in scrittura dell variabili booleane e reali.

Per i reali ho usato la funzione CEIL, che converte da virgola mobile in numero DINT, per i booleani mi serviva capire come posso sapere lo stato del singolo bit all'interno dalla variabile Intera a 16bit che scrive il DCS.

Altrimenti, devi sapere se sono memorizzati in un byte, in una word od in una dword. Un intero, ad esempio, è un numero di due byte, ovvero una word, con segno, che ha come campo possibile da -32767 a +32768. In questo caso, almeno nei PLC, non esiste la conversione da intero a bit, la variabile sarà contenuta in un area di memoria definita, con indirizzo assoluto, o simbolico che sia, basterà interrogare i 16 bit della variabile. (I PLC lo permettono). Quindi, se ad esempio la variabile "contatore" è dichiarata nella MW100, ti basterà leggere i singoli bit, nel caso di Siemens, da M101.0, fino a M100.7.

Se ho ben capito:

Mettiamo il caso che il DCS mi scrive una variabile intera a 16 bit, nella DB1.DBW0 (dichiarata come intero).

Anche se la DB1.DBW0 è dichiarata come intero all'interno del DB, posso interrogare lo stato dei singoli bit come ad esempio DB1.DBX0.7 ?

E viceversa se, se volessi scrivere un singolo bit della DB1.DBW0, posso farlo ad esempio con L DB5.DBX0.7

T DB1.DBW0 (oppure DB1.DBX0.7)?

Grazie a tutti

Saluti da Reverendo

Inserita:
Mettiamo il caso che il DCS mi scrive una variabile intera a 16 bit, nella DB1.DBW0 (dichiarata come intero).

Anche se la DB1.DBW0 è dichiarata come intero all'interno del DB, posso interrogare lo stato dei singoli bit come ad esempio DB1.DBX0.7 ?

Si puoi benissimo, certo, non vedi il commento del singolo bit.

Volendo potresti fare anche quello copiando la tua word/Dword in un merker word/dword e nel simbolico scrivere un commento bit per bit

E viceversa se, se volessi scrivere un singolo bit della DB1.DBW0, posso farlo ad esempio con L DB5.DBX0.7

T DB1.DBW0 (oppure DB1.DBX0.7)?

In quella forma no.

Puoi però scrivere u DB5.DBX0.7 =DB1.DBX0.7 e così via per tutti i bit

Inserita:

Grazie a tutti ragazzi messaggio ricevuto :thumb_yello:

Domani provo, e se mi viene qualche dubbio farò un fischio

Saluti da Reverendo

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