Vai al contenuto
PLC Forum


Come confrontare 2 strutture


STEU

Messaggi consigliati

Buongiorno

Sto facendo un blocco in KOP

avrei l'esigenza di verificare che tutti i bit sll'interno di una struttura di un blocco dati sia a 0.

Ho una struttura dove devo controllare i bit ed una struttura gemella dove i bit sono tutti a 0.

Ho provato con l'istruzione di confronto come variant , mi accetta la struttura nella parte superiore , mentre nel parametro inferiore non lo accetta.

L'unico modo è utilizzare i blocchi non ottimizzati e nel parametro inferiore mettre il puntatore .

Esiste qualche modo ,o istruzione che non ho trovato nell h_elp in linea ,  che mi fa confrontare le 2 strutture?

Per informazione l'istruzione move della struttura 0 nella struttura di controllo funziona bene.

Le 2 strutture sono identiche.

 

 

Link al commento
Condividi su altri siti


1 ora fa, STEU ha scritto:

Non sembrano adatte le istruzioni EQ_type

No, non sono adatte. Quelle istruzioni servono per controllare se le strutture sono identiche a livello di tipo di dati, ma non confrontano i valori contenuti nelle variabili delle strutture.
Come suggerito da "drn5", potresti ricorrere alla funzione contenuta nella libreria "LGF_Library".
LGF_Library è una libreria gratuita della Siemens, che contiene molte funzioni interessanti. Con una ricerca, la trovi subito.
E, cosa a mio avviso molto utile, le funzioni di questa libreria sono tutte aperte e, studiandole, c'è parecchio da imparare.

 

In alternativa, se la tua struttura è composta da singoli bit e non contiene sottostrutture, puoi usare l'istruzione "GATHER" o "GATHER_BLK" per convertire la tua struttura in una word, dword, lword o in un array di word, per le successive comparazioni.

 

Oppure, fai la stessa cosa anche con strutture complesse usando "SERIALIZE", che poi è esattamente ciò che fa la funzione di libreria "LGF_CompareVariant".

Link al commento
Condividi su altri siti

Non è espresso in modo molto chiaro, ma io interpreto in un altro modo: non si possono confrontare strutture con le normali comparazioni.
Ed è proprio per questo che, per confrontare strutture, si ricorre a questa funzione.
Io ho guardato cosa c'è dentro.
All'inizio verifica che le strutture siano identiche (identiche come tipo di dati) e che non superino i 200 byte (se si desidera aumentare il limite,è sufficiente modificare la costante MAX_LENGTH all'interno della funzione).

Poi utilizza l'istruzione "Serialize", che non fa altro che mettere tutti in fila, byte per byte, i dati della struttura, all'interno di un array di byte.

Con "Serialize" vengono riordinate le due strutture in due array e poi, viene fatto il confronto del contenuto degli array, byte per byte.

 

Quindi, è proprio con le Struct che ha senso usare questa funzione.

 

 

Link al commento
Condividi su altri siti

7 ore fa, STEU ha scritto:

con le struct non va bene,

Ma tu l'hai provata o dici così solo per quello che leggi nell'aiuto in linea ? Quelle volte che l'ho usata con le strutture faceva quello per cui mi serviva....

Modificato: da drn5
Link al commento
Condividi su altri siti

Non è l’ h_elp in linea, è il manuale che puoi scaricare dove spiega tutte le funzioni della libreria, comunque domani provo , anche se c’è scritto  che le variabili di tipo strict non possono essere comparate

Modificato: da STEU
Link al commento
Condividi su altri siti

11 ore fa, STEU ha scritto:

c’è scritto  che le variabili di tipo strict non possono essere comparate

Non esattamente.
Ho approfondito con alcuni test.
Diciamo che a questa funzione non piace che tu passi delle strutture dichiarate, semplicemente, come "Struct".
Anche nel caso di strutture identiche, ti dice che "i tipi di dati non corrispondono".
Tutto va bene se le strutture sono dichiarate come "Tipo di dati".
Infatti, nella guida, all'inizio dice che:
"This block compares two structured (array, PLC data type) actual parameters and outputs whether they are of the same type and have the same values."

 

In alternativa, se vuoi che vengano accettate strutture non appoggiate a "Tipi di dati", modifichi la funzione commentanto la REGION "Check input types".

In questo caso, ovviamente, sarà tua cura fare in modo che le due strutture siano identiche.

Link al commento
Condividi su altri siti

33 minuti fa, batta ha scritto:

Diciamo che a questa funzione non piace che tu passi delle strutture dichiarate, semplicemente, come "Struct

Questa non la sapevo... In effetti è da tempo che uso i data type per costruirmi le strutture nei db e quindi è per questo che non ho mai avuto il problema di @STEU...  Buono a sapersi.... Grazie @batta.

Link al commento
Condividi su altri siti

4 ore fa, fiorezzz ha scritto:

Interessante ..ma solo per KOP o è attiva anche in AWL ?

È uan normalissima funzione. Perché mai dovrebbe essere utilizzabile solo il ladder? E perché ti interessa se va bene anche in AWL? Piuttosto, usa il testo strutturato (SCL).

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