Vai al contenuto
PLC Forum


Contatore Siemens S7-400


antho

Messaggi consigliati

Buongiorno a tutti!

 

ho una linea industriale rotoli con un Siemens S7-400 come Plc e un Robox come controllo assi.

Sull' Hmi ho in visualizzazione i metri di carta avvolti (valore istantaneo, Dbw passata dal Robox 

e non gestibile da Plc) che si resettano ogni volta che la macchina fa lo scambio. Avrei bisogno 

di usare questo valore per fare una sommatoria infinita per arrivare al numero totale di metri

di carta consumati, che non si resetti neanche con lo spegnimento della macchina. Ho cercato

tra le varie funzioni ma non riesco a trovare niente  con la memoria che possa essermi utile

per il lavoro. Avete qualche idea? Grazie

Link al commento
Condividi su altri siti


Livio Orsini
5 ore fa, antho ha scritto:

Siemens S7-400 come Plc e un Robox

 

Robox suscita ricordi di gioventù, era un controllo molto performante basato su micro inttel.

 

Comunque, se non ricordo male, il 400 dovrebbe avere un'area di memoria ritentiva, baste che memorizzi il risultato della somma in quell'area.

Link al commento
Condividi su altri siti

Ricordi di gioventu'? Sei mica nativo di Lucca?:) So che il Robox era molto usato soprattutto in queste zone

nel settore cartario. Riguardo alla memoria ritentiva c'è ma riguarda i Merker e i Timer. Perlomeno è quella che

ho trovato io, una inerente in cui posso andare a scrivere o a muovere il dato dei metri non riesco a trovarla.

Link al commento
Condividi su altri siti

Livio Orsini
19 minuti fa, antho ha scritto:

Sei mica nativo di Lucca?

 

No Robox è (era?) una piccola azienda della provincia di Novara, ma appena ad Ovest del Ticino, vicinissima a Varese (dove vivo).

Nel 1987 o 1988 (non ricordo bene) ero impiegato in un'azienda che aveva un accordo con Robox e trascorsi circa un meso da loro; poi sino ad un ventina di anni fa avevo ancora sporadici contatti con quelcuno di loro.

 

Il 400 l'ho usato poco, inoltre son più di 20 anni che non mi occupo di PLC, però ricordo che c'erano DB ritentivi. Devi solo crearti un DB dove memorizzare i tuoi dati.

Link al commento
Condividi su altri siti

Si' ma io non riesco a "congelare" il valore durante il funzionamento. Cercando di essere piu' chiaro:

con l' ADD I addiziono la DBW10 (quella che mi passa il robox) ad esempio con zero e in uscita metto la DBW20

che invece mi rappresenta i metri totali. Pero' una volta che la macchina scambia e la DBW10 mi torna

a zero va a zero anche la DBW20. Magari esiste un passaggio semplice che non faccio e non ne sono a conoscenza:

io sono in manutenzione e faccio piu' che altro diagnostica, ho dei limiti nella programmazione :)

Link al commento
Condividi su altri siti

Livio Orsini
10 minuti fa, antho ha scritto:

Magari esiste un passaggio semplice che non faccio

 

Come ti è stato detto devi crearti un DB ad hoc ed assicurarti che sia in area ritentiva o che sia stato spuntata l'opzione per la ritentività. Non so essere più preciso perchè non ricordo più i dettagli di come si opera sul 400 ( ma anche su altri PLC).

Link al commento
Condividi su altri siti

if valorerobot = 0 then
   if flag = FALSE then
       totale = totale + ultimo
       flag = TRUE
    end_if
else
    ultimo = valorerobot

    totaleistantaneo = totale + ultimo
    flag = FALSE
end_if
    

 

con gli opportuni ; : o quantaltro serva

 

valorerobot è quello che ti passa il robot

totale sarà ritentivo

totaleistantaneo può anche non essere ritentivo

 

totale si aggiorna solo quando il robot rimette a 0 il suo conteggio

totaleistantaneo è istantaneo

 

lo so che potevo fare di meglio ma mi aspetta cena.... :)

 

ciao

Modificato: da drn5
Link al commento
Condividi su altri siti

8 ore fa, antho ha scritto:

avviene tramite un encoder ma come ti dicevo e' gestito dal robox e noi non possiamo toccarlo.

Ipotetica soluzione alternativa (senza fare modifiche o intrugli strani sulla parte Robox): contare gli impulsi forniti dall'encoder, se è possibile farlo, sommarli e memorizzarli.

Dividendo il numero di impulsi per la risoluzione dell'encoder ottieni il numero di giri compiuti.

Devi poi misurare, o calcolare, la lunghezza di avvolgimento corrispondente a un giro encoder.

Una volta saputo questo valore, ti basta moltiplicarlo per il numero di giri totali fatti per avere la lunghezza totale avvolta.

