Vai al contenuto
PLC Forum


Ancora Puntatori - Ancora puntatori


cagliostro

Messaggi consigliati

Un saluto a tutti prima di esporvi il mio problema.

Ho realizzato una funzione che però vorrei rendere più snella da un punto di vista della programmazione magari facendo ricorso all'uso dei puntatori, ho provato a fare qualcosa in questo senso,ma fino ad ora complice la mia scarsa conoscenza sull'uso dei puntatori non sono riuscito ad ottenere quello che volevo.

La cosa che vorrei reralizzare è la seguente:

Al rilevamento di ogni rottura o anomalia del materiale, devo memorizzare su di una DB lo spazio espresso in mt di dove si è verificato il problema, quindi ho realizzato un contatore il quale incrementandosi di volta in volta in funzione del numero delle rotture, dovrebbe andare a scrivere partendo dalla prima word (DBW0) la posizione (valore che conosco) di dove si è verificata la prima rottura e così via.

Esempio

1 rottura ===>>>> valore in mt su DBW0

2 rottura ===>>>> valore in mt su DBW2

3 rottura ===>>>> valore in mt su DBW4

il tutto per una gestione massima di 35 eventuali rotture o anomalie del prodotto. Come accenato pocanzi la cosa è stata realizzata, ma se fosse possibile vorrei gestirla in modo differente appunto attraverso l'uso di puntatori.

E questa sarebbe la prima funzione da realizzare.

A questo punto una volta che il processo di lavorazione è concluso, su informazione di bobina scaricata bisogna dare un report all'operatore sulla posizione

delle rotture avvenute, ma questa volta partendo dal lato dello svolgimento della bobina.

Ovvero se avvolgendo il prodotto ho rilevato la prima anomalia sull DBW0 e così via, ora svolgendo il prodotto la prima rottura rilevata sarà l'ultima e l'ultima diverrà la prima, dovrei quindi prendere tutti i valori presenti nel DB DBW0 etc. etc. e metterli su di un'altro DB dove vengono invertiti

Anche in questo caso pensavo di fare ricorso ad una funzione con i puntatori.

Gentilmente qualcuno avrebbe qualche esempio da passarmi, ho cercato anche nel forum, ma probabilmente causa la mia scarsa esperienza nell'uso dei puntatori gli esempi trovati non mi sembravano riconducibili al mio caso oppure non gli ho interpretati correttamente.

Ringraziandovi anticipatamente

Saluti e buon fine settimana

Cagliostro

Link al commento
Condividi su altri siti


mi piacerebbe vedere come hai fatto senza puntatori... :lol:

questo è un esempio di come andare a scrivere nella tabella:

// MW0 = indice posizione nell'array da 0 al numero che vuoi tu

// #PUNTATORE = variabile locale di formato DWORD

// MW100 = dato da salvare

L MW0

L 2

*D // moltiplica per la lunghezza in byte di ogni elemento dell'array

SLD 3 // moltiplica per 8

T #PUNTATORE

L MW100

AUF DB_TABELLA

T DBW[#PUNTATORE]

per la teoria su come è fatto il formato dei puntatori guarda nella documentazione in linea di step 7

buon lavoro

Link al commento
Condividi su altri siti

Grazie cisio per il tuo aiuto,

nel pomeriggio proverò ad adattare secondo la mia esigenza l'esempio da te suggerito. Dopodichè dovrò comunque pensare di come risolvere sempre utilizando puntatori o qualche funzione più snella il secondo problema sottoposto.

Mi dicevi che saresti curioso di sapere come ho realizzato la prima cosa senza ricorrere all'uso dei puntatori. beh ad ogni rilevamento del anomalia vado ad incrementare un contatore con la classica istruzione ADD I soomando la variabile su se stessa ed incrementandola di 1 ad ogni rilevamento dell'anomalia.

Fatto questo sempre ad ogni rilevamento anomalia, vado a confrontare il valore del contatore con una costante 1-2-3-4-5-6-7-8 etc. etc.

Quando il contenuto del contatore soddisfa la costante di comaprazione, allora vado a fare il MOVE del valore in metri che in quel momento ho quando rilevo il difetto o la rottura nel DW0 ...1....2... etc, etc,

Per cui la cosa come dicevo funziona certamente non è il massimo dell'eleganza specie in fatto di occupazione della memoria perchè per gestire 35 anomalie devo fare altrettanti segmenti che effettuano la comaprazione ed il move sulla WORD interessata.

Grazie ancora e se ti venisse in mente qualche spunto per il secondo problema......... i consigli sono sempre ben accetti

ciao da Cagliostro

Link al commento
Condividi su altri siti

ciao cagliostro, era solo una battuta, è ovvio che dovevi aver fatto 35 comparazioni e altrettanti move differenti

per il secondo problema, riutilizzi lo stesso metodo per crearti un puntatore alla tabella di origine e uno alla tabella di destinazione

AUF DB_TABELLA_1

L DBW[#PUNTATORE_1]

AUF DB_TABELLA_2

T DBW[#PUNTATORE_2]

e ripeti questa operazione in loop modificando il valore dei puntatori ad ogni iterazione, per tante volte quante ne hai bisogno

ciao

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