Jump to content
PLC Forum


Subroutine Con 1200


marantz65
 Share

Recommended Posts

buongiorno a tutti

sto iniziando con il 1200, come faccio a creare delle subroutine?

devo creare dei blocchi e richiamarli dal main?

se si devo utilizzare un blocco FC?

grazie

Link to comment
Share on other sites


Ciao

La risposta e' si , tendenzialmente io nella routine principale OB1 , richiamo i bloccvhi FC se sono solo funzioni che restituiscono un valore ,FB se. Oo blocchv piu' complessi con un DB di istanzaer poter manipolare memorizzare elaborare variabili.

Link to comment
Share on other sites

grazie Frank

mi spieghi meglio come faccio a richiamare un blocco dal main?

mi spiego meglio: con il 200 settavo nel main un merker che richiamava una sub alla cui fine resettava il merker di richiamo.

ho provato a fare la stessa cosa con il 1200, ma non mi parte il timer che ho messo all'inizio del blocco.

grazie

Link to comment
Share on other sites

Nella Finestra di navigazione nel progetto vai in Blocchi di programma e in Inserisci nuovo blocco. Puoi inserire le tue FC ed altri tipi di subroutine. Per inserire i richiami in OB1 devi semplicemente trascinare l'icona del FC dalla Finestra di navigazione nel progetto al segmento in OB1. Ciao

Link to comment
Share on other sites

grazie Amed

sai anche dirmi come far partire il conteggio di un timer in un blocco?

mi spiego: dovrei richiamare un blocco settando un merker, all'interno del blocco devo far partire un timer TOF.

grazie

Link to comment
Share on other sites

Il merker lo metti nel semento in OB1 di richiamo della tua FC. Entra nella FC ove vuoi inserire TOF. TOF lo trovi nella finestra di sinistra nell'elenco delleI Istruzioni di base e lo trascini nel segmento desiderato in FC. Quando inserisci il timer TIA tichiede di assegnargli una DB d'istanza, digli di "sì" e non ti preoccupare. Al timer fai poi comandare un merke ed usa questo merker come contatto del timer nel resto del programma. Quando sei on line con il PLC apri il DB d'istanza, clicca sugli occhiali cosi ti fai una idea del suo contenuto.

Ciao

Link to comment
Share on other sites

La costante di tempo PT scrivila ad esempio: T #10s. Corrisponde a 10 secondi.

Il Blocco FC deve essere esguito, quindi il richiamo dell blocco FC in OB1 deve essere collegato alla barra di tensione a sinistra (stato logico sempre "on").

Per caricare "Tutto" nel PLC, cioè tutti i blocchi e la configurazione hardware, clicca su PLC_1 con il tasto destro nella finestra di navigazione nel progetto. Clicca poi su Carica nel dispositivo e su Tutto.

Ciao

Link to comment
Share on other sites

grazie Amed

ma non mi parte il timer.

io sto settando un merker nel ob1 che richiama il blocco fc.

il blocco viene richiamato ed all'interno del blocco lo stesso merker è collegato all'ingresso del timer.

ma il timer non riesco a farlo partire.

purtroppo tutte le mie sub devono lavorare con un timer, cosa sbaglio?

grazie (mi manca tanto il 200) :wacko:

Marino

Link to comment
Share on other sites

Scusate se mi intrometto, ma hai inserito una bobina dopo il timer?

Cosa vuol dire che non ti parte il timer?

Se hai messo un TOF è un ritardo alla diseccitazione.

Il merker che richiama la FC lo hai messo come fronte di salita?

Link to comment
Share on other sites

grazie step 80

cosa intendi per mettere una bobina dopo il timer? io sto usando l'uscita ET del timer per pilotare un uscita ad intervalli diversi.

il merker che lancia il blocco si setta con un ingresso nell'ob1 richamando il blocco. lo metto all'interno del blocco prima del timer, ho provato a mettere tra i due un fronte positivo del merker ma non funziona, è questo che intendi? o devo mettere il fronte p al merker nel ob1?

devo per forza far partire un timer all'ingresso nel blocco. con il 200 funziona in questo modo :worthy:

aiuto

Link to comment
Share on other sites

Giuseppe Signorella
io sto settando un merker nel ob1 che richiama il blocco fc.