In questo modo puoi "trasdurre" l'uscita dell'encoder (impulsi) in un valore corrispondente ad una grandezza fisica (lunghezza).

 

Ciao

mc1988

 

 

Link al commento
Condividi su altri siti

Livio Orsini
3 ore fa, mc1988 ha scritto:

potetica soluzione alternativa (senza fare modifiche o intrugli strani sulla parte Robox): contare gli impulsi forniti dall'encoder, se è possibile farlo, sommarli e memorizzarli.

 

Ha già tutto nel PLC deve solo memorizzare la somma incrementale in un'area ritentiva.

Link al commento
Condividi su altri siti

Ciao mc1988,

 

 

no, non ho il dato, e non posso ricavarlo, degli impulsi contati dall' encoder. 

Il dato che ho sono i metri istantanei e devo elaborarlo in qualche modo col Plc.

Link al commento
Condividi su altri siti

19 ore fa, drn5 ha scritto:

if valorerobot = 0 then
   if flag = FALSE then
       totale = totale + ultimo
       flag = TRUE
    end_if
else
    ultimo = valorerobot

    totaleistantaneo = totale + ultimo
    flag = FALSE
end_if
    

 

con gli opportuni ; : o quantaltro serva

 

valorerobot è quello che ti passa il robot

totale sarà ritentivo

totaleistantaneo può anche non essere ritentivo

 

totale si aggiorna solo quando il robot rimette a 0 il suo conteggio

totaleistantaneo è istantaneo

 

lo so che potevo fare di meglio ma mi aspetta cena.... :)

 

ciao

L' S7-400 pero' non utilizza ST come linguaggio bensi' KOP o AWL.

E' possibile convertire cio' che hai scritto in suddetti linguaggi?

Link al commento
Condividi su altri siti

21 ore fa, antho ha scritto:

con l' ADD I addiziono la DBW10 (quella che mi passa il robox) ad esempio con zero e in uscita metto la DBW20

che invece mi rappresenta i metri totali. Pero' una volta che la macchina scambia e la DBW10 mi torna

a zero va a zero anche la DBW20

Direi che non ci si può aspettare nulla di diverso. Se sommi zero al valore di DBW10, il risultato sarà sempre il valore di DWB10.
È su quello "zero" che devi agire! Questa è la variabile che deve essere ritentiva (se è la variabile di un DB, di default è già ritentiva).
Una variabile nella quale memorizzare i metri precedentemente fatti.
Supponiamo che questa variabile sia la DBW24 (di un non meglio identificato DB).
Devi capire qual è l'evento che ti azzera la DBW10 e, subito prima di azzerare la DBW10, devi sommare al valorea attuale di DBW24 il valore di DBW10, e mettere il risultat ancora in DBW24 (incrementi DBW24 del valore di DBW10).
Poi, nella DBW20, metti la somma tra DBW24 (metri memorizzati) e DW10 (metri in corso).

 

Se l'unico od che hi per ccorgerti dello scambio è la DBW10 che ritorna a zero, devi usare una strategia leggermente diversa.

Supponiamo sempre che DBW24 sia la tua variabile di memoria metri fatti, DBW20 ls somma tra metri memorizzati e metri in corso, e DBW10 i metri in corso che ti arrivano da Robox.

Sommi in continuo DBW24 + DBW10 e metti il risultato in DBW20.
Nell'istante in cui DBW10 ritorna a zero, prima di fare la somma di cui sopra, copi DBW20 in DBW24.

Modificato: da batta
Link al commento
Condividi su altri siti

// Calcolo variazione dall'ultima scansione

L DB(ROBOX).DBWxx     // Contametri da ROBOX

L DBx.DBW0     // memo contatore ROBOX

-I

T DBx.DBW2    // variazione dall'ultima scansione

 

L DB(ROBOX).DBWxx     // Contametri da ROBOX

T DBx.DBW0     // memo contatore ROBOX

 

//Incremento il contatore

U(

L DBx.DBW2    // variazione dall'ultima scansione

L 0

>I

)

SPBN M000

L DBx.DBD4    // Contatore generale

L DBx.DBW2    // variazione dall'ultima scansione

+D

T DBx.DBD4    // Contatore generale

M000: nop 0

 

 

 

Puoi farlo girare a tempo ciclo o ogni secondo.

Ogni volta calcola la differenza dall'ultima scansione di programma. se è positiva la somma al contatore generale.

Anche se il contatore è un doppio intero a seconda della velocita della macchina fra qualche hanno potrebbe resettarsi

 

Link al commento
Condividi su altri siti

Il 9/3/2023 alle 15:32 , batta ha scritto:

