Vai al contenuto
PLC Forum


Marcia avanti ed indietro in scl


Giovanni Segreto

Messaggi consigliati

Giovanni Segreto

Buonasera,

chiedo se un programma così può essere considerato accettabile e funzionante. 

Premetto che provando a banco funziona. 

Nessuna accensione simultanea delle uscite plc. (interblocco) 

È una marcia avanti e indietro con due rispettive attivazioni a pulsante. 

Tre ingressi e due uscite plc CPU 1200

Puls avanti

Puls indietro

Stop

Uscita per motore avanti 

Uscita per motore indietro

Ho messo i commenti. 

Grazie 

IMG_20200524_221857.jpg

Link al commento
Condividi su altri siti


ciao,

qualche considerazione:

- non vedo la necessità e o l'utilità di mettere quelle istruzioni in case. Oppure non si vede tutto il codice ad esempio.

- per i pulsanti di marcia avanti e marcia indietro, io avrei usato dei fronti e non il pulsante diretto. Per il pulsante di Stop no.

  Cosa succede se premi tutti e due i pulsanti contemporaneamente?  secondo me è una situazione da prevere e da gestire.

- le uscite marcia avanti e marcia indietro accendono dei contattori?

  se si e sui contattori non c'è montato un sistema di interblocco meccanico, devi prevedere dei piccoli tempi di interblocco.

  il plc è sicuramente più veloce del tempi di spegnimento di un contattore, quindi potresti avere problemi.

  Ancora cosa succede se premi tutti e due i pulsanti contemporaneamente?

  se cisono dei contattori almeno metti i contatti di interblocco software oppure hardaware

 

un saluto

Valvolina

 

 

Link al commento
Condividi su altri siti

Giovanni Segreto

@valvolina

Quante sono le probabilità di attivazione nello stesso istante del pulsante? Basterebbe mettere un tempo di ritardo di attivazione contatore. Esempio avanti ritardo 1.0s indietro 1.1s. Risolverebbe anche il problema dei tempi di interblocco? In quanto apre un contatore? 

Perché metti i fronti? 

Grazie!! 

 

Link al commento
Condividi su altri siti

Gli interblocchi sono fondamentali.
Al di là delle sciocchezze che può fare un operatore, considera un eventuale guasto meccanico a pulsanti, contattori ecc...

I fronti servono ad evitare che la pressione del pulsante venga riconosciuta dal PLC per più cicli.

Se metti un FP avrai il valore true solo se l'ingresso passa da false a true per una sola volta a ciclo CPU

 

Link al commento
Condividi su altri siti

Ciao

 

considerazione 1:

se premo 'pulsante marcia avanti'    'motore in avanti' va a TRUE.

Successivamente, se era attivo 'motore indietro'   , 'motore in avanti' va FALSE. Non vedo l'utilità di mettere a TRUE qualcosa che so già che potrà essere messo a FALSE. 

 

considerazione 2:

'pulsante marcia indietro' è controllato solo se 'pulsante marcia avanti' è FALSE. anche questo lo vedo come una inutile complicazione.

 

considerazione 3:

vedo che tutto questo è dentro ad un costrutto CASE. per quale motivo hai fatto ciò? (non si vede il resto del listato).

 

 

Il programma messo giù cosi probabilmente funziona(almeno in test e finchè non succede nulla di imprevisto), e capisco che se sei alle prime armi tu voglia vagliare varie ipotesi ma ti assicuro che alla fine le cose piu semplici sono quelle che funzionano sempre e sono più facilmente interpretabili anche a distanza di mesi. 

 

Detto ciò,se vogliamo analizzare a fondo la questione, la tua è una macchina a stati con-appunto-3 stati:

 

-Riposo

-Marcia Avanti

-Marcia Indietro.

 

A questo punto devi decidere cosa vuoi che succeda quando:

 

-Nello stato di riposo vengono premuti contemporaneamente 2 pulsanti; 

-Nello stato Marcia Avanti viene premuto il comando 'Marcia Indietro';

