Vai al contenuto
PLC Forum


Somma per un Tabellone


xfiless

Messaggi consigliati

Salve il mio quesito è questo:

devo far comparire su un tabellone gigante una produzione totale di tre o piu linee di produzione, l'incremento del numero viene effettuato ad ogni volta che si chiude un contatto ,

ho pensato di utilizzare un vecchio plc S5 utilizzare gli ingressi per le linee e un uscita per la somma di tutte le linee ,mi date un aiuto poichè il problema nasce nel momento in cui tutte le linee contemporaneamente danno gli ingressi .

Grazie .

Modificato: da xfiless
Link al commento
Condividi su altri siti


Semplice, devi gestire contapezzi separati per ogni linea, incrementando una word (o Dword, secondo i limiti raggiungibili) sul fronte di salita dei singoli segnali.

Poi sommi i singoli contapezzi in un'unica variabile da visualizzare sul pannello.

Link al commento
Condividi su altri siti

Ciao flavio ,e grazie per avermi risposto ,l'uscita deve essere un bit esempio A0.0

posso avere es. 2 ingressi (E0.0;E0.1)che vengono trasferiti in 2 mw o dword differenti sommo le 2 mw ma non so poi come avere un impulso di A0.0 quanto sono la somma dei 2 ingressi.Grazie dell'aiuto.

Link al commento
Condividi su altri siti

ho utilizzato un ingresso ciascuno per l'incremento di in contatori (z1 e z2)che trasferiscono in 2 mword differenti mw200 e mword 100 le ho sommate (mw4)come in questo :

L MW100

L MW200

+F

T MW4

L MW4

L Z0

+F

UM 50.0 (mi sono creato un lampeggio )

zr z0 (conto indietro )

U M 50.0

=A 1.6 ,

mi date un aiuto?Grazie, Enzo.

Link al commento
Condividi su altri siti

:worthy: Perdonatemi, se insisto ma mi sono bloccato,come faccio una volta sommato le 2 variabili in mw4 a trasferire nell'uscita A1.6.

il valore del contatore Zx può è essere trasferito nella Mw, ma non posso trasferire il valore della mw nel contatore Zx,grazie .

Link al commento
Condividi su altri siti

Ciao flavio ,e grazie per avermi risposto ,l'uscita deve essere un bit esempio A0.0
Perdonatemi, se insisto ma mi sono bloccato,come faccio una volta sommato le 2 variabili in mw4 a trasferire nell'uscita A1.6.

il valore del contatore Zx può è essere trasferito nella Mw, ma non posso trasferire il valore della mw nel contatore Zx,grazie .

Scusa, ma proprio non riesco a capire cosa intendi.

Se vuoi trasferire il valore del conteggio in una uscita digitale, è chiaro che ciò non è possibile.

Una uscita digitale può assumere valori 0 oppure 1, e nient'altro.

Poi non capisco a cosa ti serva il contatore, come non capisco come tu voglia visualizzare il conteggio totale sul tabellone.

Questo tabellone comunica con il plc tramite seriale, oppure dispone solo di ingressi digitali?

Se dispone solo di ingressi digitali, come avviane la codifica per la visualizzazione del numero?

Cosa devi fare con l'unica uscita digitale che citi nei tuoi post?

Spiegati meglio, perché così proprio non si capisce nulla.

Link al commento
Condividi su altri siti

il conteggio totale del tabellone viene incrementato ad ogni impulso che glia arriva tramite un contatto di un rele ,la mia uscita dovrebbe pilotare questo rele ,che deve dare tanti impulsi quanti ne sono la somma degli impulsi degli ingressi.E scusami per la mia poco chiarezza.

Link al commento
Condividi su altri siti

Quindi quello di cui avresti bisogno è semplicemente di memorizzare gli impulsi in ingresso (che potrebbero anche essere simultanei) per generare impulsi in uscita separati.

Direi che i sistemi possono essere più di uno.

Potresti gestire un registro utilizzando le istruzioni di shift.

Per ogni impulso in ingresso effettui uno shift a sinistra della variabile e imposti alto l'ultimo bit a destra.

Se gestito correttamente, nel caso di tre impulsi simultanei in ingresso ti troveresti con i tre bit a destra alti.

Per l'attivazione dell'uscita devi solo controllare lo stato del bit a destra.

Se questo bit è alto, attivi l'uscita per un certo tempo. Trascorso questo tempo disattivi l'uscita. Fai partire un altro timer per essere sicuro che l'uscita rimanga bassa per un po' (se la riattivi subito il pannello rileva un solo impulso). Trascorso questo secondo tempo effettui uno shift a destra della variabile.

In questo modo avresti creato un registro di tipo LIFO (Last In First Out).

Lo stesso identico gioco lo puoi fare, invece che con lo shift, incrementando e decrementando il valore della variabile, e attivando l'uscita se il valore è maggiore di zero.

Link al commento
Condividi su altri siti

Salve, ho utilizzato 2 ingressi separati per incrementare 2 mw che poi le ho sommate in un unica mw

