Vai al contenuto
PLC Forum


Siemens S7 1500 Lavorare con variabile word e poi gestirla a bit


biondo

Messaggi consigliati

Salve a tutti, premetto che vengo dal mondo Omron, mi sto avvicinando a Siemens da poco.

Ecco il problema, in Omron potevo lavorare su una variabile W300 e usarla come word, quindi azzerarla, o trasferigli dentro dei valori di configurazione es .8A0F

Ma allo stesso tempo potevo usare i bit singoli di questa word W300.5 on   W300.15 off  ecc.

Ora sto lavorando su S7 1500 e dovrei fare la stessa cosa. Premetto che sto lavorando con DB ottimizzati quindi non ho indirizzi assoluti, lavoro solo con variabili.

Ho creato un UDF "Word_bit". in cui ho 16bit di tipo bool, poi ho un DB  DB_M in cui ho creato una variabile Mia_Word ti tipo Word_bit.

Ora in qualche parte del programma Mia_Word verrà scritta la configurazione dell'impianto (16#8A0F)come singola word avrò un valore in esadecimale che mi indica gli accessori dell'impianto

ogni bit della word avrà un significato ben preciso che andrò ad usare all'interno del ladder con semplici contatti per attivare o meno certi optional.

Ecco il problema....come posso scrivere su Mia_Word che punta comunque a dei bool un valore in esadecimale  8A0F? Con MOVE o MOVE_BLK non funziona😪 in quando le aree devono avere lo stesso tipo di dati.....e io ho da una parte word e dall'altra bool .Come posso rimediare ?Grazie a chiunque per qualche info in più.

Link al commento
Condividi su altri siti


Simone.Salarsi

Per fare esattamente ciò che chiedi dovresti lavorare con i Merker del PLC

Quindi dichiarare configWord MW300 di tipo word e poi accedere aii singoli bit M300.0, M300.1, ecc

 

Rimanendo invece su Db ottimizzati, dalla tua descrizione proverei un approccio del genere utilizzando la funzione scatter ( prende una word e spalma i singoli bit su un array, una struttura o un User Data Type)

 

image.thumb.png.ab6d6f60acd8de309fd2bf9c8ccd7e5e.png

 

 

altrimenti c'è una discussione di pochi giorni fa con un argomento molto simile in cui potresti trovare altri spunti interessanti

 

Link al commento
Condividi su altri siti

dina_supertramp
1 ora fa, acquaman ha scritto:

oppure al nome della variabile aggiungi .%X0     .%X1    ecc ecc.

Funzione utilissima dei 1200-1500 per puntare a singoli bit.

Coi sistemi vecchi dovevi scomporre i dati per puntare ai singolo bit, con i sistemi odierni punti al bit con la dichiarazione
MiaWord.%XNumeroDelBitACuiVuoiPuntare

Modificato: da dina_supertramp
Link al commento
Condividi su altri siti

Il 19/2/2024 alle 13:56 , biondo ha scritto:

Ecco il problema....come posso scrivere su Mia_Word che punta comunque a dei bool un valore in esadecimale  8A0F?

Usa l'istruzione "SCATTER", per trasferire una Word in una struttura di 16 bit.

 

ooops... Non avevo letto tutto, ed ho dato una risposta inutile.

 

 

Modificato: da batta
Link al commento
Condividi su altri siti

  • 3 weeks later...
ifachsoftware

Personalmente gestisco la cosa in modo diverso , per il semplice fatto che preferisco avere invece di un'array di Bool una struttura con x Bool con ognuno il suo nome ed in aggiunta una word che viene riempita in automatico da apposito FC , indipendentemente dai nomi assegnati alle variabili Booleani (quindi riutilizzabile).

Tale gestione la faccio per esempio per la gestione degli allarmi , e per farlo utilizzo una Word seguita da 16 Bool come da esempio :

 

image.thumb.png.5f1a3ac134941b72ff6b1da2788e3809.png

 

La Word la utilizzo per mappare gli allarmi nell'HMI , gli allarmi con nomi parlanti , li utilizzo nel codice per aumentare la leggibilità.

 

Il Popolamento della word avviene con le seguenti funzioni :

 

image.thumb.png.5ec41febc4f9eed514e4d5ef77328934.png

 

image.png.b9516e59eff039ef78906e2c07f1ef04.png

Che verranno richiamate nel seguente modo :

 

image.png.e08440a1242c6dadba0d3a51d053627e.png

 

La Word la utilizzo anche per controllare l'insorgenza di nuovi allarmi o la presenza di allarmi

 

Modificato: da ifachsoftware
Link al commento
Condividi su altri siti

5 ore fa, ifachsoftware ha scritto:

Personalmente gestisco la cosa in modo diverso , per il semplice fatto che preferisco avere invece di un'array di Bool una struttura con x Bool con ognuno il suo nome

Gather e Scatter lavorano anche con strutture di bit, non solo con array.

Link al commento
Condividi su altri siti

ifachsoftware
9 ore fa, batta ha scritto:

Gather e Scatter lavorano anche con strutture di bit, non solo con array.

Perfetto, quindi in pratica si potrebbero evitare le due funzioni per spostare i bool nella word.

Devo provare per vedere se mantengono anche l'ordine dei Bit (ossia bit 0 a destra e il bit 15 a sinistra o se invertono i Byte)

Link al commento
Condividi su altri siti

2 ore fa, ifachsoftware ha scritto:

Perfetto, quindi in pratica si potrebbero evitare le due funzioni per spostare i bool nella word.

Esatto. Ed eviti anche lo swap dei byte perché, con Gather, il primo bit della struttura (o dell'array) viene messo a destra nella Word.
Ovviamente, allo stesso modo si comporta Scatter: il bit a destra della Word sarà il primo bit della struttura.

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