-Nello stato Marcia Indietro viene premuto il comando 'Marcia Avanti'.

 

Una volta stabilito questo si può passare oltre. 

Se diamo per scontato che non si possa andare da marcia avanti a marcia indietro direttamente, ne deriva che dobbiamo sempre passare dallo stato di riposo. 

 

Se siamo in stato di riposo, la condizione per andare in 'Marcia avanti' è : Pulsante Marcia Avanti AND NOT Pulsante Marcia Indietro.  

La stessa cosa per andare nello stato Indietro: la condizione sarà :  Pulsante Marcia Indietro AND NOT Pulsante marcia avanti. E qui hai già fatto l'interblocco.

 

Se hai la prima condizione passi allo stato di marcia avanti dove attivi la bobina avanti. Inoltre in questo stato dovrai valutare le condizioni per uscire dallo stato e cioè : Se sono in Stato Avanti e premo stop , ritorno in Stato di riposo. La stessa cosa per lo stato indietro. 

 

Potresti anche 'giocare' sul fatto di inserire un breve ritardo di commutazione prima di passare da uno stato all'altro se la meccanica lo richiede.

 

Non me ne vogliano gli altri se ho complicato un marcia-arresto in questo modo ma è per chiarire il concetto. 

Ciao!

 

 

Link al commento
Condividi su altri siti

Comunque sia, ritengo che il buon vecchio metodo dell'autoritenuta in questi casi conservi ancora il suo fascino antico...

 

MotoreAvanti :=  (PulsanteMarciaAvanti OR MotoreAvanti)     AND NOT MotoreIndietro AND PulsanteStopNC; 

MotoreIndietro := (PulsanteMarciaIndietro OR MotoreIndietro) AND NOT MotoreAvanti AND PulsanteStopNC; 

 

Come vedi anche in questo caso è stata data la priorità alla marcia avanti; se vuoi dare priorità a quella indietro basta invertire le righe. 
 

Modificato: da step-80
Link al commento
Condividi su altri siti

Giovanni Segreto
2 ore fa, step-80 ha scritto:
2 ore fa, step-80 ha scritto:

Comunque sia, ritengo che il buon vecchio metodo dell'autoritenuta in questi casi conservi ancora il suo fascino antico...

 

MotoreAvanti :=  (PulsanteMarciaAvanti OR MotoreAvanti)     AND NOT MotoreIndietro AND PulsanteStopNC; 

 

@step-80 si legge se pulsante marcia avanti o motore avanti(sono a 1) e motore non é indietro e pulsante stop NC allora motore avanti?  In quale caso usi le tonde?

Hai scritto NC per segnalare contatto in campo? 

Mi piacerebbe prenderci la mano perché sembra che imparando il linguaggio macchina sia più semplice rispetto ad kop! 

Sembra davvero di inserire un testo ed il plc è in grado di comprendere😅 veramente bello!

Link al commento
Condividi su altri siti

Giovanni Segreto
5 ore fa, pilota60 ha scritto:

Gli interblocchi sono fondamentali.
Al di là delle sciocchezze che può fare un operatore, considera un eventuale guasto meccanico a pulsanti, contattori ecc...

I fronti servono ad evitare che la pressione del pulsante venga riconosciuta dal PLC per più cicli.

Se metti un FP avrai il valore true solo se l'ingresso passa da false a true per una sola volta a ciclo CPU

Ti ringrazio! E

Link al commento
Condividi su altri siti

ciao

esiste anche la possibilità che i contatti dei pulsanti vadano in corto,

oppure che dei fili vadano in corto. "Stai sicuro che sono eventi che possono capitare per un milione di motivi".

Se sui pulsanti di marcia avanti e indietro hai i fronti, non avrai riavvii imprevisti dopo il rilascio del pulsante di stop.

Il tempo chiusura e apertura è riportato sui cataloghi dei costruttori, non so quale marca usi.

Ma mediamente è qualcosa di simile hai 100 ms, il plc è sicuramente più veloce.

 

