Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Contatore ZÄhler E Codifica Bcd.


Messaggi consigliati

Inserito:

Salve, premetto di essere un neofita assoluto del mondo dei PLC e di dovermi occupare per motivi di studio del PLC Siemens S7-300, con cpu 314c-2dp; data la mia scarsa conoscenza di alcuni aspetti della programmazione Ladder e dell'uso dei PLC vi chiedo fin da adesso venia per eventuali errori del mio post.

Vorrei che nel mio codice ladder fosse possibile contare il numero di volte che un ingresso digitale si presenta in ingresso al plc. Dalla documentazione ufficiale ho visto che è disponibile il contatore up/down ZÄHLER il quale conta in avanti/all'indietro".

L'uscita del function block in questione può essere memorizzata nel parametro denominato CV_BCD, che altro non è che una word e rappresenta il "Valore di conteggio attuale (formato BCD)".

Il problema che pongo alla Vostra attenzione è il seguente:

Come dovrei fare per poter rappresentare questo valore così ottenuto in uscita interfacciandolo ad un chip 4511 che comanda un display a 7 segmenti (... ebbene si, mi interessa solo contare fino a 9)?

Il chip 4511 è un "BCD to 7segment decoder driver", che decodifica il codice BCD in ingresso (che viaggia su 4 fili, uno per ogni cifra binaria) e in uscita permette di pilotare i 7 segmenti del display.

Devo quindi usare 4 uscite del plc per comandare questo chip? E se si, come posso far si che in Ladder una variabile che contenga il valore del conteggio fatto con lo ZÄHLER sia data in uscita al PLC in maniera però da arrivare tramite 4 fili in codifica BCD al 4511 e di li al display?

Spero di essere stato quanto + chiaro possibile, e di essere riuscito a trarre dalla mia confusione qualche domanda sensata, al quale spero qualcuno di Voi saprà darmi una risposta per uscirne fuori.

