Vai al contenuto
PLC Forum


Sfb47 Cpu 313c - Perdita valore conteggio all'accensione


tecnologyassistence

Messaggi consigliati

tecnologyassistence

Salve a tutti qualcuno saprebbe spiegarmi come posso mantenere il valore di conteggio del mio SFB47 dopo una mancanza di tensione?

Cioè quando rido' alimentazione alla cpu i valori di conteggio dei miei due SFB47 si azzerano e per me è un grosso ed enorme problema come posso fare :( ?

grazie Domenico

Link al commento
Condividi su altri siti


Ciao , in breve e da quel che mi ricordo ( avevo fatto una applicazione anni fà che leggevo un encoder con la 313c e sfb47 )

SEGMENTO 1

al primo ciclo plc = M0.2 --> restore posizione al POWER-ON

U "M0.2"

= L 0.0

U L 0.0

SPBNB _001

L "DB102".COUNTVAL

T "DB102".JOB_VAL

_001: NOP 0

U L 0.0

BLD 102

= "DB102".JOB_REQ

SEGMENTO 2

      CALL  "COUNT" , "DB47"
       LADDR   :="DB102".LADDR
       CHANNEL :="DB102".CHANNEL
       SW_GATE :="DB102".SW_GATE
       CTRL_DO :="DB102".CTRL_DO
       SET_DO  :="DB102".SET_D0
       JOB_REQ :="DB102".JOB_REQ
       JOB_ID  :="DB102".JOB_ID
       JOB_VAL :="DB102".JOB_VAL
       STS_GATE:="DB102".STS_GATE
       STS_STRT:="DB102".STS_STRT
       STS_LTCH:="DB102".STS_LTCH
       STS_DO  :="DB102".STS_DO
       STS_C_DN:="DB102".STS_C_DN
       STS_C_UP:="DB102".STS_C_UP
       COUNTVAL:="DB102".COUNTVAL
       LATCHVAL:="DB102".LATCHVAL
       JOB_DONE:="DB102".JOB_DONE
       JOB_ERR :="DB102".JOB_ERR
       JOB_STAT:="DB102".JOB_STAT

leggi la posizione e la scrivi su COUNTVAL

Nota "DB102".JOB_ID deve avere il valore W#16#1

Link al commento
Condividi su altri siti

tecnologyassistence

Ciao zanella grazie ma non riesco a capire se devo scrivere il codice in un semplice FC,ed inoltre non penso sia importante se io leggo SFB47 in kop.

questa istruzione cosi per come la leggo la devo scrivere dentro il mio FC?

U "M0.2"

= L 0.0

U L 0.0

SPBNB _001

L "DB102".COUNTVAL

T "DB102".JOB_VAL

_001: NOP 0

U L 0.0

BLD 102

= "DB102".JOB_REQ

grazie Domenico

Link al commento
Condividi su altri siti

1) il mio nome è zanellatofabio , non zanella !!!

2) come già detto avevo fatto un applicazione con la cpu 313c che leggeva la posizione di un encoder incrementale con sfb47 . al power on del plc si perdeva la poszione , quindi bisognava ricaricare la posizione precedentemente letta in sfb .

Questo si fà col JOB_ID , JOB_VAL e JOB_REQ

basta premere F1 sopra al blocco sfc467 e leggere la documentazione di H_e_l_p la dentro c'è scritto tutto sui job !!!

inoltre lì dentro c'è scritto la frase :

" Avvertenza Ulteriori particolari sull'applicazione dell'SFB 47 sono contenute nel manuale Sistemi di automazione S7-300 CPU 31xC, Funzioni tecnologiche "

Significa leggere la documentazione siemens come ho fatto io .

3) il codice che ho postato era un segmento in kop poi commutato in awl per incollarlo nel post , ognuno è libero di usare il linguaggio che più gli piace .

M0.2 è un attivo al primo ciclo plc .

Bye bye

Modificato: da zanellatofabio
Link al commento
Condividi su altri siti

Il fatto di perdere il valore di conteggio quando si toglie alimentazione non è un'anomalia, ma il giusto modo di operare.

Se non c'è alimentazione, il PLC non può sapere cosa succede, e non può quindi garantire che il valore in memoria sia ancora corretto.

Per esempio, se manca improvvisamente alimentazione, il PLC non è più in grado di aggiornare la posizione, ma l'asse si potrebbe ancora muovere per inerzia.