Quando programmi cerca sempre di pensare se puoi prevedere contromisure per situazioni anomale.

 

un saluto

Valvolina

Link al commento
Condividi su altri siti

3 minuti fa, Giovanni Segreto ha scritto:

Mi piacerebbe prenderci la mano perché sembra che imparando il linguaggio macchina sia più semplice rispetto ad kop! 

Il linguaggio macchina è tutt'altra cosa, questo è "Testo Strutturato", ovvero un linguaggio di alto livello molto lontano dal linguaggio macchina.
Nel linguaggio macchina scrivi istruzioni direttamente comprensibili per la macchina, ma di difficile interpretazione per l'uomo. Qui si sta invece parlando di un linguaggio facilmente comprensibile dall'uomo, ma che deve essere convertito (a questo serve la compilazione) per essere eseguito dalla macchina.
 

Per quel che riguarda la facilità, per quanto io non sia un appassionato di ladder, continuo a sostenere che per logiche booleane il ladder sia il linguaggio più adatto, sia per la facilità di scrittura, sia nel debug.
Chi nasce dal mondo informatico probabilmente all'inizio si sentirà più a suo agio con un linguaggio testuale, ma basta un po' di pratica per rendersi conto di quanto sia facile ed intuitivo il ladder per un marcia/arresto.

 

Se metti un profano davanti ad una schermata in ladder, visualizzando lo stato, e chiedi cosa manca per attivare l'uscita, di sicuro sarà in grado di risponderti.
Non si può certo dire lo stesso con qualsiasi altro linguaggio.

Link al commento
Condividi su altri siti

21 minuti fa, Giovanni Segreto ha scritto:

Mi piacerebbe prenderci la mano perché sembra che imparando il linguaggio macchina sia più semplice rispetto ad kop! 

Ogni linguaggio ha i suoi pro e i suoi contro ed andrebbero usati tutti in funzione delle proprie caratteristiche, il Kop è un linguaggio grafico ideale per la logica booleana, quella che stai cercando di fare.

Cattura.JPG.86c6e80c1eab87dc3656223c2da9e98e.JPG

non è più semplice vedere cosi quello che ha scritto @step-80?

 

 

Modificato: da acquaman
Link al commento
Condividi su altri siti

16 minuti fa, Giovanni Segreto ha scritto:

Mi piacerebbe prenderci la mano perché sembra che imparando il linguaggio macchina sia più semplice rispetto ad kop! 

Comunque SCL non è un linguaggio macchina, AWL si.
SCL ha comunque bisogno di un traduttore interno al PLC.
E comunque non esiste il linguaggio perfetto, per certe cose SCL è imbattibile, per altre è più conveniente il ladder.
 

Link al commento
Condividi su altri siti

Giovanni Segreto
21 minuti fa, acquaman ha scritto:

Ogni linguaggio ha i suoi pro e i suoi contro ed andrebbero usati tutti in funzione delle proprie caratteristiche, il Kop è un linguaggio grafico ideale per la logica booleana, quella che stai cercando di fare.

Cattura.JPG.86c6e80c1eab87dc3656223c2da9e98e.JPG

non è più semplice vedere cosi quello che ha scritto @step-80?

Non saprei risponderti perché non conosco bene la sintassi scl, ma sembra che sequenze di parole diano determinati risultati ora acquisendo la sintassi e dimestichezza forse a un programmatore può risultare più semplice scl? Poi sono d'accordo che è più semplice leggere un ladder.. 

 

 

Link al commento
Condividi su altri siti

Giovanni Segreto
2 ore fa, batta ha scritto:

 

@battaHo compreso grazie

Per quello che riguarda le tonde citate da @step-80sul esempio di autoritenuta a cosa servono? Quando le metti quale situazione crei nel Editor? Perché senza ho visto che il programma non funziona.. 

Modificato: da Giovanni Segreto
Link al commento
Condividi su altri siti

Giovanni Segreto

