Vai al contenuto
PLC Forum


S7200 - Librerie Utente E Biblioteche


aacciavatti

Messaggi consigliati

Ciao ragazzi, io faccio il programmatore di macchine per assemblaggio e avvitatura, mi trovo a dover inserire dei contatori per i pezzi buoni e scarti

(azzerati all'accensione oppure permanenti per indicare intervalli di manutenzione).

Il problema si ha quando capita di avere macchine molto veloci (tipo 2 ciclo al secondo) che lavorano su 3 turni di 8 ore pertanto sono più di 170000 cicli al giorno. Volevo fare un contatore fino al milione che poi al raggiungimento del milione di cicli mettesse “1” in un’altra variabile e resettasse le unità:

VD10: 0 milioni di cicli

VD14: 999999 cicli attuali

+1

VD10: 1 milioni di cicli

VD14: 0 cicli attuali

Visto che la cosa si ripete in ogni applicazione ho deciso di creare una SBR da inserire come libreria.

Fatto tutto, è funzionante, ma se inserisco 2 o più blocchi mi conta uguale su tutti…

Non so se mi spiego… se ho:

I0.1 che mi conta +1 sul primo contatore e il valore è VD 10 per i milioni e VD 14 per le unità e

I0.2 che mi conta +1 sul secondo contatore e il valore è VD 18 per i milioni e VD 12 per le unità

In entrambe le Dword VD 14 e 12 a ogni impulso di I0.1 e/o I0.2 mi conta +1…

Quindi se volessi usare un contatore per i pezzo OK e l’altro per i NOK mi troverei gli stessi valori…

Premetto che è la prima volta uso le librerie e ho usato le Variabili Local impostabili nella tabellina alta in MicroWin…

Sicuramente è una **** la soluzione ma mia affido a voi in quanto più esperti. ;)

Gazie

Alessandro

Link al commento
Condividi su altri siti


Gianmario Pedrani

E normale, nel senso che tu hai utilizzato delle variabili temporanee, questo comporta che se hai 2 richiami, le variabili si sovrappongono, per fare quello che vuoi fare tu devi usare nell'interfaccia dei blocchi variabili di tipo input-output in questo modo a ogni richiamo passi zone di memoria differenti, e risolvi il tuo problema

ciao.

Link al commento
Condividi su altri siti

zanellatofabio

Ciao , non ci ho capito molto , ma

VD 18 per i milioni e VD 12 per le unità

forse volevi scrivere VD22 .

Se dici che il problema è richiamando 2 o + volte la stessa SBR la mia domanda è :

la scrittura di vd10 e vd14 e' come e' fatta ?

Ci sono variabili in/out passate alla SBR ?

IN generale se fai una SBR richiamabile + volte che deve esegue un qualcosa su una VD qualsiasi :

dichiari In/out la variabile VD pippo

poi nel codice sciverai l' operazione su pippo , del tipo se ho il bit tal dei tali carica pippo sommaci 1 e trasferisci il risultato su pippo stessa .

nel richiamo della SBR dichiarerai pippo come VD1000 nel primo richiamo , VD1004 nel secondo richiamo ecc ecc .

Cosi avrai che VD1000 conta i pezzi nel primo richiamo della SBR , VD1004 sara' invece il secondo contatore ecc ecc .

Questo era solo un esempio per chiarire , nel tuo caso avrai 2 variabili locali una per i clcli attuali e una per i milioni di cicli ...

Ops ho risposto assieme a Gianmario , ..... pardon

Modificato: da zanellatofabio
Link al commento
Condividi su altri siti

E' come dice Gianmario. Le variabili che passi alla subroutine devi dichiararle IN_OUT.

Non sono sicuro però che questa subroutine ti serva a molto. Hai considerato che con una DINT arrivi a contare fino a +2147483647 cicli?

A due cicli al secondo, 24 ore su 24, 7 giorni su 7, fanno quasi 35 anni di lavoro, senza bisogno di complicarsi la vita con doppi conteggi.

Link al commento
Condividi su altri siti

Ciao! Grazie a tutti per le risposte!

VD12 in realtà è un errore, intendevo VD22

Per quanto riguarda si, ci ho pensato dopo al fatto che una DWord permette di contare un bel po' di cicli, ma visto che c'ero e che l'info mi torna utile in altri case ho postato lo stesso il problema!

Comunque l'AWL è questo:

Network 1

LD L0.0

EU

+D 1, LD5

Network 2

LDD= LD5, 1000000

+D 1, LD1

AENO

MOVD 0, LD5

Network 3

LD L0.1

EU

MOVD 0, LD1

AENO

MOVD 0, LD5

Grazie ancora a tutti!

Ale

Link al commento
Condividi su altri siti

C'è qualcosa che non mi torna. Facciamo un esempio:

1) Creo SBR_0 che contiene anche la variabile PIPPO di tipo TEMP

2) La richiamo una prima volta

3) La richiamo una seconda volta

In questo programma la variabile PIPPO ha sempre lo stesso valore?

Io credo di no, come per CX-Programmer di Omron troverei sensato che ogni TEMP fosse legata alla sua istanza di richiamo.

Altrimenti a che cosa servono le TEMP?

Purtroppo non ho un S7-200 qui per fare una prova...

Sbaglio qualcosa?

Ciao a tutti.

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