Vai al contenuto
PLC Forum


richiamo funzione per più aplicazioni


guazze

Messaggi consigliati

buona sera ho un questito da sotopporvi.

ho costrioto un FC nel quale vado a gestire un marci/arresto di utenza ( motore; luce; ecc).

tale Fc lo vogli richiamare tutte le volte che ho necessità di gestire una nuova uscita con la stessa logica e ingressi differenti.

 

fino a quando FC nel quale vi è la logica di richiamo, viene richiamato solo una sola volta le scite si comportano in modo corretto, ma quando vado a inserirlo per la seconda volta  e di conseguenza vado a variare ingressi e uscite, il PLC alza tutte le uscite indistintamente da quale ingresso va a valore 1.

 

ho effettuato varie prove ma tutte portano allo stesso risultato.....

le elenco qui di seguito:

-Logica dui richiamo scritta in fc e lo stesso richiamato in altro fc

- logica di programma scritta in un Fb e richiamato in un FC

ecc.

 

A questo punto credo e ne sono convinto che sto sbagliando qualche cosa, ma non so cosa.

Potreste aiutarmi?

inserisco immagine di come ho scritto la logica di funzionamento.

Dove sto sbagliando?? io ritengo che siano i merker che mi causano l'anomalia e così?

99887751_Immagine2021-06-16233550.jpg.c0802c7111b5cc9ddbc9dcd32f4163de.jpg

 

 

 


 

 

Link al commento
Condividi su altri siti


Devi dichiarare tutte le variabili dell'FC come ingressi uscite e IO, a quel punto puoi richiamare l'fc più volte e nel richiamo associ le tue variabili fisiche

es

Input
P6

Pul1

Output

IO

Tag_1

Tag_4

Tag_6

L1

Luc1

 

L1 e Luc1 sono legati alla stessa variabile vero?

Modificato: da acquaman
Link al commento
Condividi su altri siti

mi sembra non vada bene che usi il tag per i due fronti una variabile generale, mi sa che devi usare un altro metodo, magari una variabile locale, o qualcosa di indicizzato se vuoi usare le variabili generali, così fatto appena si verifica un fronte e l'FB la richiami varie volte a seconda delle uscite che devi comandare si attivano tutte perchè il tag di appoggio è generale la condizione si attiva in tutti i richiami.

Link al commento
Condividi su altri siti

 ho provato a che a fare quello, ma niente.....il problema sostanziale credo che  risiede nell'utilizza nelle memorie dei fronti di salita... come potrei ovviare?

 

Link al commento
Condividi su altri siti

Nella tua FC utilizzi delle variabili globali (M1.0, M1.1, M2.0, Q0.1).
Le soluzioni, come ti hanno già suggerito, sono due: o passi tutte le variabili come IN/OUT o, meglio, usi una FB al posto di una FC, appoggiandoti a variabili STAT.
Ad ogni richiamo della FB, fai riferimento ad un diverso DB di istanza.

Link al commento
Condividi su altri siti

 

1 ora fa, batta scrisse:

meglio, usi una FB al posto di una FC

Sicuramente l'FB è più pulito, ma creare una DB di istanza per appoggiare 3 BIT mi sembra eccessivo, in questo caso rimarrei con l'FC.

Link al commento
Condividi su altri siti

7 minuti fa, acquaman scrisse:

ma creare una DB di istanza per appoggiare 3 BIT mi sembra eccessivo, in questo caso rimarrei con l'FC.

Diciamo che per fare quello che si vede nell'esempio anche una FC mi pare eccessiva.
Credo si tratti di un esempio, di una prova per chi sta imparando a programmare, quindi, più che i tre bit, ho pensato al concetto.

Bisognerebbe anche capire cosa si vuole fare, con questa FC, perché non è molto chiaro.
Sembrerebbe quasi un flip-flop fatto in modo molto complicato e del quale non si vede tutta la logica.

Modificato: da batta
Link al commento
Condividi su altri siti

2 ore fa, guazze scrisse:

io ero partito da quell'idea li.ma mi sono incartato grazie alle memorie.

Ma hai capito dov'è il tuo errore, o ancora no?

Il problema è che tutte le memoria che hai usato internamente alla tua FC sono sempre le stesse, ad ogni richiamo della FC.
Se al primo richiamo della FC, per esempio, fai il SET di M2.0, nei richiami che seguono la FC leggerà lo stato di M2.0 = TRUE.
Stai usando delle memorie che non sono interne alla FC, ma sono memorie globali. Esiste un solo M2.0 per tutto il programma, non c'è un M2.0 per ogni FC.
Quindi, o dichiari queste memorie come IN/OUT (cambiando, chiaramente, il bit collegato alla funzione ad ogni richiamo della funzione stessa), oppure utilizzi le variabili STAT di una FB.
Le funzioni FC ed FB hanno anche delle variabili locali (TEMP), ma queste variabili sono, appunto, "temporanee", e non hanno più valore una volta che esci dalla funzione. In altre parole, se scrivi un valore in una variabile Temp, questo valore viene perso quando esci dalla funzione. Con le CPU S7-300 potevi trovare un valore casuale, con le 1200/1500 il sistema azzera le variabili Temp.


Una volta capito come usare le memorie in una FC (o in una FB), potresti anche dire cosa intendi fare, con quella funzione. È solo un test, si tratta di un flip-flop, o altro?
Se è un flip-flop (o toggle, se preferisci), ci sono modi molto più semplici per realizzarlo.

Link al commento
Condividi su altri siti

 

buona sera betta si è un flip-flop .

sono riuscito a farlo funzionare, ho utilizzato un FB  dentro un FC.

Nell'FB le memorioe le ho dichiarate come Static da quel momento tutto va ... logicamente ogni volta che richiamo  il blocco Fb in unnFC si genere un DB.

 

potresti consigliarmi metodi piu veloci per chreare un flipflop?

 

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...