Vai al contenuto
PLC Forum


Impianto semaforico


Messaggi consigliati

Inserito:
Salve, sono nuovo su questo forum ed anche nel mondo del PLC. Volevo sapere se qualcuno potesse aiutarmi. Devo gestire un impianto semaforico (non reale) di un incrocio, in KOP, con 4 semafori per le auto e 4 semafori per i pedoni e 4 richieste di attraversamento pedonale. Io uso STEP 7 5.5
I dati che devo usare sono i seguenti
Start                                 I 0.0    Avvio impianto semaforico
Notturno-Diurno               I 0.1    Cambio modalità semaforo
Richiesta pedonale1        I 0.2    Richiesta attraversamento pedonale
Richiesta pedonale2        I 0.3    Richiesta attraversamento pedonale
Richiesta pedonale3        I 0.4    Richiesta attraversamento pedonale
Richiesta pedonale4        I 0.5    Richiesta attraversamento pedonale
Princip.1 RED                  Q 0.0   Primo semaforo ROSSO via principale
Princip.1 YELLOW           Q 0.1   Primo semaforo GIALLO via principale
Princip.1 GREEN             Q 0.2   Primo semaforo VERDE via principale
Princip.PED.1 RED          Q 0.3  Primo semaforo pedoni ROSSO via principale
Princip.PED.1 Green        Q 0.4  Primo semaforo pedoni VERDE via principale
Princip.2 RED                   Q 0.5 Secondo semaforo ROSSO via principale
Princip.2 YELLOW            Q 0.6  Secondo semaforo GIALLO via principale
Princip.2 GREEN              Q 0.7  Secondo semaforo VERDE via principale
Princip.PED.2 RED           Q 1.0 Secondo semaforo PEDONI ROSSO via principale
Princip.PED.2 GREEN      Q 1.1 Secondo semaforo PEDONI VERDE via principale
Second.1 RED                  Q 1.2 Primo semaforo ROSSO via secondaria
Second.1 YELLOW           Q 1.3 Primo semaforo GIALLO via secondaria
Second.1 GREEN             Q 1.4  Primo semaforo VERDE via secondaria
Second.PED.1 RED          Q 1.5 Primo semaforo PEDONI ROSSO via secondaria
Second.PED.1 GREEN     Q 1.6 Primo semaforo PEDONI VERDE via secondaria
Second.2 RED                   Q 1.7 Secondo semaforo ROSSO via secondaria
Second.2 YELLOW            Q 2.0 Secondo semaforo GIALLO via secondaria
Second.2 GREEN              Q 2.1 Secondo semaforo VERDE via secondaria
Second.PED.2 RED           Q 2.2 Secondo semaforo pedoni ROSSO via secondaria
Second.PED.2 GREEN      Q 2.3 Secondo semaforo pedoni VERDE via secondaria

Allego immagine dell'incrocio per provare ad essere più chiaro;    https://imgur.com/Ol5uEQe
     
La richiesta pedonale deve far si che dopo qualche secondo il pedone possa procedere nella direzione stabilita, quindi facendo attivare il semaforo che ha di fianco ( si, so che è sbagliato)
Io ho provato ed ho fatto un codice dove gestivo solo i semafori delle auto e dei pedoni, ma in modo molto confusionario e non sono riuscito ad implementare le richieste pedonali. Qualcuno che ha già fatto questo tipo di esercizio può aiutarmi?? Grazie in anticipo.

Inserita:

Puoi fare un sistema a stati, es stato 1 passaggio da nord a sud, stato 2 notifica di fine passaggio da nord a sud, 3 tutto bloccato, 4 passaggio da est a ovest, 5 notifica fino passaggio ecc ecc

 Poi se vi sono richieste pedoni si gestisco es finito la fase 3 se c'è una richiesta memorizza non  si passerà alla 4 ma una per esempio alla 14

Inserita:

😂 È un esercizio scolastico? Lo fecero fare anche a me ben 17 anni fa... 

 

Io usai degli stati come suggerito da max.

Se lo divessi rifare oggi lo scriverei in scl... Ma tu hai espresso kop per cui lo rifarei come allora. 

