pixel Inserito: 11 aprile 2007 Segnala Share Inserito: 11 aprile 2007 (modificato) 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: 11 aprile 2007 da pixel Link al commento Condividi su altri siti More sharing options...
lucios Inserita: 11 aprile 2007 Segnala Share Inserita: 11 aprile 2007 vorrei sapere se è corretto realizzare una FB che è destinata ad essere chiamata da un'altra FB pù volte e con parametri diversiBeh, 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 More sharing options...
TravelMen Inserita: 12 aprile 2007 Segnala Share Inserita: 12 aprile 2007 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 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 More sharing options...
peopeo Inserita: 12 aprile 2007 Segnala Share Inserita: 12 aprile 2007 Se consideri comunque che primo o poi le parti di programma vanno riutilizzate, fai un bell'affare ad utilizzare FB con DB di multistanza. Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 12 aprile 2007 Autore Segnala Share Inserita: 12 aprile 2007 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 More sharing options...
peopeo Inserita: 12 aprile 2007 Segnala Share Inserita: 12 aprile 2007 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 More sharing options...
TravelMen Inserita: 13 aprile 2007 Segnala Share Inserita: 13 aprile 2007 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 DBBuon lavoro e divertiti Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 15 aprile 2007 Autore Segnala Share Inserita: 15 aprile 2007 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 More sharing options...
TravelMen Inserita: 16 aprile 2007 Segnala Share Inserita: 16 aprile 2007 (modificato) 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: 16 aprile 2007 da TravelMen Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 16 aprile 2007 Autore Segnala Share Inserita: 16 aprile 2007 Scusatemi ancora.... :ph34r: sul filone del DB di appoggio... 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?GrazieCiao a tutti Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 17 aprile 2007 Segnala Share Inserita: 17 aprile 2007 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 More sharing options...
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