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




Confronto Con Array A 32 Bit


Messaggi consigliati

Inserito:

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


Inserita: (modificato)

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

è 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??'

Inserita: (modificato)

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

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.

Giuseppe Signorella
Inserita: (modificato)

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

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.

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