Inserita:

Si più o meno scolastico. Ho iniziato un corso di appunto programmazione software industriale. Saresti in grado di rifarlo in KOP magari con questi stati e farmi vedere più o meno la logica? Almeno vedo se riesco a capirci qualcosa.. 😁😂

Inserita:

Un metodo alternativo potrebbe essere quello di usare un contatore, da incrementare ad intervalli regolari (es. ogni 100 ms), e legare lo stato delle lanterne al valore raggiunto dal contatore, con delle semplici comparazioni. Quando c'è una chiamata pedonale, si potrebbe incrementare il contatore più velocemente.

Inserita:
1 ora fa, Inferi ha scritto:

Si più o meno scolastico. Ho iniziato un corso di appunto programmazione software industriale. Saresti in grado di rifarlo in KOP magari con questi stati e farmi vedere più o meno la logica? Almeno vedo se riesco a capirci qualcosa.. 😁😂

 

Essendo scolastico preferisco che sia tu a sbatterci un po' la testa 😁

Io comunque ai tempi usavo i set/reset che comandavo con i fronti. Fatti una bozza su carta con i vari stati e poi lo trascrivi in KOP

 

16 minuti fa, batta ha scritto:

Un metodo alternativo potrebbe essere quello di usare un contatore, da incrementare ad intervalli regolari (es. ogni 100 ms), e legare lo stato delle lanterne al valore raggiunto dal contatore, con delle semplici comparazioni. Quando c'è una chiamata pedonale, si potrebbe incrementare il contatore più velocemente.

Ottima idea!

Magari inserire due contatori uno per il traffico e l'altro per i pedoni. Così non si perde la sequenza.

 

Inserita:

Comunque non ci ricavo mica un "voto" eh 😂

io già ne ho fatto uno, ma le richieste pedonali non sono riuscito a gestirle ed il docente quando ha visto il codice ci è rimasto un po e si è fatto una risata,tanto che mi sono complicato la vita nel farlo. Volevo vedere se ci fosse un modo semplificato per farlo, siccome lui ha detto che è un'esercizio da niente. Comunque grazie per i consigli, io ci provo lo stesso ovviamente 😁

Inserita:
15 minuti fa, Inferi ha scritto:

Comunque grazie per i consigli, io ci provo lo stesso ovviamente

 

Si poi magari pubblica il codice che ci si discute.

 

16 minuti fa, Inferi ha scritto:

Comunque non ci ricavo mica un "voto" eh

 

A maggior ragione è inutile ricevere l'esercizio svolto! A te serve imparare ad usare i PLC.

Inserita:

Almeno due strade da seguire ti sono state aperte, provaci poi se hai dubbi chiedi pure.

Inserita:

Prova a fare una bozza su carta degli stati che deve avere il tuo impianto semaforico. Fallo tipo macchina di Moore o flowchart. 

Poi lo posti e ne discuriamo. 

 

Ciao

Inserita:
3 ore fa, Inferi ha scritto:

ed il docente quando ha visto il codice ci è rimasto un po e si è fatto una risata

Questo comportamento del docente non è per nulla professionale. Anche perché, se l'alunno ha svolto male il compito, potrebbe dipendere dall'alunno che non ha appreso, ma potrebbe dipendere anche dal docente che non è stato in grado di trasferire l'insegnamento.
In ogni caso, all'alunno si possono (e si devono) far presenti tutti i suoi errori, ma mai ridere di lui.

Se posti il codice, penso che in più di uno saremo felici di darti dei consigli.

Inserita:

Siccome non saprei come farvi vedere il codice, vi passo il progetto fatto con STEP 7

https://fromsmash.com/HHD9M5g3OM-dt

 

Inserita:

Ho aperto il programma, ma non l'ho ancora analizzato (ora non ho tempo).
Da una rapida occhiata, penso si possa semplificare parecchio, cambiando completamente metodo.

