Vai al contenuto
PLC Forum


Confronto Con Array A 32 Bit


Jonnystek

Messaggi consigliati

Buongiorno a tutti,

Premetto che stò usando il linguaggio KOP, e la mia istruzione si trova all'interno di un FB.

Ho la necessità di confrontare se il contenuto di un array di 32 bit è diverso da zero.

Non riesco a trovare con quale istruzione posso confrontare questa variabile (che di fatto è una DWORD), con una costante o con un'altra DWORD.

-L'istruzione DIVERSO non accetta dati di tipo ARRAY. Quando compilo mi viene visualizzato l'errore "Segmento 33, Il tipo di dati Array [1 .. 32] Of Bool del parametro attuale non è compatibile con il tipo di dati del parametro formale."

-Se tento di utilizzare il dato utilizzando il DB di istanza (%DID18) del mio FB, quando compilo mi viene visualizzato l'errore "Segmento 33,L'indicazione dell'indirizzo per "S71200" è incompleta".

Se c'è modo di evitare il confronto tra tipologie di dati ed inviare il mio ARRAY in una DWORD con un istruzione MOVE, poi potrei fare il confronto tra due DWORD, ma anche questo non funziona.

.....
Grazie

Link al commento
Condividi su altri siti


Basta fare, se è una DW, un XOR con zero; se invece si tratta di un array di DW è necessario ripetere l'operazione per tutti gli elementi dell'array.

Un Array è un vettore ne più ne meno.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

è un array di bit. anche l'istruzione XOR non accetta array, se deleziono DWORD come tipo di dati, mi viene selezionato il seguente errore "Segmento 2,Il tipo di dati Array [1 .. 32] Of Bool del parametro attuale non è compatibile con il tipo di dati DWord del parametro formale.

Possibile che non ci sia modo di non fare controllare al TIA Portal il tipo di dati??'

Link al commento
Condividi su altri siti

Stai dicendo che è un array (vettore) composto di 32 bits?

Le operazioni sugli arrais si effettuano elemento per elemento, quindi dovrai testare in successione tutti i 32 bits.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Si, è un array di 32 bits.

in SCL con un ciclo FOR ho realizzato il confronto, ma volevo usare il KOP.

Possibile che non possa scrivere i 32 bits in un'altra variabile (tipo in una MW) e poi fare il confronto?

Mi sembra che abbiano inserito dei limiti in TIA se non posso analizzari tipi di dati differenti tra loro.

Link al commento
Condividi su altri siti

Giuseppe Signorella

Il confronto lo devi fare ovviamente con i singoli elementi dell'array. (Come già detto da Livio).

Per farlo anche in kop puoi crearti un costrutto. (Un ciclo tipo FOR-TO-NEXT).

(Usa le etichette ed i salti.)

Ciao

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

Ci sono due possibili soluzioni al tuo caso.

La prima prevede che tu dichiari la variabile non come array di 32 bit ma comeDWord (così risolvi il problema del confronto) e per l'accesso ai singoli bit anziché scrivere, per esempio, "MiaVar[0]", scrivi "MiaVar.x0"

La seconda soluzione, possibile solo se non utilizzi l'accesso ottimizzato al blocco (quindi le variabile oltre al nome avranno anche un indirizzo), prevede la sovrapposizione delle variabili con "AT".

Funziona così:

- dichiari la variabile "MiaVar" come DWord

- nella riga immediatamente sotto dichiari la variabile "MioBit" e nella colonna Tipo di dati selezioni AT

- confermando con invio, vedrai che nella colonna del nome, in fianco alla variabile "MioBit" troverai la scritta AT "MiaVar"

- ora nella colonna del tipo di dati selezioni il tipo di variabile desiderato. Se ti risulta comodo lavorare con un array, puoi sempre dichiarare un array di 32 bool, oppure potresti dichiarare 32 variabili booleane ad ognuna delle quali puoi assegnare un nome.

In questo modo nella comparazione usi la variabile MiaVar, e dove hai bisogno di accesso al singolo bit usi la variabile booleana.

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