@step-80 seguendo la logica che mi hai dato ho inserito due finecorsa alle posizioni estreme (nel caso di un pacco su nastro) arrivato in fondo il pacco torna si arresta e torna indietro, tutto con i finecorsa.(forse dovrei inserire un tempo di ritardo per commutazione teleruttori) ma è solo per provare. 

Potresti spiegarmi l uso delle tonde? 

IMG_20200525_215118.jpg

IMG_20200525_215056.jpg

Modificato: da Giovanni Segreto
Link al commento
Condividi su altri siti

Quoto in toto quelo che dice @batta

e comunque quando si scrive in testo strutturato o SCL le istruzioni sono eseguite in sequenza ed è questo che spesso ci si dimentica, nel senso che la cronologia di esecuzione delle istruzioni nel listato del programma conta molto, in KOP l'algebra booleiana è molto più intuitiva e controllabile in fase di test, in SCL devi sempre considerare la cronologia delle istruzioni, perchè un'istruzione messa prima o dopo può far cambiare la priorità di esecuzione, proprio per questo anch'io preferisco il KOP e prediligo SCL o testo strutturato quasi esclusivamente nei calcoli matematici, usandolo spesso in combinazione al KOP, questo facilita i calcoli matematici che se fatti in KOP sarebbero un po' più complessi da capire.

Insomma si potrebbe usare il SET RESET per l'abilitazione di un bit di marcia ma preferisco spesso usare il classico metodo indicato da batta per dare un bit di marcia magari disabiltato dall'ultima fase eseguita in una sequenza di passi da eseguire, così sono sicuro che la fase di marcia viene terminata da quella precisa fase. Questo devo ammetterlo deriva dalla mia reminescenza derivante dall'elettrotecnica ma anche dal fatto che il PLC è da li che viene perchè quando il PLC non esisteva era così che si faceva e poi la mia esigenza continua sia di fare progettazione, schemi elettrici e programmazione mi impone spesso di semplificare il più possibile la logica del funzionamento dei sistemi.

Modificato: da leleviola
Link al commento
Condividi su altri siti

Le parentesi servono per far capire al compilatore come deve interpretare il codice che hai scritto. 

 

Se lo scrivi in ladder, il modo in cui inserisci i contatti e le bobine da solo dice al compilatore la logica dell'automazione. Se lo scrivi in SCL no. Facciamo un esempio, sempre riportato alla tua marcia-arresto:

 

Giovanni1.png.c80cf57bd8879edc185df07a228cf0cb.png

 

Diciamo che , scritto in questo modo , il compilatore eseguirà per primo un OR logico fra Pulsante Avanti e Motore avanti. Il risultato lo appoggerà ad un altro dato che per ora non ci interessa. Questo dato contiene appunto il risultato dell'OR logico fra i 2 operandi. Basta quindi che uno dei 2 sia a livello logico 1 che il risultato sarà 1. Questo risultato sarà poi messo in AND logico fra il valore invertito di Motore Indietro(invertito perchè è stato inserito negato) e lo stato di pulsante Stop NC. 

 

Le parentesi quindi dicono al compilatore le priorità , la gerarchia che dir si voglia. 

La parte sopra come dicevamo si può tradurre in: 

Giovanni2.png.f9ed89f3701758b983a690330cb3aa76.png

 

Scrivere cosi è molto diverso che per esempio scrivere questo:

 

Giovanni4.png.c6d5492432c9761bd80d06f71c2fd2cb.png

 

Spostando la parentesi il senso della logica cambia completamente, dico al compilatore che deve prima farmi il risultato di Pulsante Avanti AND nOT Motore indietro AND pulsanteStopNC......il risultato di questo sarà poi messo in OR con Motore avanti. 

Tradotto in Ladder risulta essere questo:

Giovanni3.png.d0f558d53dc959f62ce1aa65f19f5e36.png

che è completamente diverso dalla versione precedente. 

 

Aggiungiamo ora un contatto proveniente per esempio da Hmi...

 