In linea generale poi, vedo che hai fatto tutto in OB1 (main). L'OB1 dovrebbe servire solo per fare il richiamo ai vari blocchi di programma, e poco più.
Vedo poi che utilizzi molto le uscite anche in lettura. Meglio sarebbe programmare tutto in un blocco FB, usando memorie interne della FB, e andare a comandare una sola volta le uscite fisiche. Se non vuoi fare una FB, puoi fare una FC ed usare i merker come memorie, anche se la tendenza è di usare sempre meno i merker. Personalmente, come merker, utilizzo quelli di sistema e poco altro.

 

Queste dovrebbero essere le nozioni di base di un corso, prima ancora di mostrare come si inseriscono un contatto o una bobina. Se non vi è stato detto nulla al riguardo, mi sorge qualche dubbio sulla validità dell'insegnante.
La mia impressione è che vi sia stato insegnato come inserire contati, timer e bobine in un segmento, ma che nessuno vi abbia dato indicazioni su come strutturare un programma.
Forse, se hai sviluppato male il programma, la colpa non è tua.

Inserita:
4 ore fa, batta ha scritto:

Ho aperto il programma, ma non l'ho ancora analizzato (ora non ho tempo).
Da una rapida occhiata, penso si possa semplificare parecchio, cambiando completamente metodo.

In linea generale poi, vedo che hai fatto tutto in OB1 (main). L'OB1 dovrebbe servire solo per fare il richiamo ai vari blocchi di programma, e poco più.
Vedo poi che utilizzi molto le uscite anche in lettura. Meglio sarebbe programmare tutto in un blocco FB, usando memorie interne della FB, e andare a comandare una sola volta le uscite fisiche. Se non vuoi fare una FB, puoi fare una FC ed usare i merker come memorie, anche se la tendenza è di usare sempre meno i merker. Personalmente, come merker, utilizzo quelli di sistema e poco altro.

 

Queste dovrebbero essere le nozioni di base di un corso, prima ancora di mostrare come si inseriscono un contatto o una bobina. Se non vi è stato detto nulla al riguardo, mi sorge qualche dubbio sulla validità dell'insegnante.
La mia impressione è che vi sia stato insegnato come inserire contati, timer e bobine in un segmento, ma che nessuno vi abbia dato indicazioni su come strutturare un programma.
Forse, se hai sviluppato male il programma, la colpa non è tua.

Ok grazie. Si ancora non conosco perfettamente l'utilizzo degli FC o degli FB, per questo l'ho fatto tutto in OB1.

Questa è una versione aggiornata del software, così ho fatto funzionare anche la modalità notturna.

https://fromsmash.com/XkmQjIOhq~-dt

 

Inserita:

Inferi per favore non citare l'intero messaggio, limita la citazione ad un frase significativa. Citando per intero gli altri messaggi rendi la discussione di difficile lettura.

Inserita:
45 minuti fa, Inferi ha scritto:

Si ancora non conosco perfettamente l'utilizzo degli FC o degli FB, per questo l'ho fatto tutto in OB1.

Anche a questo mi riferisco quando sollevo dubbi sulla preparazione dell'insegnante.

A me capita solo occasionalmente di tenere corsi su plc, e mai a persone completamente a digiuno di plc.
Ma, se dovessi tenere un corso base sui plc Siemens, ancora prima di mostrare come si inserisce un contatto in un segmento in ladder, spiegherei come il PLC gestisce gli ingressi e le uscite (immagine I/O e periferia), e come il PLC elabora il programma (almeno OB1 e richiamo a blocchi FC-FB).
Poi, prima di chiedere agli "alunni" di scrivere un programma, darei indicazioni su come strutturare un programma, magari facendo qualche esempio. Solo dopo aver fornito le basi si può pretendere un qualche risultato.
Ripeto, forse mi sbaglio, non ho certo dati per poter esprimere un giudizio, ma la mia impressione è che siate un po' mandati allo sbaraglio.

Inserita:

Mi chiedo poi anche perché stiate facendo formazione con Simatic Manager e plc S7-300, che stanno quasi per andare in pensione.

Certo, i concetti della programmazione sono sempre validi, e i nuovi plc serie 1200/1500 non si discostano poi molto come filosofia di base dai loro predecessori.
Però, perché non partire col sistema di sviluppo attuale, ovvero il TIA? È fuori da parecchi anni, non si tratta di un prodotto appena uscito.

 

