Giovanni Segreto Inserito: 16 maggio 2020 Segnala Inserito: 16 maggio 2020 Buonasera a tutti, il codice allegato sotto in foto e il codice di una fb. Vorrei comprendere la logica con il quale si imposta il codice per gli ingressi del fb. La variabile #index e usata come variabile di base? Può essere una variabile static di tipo int del fb? Nella stesura del scl #index Serve per dichiarare al plc che si lavora al interno del fb? Inoltre i richiami a index:=10 o Index:= 20 servono a indicare spazi di azione di determinati comandi? O meglio dire al plc se index è 20 allora comportati cosi? Grazie
pigroplc Inserita: 17 maggio 2020 Segnala Inserita: 17 maggio 2020 13 ore fa, Giovanni Segreto ha scritto: La variabile #index e usata come variabile di base? Può essere una variabile static di tipo int del fb? la variabile #index sarà una variabile istanziata nelle variabili statiche e sarà parte della DB di istanza del blocco. la funzione CASE è la tipica funzione per gestire una logica sequenziale. Quello che ti consiglio è il commento maniacale di qualsiasi passo es. so che nel passo 170 il caricatore è in salita e aspetta la posizione alta. Raggiunta la posizione alta aspetta 100 ms quindi parte per alimentare la pressa (* ----------------------------------------------------------------- Wait for loading crane upward ----------------------------------------------------------------- *) 170: IF "Stop UPW crane" THEN "AutoUPW_Crane" := FALSE; END_IF; #tonDelayAuto(IN := NOT "AutoUPW_Crane", PT := T#100ms); // timer on delay IF #tonDelayAuto.Q THEN #StepLoadingCrane := 180; // goto next step IF "DB_GD".PassoPasso THEN "DB_GD".StartCiclo := FALSE; END_IF; END_IF; (* ----------------------------------------------------------------- Loading crane FRW goto press brake ----------------------------------------------------------------- *) 180: IF "DB_GD".bofeedbackciclo THEN "AutoFRW_Crane" := TRUE; #StepLoadingCrane := 190; // goto feeding the beast END_IF; Nel mio caso l'indice #StepLoadingCrane è l'indice di una catena sequenziale che fa riferimento a quella stazione della macchina. Individuate i sottoinsiemi della linea ( o stazioni qualsivoglia chiamarle) si ottiene il numero minimo delle catene sequenziali da inserire nella logica. Qualora si intenda ramificare la logica basta innescare altri indici ed aspettarne il completamento della sottologica.
Giovanni Segreto Inserita: 17 maggio 2020 Autore Segnala Inserita: 17 maggio 2020 @pigroplc pultroppo sia il codice che l inglese in combo mi mettono in difficolta! Mi sembra di comprende peró nel caso del case che index e una variabile static della db ed 0 1 2 3 50 51 sono valori della variabile #index definita nella db di istanza e a questi valori corrispondono linee di codice operativo? E corretto?? Grazie
Giovanni Segreto Inserita: 17 maggio 2020 Autore Segnala Inserita: 17 maggio 2020 9 ore fa, pigroplc ha scritto: Qualora si intenda ramificare la logica basta innescare altri indici ed aspettarne il completamento della sottologica. Cioè usare altri #index di altri parti macchina/Automazione?
pigroplc Inserita: 18 maggio 2020 Segnala Inserita: 18 maggio 2020 2 ore fa, Giovanni Segreto ha scritto: valori corrispondono linee di codice operativo? E corretto?? esatto. Se il valore è 0 in genere la catena sequenziale resta bloccata, ma questa è una scelta di logica di chi sviluppa, poi se le condizioni sono soddisfatte il valore passa a 10 per esempio e la parte di codice successiva viene eseguita. 2 ore fa, Giovanni Segreto ha scritto: Cioè usare altri #index di altri parti macchina/Automazione? certamente. Per far partire altre catene sequenziali per esempio.
Giovanni Segreto Inserita: 18 maggio 2020 Autore Segnala Inserita: 18 maggio 2020 18 ore fa, pigroplc ha scritto: certamente. Per far partire altre catene sequenziali per esempio. Grazie mille!
Giovanni Segreto Inserita: 18 maggio 2020 Autore Segnala Inserita: 18 maggio 2020 (modificato) 23 ore fa, pigroplc ha scritto: certamente. Per far partire altre catene sequenziali per @pigroplc per catena sequenziale intendi ad esempio: soddisfatta la index 10 vado alla 12. Mi viene il dubbio peró che se ad esempio la variabile finale sarà 12 al ciclo successivo del fb la parte 10 viene scartata dalla scansione. Questo presuppone che la index 10 e stata completata? Poi approfitto per chiederti anche un altra cosa a proposito Sulla scansione di un fb richiamato in un ob. Premessa:Il ciclo di scansione di un ob (esempio n segmenti )funziona cosi: la cpu legge gli ingressi e li mette nel immagine di processo degli ingressi Idem per le uscite, poi esegue il RLC scrive le uscite fisiche (se ho capito bene) . Ma per le variabili locali di un fb funziona alla stessa maniera ? Ovvero legge gli ingressi dirichiarati nel interfaccia del blocco fb e in fine dopo che ha fatto le operazioni scrive in out sempre del interfaccia ? Grazie! Modificato: 18 maggio 2020 da Giovanni Segreto
pigroplc Inserita: 19 maggio 2020 Segnala Inserita: 19 maggio 2020 il ciclo CASE è semplice: può solamente processare una condizione. Esistono infiniti modi per svilupparlo, all'interno dello stesso CASE puoi gestire tanta logica ma io non sono tanto bravo e prediligo le cose semplici es: 10: abilita l'uscita di salita del caricatore e imposta l'indice a 20 (questo sul 10 non ci gira più manco morto) 20: attendi il fine corsa di caricatore alto, spegni quindi l'uscita di salita. Dopo 100 ms che l'uscita è spenta abilita l'uscita di avanzamento per alimentare la bestia e imposta l'indice a 30 30: ecc ecc si può anche fare così: 10: abilita l'uscita di salita del caricatore e imposta l'indice a 20 (questo sul 10 non ci gira più manco morto) 20: attendi il fine corsa di caricatore alto, spegni quindi l'uscita di salita e imposta l'indice a 30 30: Dopo 100 ms che l'uscita è spenta abilita l'uscita di avanzamento per alimentare la bestia e imposta l'indice a 40 40: ecc ecc 8 ore fa, Giovanni Segreto ha scritto: Sulla scansione di un fb richiamato in un ob esatto, magari aggiorna solamente gli ingressi e ingressi/uscite. Le uscite pure le aggiorna alla fine
step-80 Inserita: 19 maggio 2020 Segnala Inserita: 19 maggio 2020 @Giovanni Segreto ho come l’impressione che , per quanto riguarda il Case, tu tenda a complicare le cose rispetto a quanto realmente lo siano. Voglio dire, la variabile ‘index’ sei tu che ci scrivi dentro il valore che vuoi in modo da farla avanzare solo quando vuoi. Non è una variabile di sistema , comandata dal sistema. Il costrutto Case , come già ti ha detto pigro, processa e valuta ‘index’. Se vale 10, esegue quello che sta scritto di seguito. Una volta terminato, salta dopo l’etichetta End_Case. I casi 20,30 ecc non vengono valutati. Se nel 10 ci sono le condizioni per proseguire , carichi 20 in index e quindi alla scansione successiva non verrà piu processato 10 ma 20. Spero di essere stato piu chiaro
Giovanni Segreto Inserita: 19 maggio 2020 Autore Segnala Inserita: 19 maggio 2020 @step-80 si mi hai chiarito le idee. Grazie mille anche a @pigroplc.
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