Vai al contenuto
PLC Forum


comando uscita temporizzatore in scl


ottoz

Messaggi consigliati

un saluto a tutti  ho una cosa che capisco  e non riesco a venirne a capo

 

#T1.TON(IN := #Y1 OR #Y2 ,
        ET => #tempo,
        PT := t#5s,

       Q=>#y3);

quando Y1 va a 1  , y3 si eccita  , mentre non avviene nulle quando Y2 va a1  eppuire istruzione in ing e un OR come è possibile?

ringrazio anticipatamente

ciaoo

Link al commento
Condividi su altri siti


ciao, probabilmente appena si disecita Y1 passa contemporaneamnte a  settareY2 senza avre il tempo di tranzione da 0 a 1 puo essere? cioè il cambio avviene istantaneamente

 e quindi non vede il fronte?

mi sa che devo trovare un altra soluzione 

Link al commento
Condividi su altri siti

quando mi capita di incartarmi in qualche cosa strana comincio a togliere roba, quindi scavando salta fuori il vero motivo. Io al tuo posto avrei messo in OR altri 2 bit NUOVI e INUTILIZZATI, in modo da alzarli solo con una tabella di forzatura. A quel punto in funzione del risultato hai scremato da che parte sta il problema, magari successivamente scopri che #Y2 viene azzerato prima della elaborazione del blocco. 

Link al commento
Condividi su altri siti

in pratica non appena Y1 si diseccita istantaneamente si eccita Y2

diciamo che con y1  Y3 si eccita dopo aver contato il tempo mentra non non conta se si eccita Y2  ma se inverto  Y2 OR Y1 anzichè  Y1 OR Y2  allora funziona inversamente

 

y1 e y2 vengono comandate dal programma  e funziona cosi:  quando Y1va a1 dop 5 sec si eccita y3, allo stesso modo succede per y2 che quando va 1 fa eccita y3

ma non va   cioe funziona solo con la prima variabile di sinistra di OR quando si diseccitaY1 istantaneamente si eccita Y2

Link al commento
Condividi su altri siti

Hai descritto quello che vorresti fare, ma il tuo programma, evidentemente, non fa ciò che tu vorresti.
Senza vedere il codice, come pensi che ti possiamo dire dov'è l'errore?

Link al commento
Condividi su altri siti

Non può non funzionare!


Come ti ho già detto, se non possiamo vedere il tuo programma, non possiamo nemmeno dirti dov'è l'errore.

 

Chiami il medico, e gli dici: "Dottore, mi fa male un piede".
E il dottore: "Sì, ma dove di preciso?"

Tu - Le ho detto che mi fa male un piede.

Doc - Sì, ma dove le fa male? Che tipo di dolore? Ha subito un trauma?

Tu - Mi fa male un piede. I suoi piedi stanno bene?

 

Capirai che si potrebbe continuare all'infinito, senza mai arrivare ad un risultato.

Link al commento
Condividi su altri siti

// ciclo caricamento liquido
IF #ciclo = 1 AND (#s3 = 0 OR #s5 = 0) THEN
    
    #mk1 := 1;
    #H1 := 1;
ELSIF #Emerg = 1 THEN
    #Mk0 := 0;
    #H1 := 0;
    #Y1 := 0;
    #Y2 := 0;
    #Y3 := 0;
    #mk1 := 0;
END_IF;

//temp" per apetura ritardo #Y3
#T1.TON(IN := #Y1 = 1 OR #Y2 = 1,
        ET => #tempo,
        PT := t#5s,
        Q => #Y3);
        
IF #stop = 1 AND #s4 =0 OR #s6 = 0 THEN
    #mk1 := 0;
    #H1 := 0;

END_IF;


// comando carico tank n1
IF #s3 = 0 AND #mk1 = 1 AND #s4 = 1 AND "H1_ciclo" = 1    THEN
    #Y1 := 1;
ELSIF #s3 = 1 AND #s4 = 0 THEN
    #Y1 := 0;
END_IF;

IF #s4 = 0 AND #s5 = 0 AND #s6 = 1 AND #s3 = 1 AND #mk1=1 THEN
    #Y2 := 1;
ELSIF #s4 = 1 AND #s5 = 0 AND #s6 = 1 AND #s3 = 0 AND #Mk0=0 AND #mk1=1 THEN
    #Y2 := 0;
ELSIF #s6 = 1 AND #s5 = 0 AND  NOT #s4=0 AND #Mk0=1 AND #mk1=1 THEN
    #Y2 := 1;
ELSIF #s6 = 0 AND #s5 = 1 AND #mk1=1 THEN
    #Y2 := 0;
    
END_IF;

#Mk0 := #s4 = 0 AND #s5 = 0;


// segnalazione serbatoi  
#H2 := NOT "S3_Min_Liv_Tank1";
#H3 := NOT  "S5_Min_Liv_Tank2";
#H4 :=NOT  #s4;
#H5 := NOT #s6;

IF #s4 = 0 OR #s6 = 0 AND #mk1=1 THEN
    #Y3 := 0;
END_IF;

 

 

 

Link al commento
Condividi su altri siti

dando un'occhiata senza perderci tempo adesso, vedo subito che #Y3 lo pasticci più volte nel codice e questo è sbagliato!

Y3 deve essere una uscita legata al timer. Se lo vuoi ammazzare devi attenerti alle condizioni iniziali di lancio del timer cioè Y1 e Y2.

altra cosa: se le interrogazione sono booleane non serve controllare = 1 

IF #stop = 1 AND #s4 =0 OR #s6 = 0 THEN ...

diventa IF (#stop  AND NOT #s4) OR #s6  THEN..... // metti le parentesi che non sbagli mai..... 

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