Vai al contenuto
PLC Forum


Inversione stato 2 bit


Frank681

Messaggi consigliati

Salve vorrei fare un FB per gestire un mescolatore che poi ad un tempo impostabile mi inverta la marcia , questo continuamente , usando un inverter devo mettere anche un tempo di pausa per far si che la rampa di arresto sia completa altrimenti non posso partire nella'altra direzione.

Qualche consiglio , sto usando per provare due temporizzatori al frnte di discesa del primo ( marcia ) volevo invertire i due bit ma mi sono incartato.

 

Stavo provando a farlo in AWL, magari potrei in SCL ma non mi trovo nell'utilizzo dei temporizzatori in SCL, buttatemi un ancora che poi parto.

 

Grazie in anticipo

Link al commento
Condividi su altri siti


Vedi questo esempio(fatto con microwin in AWL)

                                                                                     :TIMER.GIF

trovi i timer di lavoro T_FWD e T_REV  tarati a 600(scala 0,1s) e i ritardi di inversione 50(0,1),relè di marcia M10.0 e ingresso di DRIVE OK(chiuso con drive OK).

Link al commento
Condividi su altri siti


// Non ho tenuto conto di eventuali feedback di posizionamento non sapendo se li hai a disposizione.
// Sicchè, al primo avvio del plc, di default il primo ciclo sarà nel senso di avanti
		UN    "PRIMA SCANSIONE ESEGUITA"
		S     "FWD STATUS"

// Al cadere di uno dei due temporizzatori (al fronte negativo), avvio il temporizzatore che mi farà da pausa tra le inversioni
// #PAUSA_SU_INVERSIONE sarà una variabile nelle IN dell'interfaccia (s5time)
		U(    
		U     "TIMER: FWD ON"
		O     "TIMER: FWD OFF"
		)     
		FN    "NE1"
		L     #PAUSA_SU_INVERSIONE
		SV    "PAUSA"
		U     "PAUSA"
		=     "PAUSA ATTIVA"

// A timer rwd disattivo e memoria di avanti, se non ho la pausa in corso avvio il timer di avanti
// #DURATA_CICLO sarà una variabile nelle IN dell'interfaccia (s5time)
		UN    "TIMER: FWD OFF"
		U     "FWD STATUS"
		UN    "PAUSA ATTIVA"
		L     #DURATA_CICLO
		SV    "FWD ON"

// All'attivazione del timer avanti, setto il successivo ciclo di indietro e resetto l'avanti (frontato)
		U     "TIMER: FWD ON"
		FP    "PE1"
		S     "RWD STATUS"
		R     "FWD STATUS"

// A timer fwd disattivo e memoria di indietro, se non ho la pausa in corso avvio il timer di indietro
// #DURATA_CICLO sarà una variabile nelle IN dell'interfaccia (s5time)
		UN    "TIMER: FWD ON"
		U     "RWD STATUS"
		UN    "PAUSA ATTIVA"
		L     #DURATA_CICLO
		SV    "FWD OFF"

// All'attivazione del timer indietro, setto il successivo ciclo di avanti e resetto l'indietro (frontato)
		U     "TIMER: FWD OFF"
		FP    "PE2"
		S     "FWD STATUS"
		R     "RWD STATUS"

// I #FWD e #RWD saranno nei campi OUT nell'interfaccia del blocco
		U     "FWD ON"
		=     #FWD
		U     "FWD OFF"
		=     #RWD

// Imposto la prima scansione eseguita in modo da non forzare sempre e comunque il ciclo avanti nelle prime righe di programma
		SET   
		S     "PRIMA SCANSIONE ESEGUITA"

Probabilmente grossolano e non proprio pulito, non avendo esempi pronti e avendo poco tempo a lavoro è la soluzione più immediata che mi è venuta in mente.

Ciao!

Link al commento
Condividi su altri siti

Scusate

 

Mi sto perdendo in un bicchiere acqua..

 

Devo invertire lo stato di 2 bit  out di un FB , FWD e RWD , quando va via il comado all'inverter e ho la risposta di inverter fermo , ho provato ma mi incasaino..

     

