biondo Inserito: 19 febbraio Segnala Share Inserito: 19 febbraio 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 More sharing options...
Simone.Salarsi Inserita: 19 febbraio Segnala Share Inserita: 19 febbraio 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) 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 More sharing options...
acquaman Inserita: 19 febbraio Segnala Share Inserita: 19 febbraio oppure al nome della variabile aggiungi .%X0 .%X1 ecc ecc. Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: 19 febbraio Segnala Share Inserita: 19 febbraio (modificato) 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: 19 febbraio da dina_supertramp Link al commento Condividi su altri siti More sharing options...
biondo Inserita: 19 febbraio Autore Segnala Share Inserita: 19 febbraio Fatto, ho usato Gather e Scatter su DB ottimizzato. Grazie ragazzi, sempre utili.👍 Link al commento Condividi su altri siti More sharing options...
batta Inserita: 20 febbraio Segnala Share Inserita: 20 febbraio (modificato) 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: 20 febbraio da batta Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 13 marzo Segnala Share Inserita: 13 marzo (modificato) 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 : 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 : Che verranno richiamate nel seguente modo : La Word la utilizzo anche per controllare l'insorgenza di nuovi allarmi o la presenza di allarmi Modificato: 13 marzo da ifachsoftware Link al commento Condividi su altri siti More sharing options...
batta Inserita: 13 marzo Segnala Share Inserita: 13 marzo 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 More sharing options...
ifachsoftware Inserita: 14 marzo Segnala Share Inserita: 14 marzo 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 More sharing options...
batta Inserita: 14 marzo Segnala Share Inserita: 14 marzo 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 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