Vai al contenuto
PLC Forum


Ancora Modbus


Frank681

Messaggi consigliati

Salve a tutti

Sto cercando di leggere i valori da 2 centraline di rifasamento della lovato

Comunicazione 485 stabilita , il mio problema e che alla lettura del registro vengono restituiite 2 word , come le memorizzo come 2 word separate o come dword , domani faccio delle prove.

Inoltre in alcune word devo scomporle per leggere allinterno della word sia valore analogico che bit di stato .

Qualche suggerimento su come procedere ?

:huh::unsure:

Link al commento
Condividi su altri siti


francesco-ottosei

Sui primi punti non mi è del tutto chiaro...qual' è il tuo problema

Per l'ultinmo punto "Inoltre in alcune word devo scomporle per leggere allinterno della word sia valore analogico che bit di stato" potresti provare a "mascherare" la word facendo la "AND WORD" così riesci a separare i bit o i valori analogici di cui hai bisogno di elabrare...

Ad esempio in SCL:

MW100:=MW102 AND W#16#3 ... in questo modo consideri solo i primi 2 bit della MW102 (consideri solo il bit 0 e 1 della MW102 - (MW100 avrà come valori 1, 2 o 3) anche se la MW102 ha altri bit alti)

Spero di essere stato chiaro....e di aiuto...

Link al commento
Condividi su altri siti

Ci ritorno

ho una word in ingresso in un blocco fb

voglio andare a valurare bit per bit i dati e elaborarli .

avevo pensato di definire un array della word con una word STATW AT asw array[0..15] of bool

il compilatore mi dice ok ma quando vado a verificare i bit sono sempre false .

Dove sbaglio

Link al commento
Condividi su altri siti

Per capire dove sbagli dovresti postare qualche immagine con dichiarazione delle variabili e codice.

Comunque, per analizzare il singolo bit di una word c'è un sistema molto semplice:

NomeVariabile.Xnn

Dove "n n" è il numero del bit (partendo da zero).

Modificato: da batta
Link al commento
Condividi su altri siti

Ciao Batta

Grazie della pasienza , ho profato a fare come mi consigli

#tmpstw.%X0 := true;

mi da errore dicendomi che l'uso di %x0 non ammesso per #tmpstw , variabile temp definita come word

per ora sono riuscito a fare funzionare il tutto dando in uscita alla word il valore sorrispondente , ma è bruttino se la word si valorizasse in automatico a seconda dei bit settati sarebbe bello .sarebbe bello

Link al commento
Condividi su altri siti

Ciao Batta

Ho TIA 13 sp1

mi sfugge qualcosa nell'uso del comando AT

per esempio nel blocco FB da me creato ho la mia WORD di ingresso , all'interno del blocco vorrei scomporla nei singoli bit , pensavo di creare una variabile interna con il comando at come array[0..15] of bool dove poter leggere i singoli biut nell'array niente da fare la variabile word all'interno del blocco è 4000 ma il bit 14 è 0 , che è quello di ready.

non so piu' cosa pensare .

Dimenticavo CPU 315 2DP.

Grazie a tutti :wallbash::unsure:

Link al commento
Condividi su altri siti

Fai attenzione all'ordinamento dei byte.

Siemens usa il formato Motorola (o Big Endian): il primo byte (quello con indirizzo più basso) è quello più significativo.

Quindi 4000 Hex significa che il primo byte ha valore 40 Hex, e il secondo ha valore 00 Hex.

Quando leggi i bit dell'array il primo bit è il bit a destra del primo byte.

Nel tuo caso:

40 Hex --> 0100 0000 Bin

Non so se mi sono spiegato, ma prova a leggere lo stato del bit 06.

Link al commento
Condividi su altri siti

Ciao Batta

Infatti dopo varie prove ho visto che i due byte sono invertiti , per invertirli in scl posso usare ilcomando ROL ruotato di 8 , oppure devo usare shr e leggere bit per bit ?

:thumb_yello:

Link al commento
Condividi su altri siti

Per scambiare l'ordinamento dei bytes all'interno di una WORD (o DWORD) l'istruzione più appropriata è SWAP.

Però, senza scambiare i byte, ti basta tenere conto del loro ordinamento quando effettui operazioni sui singoli bit.

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