Vai al contenuto
PLC Forum


Leggere Bit Di Una Porzione Di Array


GiancarloPirolo

Messaggi consigliati

GiancarloPirolo

Buongiorno a tutti sto usando il TIA portal V12 con un S7-1200, ho un array di 1000 bit e ho la nesessità di leggere porzioni di questo array e analizzare se sono tutti a 0.

Non trovo una istruzione utile qualche idea.

Link al commento
Condividi su altri siti


GiancarloPirolo

Si Livio,

ho un encoder collegato ad uno dei ingressi della cpu 1215, questo su fronte richiamo l'OB40, tramite l'istruzione MOVE_BLK sposto il bit[0] su bit[1] sul count metto la lunghezza dell'array unico questo funge da shr

a questo punto se voglio sapere se tra il bit[100] e il bit[110] ho un 1 devo andare a leggerli in parallelo e dare un'uscita o c'è qualche istruzione che non conosco?

Link al commento
Condividi su altri siti

E' un encoder incrementale?

Se si mi sembra un modo ....ehm inusuale di lettura. Modo che francamente non comprendo.

Link al commento
Condividi su altri siti

Giuseppe Signorella

Non ho ben compreso cosa tu voglia fare realmente, ma potresti crearti un costrutto " un ciclo" for to next dove l'indice del tuo array è anche l'indice del costrutto. Nel ciclo fai un confronto del bit.

Se ne viene trovato uno nella condizione true, ti memorizzi la posizione dell'indice o fai ciò che vuoi.

Attenzione però con i cicli in quanti rischi di "impallare" la CPU.

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

GiancarloPirolo

E' un encoder incrementale? si

Se si mi sembra un modo ....ehm inusuale di lettura. Modo che francamente non comprendo

Ma è direi che è una soluzione molto comune sulle macchine rotative, l'encoder messo su una posizione un giro un passo mi da la risoluzione per lavorare il prodotto sapendo dov'è all'interno della macchina.

Questo poca importa, la mia domanda nello specifico era sapere se c'è una istruzione per interrogare parte di un array per sapere se un bit è alto

Modificato: da Fulvio Persano
Aggiunto "quote"
Link al commento
Condividi su altri siti

1) Rotative ne ho automatizzate parecchie (non ti scrivo i nomi delle aziende ma sono, o sono stati, i maggiori produttori di rotative e amcchine da stampa italiani): Gli encoders li ho sempre interfacciati con un contatore e non ho mai avuto problemi per fare trecking e controlli di posizione-registro.

2) Per verificare se un bit è a 1 o a 0 l'istruzione classica è XOR con 0 (o con 1).

Link al commento
Condividi su altri siti

Ciao

In AWL potresti lavorare un pò con il registro degli indirizzi.

Magari ti crei un Fc parametrizzato dove gli passi l'indice di partenza dell'array che vuoi valutare ed il numero di bit che vuoi valutare.

Ciao.

Link al commento
Condividi su altri siti

GiancarloPirolo

Ciao

In AWL potresti lavorare un pò con il registro degli indirizzi.

Magari ti crei un Fc parametrizzato dove gli passi l'indice di partenza dell'array che vuoi valutare ed il numero di bit che vuoi valutare.

Ciao.

s7-1200 non ha awl... e il problema che ho è che avendo sviluppato il programma con il simbolico non trovo il codo di fare un banale compare come avrei fatto con il 300

Link al commento
Condividi su altri siti

s7-1200 non ha awl...

Questo mi era sfuggito ..... però dovresti avere SCL .... o sbaglio anche questa volta :smile: ?

Basterebbe un banalissimo

#BECCATO:=FALSE;
FOR #I := 1 TO 200 DO
  IF #TUOARRAY[#I]=TRUE THEN
    #BECCATO:=TRUE;
    END_IF;
END_FOR;

Ciao

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