il blocco viene richiamato ed all'interno del blocco lo stesso merker è collegato all'ingresso del timer.

Ma che senso ha connettere il il merker con cui richiami l'FC prima del timer presente nel medesimo FC?

Se connetti il timer direttamente (sempre TRUE) senza il merker, il tuo Timer (presente nell'FC) verrà comunque eseguito solo se richiami la Funzione.

Poi trattandosi di un blocco contenete un timer, perchè hai usato un FC e non un FB?

Edited by Giuseppe Signorella
Link to comment
Share on other sites

Con l'istruzione "Ritardo alla disinserzione" si ritarda il reset dell'uscita Q della durata PT programmata. L'uscita Q viene impostata se il risultato logico combinatorio (RLO) nell'ingresso IN passa da "0" a "1" (fronte di salita del segnale). Quando lo stato del segnale sull'ingresso IN torna a "0", il tempo programmato PT inizia a decorrere. L'uscita Q rimane impostata per tutta la decorrenza della durata PT. Una volta decorsa la durata PT l'uscita Q viene resettata. Se lo stato del segnale nell'ingresso IN commuta su "1" prima che sia trascorsa la durata PT, il temporizzatore viene resettato. Lo stato del segnale nell'uscita Q resta impostato su "1".

Nella citazione ci sono le prime righe copiate dalla guida in linea sul funzionamento del timer TOF, che viene richiamata semplicemente selezionando il box del timer e premendo F1.

Non mi stancherò mai di ripetere che, specialmente quando qualcosa non funziona, la prima cosa da fare è sempre la stessa: consultare il manuale.

Come prima cosa, si nota che l'uscita Q viene impostata se il risultato logico combinatorio nell'ingresso IN passa da "0" a "1" (fronte di salita del segnale).

Tu hai legato l'esecuzione della funzione con all'interno il timer e l'attivazione del timer stesso (all'interno della funzione) al medesimo merker. Questo comporta che, quando il merker è OFF, la funzione con il timer non viene elaborata. Il timer quindi non potrà mai vedere il suo ingresso allo stato basso e, quindi, non rileverà mai un fronte di salita.