Inserita:
21 minuti fa, batta ha scritto:

Però, perché non partire col sistema di sviluppo attuale, ovvero il TIA? È fuori da parecchi anni, non si tratta di un prodotto appena uscito.

Non lo so. Il corso prevedeva questo e quindi ho voluto provare, siccome era gratuito.

Inserita:
6 minuti fa, Inferi ha scritto:

Il corso prevedeva questo e quindi ho voluto provare, siccome era gratuito.

 

E un corso regionale?

Inserita:

Più che guardare il codice, ho fatto una prova col simulatore, e mi pare che funzioni, anche se, come detto in precedenza, io seguirei un metodo completamente diverso.
Vorrei però complicarti un po' la vita: generalmente, per un breve istante c'è rosso da entrambi i lati, e il lampeggio pedonale dovrebbe iniziare prima del giallo per le auto (un pedone impiega più tempo di un'auto per attraversare).
Proprio per la gestione di tutti questi eventi trovo che incrementare una variabile ad intervalli regolari (di fatto il valore della variabile diventa il tempo trascorso) e delle semplici comparazioni renderebbe tutto più semplice.
Forse però non avete ancora parlato di variabili e di comparazioni, quindi devi fare tutto con i timer.

Potresti però seguire lo stesso questa filosofia: tutti i timer per una direzione partono insieme quando si accende il verde. Un timer attiva il lampeggio del verde pedonale, un altro il giallo, un altro il fine ciclo per una direzione. Terminato il ciclo per la direzione principale, con lo stesso metodo attivi i timer della direzione secondaria. Terminato il ciclo della direzione secondaria, riparti dall'inizio. Ci potrebbe essere un altro timer (uno per ogni direzione) per ritardare l'accensione del verde, in modo da tenere il rosso in entrambe le direzioni.
I valori di preset dei timer potrebbero essere calcolati. Per esempio, il preset del timer per l'accensione del giallo potrebbe essere il tempo totale del ciclo meno la durata desiderata per il giallo. Sempre che abbiate già affrontato le istruzioni di somma e di sottrazione. In caso contrario, imposti direttamente i valori di preset.
Esempio:

Direzione principale

- Ritardo accensione verde: 2 s

- Tempo per lampeggio verde pedonale: 50 s

- Tempo accensione giallo: 56 s

- Tempo totale ciclo: 60 s

 

Direzione secondaria:

- Ritardo accensione verde: 2 s

- Tempo per lampeggio verde pedonale: 30 s

- Tempo accensione giallo: 36 s

- Tempo totale ciclo: 40 s

 

Unico problema, lavorando con in timer, diventa difficile gestire la chiamata pedonale.
Il problema sarebbe invece di facile gestione usando una variabile come tempo trascorso e comparazioni.

Inserita:
6 ore fa, Livio Orsini ha scritto:

E un corso regionale?

Si

 

5 ore fa, batta ha scritto:

Più che guardare il codice, ho fatto una prova col simulatore, e mi pare che funzioni

Si funziona, ma se tipo tengo attiva la richiesta pedonale (tipo nella realtà il tasto viene tenuto premuto) il ciclo non riparte

 

5 ore fa, batta ha scritto:

Unico problema, lavorando con in timer, diventa difficile gestire la chiamata pedonale.
Il problema sarebbe invece di facile gestione usando una variabile come tempo trascorso e comparazioni.

Io ci provo a migliorarlo, man mano che andrò avanti cercherò di renderlo sempre più semplice e magari entrare nell'ottica di una logica diversa :D

Inserita:
9 ore fa, Inferi ha scritto:

ma se tipo tengo attiva la richiesta pedonale (tipo nella realtà il tasto viene tenuto premuto) il ciclo non riparte

 

 

Invece di usare lo stato dell'ingresso del pulsante, devi usare il fronte. Ovvero senti quando il pulsante passa da aperto a chiuso o viceversa. Se poi pemane nello stato anche per parecchi minuti nonnha importanza perchè lo ignori.

Inserita:

Però secondo me se avrei un piccolo esempio scritto in STEP 7 riuscirei a capirci meglio qualcosa.

 

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