Direi che non ci si può aspettare nulla di diverso. Se sommi zero al valore di DBW10, il risultato sarà sempre il valore di DWB10.
È su quello "zero" che devi agire! Questa è la variabile che deve essere ritentiva (se è la variabile di un DB, di default è già ritentiva).
Una variabile nella quale memorizzare i metri precedentemente fatti.
Supponiamo che questa variabile sia la DBW24 (di un non meglio identificato DB).
Devi capire qual è l'evento che ti azzera la DBW10 e, subito prima di azzerare la DBW10, devi sommare al valorea attuale di DBW24 il valore di DBW10, e mettere il risultat ancora in DBW24 (incrementi DBW24 del valore di DBW10).
Poi, nella DBW20, metti la somma tra DBW24 (metri memorizzati) e DW10 (metri in corso).

 

Se l'unico od che hi per ccorgerti dello scambio è la DBW10 che ritorna a zero, devi usare una strategia leggermente diversa.

Supponiamo sempre che DBW24 sia la tua variabile di memoria metri fatti, DBW20 ls somma tra metri memorizzati e metri in corso, e DBW10 i metri in corso che ti arrivano da Robox.

Sommi in continuo DBW24 + DBW10 e metti il risultato in DBW20.
Nell'istante in cui DBW10 ritorna a zero, prima di fare la somma di cui sopra, copi DBW20 in DBW24.

Implementato e funzionante. Grazie! E' la seconda volta che mi sei molto di aiuto, se passi da Lucca fammi sapere che hai un aperitivo pagato.

Link al commento
Condividi su altri siti

2 ore fa, antho ha scritto:

Implementato e funzionante. Grazie! E' la seconda volta che mi sei molto di aiuto, se passi da Lucca fammi sapere che hai un aperitivo pagato.

Felice di esserti stato di aiuto.

Anche il metodo proposto da @p.fabio funziona.

Link al commento
Condividi su altri siti

  • 3 weeks later...
Il 10/3/2023 alle 21:03 , batta ha scritto:

Felice di esserti stato di aiuto.

Anche il metodo proposto da @p.fabio funziona.

Il suggerimento che mi hai hai dato come ti ho scritto è funzionante ma soltanto se al posto dei metri istantanei uso gli scambi

macchina e moltiplico il valore uscente per il numero di metri richiesti per ciascuno scambio. Avrei bisogno pero' di un valore piu' preciso perche' in questo modo

mi vanno persi i metri della steccata in corso. Mi spiego meglio: la macchina ad esempio mi scambia ogni 100 metri ma io voglio avviare la lubrificazione

ogni 550: fino a 500 con il calcolo sovra descritto riesco a sommare ma se metto un comparatore per avviarla con 550 questo mi esegue la funzione allo scambio

successivo, ossia a 600 metri, e perdo 50 metri di carta nel calcolo. Per cui avrei bisogno come ti ho detto di farlo direttamente coi metri ma non mi funziona. Ho messo in allegato gli  screenshot dei segmenti della parte di programma che ho fatto (usando i metri)i darci un' occhiata e magari mi dici dove sbaglio? Grazie

 

 

Segmento119.jpg

Segmento120.jpg

Segmento121.jpg

Link al commento
Condividi su altri siti

 

Il 31/3/2023 alle 09:12 , batta ha scritto:

Devi descrivere meglio cosa sono le variabili e da dove arrivano.

M178.1 Ciclo di lubrificazione che deve essere attivato a un tot di metri e durante il quale non deve essere effettuato il conteggio dei metri stessi

DB56.DBW92 Numero di metri istantanei log fatti dalla macchina che arrivano dal Robox

DB56.DBW70 Variabile di memoria metri fatti

DB56.DBW224 Somma tra metri memorizzati e metri in corso

DB56.DBW124 Numero di metri richiesti per ogni log da scheda di produzione

DB56.DBW256 Numero di metri inizio finestra da prendere come riferimento prima che la DBW92 torni a zero.

Modificato: da antho
Link al commento
Condividi su altri siti

Tu, da Robox, ricevi i metri istantanei. Per le tue operazioni, ti devi creare dei contatori partendo da questo unico dato che ti arriva da Robox.
Come hai creato un contatore metri totali aggiornando una variabile di offset, allo stesso modo ti dovrai creare dei contatori per gestire la lubrificazione.
Prova ad usare il metodo suggerito da @p.fabio

Link al commento
Condividi su altri siti

3 ore fa, batta ha scritto:

Tu, da Robox, ricevi i metri istantanei. Per le tue operazioni, ti devi creare dei contatori partendo da questo unico dato che ti arriva da Robox.
Come hai creato un contatore metri totali aggiornando una variabile di offset, allo stesso modo ti dovrai creare dei contatori per gestire la lubrificazione.
Prova ad usare il metodo suggerito da @p.fabio

Ok provo. Pero' come mai secondo te quello che ho messo sopra non funziona? Perche' come ti ho scritto

la cosa strana è che se al posto dei metri istantanei metto gli scambi macchina e poi moltiplico per i metri richiesti

per ogni log da scheda di produzione conta tutto correttamente.

 

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