Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Script Per Determinare Presenza Db Nel Plc


Messaggi consigliati

Inserito:

Oggi mi è venuto in mente che mi farebbe molto comodo crearmi uno script per determinare la presenza di una determinata DB nel plc siemens e di conseguenza anche la sua lunghezza.

Avete idea di come fare questo script con winccflexible V11?

Grazie per la collaborazione.


Inserita:

Una soluzione possibile per riscontrare la presenza di una determinata DB potrebbe passare da un tag indicizzato sul numero della DB:

Crei un tag bool con DB indicizzata tramite un puntatore e il bit 0.0.

Quindi assegni all'indice il numero di DB che ti interessa provare, quindi gestisci tramite lo script l'eccezione "on error". se il tag non esiste.

Un paio di dubbi:

1) non so se l'indice può essere un tag interno oppure devi passare da un tag agganciato al PLC; in tal caso prima di eseguire lo script bisogna avere la certezza che il runtime abbia il valore dell'indice aggiornato; nelle proprietà il tag inoltre deve essere aggiornato continuamente.

2) In caso di assenza della DB secondo me si avrebbe la popup windows di wincc che dice che il tag non è raggiungibile, quindi soluzione sconsigliabile.

La soluzione più "elegante" passa purtroppo dal PLC, creando una DB che contiene un array di presenza DB (porebbe pure essere booleano) e un array che contiene le lunghezze delle DB.

Purtroppo per te questo array te lo devi creare con il codice....

pigroplc

Inserita:

Più o meno ho già fatto una cosa simile, come mi hai indicato tu, ho però riscontrato un grosso ostacolo.

Mi spiego: Nella gestione variabili ho creato una tag con indirizzo: db40.[indice_byte].[indice_bit], dove i valore di indice_byte e indice_bit vengono impostati all'interno dello script tramite ciclo for Next.

Il problema riscontrato è che lo script sbaglia, se gli fai scansionare ad esempio tutti i bit per 2 word, il risultato finale non è cortretto.

Dalle prove che ho fatto mi sembra di aver capito che la velocità del ciclo for / next è più veloce dell'aggiornamento della variabile, per tanto quando questo viene eseguito i valori non sono veritieri.

ho anche provato a mettere un aggiornamento a ciclo continuo di 100 ms della variabile indicizzata, ma il risultato non cambia.

Conosci un istruzione che attende l'aggiornamento del valore della variabile?

Avevo provato ad inserire anche un tempo di pausa all'interno del ciclo, ma questo ovviamente mi rallenta notevolmente il ciclo, e non mi va bene, così però funzionava.

Per quanto riguarda la tua affermazione:

2) In caso di assenza della DB secondo me si avrebbe la popup windows di wincc che dice che il tag non è raggiungibile, quindi soluzione sconsigliabile.

Ti confermo che è effettivamente così, compare il popup. Però nel mio caso non sarebbe un problema, in quanto questo script funziona solo una volta all'avvio del runtime, quindi non creerebbe problemi.

Più o meno ho già fatto una cosa simile, come mi hai indicato tu, ho però riscontrato un grosso ostacolo.

Mi spiego: Nella gestione variabili ho creato una tag con indirizzo: db40.[indice_byte].[indice_bit], dove i valore di indice_byte e indice_bit vengono impostati all'interno dello script tramite ciclo for Next.

Il problema riscontrato è che lo script sbaglia, se gli fai scansionare ad esempio tutti i bit per 2 word, il risultato finale non è cortretto.

Dalle prove che ho fatto mi sembra di aver capito che la velocità del ciclo for / next è più veloce dell'aggiornamento della variabile, per tanto quando questo viene eseguito i valori non sono veritieri.

ho anche provato a mettere un aggiornamento a ciclo continuo di 100 ms della variabile indicizzata, ma il risultato non cambia.

Conosci un istruzione che attende l'aggiornamento del valore della variabile?

Avevo provato ad inserire anche un tempo di pausa all'interno del ciclo, ma questo ovviamente mi rallenta notevolmente il ciclo, e non mi va bene, così però funzionava.

Per quanto riguarda la tua affermazione:

2) In caso di assenza della DB secondo me si avrebbe la popup windows di wincc che dice che il tag non è raggiungibile, quindi soluzione sconsigliabile.

Ti confermo che è effettivamente così, compare il popup. Però nel mio caso non sarebbe un problema, in quanto questo script funziona solo una volta all'avvio del runtime, quindi non creerebbe problemi.

Inserita: (modificato)

Beh,

col ciclo for-next e comunque in ogni caso si tratta della esecuzione di uno script non puoi certo aspettarti che venga pure aggiornato il tag.

Non sono a conoscenza di istruzioni script che attendano l'aggiornamento di una variabile. In genere gli script vengono eseguiti su evento e si processano i valori dei tag al momento della esecuzione.

Sconsiglio vivamente l'introduzione di for-next di ritardo che possono rallentare notevolmente la reattività del runtime. Io sono stato obbligato a fare una cosa simile ma si tratta di un caso del tutto particolare.

Tempi di aggiornamento dei tag a 100 ms per me hanno senso solamente se si vuole fare la paginetta tanto bellina con le curve, tieni conto che impiccano la rete.

Quanto alla popup che parte all'avvio con errori di connessione continuo a ritenerla una soluzione poco elegante. Es. se il cliente ti chiede come mai appare questa finestra che evidenzia l'errore tu cosa gli rispondi???

pigroplc

Modificato: da pigroplc

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