biondo Inserito: 19 febbraio 2024 Segnala Inserito: 19 febbraio 2024 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ù.
Simone.Salarsi Inserita: 19 febbraio 2024 Segnala Inserita: 19 febbraio 2024 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
acquaman Inserita: 19 febbraio 2024 Segnala Inserita: 19 febbraio 2024 oppure al nome della variabile aggiungi .%X0 .%X1 ecc ecc.
dina_supertramp Inserita: 19 febbraio 2024 Segnala Inserita: 19 febbraio 2024 (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 2024 da dina_supertramp
biondo Inserita: 19 febbraio 2024 Autore Segnala Inserita: 19 febbraio 2024 Fatto, ho usato Gather e Scatter su DB ottimizzato. Grazie ragazzi, sempre utili.👍
batta Inserita: 20 febbraio 2024 Segnala Inserita: 20 febbraio 2024 (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 2024 da batta
ifachsoftware Inserita: 13 marzo 2024 Segnala Inserita: 13 marzo 2024 (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 2024 da ifachsoftware
batta Inserita: 13 marzo 2024 Segnala Inserita: 13 marzo 2024 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.
ifachsoftware Inserita: 14 marzo 2024 Segnala Inserita: 14 marzo 2024 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)
batta Inserita: 14 marzo 2024 Segnala Inserita: 14 marzo 2024 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.
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