Vai al contenuto
PLC Forum


enable fb....


simor

Messaggi consigliati

ciao a tutti

volevo sottoporvi una mia attuale esperienza , riguardo il richiamo di blocchi fb , per capire se il mio errore è ingenuo o se ci può essere una soluzione ... 

ho creato un programma , mediamente complesso ,  nel quale per comodità ho deciso ci richiamare , attivare , dei blocchi fb , tramite delle ricette .

questo perchè alcuni tipi di lavorazione della macchiana che gestisco non necessitano di intere funzioni escludendone di fatto il comando ed il controllo . 

attivo e desattivo appunto dei blocchi fb , con la spiacevole inconvenienza però ,che nel momento della disattivazione del blocco stesso le uscite rimangono alterate , come le voleva il processo nel momento della distativazione del blocco . Di conseguenza mi trovo comandi piuttosto che allarmi specifici che rimangono attivi anche con blocco non più processato .

se vado online vedo il blocco chiaramente "spento" ma le variabili appoggiate alle uscite del blocco stesso alterate (magari ancora a 1 nel caso di bit singoli ).

" penso alla parola di stato del plc o al suo processamento interrotto..."

cosa ne pensate ? forse è poco elegante richiamare degli fb alla necessità  ?

qual' è il modo più corretto per risolvere il problema , oltre alla possibità di provare a scrivere una routine che si occupi di re-settare i valori delle varabili appoggiate alle uscite del blocco fb nel momento della sua disattivazione ?

grazie per i consigli e le vostre battute

 

 

Link al commento
Condividi su altri siti


Ciao,

dico la mia anche se non sono sicuro di aver capito bene ...

Normalmente se un FB o FC deve eseguire una specifica funzione momentanea, che so, un calcolo, allora lo abilito quando mi serve e, una volta ottenuto il risultato, lo disabilito e non viene più eseguito nella scansione; questa è, comunque, una situazione che mi capita poche volte.

Quasi sempre, invece, li lascio sempre abilitati e sono sempre eseguiti durante la scansione; è all'interno dei vari segmenti che abilito o disabilito l'uscita o la variabile a seconda di quello che mi è stato detto di fare. Ho visto i programmi di qualche collega che assegna 2 volte la stessa uscita (che so, per un funzionamento automatico o manuale), ma onestamente non mi piace molto ...

 

Detto questo, se ho capito bene il tuo problema, se disabiliti il blocco, e quindi non viene più eseguito in scansione, sei costretto, almeno che io sappia, a resettare quello che potrebbe essere rimasto attivo e congelato, fuori dal blocco stesso; facendolo tutto insieme poi, sempre secondo il mio punto di vista, sei a rischio di commettere più errori, ma questo dipende molto dalla complessità dell'impianto e da come hai definito le variabili del blocco disabilitato.

Link al commento
Condividi su altri siti

  • 4 weeks later...

Ciao

sono un po impegnato in questo periodo , scusatemi il ritardo della risposta .

In realtà al di là della complessità del programma o di come ho gestito le variabili , ho capito che è poco opportuno attivare dei blocchi alla bisogna e dovrò intervenire sul programma in modo da condizionare le variabili senza interferire con l' intero processamento dei blocchi ...

 Avevo pensato di fare così per tener contenuto il tempo ciclo , ma ho visto che la differenza non è rilevante ,ciclo sugli 8-9 ms con una cpu 1215 e il mio programma  deve tener conto della posizione di un' asse (encoder ) in tempo reale. La prossima volta valuterò una cpu della serie 1500 cosi da aver meno preocupazioni in questo senso.

bene , grazie per la risposta !

 

Link al commento
Condividi su altri siti

Comunque per tanto veloce gira il tuo programma il real time è un'altra cosa.

Inoltre c'è da calcolare anche i tempi di acquisizione, es un un ingresso analogico ha dei tempi di campionamento dovuti alla scheda stessa che sono tutt'altro che irrilevanti.

Link al commento
Condividi su altri siti

Ogni funzione Motion viene sviluppata secondo un campionamento certificato.

La variabile in ingresso (per esempio encoder o potenziometro) deve essere acquisita a intervalli fissi, così come l'uscita (per esempio analogica) deve essere aggiornata a tempi fissi.

Sulla vecchia serie S7-300 era possibile fare questo tramite delle OB schedulate a tempo, indipendentemente dal tempo ciclo, e quindi si aggiornava il comando  con le stesse tempistiche.

Penso che anche con il nuovo 1200 si possa fare. Tieni conto inoltre nel data sheet delle schede I tempi di acquisizione e di aggiornamento altrimenti fai un buco nell'acqua.

 

Link al commento
Condividi su altri siti

con la spiacevole inconvenienza però ,che nel momento della disattivazione del blocco stesso le uscite rimangono alterate , come le voleva il processo nel momento della distativazione del blocco

Niente di più logico, direi. Se nessuno le disattiva, se sono alte rimangono alte.

Del resto, immagino tu voglia utilizzare le stesse variabili in più blocchi. Se per il solo fatto di non essere richiamato un blocco dovesse azzerare tutte le variabili al suo interno, come potresti utilizzarle in un altro blocco?

Quindi, se le variabili non sono comuni a più blocchi, potresti risolvere azzerando le variabili di un blocco quando non viene utilizzato. Se invece le variabili sono usate anche in altri blocchi, potresti fare un reset solo al momento della disattivazione del richiamo di un blocco. Soluzione che, sinceramente, non mi piace molto.

 

La prossima volta valuterò una cpu della serie 1500 cosi da aver meno preocupazioni in questo senso.

I motivi per passare ad una 1500 possono essere molteplici. Non vedo tra questi il fatto che il tuo attuale programma giri in 8-9 ms.

Per il controllo dell'asse usa un OB ciclico. Se non è troppo pesante, puoi impostarlo a 2 ms.

Modificato: da batta
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...