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




Array


Messaggi consigliati

Inserito:

Buongiorno a tutti.

Vorrei chiedervi se è possibile sostituire l'indice di un array con una variabile.

Esempio:

L 3

T #TEMP

L ...ARRAY[TEMP]

T #FORMULA

questo mi servirebbe anche per poter accegnare l'indice di un array come IN di un FC che a sua volta richama l'array interessato... spero abbiate capito!


Inserita:

Tempo fà ho fatto delle prove al riguardo ma non ci sono riuscito...

Non credo che si possa fare, infatti sono stato costretto a "indicizzare" il tutto...

Ciao

Ric

Inserita:

Stò leggendo in giro per il forum e qualcosa ho trovato, ma tutto riferito alle db.

Qualcuno riesce a farmi un esempio con un array all'interno di un fc?

Inserita:

Vi confermo che con S7 non si può utilizzare una variabile come indice quando si accede ad un array... :(

Neanch'io, quando me lo hanno detto, volevo crederci, ma è proprio così... :o

Un vecchio proverbio recita: Il diavolo fa le pentole ma non i coperchi

Mi sembra che calzi a pennello con S7, non credete?

Inserita:

Incredibile...

Quindi l'unica soluzione è comperare SCL?

Inserita:

Quindi, una stringa del tipo:

L 3

T #PROVA

U DB6.SILO[PROVA].ABILITAZIONE

è impensabile? Che soluzione si potrebbe adottare?

Ho 35 sili, ognuno con una ventina di parametri (interi, booleani, timer...) come posso creare un FC standard da poter utilizzare 35 volte???

Inserita:
U DB6.SILO[PROVA].ABILITAZIONE

è impensabile? Che soluzione si potrebbe adottare?

Ho 35 sili, ognuno con una ventina di parametri (interi, booleani, timer...) come posso creare un FC standard da poter utilizzare 35 volte???

Oltre a essere impensabile è fuori posto :) ...

comuque lo si fa con estrema facilità:

devi indicizzare i tuoi datim e visto che hai usato una struttura la cosa è banalissima:

un esempio banale banale:

L #Indice // Indice array

+ -1 //

L #Dimensione // Dimensione struttura array

*D //

SLD 3 // trasformo il tutto in una sorta di puntatore ...

LAR1 //

a questo punto posso fare quello che voglio

AUF DB_Dati

L DBW [AR1,P#0.0] // dato sulla word offset 0

L DBB [AR1,P#28.0] // dato sul byte offset 28

U DBX[AR1,P#23.1] // bit a offset 23.1

Come vedi è banale e molto veloce ... se hai problemi contattami in privato, ...

ciao

Inserita:

Ma stiamo parlando di Step7 ??

La soluzione proposta da Federico è corretta (per comodità uso anch'io sempre i puntatori), ma, sempre che non abbia frainteso il problema, l'indice di un array può benissimo essere una variabile interna/esterna.

Deve però essere una DWORD ed il dato contenuto formattato come puntatore.

Esempio:

L 3

T #TEMP

L ...ARRAY[TEMP]

T #FORMULA

Il tuo esempio andrebbe modificato come segue:

L P#3.0

T #TEMP dove TEMP è dichiarata DWORD

OPN DB1

L DBW[#TEMP] ... L MW[#TEMP] ... L EW[#TEMP] o messo un esempio pratico

T #FORMULA

Se ti servono ulteriori spiegazioni fammi sapere

Inserita:

Grazie a tutti. mi siete stai utilissimi avendomi fatto risparmiare una montagna di lavoro

Inserita:

Per il proverbio di Trunc, non si scrive così se no dov'è il senso (o doppio senso)?

Il Diavolo fa le pentole, Manon i coperchi. (Manon è un personaggio, un essere, uno insomma)

Inserita:

Devo fare una rettifica a quello che ho detto in precedenza.

Avevo frainteso in effetti la questione, non avevo capito che si trattava di array di dati locali.

La soluzione che ho proposto quindi non può funzionare se non lavorando con array di dati dichiarati in DB o per accesso indiretto ad altri dati, comunque non locali (L).

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