:(


Gabriele Corrieri
Inserita:

Ciao

presumo che tu sia all'università :D

Per il resto, visto che devi contare fino a 9 (se vuoi fino a F) ti basta sicuramente un contatore (Z), che conta fino a 999, anche se ha un'uscita a 16bit, in pratica, visto che usi solo i primi 4 bit puoi adoperare sia DUAL che DEZ.

      U     E      0.0
      ZV    Z      1
      U     E      0.1
      ZR    Z      1
      U     E      0.2
      L     C#9
      S     Z      1
      U     E      0.3
      R     Z      1
      L     Z      1
      T     MW     0
      LC    Z      1
      T     MW     2
      NOP   0

questo è il codice AWL visualizzabile anche in KOP, che è è un contatore freewheeling da 0 a 999, con preset a 9, e reset a 0,

E 0.0 - conteggio avanti

E 0.1 - conteggio indietro

E 0.2 - ingresso di preset

E 0.3 - ingresso di reset

MW0 - uscita esadecimale

MW2 - uscita BCD

in pratica tu avrai da limitare il campo d'azione, ossia quando arrivi a 10 (BCD) o A (binario) dovrai resettare il contatore, siccome hai bisogno di un solo display, 7 segmenti, ti bastano i 4 bit (nibble) meno significativi di MB1, o di MB3.

Altra nota ... il plc esce con segnali 0...24V, il 4511, mi pare accetti segnali fino a 15V, e comunque non superiori alla sua alimentazione, dovrai limitare i segnali per evitare di distruggere il 4511.

... ma non è più semplice farlo decodificare dal PLC il BCD-7 segmenti? è una routine abbastanza semplice e di sola logica booleana, con un blocco di 8 uscite comandi i 7 segmenti e il punto decimale, con l'ausilio di solo 8 resistenze da 2200 Ohm, e un display a catodo comune.

Ciao

Matteo Montanari
Inserita:

l'uscita BCD del contatore, CV_BCD deve essere associata ad una word, quindi 16 bit, quindi 4 blocchi di 4 bit ciascuno.

questi 4 bit rappresentano la cifra in BCD, quindi Binario (da 0 a 9).

il valore della word ad esempio la Word MW0 la trasferisci alle uscite che sono interfacciate con il chip 4511

sapendo che:

0000 -> 0

0001 -> 1

0010 -> 2

0011 -> 3

0100 -> 4

0101 -> 5

0110 -> 6

0111 -> 7

1000 -> 8

1001 -> 9

puoi crearti tanti segmenti per pilotare le tue uscite (supponiamo il canale A1.x)

U M1.0

= A1.0 -> BIT 0 (meno significativo)

U M1.1

= A1.1 -> BIT 2

U M1.1

= A1.1 -> BIT 4

U M1.3

= A1.3 -> BIT 8 (più significativo)

Inserita:

Allora, vediamo se ho capito: dalla tabella dei simboli creo una variabile di nome

Conteggio di tipo Word e indirizzo MW 0...

Se è così mi resta da capire la seguente parte del messaggio:

puoi crearti tanti segmenti per pilotare le tue uscite (supponiamo il canale A1.x)

U M1.0

= A1.0 -> BIT 0 (meno significativo)

U M1.1

= A1.1 -> BIT 2

U M1.1

= A1.1 -> BIT 4

U M1.3

= A1.3 -> BIT 8 (più significativo)

cioè, dove creo questi segmenti? Se oltre ad avere un OB1 creo un OB100, devo scrivere nell'OB100 quanto hai scritto sopra?

Io sono praticamente analfabeta per quanto riguarda AWL.... come posso scrivere una cosa del genere riferito alla mia variabile "Conteggio", usando aimè la notazione inglese e non quella tedesca (... consigliataci dal nostro prof)? :unsure:

Matteo Montanari
Inserita:
cioè, dove creo questi segmenti? Se oltre ad avere un OB1 creo un OB100, devo scrivere nell'OB100 quanto hai scritto sopra?

perchè devi creare l' OB100?

il listato lo puoi scrivere anche direttamente in OB1, dopo aver creato il segmento con il tuo contatore.

supponiamo che nel segmento 1 hai il blocco del contatore. con uscita del contatore appoggiata su MW0

nei successivi segmenti devi scrivere:

segmento 2

M1.0 A1.0

--I I-----( )-

segmento 3

M1.1 A1.1

--I I-----( )-

segmento 4

M1.2 A1.2

--I I-----( )-

segmento 5

M1.3 A1.3

--I I-----( )-

sempre supponendo che utilizzi le uscite A1.0 ... A1.3 per pilotare il tuo chip...

attenzione all'alimentazione come ti ha detto Gabriele.

------------------------

in alternativa all'utilizzo del chip 4511 esterno, come già suggerito da Gabriele, potresti utilizzare la funzione già presente all'interno di Step7 per codificare un numero BCD sulle "uscite" che pilotano direttamente il display. inoltre eseistono anche display con già la codifica integrata, utilizzano sicuramente un chip 4511 o similare, e possono ricevere in ingresso direttamente la tensione 24Vdc delle uscite. Sò che la tua non sarà un applicazione industriale ma solamente una prova in laboratorio, è solo per darti una conoscenza di come è il "mondo reale"...

l'istruzione di cui parlavo prima è: FC93 (Converti da cifra esadecimale in modello bit per display a sette segmenti (SEG)) e si trova "sotto" le librerie standard di Step7 alla voce "TI-S7 Converting Blocks".

per convertire da "tedesco" a "inglese" devi sostituire, in questo caso, la lettera "U" (???) con "A" (And), la lettera "M" (Merker) con "F" (Flag) e la lettera "A" (Ausgang) con "O" (Output).

quindi:

A F1.0

= O1.0 -> BIT 0 (meno significativo)

A F1.1

= O1.1 -> BIT 2

A F1.1

= O1.1 -> BIT 4

A F1.3

= O1.3 -> BIT 8 (più significativo)

se ti è più facile copia il circuito a contatti ad inizio messaggio...

Inserita:

Vi devo ringraziare, sto lentamente schiarendo le idee, anche se ancora permane una nube di incomprensione.

Queste righe di codice, dove le devo andare a scrivere? Non mi sembra siano scritte in ladder....

A F1.0

= O1.0 -> BIT 0 (meno significativo)

A F1.1

= O1.1 -> BIT 2

A F1.1

= O1.1 -> BIT 4

A F1.3

= O1.3 -> BIT 8 (più significativo)

:unsure: ve lo chiedo perchè mi è ancora oscuro!

Matteo Montanari
Inserita:
Queste righe di codice, dove le devo andare a scrivere? Non mi sembra siano scritte in ladder....

questo:

U M1.0

= A1.0 -> BIT 0 (meno significativo)

U M1.1

= A1.1 -> BIT 2

U M1.1

= A1.1 -> BIT 4

U M1.3

= A1.3 -> BIT 8 (più significativo)

in kop diventa:

segmento 2

M1.0 A1.0

--I I-----( )-

segmento 3

M1.1 A1.1

--I I-----( )-

segmento 4

M1.2 A1.2

--I I-----( )-

segmento 5

M1.3 A1.3

--I I-----( )-

che è uguale a questo:

A F1.0

= O1.0 -> BIT 0 (meno significativo)

A F1.1

= O1.1 -> BIT 2

A F1.1

= O1.1 -> BIT 4

A F1.3

= O1.3 -> BIT 8 (più significativo)

con il mnemonico inglese, anzichè tedesco...

il quale diventa:

segmento 2

F1.0 O1.0

--I I-----( )-

segmento 3

F1.1 O1.1

--I I-----( )-

segmento 4

F1.2 O1.2

--I I-----( )-

segmento 5

F1.3 O1.3

--I I-----( )-

nel lingauggio ladder...

comunque premendo "Ctrl + 1" o "Ctrl + 2" o "Ctrl + 3" passi da un linguaggio di programmazione all'altro...

non fossilizzarti sul Ladder (KOP), AWL o altri...

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