Vai al contenuto
PLC Forum


Coda Step7-scl, Supervisore E Schedulatore - Realizzare e gestire una coda dinamica con step7-scl e visibile anche


maury983

Messaggi consigliati

Salve a tutti, è un pò che utilizzo questo ottimo forum per risolvere i miei problemi nella realizzazione della tesi a conclusione dei miei studi, non avevo prima di adesso aperto nessuna discussione, ma mi trovo di fronte un problema che non riesco a risolvere da tempo. :(

Ho la necessità di gestire un elenco di movimentazioni all'interno di un magazziono automatico, gestito da un PLC Siemens s300 CPU318-2 e interfaccia ethernet CP343-1.

Abbiamo pensato alla codifica di queste movimentazione tramite una tabella di traduzione, tale tabella è memorizzata in un DB globale come un array di interi. Ora ho la necessita di gestire questo DB tramite SCL in maniera tale che veda questo blocco come una coda e la gestisca come tale, quindi una gestione di tipo FIFO.

Qualcosa ho abbozzato ma purtroppo non ho mai usato l'SCL e non so come richiamare in maniera iterativa a indicizzata il DB con i dati della coda, credo l'SCL sia la scelta migliore per la gestione di una coda, che ne pensate?

Inoltre i dati devono essere per forza di tipo globale e memorizzati in un blocco dati in quanto dovrei poterli modificare, in maniera da accodare altre movimentazione da uno schedulatore sviluppato in C++ che comunica con il PLC tramite industrial ethernet grazie ad una interfaccia Applicom PCI/PCU2000ETH.

Vi ringrazio per il vostro aiuto e tempo, spero che qualcuno possa aiutarmi. ;)

Link al commento
Condividi su altri siti


Grazie, ma avevo già visto quella discussione e risponde solo in parte ai miei problemi.

Più che di un indirizzamento indiretto avevo bisogno di qualcosa di parametrizzato da inserire all'interno di un ciclo, in quanto per la gestione FIFO della coda devo ciclare tutta la coda in maniera automatica, conoscete gli algoritmi simbolici di inserzione e di uscita dei dati da una coda??Beh una cosa del genere però in SCL che scriva su questi dati globali nel DB.

In un certo senso devo variare l'indice del DB, del tipo DB64.DBWxxx dove xxx deve essere l'ìindice da variare.

Altre idee?

Link al commento
Condividi su altri siti

In un certo senso devo variare l'indice del DB, del tipo DB64.DBWxxx dove xxx deve essere l'ìindice da variare.

Secondo me la tua soluzione è la seguente:

"DBDatiSup".dw[indWord]

in cui "DBDatiSup" è il nome simbolico della DB

"IndWord" è l'indirizzo della word nella DB (formato INT)

oppure

"DBDatiSup".dx[indByte,IndBit]

in cui "DBDatiSup" è il nome simbolico della DB

"IndByte" è l'indirizzo del byte nella DB (formato INT)

"IndBit" è l'indirizzo del bit nella DB (formato INT)

oppure

WORD_TO_BLOCK_DB(IndDB).dbx18.0

in cui "IndDB" è l'indirizzo della DB (formato WORD)

oppure pui mischiare le cose

WORD_TO_BLOCK_DB(IndDB).dw[indWord]

in cui "IndDB" è l'indirizzo della DB (formato WORD)

"IndWord" è l'indirizzo della word nella DB (formato INT)

scritta da Beppe nel link che ti ho indicato.

Scusa ma altrimenti non ho capito cosa cerchi. :huh:

Link al commento
Condividi su altri siti

Quindi quell'IntWord posso tranquillamente definirla come una variabile temporanea all'interno di una funzione SFC per poi usarla come indice dei dati nel DB secondo quella sintassi?...ok ora provo

Grazie.

Link al commento
Condividi su altri siti

