Vai al contenuto
PLC Forum


Annidamento Fb, Utilizzo E Richiamo - Variabili Statiche e DB Istanza....bhoo!


pixel

Messaggi consigliati

Salve,

da un'altra discussione intrapresa giorni fà è emersa la necessità di capire qual'è la maniera più corretta per richiamare una FB e/o una SFB da un'altra FB. Nella fattispecie vorrei sapere se è corretto realizzare una FB che è destinata ad essere chiamata da un'altra FB pù volte e con parametri diversi. Ho realizzato una FB che genera degli impulsi e vorrei sapere se è corretto istaziare la FB all'interno dell'altra dichiarandola attraverso n variabili STAT (es. Impulso1, Impulso2, etc). Apparentemente il mio codice funziona correttamente ma vorrei sapere se è corretto o è solo un modo per sporcare il mio codice.

P.S.: Diementicavo la mia FB ha un solo DB di appoggio, per tutte le n variabili STAT, del tipo FB, Step7 genera automaticamente istanze DB?

Grazie a tutti

Modificato: da pixel
Link al commento
Condividi su altri siti


vorrei sapere se è corretto realizzare una FB che è destinata ad essere chiamata da un'altra FB pù volte e con parametri diversi

Beh, programmare utilizzando FB con DB di istanza è sicuramente giusto e utile e ti semplifica la vita in molti casi, dando a quell'assurdità di linguaggio chiamato AWL delle possibilità che si ispirano a modi di programmare più evoluti.

Metti per esempio di avere un impianto composto da più unità che si comportano in modo analogo; in questo caso puoi rendere il codice più compatto e robusto.

L'aspetto negativo è che il debug risulta un pò più macchinoso (con Siemens le cose non possono mai essere semplici fino in fondo... :) ).

Ciao

Link al commento
Condividi su altri siti

Concordo pinamente con "lucios" è vorrei solo aggiungere che è il modo migliore per realizzare un programma veloce ed affidabile :) , una volta finito il debug :( :(

Pensa ad una linea con 100 motori Ogni motore con la sua bella FB, programmando :blink: normalmente, otteresti un prog con 100DB con un notevole uso di spazio, ti riccordo che ogni DB, anche senza dati all'interno, occupa 38 byte (in memoria di lavoro).

Nel caso tuo otteresti una unica FB con una unica DB ed al suo interno 100 Stat.

Per cui si puo ipotizare un risparmio di circa 3700 byte, valore molto indicativo (ipotizando la scrittura di 100DB vuote) ma significativo.

Ma questo vantaggio si paga a caro prezzo, debug non dei +semplici.

Buon lavoro

Link al commento
Condividi su altri siti

Ciao a tutti,

presuppongo allora di aver agito correttamente... istanziando la mia FB come variabile STAT all'interno della FB "Chiamante"! :)

un'altra domanda.... l'appetito vien mangiando... la FB che genera gli impulsi la istanzio più volte nella FB "Chiamante" ma vorrei poter personalizzare i tempi di impulso per ogni istanza... la FB "chiamante" è anch'essa una FB che verrà istanziata più volte in OB1. Pensavo di passare i valori alla FB impulso attraverso il DB della FB "Chiamante", scrivo attraverso OP e/o SCADA i valori nel DB e punto direttamente a queste quando istanzio la FB impulso. Che ne pensate?

Grazie a tutti

Link al commento
Condividi su altri siti

Ciao, dipende come sviluppi il programma. Potresti utilizzare un richiamo di una FB con un nome univoco gestendola con dei salti oppure crei nelle variabili STAT più FB in base alle esigenze e così puoi richiamarle quando vuoi assegnandole i parametri che vuoi.

Per gestire i dati in ogni caso puoi andare a puntare gli indirizzi all'interno della DB di multistanza.

Spero di non averti complicato le idee; comunque se cerchi sul sito della Siemens, ci sono degli esempi con dei programmi già sviluppati dove potresti prendere spunto sul come gestire le multistanze.

Link al commento
Condividi su altri siti

Una piccola considerazione se hai un richiamo di FB al'interno di una FB come stat, ti conviene dichairare queste una dietro l'altra, xchè cosi ottiene un "offset" tra le varianbili, delle FB richiamate, costante.

Ovvero la prima FB avra la sua "stat" che inzia da 4.0 la seconda che inizia a 14.0 la terza a 24.0 ecco che ti trovi con tutte la variabili all'interno della FB ad una distanza costante. es: se il tempo da personalizzare si trova per la prima FB a 8.0 allora quello della seconda si trova a 18.0 e cosi via.

Per me ti conviene crearti una DB dove andrai a scrivere i tui dati dal OP o dalla supervisione, e in seguito di crei un piccolo blocco che copia i dati tra le DB

Buon lavoro e divertiti :lol:

Link al commento
Condividi su altri siti

Grazie per i chiarimenti....

per peopeo... l'idea del salto e un'unica istanza della FB è interessante.... però forse diverrebbe più complicato gestire per ogni richiamo dierse parametrizzazioni, infatti può capitare che per ogni istanza della FB debba usare dei tempi di impulso diversi.

Per TravelMen ho fatto proprio così ho dichiarato le STAT dello stesso tipo una dopo l'altra... :) per quanto riguarda la DB per l'OP e il supervisore credo sia una buona idea.... anche solo per tenere "più ordinato" il tutto e per rintracciare meglio in fase di Debug i valori passati alle istanze.

Grazie Ancora

Link al commento
Condividi su altri siti

anche solo per tenere "più ordinato" il tutto e per rintracciare meglio in fase di Debug i valori passati alle istanze.

si è vero, x me è una questione di "rottura di scatole", ovvero non rompo le scatole alla FB in esecuzione, prima della sua esecuzione aggiorno i vari dati.

In definitiva posso aggiungere : non avere dei valori che cambiano durante l'esecuzione della FB

;)

Modificato: da TravelMen
Link al commento
Condividi su altri siti

Scusatemi ancora.... :ph34r:

sul filone del DB di appoggio... :rolleyes:

data la mia FB con IN e OUT, all'interno eaboro un ingresso analogico e opero in un certo modo... (esempio leggo l'assorbimento del Motore e lo stacco se supera un certo livello).E' più giusto/pratico estrarre direttamente il valore analogico direttamente dal DB di istanza della FB oppure è meglio creare un'uscita Real col valore "scalato" e poi spostarlo (con un Move) sul DB generale per lettura/scrittura OP/SCADA?

Grazie

Ciao a tutti

Link al commento
Condividi su altri siti

Total indiferents, come preferisci. non ho consigli in merito alla fine conpi le stesse operazioni.

Forse potrebbe essere interesante mettelsa sul out della FB e copiarla in una temp della FC/FB in cui è richiamata l'FB in questione.

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