L MW100

L MW200

+F

T MW2

ho

:U E 0.0 ;

:UN M 0.0 ;

:= M 0.1 ;

:U E 0.0

:= M 0.0

:

:UN M 0.1 ; se non c'e' l'impulso...

:BEB ; ferma qui.

:L MW 2 ; altrimenti carica la word MW10

:SRW 1 ; scorri a destra di un posto

:T MW 2 ; la salvo

:U E 0.1 ;

:= M 10.7 ; assegna a M10.7

:BE

se controllo la variabile mw2 dovrei vedere scorrere i bit

non capisco dove commetto l'errore. :senzasperanza:

Link al commento
Condividi su altri siti

Devi decidere se utilizzare il sistema con scorrimento destra/sinistra oppure con incremento/decremento.

Uno esclude l'altro.

Link al commento
Condividi su altri siti

Allora, vediamo di spiegare passo per passo cosa dovresti fare.

1) rilevamento fronti di salita dei segnali provenienti dalle linee (e fin qui ci siamo)

2) sul fronte di salita del segnale della linea 1 esegui le seguenti operazioni:

- scorrimento a sinistra della variabile con l'istruzione SLW 1

- set del bit meno significativo (quello più a destra) della variabile. Attenzione che Siemens ordina i byte secondo lo standard Motorola. in una variabile da 16 bit (2 byte) il primo byte è quello a sinistra, ed il secondo è quello a destra. Esempio: se la tua variabile è MW10, questa sarà formata dai byte MB10 (byte più significativo, quello cioè a sinistra) e MB11 (byte meno significativo, quello cioè a destra). Per settare il bit meno significativo (quello a destra) dovrai settare il merker M11.0, e non M10.0.

Per semplificare un po', se sei sicuro che un registro di soli 8 bit è sufficiente (credo proprio di sì, dato che le linee sono 3) puoi lavorare con un solo byte, invece che con una word.

In questo caso, essendo il byte uno solo, non c'è il problema di considerare come sono disposti i byte.

Il codice per eseguire queste operazioni potrebbe essere il seguente (faccio l'esempio con la WORD MW10, poi vedi tu):

L MW10 //Carica nell'accumulatore MW10

SLW 1 //Effettua lo scorrimento a sx di un bit

T MW10 //Scrivi il risultato in MW10

UN M11.0 //Questa istruzione potrebbe essere omessa

S M11.0 //SET del bit meno significativo di MW10

3) sul fronte di salita del segnale della linea 2 ripeti le stesse identiche operazioni del punto 2.

4) sul fronte di salita della linea N ripeti le stesse identiche operazioni del punto 2.

Nota: ripetendo le operazioni, nel caso arrivassero dalle linee impulsi simultanei, verrebbero comunque registrati tutti.

5) controlli lo stato del bit meno significativo della word (nell'esempio M11.0) e, se è alto, attivi un timer (esempio T10)

6) trascorso il tempo di T10, attivi T11

7) se M11.0 è alto e T10 è basso (non è ancora trascorso tutto il tempo) attivi l'uscita per dare l'impulso al tabellone

8) trascorso anche il tempo T11 resetti T10 ed effettui lo shift a destra della variabile

Link al commento
Condividi su altri siti

Inserita: (modificato)
innanzitutto flavio grazie infinite della tua pazienza!ho eseguito in questo modo
1) rilevamento fronti di salita dei segnali provenienti dalle linee

U E0.0 // ingresso linea1

UN M0.0 //appoggio

= M0.1 f.salita linea 1

U E0.1 // ingresso linea1

UN M0.2 //appoggio

= M0.3 //f.salita linea 2

_________________________________________________

sul fronte di salita del segnale della linea 1 esegui le seguenti operazioni:

- scorrimento a sinistra della variabile con l'istruzione SLW 1

U M0.1 linea 1

L MW10

SLW 1 //Effettua lo scorrimento a sx di un bit

T MW10 //Scrivi il risultato in MW10

UN M11.0

S M11.0 //questo merker va a 1 per attimo e rimane sempre a zero anche quando M0.1 è 1,come anche il m10.7 e il m11.1 sono a zero(chiedo perchè nello stato della variabile non vedo i bit che scorrono?)

U M0.3 linea 2

L MW10

SLW 1 //Effettua lo scorrimento a sx di un bit

T MW10 //Scrivi il risultato in MW10

UN M11.0

S M11.0

controlli lo stato del bit meno significativo della word (nell'esempio M11.0) e, se è alto, attivi un timer (esempio T10)

6) trascorso il tempo di T10, attivi T11

7) se M11.0 è alto e T10 è basso (non è ancora trascorso tutto il tempo) attivi l'uscita per dare l'impulso al tabellone

8) trascorso anche il tempo T11 resetti T10 ed effettui lo shift a destra della variabile

U M11.O

LKT 035.1

SE T10

U T10

LKT 035.1

SE T11

U M11.0

UN T 10

= A1.1 // USCITA X TABELLONE

U T11

R T10

L MW10

SRW1

T MW10

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