Ah ma un altra cosa, il DB posso richiamarlo in ogni momento all'interno del codice SCL o devo richiamarlo all'inizio con qualche dichiarazione di variabile o qualche riga di inizializzazzione, scusa la domanda un pò stupida, ma come ho detto non ho mai programmato con l'SCL.

Link al commento
Condividi su altri siti

Non sono uno esperto di SCL, ma penso che siccome stai scrivendo qualcosa per siemens, suppongo che valgono le stesse regole ovvero se non hai bisogno di aprire altre DB, allora ti basta aprirla all'inizio del tuo codice, altrimenti dovrai aprirla ogni volta che vorrai utilizzare una sua variabile.

Prendi il tutto con le pinze non sono uno pratico di SCL, ma più tosto di AWL e KOP.

Link al commento
Condividi su altri siti

Ti ringrazio, infatti ho il problema di aprire questi dati e leggerli in SCL ho compilato ma mi continua a dare degli errori...

Non ci sono molte persone che conoscono questo benedetto SCL, ma farlo in AWL? Come posso implementare la gestione della coda per il prelievo e l'inserimento come due funzioni separate?

Link al commento
Condividi su altri siti

Analizziamo una cosa per volta una FIFO in AWL è fattibile senza grossi sforzi, per prima cosa sappiamo che il primo dato si troverà sempre in DBxx.DBW0, per tanto quando ci serve lo andremo a leggere, se dobbiamo memorizzare un altro dato avremmo da qualche parte un valore che indica la prima posizione libera (es in fondo alla DB es. DBxx.DBW1000 il valore del primo dato libero nella DB).

Dopo questa semplice premessa dovremmo realizzare due funzioni (in un FC se la cosa deve essere indipendente dalla DB), la prima quella che gestirà lo scarico del dato in DBxx.DBW0 e lo spostamento verso l'alto del resto, mentre la seconda si occuperà di archiviare il/o i nuovi dati.

Ti allego un esempio di FC che gestisce una FIFO, mi scuso per l'assenza di commenti appena la termino ve la ripasso con i commenti, dovrebbe essere abbastanza capibile.

P.S. Chiedo scusa se uso inglese invece del tedesco per il codice.

Rimango a disposizione per chiarimenti in merito

Link al commento
Condividi su altri siti

Ho appena terminato di mettere i commenti ed eliminato le parti meno importanti, tale esempio vuole essere una traccia, non assicuro che sia perfettamente valido per la tua applicazione.

Bun lavoro a tutti

e buone feste.

Link al commento
Condividi su altri siti

;) Grazie mille per l'impegno Travelman, non sono molto pratico neanche di AWL però credo di poterci mettere mano grazie ai tuoi commenti.

Appena ho qualche risultato ti farò sapere.

Buone Natale e complimenti al forum, ottimo davvero.

Link al commento
Condividi su altri siti

  • 1 year later...

Ciao a tutti,

Oggi osservando l'elettricista,ho notato

che stava "sguainando" un cavo fror(almeno credo fosse quello),

utilizzando di conseguenza i cavi diventati ormai unipolari,

da profano quale sono vorrei capire:

i cavi a questo punto sono ancora a norma?

Intendo questi cavi hanno la stessa resistenza al calore o alla fiamma,degli altri?

Grazie

Link al commento
Condividi su altri siti

Beh!....se alla fine di un lavoro ti manca qualche spezzone di cordicella ecco cge si recupera in quel modo. Non lo so se è a norma , comodo sicuramente!

Link al commento
Condividi su altri siti

a quanto ne so io l' fg7 e credo anche il fror è composto da cordine no7vvk ulteriormente rivestite, quindi direi che è a norma oltre che comodo

Link al commento
Condividi su altri siti

Carlo Albinoni

Penso che i normatori non si siano mai occupati di questo argomento. Ma se vuoi toglierti il dubbio scrivi al CEI.

Modificato: da Carlo Albinoni
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...