pask1983 Inserita: 13 maggio 2011 Autore Segnala Inserita: 13 maggio 2011 (modificato) Per condizionare l'esecuzione di una funzione richiamata con l'istruzione CALL si devono usare i salti.Esempio:UN E0.1 // se è stato premuto il fungo (contatto normalmente chiuso)O M0.1 // se il merker M0.1 è =1SPBN _000CALL emergenza_000: NOP 0grazie, infatti così ho fatto l'unica cosa, nel flow chart il programma mi andava a "fine" ogni volta che si entrava in una delle sottofunzioni "principali" (ad esempio quelle di emergenza)in pratica ho messo (nell'OB1)UN "SE" // se non è attivo il merker di emergenzaU "PE" // e se non è stato premuto il pulsante di emergenza (contatto NC)spbn s001 // se rlc=0 saltacall emergenza s001: nop 0in questo caso dopo l'esecuzione della funzione "emergenza" , la cpu mi continua a scorrere le istruzioni successive, ma nel flow chart non deve farloallora per fare questo ho inserito: (nell'OB1)UN "SE" // se non è attivo il merker di emergenzaU "PE" // e se non è stato premuto il pulsante di emergenza (contatto NC)spbn s001 // se rlc=0 saltacall emergenzaspb fine s001: nop 0ed ho posizionato nell'ultimo segmento dell'OB1:"segmento 20"fine: nop 0in pratica, quando mi serviva "tagliare" il resto del programma, lo facevo con una funzione di salto a "fine" ci sono altri metodi? Modificato: 13 maggio 2011 da pask1983
JumpMan Inserita: 13 maggio 2011 Segnala Inserita: 13 maggio 2011 Per terminare un blocco ci sono le istruzioni BEA (fine incondizionata del blocco) e BEB (fine condizionata dall'RLC)
batta Inserita: 13 maggio 2011 Segnala Inserita: 13 maggio 2011 Se nel tuo diagramma di flusso risulta che, dopo l'esecuzione della subroutine delle emergenze si deve terminare l'elaborazione, allora la tua soluzione va bene.Saltare alla fine del blocco, oppure terminare l'elaborazione del blocco con BEA o BEB, porta allo stesso risultato.Quello che mi lascia invece perplesso è il diagramma di flusso.Per una semplice esercitazione mi sta anche bene saltare tutto quando sono in emergenza.Nella pratica invece un approccio simile raramente risulta essere corretto.Solo per citare il caso più banale, anche se sono in emergenza, segnalazioni, letture di valori analogici, diagnostica, devono comunque funzionare.Ma sono moltissimi i casi in cui, in emergenza, si devono attivare procedure particolari.Certo, queste procedure potrebbero essere gestite all'interno della subroutine "Emergenza", ma questo significherebbe, in moltissimi casi, duplicare parti di software già esistenti, che andrebbero invece solo integrate con l'informazione di Emergenza, e non certo saltate a piè pari.Non è raro, a dire il vero, trovare diagrammi di flusso come questo. Di solito sono scritti da persone che conoscono il processo, ma non la programmazione.Per chi non sa come si programma un PLC è semplice dire: ferma tutto ed esci. Ma non è quasi mai la procedura corretta.
JumpMan Inserita: 13 maggio 2011 Segnala Inserita: 13 maggio 2011 (modificato) Il primo errore che fanno molti è considerare il programma plc come una sequenza di istruzioni che hanno un inizio e una fine, questo può essere valido nell'ambito di un linguaggio di programmazione di un PC ma non certo in quello di un PLC!Nel plc le istruzioni vengono ciclate continuamente dalla prima all'ultima e poi ripartono nuovamente dall'inizio e così via all'infinito.Il tempo di scansione dell' OB1 non deve superare il limite impostato nei dati di sistema (il cosidetto watchdog) altrimenti la cpu va in stop, il programma non può p.es. fermarsi ad attendere un segnale, deve andare avanti fino alla fine di OB1 entro il tempo stabilito.Come ti ha già detto batta, non è corretto (ed è anche poco leggibile) scrivere un programma AWL pieno di salti, ed è anche difficile da gestire quando vai a "debuggare" online! Le istruzioni non elaborate, o meglio, elaborate solo per un istante sono abbastanza difficili da controllare. Personalmente non mi piace neanche settare e resettare lo stesso merker in 1000 posti (poi magari me lo trovo TRUE e non so chi è il colpevole ), preferisco usare l'istruzione di assegnazione (=) una sola volta, ma questa è una mia abitudine.Domanda, devi per forza usare l'AWL o puoi usare anche KOP e FUP ? Modificato: 13 maggio 2011 da JumpMan
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