Vai al contenuto
PLC Forum


Leggere Bit Di Una Porzione Di Array


Messaggi consigliati

GiancarloPirolo
Inserito:

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.


Inserita:

Sono allocati tutti in sequenza senza soluzione di continuità?

GiancarloPirolo
Inserita:

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?

Inserita:

E' un encoder incrementale?

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

Giuseppe Signorella
Inserita: (modificato)

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
GiancarloPirolo
Inserita: (modificato)

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"
Inserita:

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

Inserita:

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.

GiancarloPirolo
Inserita:

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

Inserita:

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

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