Come se non bastase (sempre che tu stia usando un timer TOF come scrivi nel post #5), quando il merker sull'ingresso del timer è basso (ed il timer dovrebbe quindi iniziare a contare), la funzione non viene più richiamata.

Facile pensare che il timer così non possa funzionare.

Prova a richiamare la funzione con il timer in modo incondizionato, e vedrai che il timer funziona.

Link to comment
Share on other sites

grazie per le vs risposte.

per Giuseppe: è meglio che usi un blocco FB? non mi è ancora ben chiara la differenza, se gentilmente vorrete potete compensare la mia lacuna.

per Batta: cosa intendi per modo incondizionato.

sono riuscito a fare partire il timer , anteponendo (nel blocco) all'ingresso del timer una uscita rinominata con il nome del merker presente nell?ob1.

sicuramente ci sarà una soluzione più elegante.

grazie

Link to comment
Share on other sites

è meglio che usi un blocco FB? non mi è ancora ben chiara la differenza, se gentilmente vorrete potete compensare la mia lacuna.

.

sono riuscito a fare partire il timer , anteponendo (nel blocco) all'ingresso del timer una uscita rinominata con il nome del merker presente nell?ob1.

Ti consiglio caldamente a proposito di fc e fb gli ottimi videocorsi di Pedrani nella sezione didattica,uno di loro parla proprio di questa differenza.

L' ultima parte non l'ho capita..

È sufficiente che nel blocco fc( o fb, se lo userai) tu inserisca in ingresso al timer il merker di sistema " sempre vero"

Un altra cosa peró non mi è chiara: dici di aver inserito un TOF; se è cosi il tempo impostato comincerà a scorrere quando in ingresso al timer verrà rilevato un fronte di discesa... Mettendo un sempre vero esso non andrà mai a 0.

Tra l' altro, non ho ben compreso ancora cosa devi fare, e perchè il tof dentro la fc.

Spiegaci bene quel che devi realizzare, magari riusciamo ad aiutarti!

Edited by step-80
Link to comment
Share on other sites

per Batta: cosa intendi per modo incondizionato.

Tu ora, prima del richiamo della funzione, hai un contatto con un merker. Se questo merker è ON, la funzione viene richiamata, mentre se è OFF, la funzione non viene richiamata.

Elimina questo contatto, in modo che la funzione venga richiamata sempre.

sono riuscito a fare partire il timer , anteponendo (nel blocco) all'ingresso del timer una uscita rinominata con il nome del merker presente nell?ob1.

???? Non ho capito cosa hai fatto.

Per quanto riguarda la differenza tra FC e FB:

In una FC puoi dichiarare variabili INPUT, OUTPUT, INOUT, TEMP.

Le variabili INPUT sono i parametri che passi alla funzione quando la richiami.

Le variabili OUTPUT sono parametri in uscita dalla funzione.

Le variabili INOUT sono parametri che vengono letti e scritti dalla funzione.

Le variabili TEMP sono variabili i cui valori vengono scritti in un'area di memoria comune ad altre funzioni. Quando esci dalla funzione è quindi molto probabile che un'altra funzione vada a scrivere in questa area di memoria. In breve, significa che, se scrivi un valore in una variabile TEMP, al prossimo richiamo della funzione non troverai più quel valore. La prima istruzione di una variabile TEMP deve quindi sempre essere un'operazione di scrittura. Solo dopo aver scritto un valore potrai accedere in lettura.

Quando richiami una FC, devi per forza collegare qualcosa ai parametri INPUT, OUTPUT e INOUT.

In una FB puoi dichiarare variabili INPUT, OUTPUT, INOUT, STAT, TEMP.

Le variabili INPUT: come FC, ma vengono anche appoggiate nel DB di istanza.

Le variabili OUTPUT: come FC, ma vengono anche appoggiate nel DB di istanza.

Le variabili INOUT: come FC, ma vengono anche appoggiate nel DB di istanza.

Le variabili TEMP: come FC.

Le variabili STAT sono variabili che andranno lette/scritte nel DB di istanza della funzione.

Quando richiami una FB, ai parametri INPUT, OUTPUT e INOUT puoi non collegare nulla. I parametri li puoi anche leggere/scrivere direttamente nel DB di istanza.

Quando richiami una FB, devi associare un DB di istanza. In questo DB di istanza verranno appoggiate tutte le variabili della FB (ad esclusione delle TEMP).

Un esempio classico di utilizzo di FB è la gestione di macchine (o parti di macchina) tutte uguali. Per ogni macchina (o parte di macchina) richiami sempre la stessa FB, associando però di volta in volta un diverso DB di istanza.

In pratica, se con altri PLC (non tutti) per gestire macchine uguali devi fare una copia della funzione e cambiare manualmente tutte le memorie all'interno della funzione stessa, con le FB ti basta cambiare DB di istanza quando richiami la FB.

Link to comment
Share on other sites

Batta ma tu la pazienza dove la compri?

Scommetto che ti fanno un bello sconto sulle grandi quantità!!

Edited by step-80
Link to comment
Share on other sites

Batta ma tu la pazienza dove la compri?

Ho due figlie di quasi 14 anni, con le quali faccio molto allenamento ;)

Link to comment
Share on other sites

grazie a voi tutti per la pazienza, purtroppo non è il mio mestiere (si vede) e volente o nolente mi sto calando nella veste di programmatore di plc per necessità (salvagurdia/mantenimento dell'impiego).

cerco di spiegarvi cosa devo fare.

premesso che lo ho gia' fatto con il 200, per esigenze commerciali lo devo fare anche con il 1200.

nell'ob1 con il 200 attraverso la funzione fifo e add_tbl memorizzavo n ingressi che andavano alti a caso.

li leggevo nello stesso ordine in cui erano andati alti ed ad ogni lettura (uno alla volta) settavo un merker che richiamava una sub nella quale un timer svolgeva tutto (gestione delle varie uscite).

con il 1200 purtroppo ho scoperto che l'istruzione fifo non è presente (almeno così mi sembra) e la tabella delle priorità già sarà un problema realizzarla (si accettano suggerimenti).

sono al punto di realizzare le varie sub (anzi blocchi) che svolgono il compito principale.

molto desideroso di rendervi partecipi al mio progetto vi saluto cordialmente.

Marino :thumb_yello:

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...