Vai al contenuto
PLC Forum


Controllo DB


Crystal1995

Messaggi consigliati

Buongiorno a tutti,

Avrei bisogno di creare una funzione che faccia quanto segue: 

Alla funzione passo il numero della DB, la DB contiene dati misti di qualsiasi tipo e di qualsiasi lunghezza. Vorrei che la funzione calcolasse la lunghezza della DB per poi restituirmi come risultato se è tutta a zero o meno.

La soluzione potrebbe essere fare un OR dw per dw ma non lo trovo molto pulito. Ci sono delle funzioni dedite a questo?

 

Cordiali saluti

Modificato: da Crystal1995
Link al commento
Condividi su altri siti

  • Crystal1995 changed the title to Controllo DB

Per leggere gli attributi di un DB (non solo la dimensione) c'è l'istruzione ATTR_DB.

 

Se quello che ti interessa è verificare se tutte le variabili del DB sono a zero, potresti prepararti una (o più) struttura uguale a quella (quelle) contenute nel DB e, in SCL, puoi comparare (solo per "=" o "<>") anche intere strutture o array.

Esempio:
 

esito := #myStruct_a = myStruct_b;

 

Se i DB sono stati generati da un tipo di dati, puoi fare il confronto tra interi DB.

 

Se nel tuo DB ci sono degli array, puoi rilevare il primo e l'ultimo elemento dell'array con LOWER_BOUND e UPPER_BOUND.

Ad una funzione, come IN_OUT, si può passare anche un array di dimensione ignota, dichiarando come tipo di dati, per esempio: Array[*] of Word

 

Lavorando con variabili di tipo "Variant" si possono fare cose anche più articolate, ma la gestione dei dati Variant non è semplicissima.

 

Se ci dicessi per cosa ti serve ciò che hai chiesto, forse si potrebbe trovare una soluzione diversa da quella che hai pensato.
 

 

Modificato: da batta
Link al commento
Condividi su altri siti

Ciao Batta, Purtroppo le DB non contengono strutture ma contengono dati misti. Quello che dovrei fare è proprio verificare se la DB è tutta a 0

es: L DB10.DBW0 

      L 0 

      ==i

questo è il metodo che utilizzerei ,ovviamente per tutte le Word, ma chiedevo se ci fosse un metodo più elegante

Grazie

Link al commento
Condividi su altri siti

1 ora fa, Crystal1995 ha scritto:

Purtroppo le DB non contengono strutture ma contengono dati misti

Anche se nel DB ci sono tutti dati misti, potresti procedere come segue:
1) Crei un Tipo di Dati con tutti i dati del DB (se il DB è già pronto, ti basta un copia-incolla).
2) Crei un DB globale dichiarando all'interno del DB una struttura basata sul tipo di dati. In questa struttura ci sono i tuoi dati di lavoro.

3) All'interno dello stesso DB, oppure in un altro DB, dichiari una struttura sempre riferita allo stesso tipo di dati con le variabili tutte a zero.
4) In Testo Strutturato in un solo colpo fai il confronto tra le due strutture.

 

Oppure:

1) Crei un Tipo di Dati con tutti i dati del DB (se il DB è già pronto, ti basta un copia-incolla).
2) Crei un DB non come "DB Globale", ma riferito al Tipo di dati. Questo DB contiene le tue variabili di lavoro.

3) Crei un altro DB uguale, ma con le variabili tutte a zero.

4) In testo strutturato, in un solo colpo confronti i due DB

 

In entrambi i casi, se devi apportare modifiche alla struttura del DB ti basta modificare il Tipo di Dati.

 

Funziona anche con DB ottimizzati (anzi, meglio se sono ottimizzati), non serve fare cicli FOR o altro, non serve usare puntatori, non serve controllare le variabili una per una.

 

Io uso questo sistema anche per fare azzeramenti di strutture più o meno complesse: creo una struttura identica (raccomando sempre l'utilizzo dei Tipi di Dati) che rimane sempre con tutte le variabili a zero, e poi basta scrivere:

 

myWorkStruct := myClearStruct;

 

Poi, per mia curiosità: a cosa ti serve controllare che tutte le variabili siano a zero?

 

Link al commento
Condividi su altri siti

Ok grazie batta.

 

"Poi, per mia curiosità: a cosa ti serve controllare che tutte le variabili siano a zero?"

Questa DB contiene dei dati pezzo, mi serve sapere se sono tutti a zero per poter eseguire alcune operazioni

Modificato: da Crystal1995
Link al commento
Condividi su altri siti

Ciao,

non conoscendo la struttura del PLC, magari non è fattibile ... ma non potresti mettere una serie di variabili che si settano/resettano a seconda dei dati pezzo e che poi vai a controllare per sapere quando sono tutte a 0?

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