Giovanni5.png.d215c9a7a56ace725cc637ce696291bb.png

 

In St devi usare parentesi annidate per risolverlo. 

Diventerebbe quindi:

 

Giovanni6.png.5b9c94db2429785a5079ecfdbf8905c8.png

 

Scusami, mi accorgo ora che manca la chiusura della parentesi dopo Motore Indietro..chiedo venia ma l'ora comincia a farsi sentire:D

 

 

 

Adesso , prova a ragionare su quanto detto e prova asvolgere questo esercizio: traduci in ST il seguente rampo ladder:

 

Giovanni7.png.e9b71d006b56ecb82ff196e396d04108.png

 

In bocca al lupo;)

Modificato: da step-80
Link al commento
Condividi su altri siti

Giovanni Segreto

@step-80

Marcia:= (Pulsante 1 or pulsante 2 or pulsante 3) and not (pulsante 4) (pulsante 5 or pulsante 7) and pulsante 6. le priorirità sono da sx a dx? Comunque grazie!

Link al commento
Condividi su altri siti

L’esercizio prevedeva l’uso corretto delle parentesi. Tieni presente che non esiste una sola soluzione per raggruppare gli operandi. 
 

tipo potresti fare: 

 

Marcia:=
(P1 Or P2 Or P3) And

((Not P4 And (P5 Or P7) And P6);

 

ho raggruppato prima tutti gli or dei primi 3 pulsanti, poi messi in And col resto. 
 

ma non è sbagliato fare:

((P1 or P2 or P3) And not P4)

And

((P5 or P7) and P6). 
 

Per primi vengono risolti gli operandi di primo livello ; cioè quelli annidati piu profondamente e via via ci si sposta verso esterno:

 

((P1 or P2 or P3) And not P4)

And

((P5 or P7) and P6). 

 

si puó riassumere in

(P123 and not p4)

and

(p57 and p6) ; 

 

che successivamente si semplifica in: 

P1234 and P567. 

 

 

 

 

Modificato: da step-80
Link al commento
Condividi su altri siti

@Giovanni Segreto un consiglio spassionato: Scl può farti confusione se per ora non riesci a capire distintamente come ragiona il plc e come traduce quello che gli dai in pasto. Per questo il ladder è molto piu intuitivo e ti permette di capire meglio i meccanismi. Qindi in sostanza il concetto è: lascia perdere scl per ora e, se devi effettuare puramente logica booleana,usa il ladder . Imparerai molte cose che forse davi per scontate ma che in realtà non lo sono affatto. Se hai bisogno poi noi siamo sempre qua

Link al commento
Condividi su altri siti

1 ora fa, Giovanni Segreto ha scritto:

Prima or e poi and not?? 

 

Si, come ti dicevo l'importante è raggruppare in modo corretto ma non esiste un modo solo. 

 

((P1 or P2 or P3) And not P4)

Le parentesi in questo modo indicano che prima vuoi fare l'Or logico di P1,P2 e P3, il risultato lo metti in And con il negato di P4. 

 

Ma a questo punto mi sorge una domanda: conosci bene le porte logiche? Or, And, Not le dovresti avere fuori dalle orecchie.

Conosci la tecnica dell'autoritenuta?

Modificato: da step-80
Link al commento
Condividi su altri siti

Giovanni Segreto
1 ora fa, step-80 ha scritto:

Conosci la tecnica dell'autoritenuta?

Elettricamente è il contatto del relè che in chiusura mantiene la bobina eccitata anche dopo breve impulso ad esempio da pulsante. 

Sono un elettricista d automazione e con le porte logiche non ci lavoro però ho notato che con una traduzione dal inglese or = o and = e not=negazione 

si intuisce il significato. Ma non ci lavoro con le porte logiche quindi non mi sono immediate 😅 (mi sembra la traduzione dal inglese Sia di aiuto in aggiunta alla tabella della verità) 

 

@step-80 per porta logica si intende l assegnazione di una  uscita Q a patto che vengano rispettate determinate condizioni giusto? 

 

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