Vai al contenuto
PLC Forum


Creazione Fb


niky

Messaggi consigliati

ragazzi una domanda:

devo realizzare un blocco FB in step5 , ma non uso lo step 5 da tempo.

ho 6 sensori collegati rispettivamente a 6 ingressi digitali. (E1.0 - E1.1 - E1.2 - E1.3 - E1.4 - E1.5)

tali ingressi controllano la presenza o meno di alcuni elementi in un prodotto.

ho a che fare con 6 tipologie di prodotto quindi per ogni prodotto cambiano i particolari da controllare,di conseguenza cambiano gli ingressi.

ho un selettore a 6 posizioni dove indico al programma la tipologia di prodotto che la macchina sta producendo. ingressi: (E0.0 - E0.1 - E0.2 - E0.3 - E0.4 - E0.5)

Per il prodotto 1 : controllo presenza ingressi (E1.0 )

Per il prodotto 2 : controllo presenza ingressi (E1.0 - E1.1)

Per il prodotto 3 : controllo presenza ingressi (E1.0 - E1.1 - E1.2)

Per il prodotto 4 : controllo presenza ingressi (E1.0 - E1.1 - E1.2 - E1.3)

Per il prodotto 5 : controllo presenza ingressi (E1.0 - E1.1 - E1.2 - E1.3 - E1.4)

Per il prodotto 6 : controllo presenza ingressi (E1.0 - E1.1 - E1.2 - E1.3 - E1.4 - E1.5)

se il prodotto controllato presenta una mancanza di almeno un ingresso deve andare alto il merker (M0.0 = memoria di scarto)

io stavo pensando di realizzare un programma che mi effettua dei salti in funzione del prodotto che devo controllare: ESEMPIO

U E0.0 SPB M001

U E0.1 SPB M002

U E0.2 SPB M003

U E0.3 SPB M004

U E0.4 SPB M005

U E0.5 SPB M006

M001:

UN E0.0

= M0.0

M002:

UN(

U E0.0

U E0.1

)

= M0.0

.

.

.

.

.

.

.

.

BE

ho pensato a questa soluzione, se potrebbe essere giusta la sintassi corretta quale potrebbe essere?

oppure se pensate ad un'altra soluzione mi aiutereste a realizzarla?

Link al commento
Condividi su altri siti


Il concetto potrebbe andare bene, ma devi sistemare un po' il programma.

Per esempio, prima di tutte le etichette M001, M002....M006, devi mettere un salto non condizionato (SPA) che ti mandi alla fine di tutti i controlli, altrimenti esegui le istruzioni anche quando non dovresti.

Il controllo che fai dopo M001 praticamente non ha senso: a quell'etichetta ci vai solo se E0.0 è alto, quindi controllare che non sia basso non serve.

Per i controlli successivi vale quanto appena detto per l'ingresso che ti manda a quel controllo, mentre devi controllare lo stato di tutti gli ingressi che precedono, usando però degli OR e non degli AND.

Link al commento
Condividi su altri siti

A parte le inesattezze del tuo listato, mi sembri un po confuso, per esempio con U E0.0 SPB M001 salti a M001 quando E0.0=TRUE, ma in M001 cosa fai? ti aspetti che E0.0 possa essere FALSE ? :blink:

E poi i salti casomai dovrebbero essere indicizzati dalla tipologia di prodotto e non dagli ingressi dei selettori.

Cos'è che ti identifica la tipologia del prodotto ? un byte con valori da 1 a 6 ? oppure 6 bit di cui uno solo è true ?

Se p.es. identifichi il prodotto con 6 bit (da M10.0 a M10.5) puoi fare così:

U M10.0
UN E1.0
O
U M10.1
UN E1.0
UN E1.1
O
U M10.2
UN E1.0
UN E1.1
UN E1.2
O
U M10.3
UN E1.0
UN E1.1
UN E1.2
UN E1.3
O
U M10.4
UN E1.0
UN E1.1
UN E1.2
UN E1.3
UN E1.4
O
U M10.5
UN E1.0
UN E1.1
UN E1.2
UN E1.3
UN E1.4
UN E1.5
= M0.0
Se identifichi il prodotto con un byte (MB10) puoi fare così:
L MB10
L KF+6
!=F
SPB L6
DEC 1
!=F
SPB L5
DEC 1
!=F
SPB L4
DEC 1
!=F
SPB L3
DEC 1
!=F
SPB L2
DEC 1
!=F
SPB L1
SPA L0


L6: ON E1.0
L5: ON E1.1
L4: ON E1.2
L3: ON E1.3
L2: ON E1.4
L1: ON E1.5
= M0.0
L0: ....

Quest'ultimo codice non sono sicuro al 100% che funzioni ;)

Link al commento
Condividi su altri siti

scusami ma ho sbagliato il messaggio,volevo modificarlo ma non ho trovato come fare,comunque il senso del mio discorso è quello ,anche perchè lo hai centrato pienamente e solo che non ho capito il secondo esempio:

DEC 1

!=F

SPB L5

DEC 1

!=F

SPB L4

DEC 1

!=F

SPB L3

DEC 1

!=F

SPB L2

DEC 1

!=F

SPB L1

SPA L0

mi sfugge questa sintassi, "DEC 1"

Link al commento
Condividi su altri siti

Hai ragione a non capire, è che ormai mi sono "convertito" allo step 7, devi scrivre D 1 al posto di DEC 1.

In pratica decremento ACCU1 (KF6) di 1 lasciando inalterato ACCU2 (MB10) e rifaccio il confronto.

E' un bel modo per risparmiare un mucchio di istruzioni :)

p.s. in step7 c'è anche il salto indicizzato alle etichette ma non ricordo più se nel dinosauro s5 c'è questa istruzione.

Link al commento
Condividi su altri siti

ho un selettore a 6 posizioni dove indico al programma la tipologia di prodotto che la macchina sta producendo. ingressi: (E0.0 - E0.1 - E0.2 - E0.3 - E0.4 - E0.5)
Semplice, utilizza una struttura come questa:

     UN E 0.0   // se E 0.0 = 1, eseguo il blocchetto e termina.
     SPB M001
     ..
     ..
     .
     BEB
M001:UN  E 0.1    
     SPB M002
     ..
     ..
     .
     BEB
M002:UN  E 0.2    
     SPB M003
     ..
     ..
     .
     BEB
M003:UN  E 0.3    
     SPB M004
     ..
     ..
     .
     BEB
M004:UN  E 0.4   
     SPB M005
     ..
     ..
     .
     BEB
M005:UN  E 0.5    
     SPB M006
     ..
     ..
     .
     BEB
M006:UN  E 0.6    
     SPB M007
     ..
     ..
     .
     BEB
M007:BE

Link al commento
Condividi su altri siti

  • 3 weeks later...

Mi autoquoto:

in step7 c'è anche il salto indicizzato alle etichette ma non ricordo più se nel dinosauro s5 c'è questa istruzione

Risposta:

Lo puoi fare anche con S5 il salto indicizzato... mi è passato davanti al naso giusto oggi mentre stavo modificando un programma.

Supponiamo di identificare la tipologia di prodotto con una Word (MW10) che vale da 1 a 6

B MW10
SPA =L0
SPA =L1
SPA =L2
SPA =L3
SPA =L4
SPA =L5
SPA =L6

L6: ON E1.0
L5: ON E1.1
L4: ON E1.2
L3: ON E1.3
L2: ON E1.4
L1: ON E1.5
= M0.0

L0: ...

Questo codice mi sembra molto simpatico ;)

E come dice Batta... W L'AWL !

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