UN    #CMD_INV
      =     L      5.0
      U     L      5.0
      U     #INV_F
      U(   
      U     #INV_0_REF
      BLD   100
      FP    #APP4
      )    
      R     #INV_F
      S     #INV_R
      U     L      5.0
      U     #INV_R
      U(   
      U     #INV_0_REF
      BLD   100
      FP    #APP5
      )    
      R     #INV_R
      S     #INV_F

 

convertito da kop

 

Aiuto , forse mi dimentico dei salti ?
 

Link al commento
Condividi su altri siti

Quote

usando un inverter devo mettere anche un tempo di pausa per far si che la rampa di arresto sia completa altrimenti non posso partire nella'altra direzione.

Se hai un inverter non serve nessuna pausa, togli pure il comando F e dai subito il comando R, l'inverter farà la rampa di decelerazione fino a 0Hz e successivamente l'accelerazione nell'altro senso di marcia.

Link al commento
Condividi su altri siti

Mamma mia quante complicazioni inutili.

Prova così:

U    CMD_INV
FN   Mxxx
X    INV_F
=    INV_F

Ogni volta che "CMD_INV" va basso, "INV_F" cambia di stato.

Link al commento
Condividi su altri siti

Operational Amplifier

Mai utilizzata come istruzione...bene a sapersi, ma scusa ancora una domanda batta, non ci vorrebbe un salto SPBN sotto al fronte di discesa in modo da scansionare l'assegnazione solo con il fronte?

 

Link al commento
Condividi su altri siti

No. Prova. Vedrai che funziona.

 

Partiamo con il bit di uscita OFF e il fronte di salita OFF.

Il risultato del XOR è FALSE, quindi l'uscita rimane OFF.

Poi arriva il fronte.

A questo punto ti ritrovi con: Fronte ON e uscita OFF. Il risultato del XOR è TRUE e l'uscita diventa ON.

Alla successiva scansione il fronte è OFF e l'uscita ON. Il risultato del XOR è TRUE e l'uscita rimane ON.

Al successivo fronte ti ritrovi con fronte ON e uscita ON. Il risultato del XOR è FALSE e l'uscita viene riportata OFF.

 

È il modo più semplice e più razionale per fare un flip-flop.

 

Se vuoi farlo in KOP, che non supporta l'istruzione XOR, puoi scrivere così:

   Fronte     Out             Out
-----| |------|/|------+------( )
                       |
                       |
  Fronte      Out      |
-----|/|------| |------+

 

Link al commento
Condividi su altri siti

Operational Amplifier

Perfetto funziona...effettivamente guardando l' RLC è più chiaro l'operazione XOR viene effettuata tra il fronte (in questo caso di discesa ma nulla vieta che sia di salita) ed il flag d' assegnazione.

 

Grazie batta per il chiarimento.

Link al commento
Condividi su altri siti

Grazie Mille

 

Ho risonto mi ero dimenticato di mettere una memoria temporanea che inbisca l'inversione se giaà fatta  ,comunque provo sicuramente e vedo di pilotare anche R

 

Grazie di nuovo

Link al commento
Condividi su altri siti

Quote

Chapeau.

Grazie, ma per così poco?

 

Quote

Ho risonto mi ero dimenticato di mettere una memoria temporanea che inbisca l'inversione se giaà fatta

Vuoi dirmi che stai usando il codice del tuo post del 21 aprile?

(nota per i moderatori: una volta c'era il numero del post. Perché è stato eliminato?)

Se ti piace complicarti inutilmente la vita, liberissimo di farlo, ma spiegami cosa c'è che non ti va bene nel codice che ti ho suggerito io.

Link al commento
Condividi su altri siti

Quote

(nota per i moderatori: una volta c'era il numero del post. Perché è stato eliminato?)

 

E' la piattaforma sofftware della nuova versione che non ce lo ha più. Sembra quasi che vogliano imitare MS: fanno le nuove versioni che funzionano peggio delle vecchie, solo che qui si è obbligati all'aggiornamento.

Link al commento
Condividi su altri siti

Ciao Batta

 

Si in effetti il codice e' qullo del 21 in piu una mem temporanea

Il codice che hai suggerito va benissimo , devo solo pilotare anche R in inversione a F .

 

Infatti sto gia modificando il programma.

 

 

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