lucios Inserito: 6 settembre 2010 Segnala Share Inserito: 6 settembre 2010 Dovrei pensare una FB che all'interno deve fare in un paio di punti un calcolo di parità (CRC) su un array di dati in input.Il modo migliore sarebbe di creare un'altra FB che esegue il calcolo e richiamarla quando serve all'interno della FB principale. Per motivi di praticità però vorrei fare tutto all'interno della FB (vorrei distribuire solo 1 FB), quindi ho pensato di fare un segmento (con una label apposita) in cui mettere la logichina di calcolo e di fare i jump dove mi serve.Ma come caspita si fa a ritornare al blocco successivo al salto alla suddetta "subroutine"?In altre parole: esiste un'istruzione di salto ad una etichetta con ritorno? Io non l'ho trovata.P.S.A corollario di quanto sopra: cercando appunto l'istruzione desiderata ho fatto una rilettura delle istruzioni AWL e mi è venuta la seguente domanda:Che differenza c'è tra le istruzioni BE e BEA? Sul manuale, se non vado errato, sono descritte nello stesso identico modo..... :blink: Ciao a tutti e grazie Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 6 settembre 2010 Segnala Share Inserita: 6 settembre 2010 esiste un'istruzione di salto ad una etichetta con ritorno?No, non mi risulta esistere: potresti utilizzare l'istruzione LOOP con qualche accorgimento (per es. accumulatore caricato a 1) perchè il ritorno venga effettuato una volta sola, oppure un'altra istruzione di salto condizionato;Che differenza c'è tra le istruzioni BE e BEA? Sul manuale, se non vado errato, sono descritte nello stesso identico modo.....Infatti il manuale dice:Per quanto riguardal'hardware S7, l'operazione BE offre la medesima funzionalità dell'operazione BEA. Link al commento Condividi su altri siti More sharing options...
amed Inserita: 6 settembre 2010 Segnala Share Inserita: 6 settembre 2010 Prova a vedere l'istruzione solo awl "LOOP". Ciao Link al commento Condividi su altri siti More sharing options...
lucios Inserita: 6 settembre 2010 Autore Segnala Share Inserita: 6 settembre 2010 potresti utilizzare l'istruzione LOOP con qualche accorgimento (per es. accumulatore caricato a 1)Ciao busanela,scusa ma non ho capito. Io vorrei saltare da più punti ad una stessa etichetta e ritornare all'istruzione successiva. Ho pensato di caricare una variabile ad un valore diverso per ogni salto e, alla fine della subroutine, interrogarla per selezionare il ritorno, ma mi sembra una soluzione un po macchinosa.... Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 6 settembre 2010 Segnala Share Inserita: 6 settembre 2010 Io vorrei saltare da più punti ad una stessa etichetta e ritornare all'istruzione successivaIn questo caso, l'unico sistema che mi viene in mente al momento, è un salto condizionato ad un FB invece che ad una etichetta ... Link al commento Condividi su altri siti More sharing options...
mubeta Inserita: 6 settembre 2010 Segnala Share Inserita: 6 settembre 2010 Il salto jump non è una call con return. Solo i linguaggi compilati offrono delle soluzioni simili a cosa chiedi tu, (ma molto tra parentesi; nel senso che talune volte è il copilatore che decide se far edelle call, o usare dei salti parametrizzati. Neanche il programmatore).Ma, per tornare al tuo quesito, se vuoi fare una unica FB, che però contine delle parti di codice comune, o ripeti il codice, o, prima di fare il salto, regoli una variabili che indicizzerà un successivo salto di ritorno, usando, mnemonico tedesco, SPN ed SPL. (Che mi sembra una gran schifezza). Link al commento Condividi su altri siti More sharing options...
batta Inserita: 7 settembre 2010 Segnala Share Inserita: 7 settembre 2010 Io rivedrei la decisione di distribuire una sola FB (FB o FC?).Il modo più logico, più semplice e più funzionale per risolvere il tuo problema è il richiamo di un'altra funzione.Non credo ti valga la pena complicare il codice per ricrearti una specie di istruzione "return", solo per evitare di distribuire una FB (FB o FC?) in più. Link al commento Condividi su altri siti More sharing options...
lucios Inserita: 7 settembre 2010 Autore Segnala Share Inserita: 7 settembre 2010 Innanzitutto grazie per le risposte, comunque:o ripeti il codiceCi ho pensato ma è un modo di programmare veramente brutto.regoli una variabili che indicizzerà un successivo salto di ritorno, usando, mnemonico tedesco, SPN ed SPL. (Che mi sembra una gran schifezza)Schifezza per schifezza.....Non credo ti valga la pena complicare il codice per ricrearti una specie di istruzione "return", solo per evitare di distribuire una FB (FB o FC?) in piùHai ragione ma, essendo io abituato a programmare con linguaggi un pò più "evoluti", ho l'abitudine di fare largo uso di funzioni riutilizzate più volte e, in questo caso, non trattandosi di un progetto di automazione completo ma di un pacchetto software da fornire assieme a dell'hardware, che dovrà essere installato all'interno di progetti fatti da altri (non so come), è sicuramente più bello fornire una singola FB che il progettista di automazione potrà inserire nel proprio progetto senza ulteriori complicazioni. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 7 settembre 2010 Segnala Share Inserita: 7 settembre 2010 Io rivedrei la decisione di distribuire una sola FB (FB o FC?).Quoto in toto!...una singola FB che il progettista di automazione potrà inserire nel proprio progetto senza ulteriori complicazioni.Anche una FC (o magari un OB) con funzioni "simil main" che richiami alcuni FC può essere inserita, senza grandi complicazioni, in un altro progetto. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 7 settembre 2010 Segnala Share Inserita: 7 settembre 2010 è sicuramente più bello fornire una singola FB che il progettista di automazione potrà inserire nel proprio progetto senza ulteriori complicazioni.La decisione è tua, ma io non vedo così grave fornire due funzioni anziché una.Se proprio vuoi fornire un unico file, puoi creare un unico sorgente da consegnare al cliente. Sorgente che, una volta compilato, genera le due funzioni.Oppure potresti fare una biblioteca (così le chiama Siemens in italiano, ma sarebbe più corretto definirla libreria) di Step7 contenente le due funzioni. Una volta zippata la biblioteca occupa al massimo qualche decina di kB.Il cliente può così importare i blocchi che gli servono dalla biblioteca.Se il cliente deve solo utilizzare i blocchi senza però poterli modificare, potresti compilare le funzioni con l'istruzione "KNOW_HOW_PROTECT" prima di inserirle nella biblioteca.Il cliente si troverebbe nella biblioteca i due blocchi con il simbolo del lucchetto. Link al commento Condividi su altri siti More sharing options...
lucios Inserita: 7 settembre 2010 Autore Segnala Share Inserita: 7 settembre 2010 La decisione è tua, ma io non vedo così grave fornire due funzioni anziché unaOk, anche se devo dire che andando avanti nello studio ho visto che avrò bisogno di qualche altra funzione, quindi le FB (FC) diventeranno 4 o 5.Grazie 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