Solo chi programma può sapere se un eventuale errore può causare o meno danni.

Nel caso in cui si valuti che un eventuale errore sia accettabile, e che le possibilità di movimento dell'asse a plc spento siano remote, allora si può procedere come indicato da Fabio, impostando nel contatore, allo start-up, l'ultimo valore rilevato.

Per vedere come fare per impostare il valore corrente nel contatore, basta consultare il manuale in linea di SFB47.

Link al commento
Condividi su altri siti

tecnologyassistence

Zanellatofabio scusami per l'errore batta il mio grosso problema e quello di riavere la quota in cui si trova la macchina al momento che deve essere avviata cioe',la sera la spengono la mattina la riaccendono e devono riprendere dando l'automatico per non perdere le posizioni di taglio.

Mi sfuge come fare lavorare m0.2 al primo ciclo dovrei usare ob100?

Posso fare come ha descritto Zanellatofabio?

grazie Domenico

Modificato: da tecnologyassistence
Link al commento
Condividi su altri siti

tecnologyassistence

Salve a tutti da ieri cerco di capire meglio approfondendo sul manuale dove viene specificato per intero la funzione dell SFB47,ma non sono riuscito ancora a risolvere il mio problema.

In pratica per come ha descritto nell'esempio zanellatofabio non capisco se db102 è la db di istanza che si genera inserendo dentro fb1 il blocco sfb47,non mi è proprio chiaro come fare a reimpostare l'ultimo valore di conteggio all'uscita del COUNTVAL.

Inoltre non mi è chiaro se devo inserire tutto il codice su fb1 o richiamare la funzione in due blocchi differenti,ho cercato in linea questo tipo di argomento ma nessuno lo ha mai trattato grazie anticipatamente a tutti perun vostro sugerimento.

Domenico

Link al commento
Condividi su altri siti

..la sera la spengono la mattina la riaccendono e devono riprendere dando l'automatico per non perdere le posizioni di taglio.

Il modo corretto di oprare in questi casi è:

Subordinare lo spegnimento al termine della missione corrente; posizionare l'asse in posizione di zero o comunque neutra.

Alla riaccensione si deve esguire una ricerca di zero asse.

Anche ipotizzando l'uso di un encoder assoluto è sconsigliabile ripartire dalla posizione in cui si trova l'asse all'atto dell'accensione. Non si ha la certezza che l'asse sia rimasto nell'esatta posizione in cui era al momento dello spegnimento.

L'uso di un encoder assoluto evita la ricerca dello zero, però complica l'interfacciamento Hw.

Memorizzare l'ultima posizione prima dello spegnimento è fattibile, però bisogna avere l'assoluta certezza che non sia stato possibile alcun movimento dell'asse a macchina ferma.

Link al commento
Condividi su altri siti

tecnologyassistence

Grazie per la risposta Livio ma ho la certezza che l'asse non si muovi in assenza di tenzione ed inoltre ho una macchina con encoder incrementali quindi visto che tutto il software che ho fatto va mi manca solo i evitare che anche la sera dopo l'ho spegnimento della macchina in condizioni normali il giorno dopo l'operatore possa continuare il lavoro leggendo le quote che aveva lasciato il giorno prima.

Link al commento
Condividi su altri siti

tecnologyassistence

Salve a tutti comunque nemmeno la siemens mi ha saputo dare delucidazioni in merito alla problematica,tentero' a memorizzate il valore di conteggio in una doppia word e al riavvio della cpu trasferisco il valore memorizzato nel countval sperando che funzioni.

<_<

Link al commento
Condividi su altri siti

Per darti indicazioni più precise dovremmo sapere come hai gestito attualmente il contatore.

Comunque, se tutto funziona significa che riesci a leggere il valore corrente.

Bene. Questo valore corrente, lo appoggi a qualche variabile? Penso proprio di sì, visto che, immagino, farai anche dei calcoli per convertire il conteggio da impulsi a quota lineare.

Se questo valore lo appoggi a una variabile di un DB, all'accensione questa variabile conterrà l'ultimo valore letto dal contatore.

Ti basta quindi attivare l'operazione di caricamento del valore corrente all'accensione del plc, e scrivere nel contatore il valore memorizzato in questa variabile.

Questo lo puoi fare, per esempio, alzando un bit in OB100 che ti servirà per attivare il comando di impostazione del valore corrente.

Una volta fatto il suo lavoro, il bit viene rimesso a zero e tutto riprende normalmente.

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...