Vai al contenuto
PLC Forum


Puntatori Rslogix 5000 - Esistono?


antstan

Messaggi consigliati

Salve a tutti!!!

Sto lavorando con Controllogix memoria 2 MB.

Sto gestendo oltre che la parte di controllo e segnalazioni una 30 di stampanti....

Per far ciò ho dovuto creare dei sistemi a Buffer per la gestione delle stesse...

Per tale motivo ho fatto un'unica funzione la quale richiamo per ogni stampante per accodarci le etichette. Questi buffer sono molto grossi tipo 40 KB !!!!

Ora la mia domanda è questa: esistono in Controllogix i puntatori (in modo da passare alla funzione solo il puntatore ai buffer su cui lavorare) oppure devo passarci tutto il buffer?

Infatti nel primo caso avrei meno spreco di risorse e di tempi....

Link al commento
Condividi su altri siti


Scusa Gianluca non ho capito bene, ho cercato sulla guida ma...

Facciamo un esempio pratico ?

Immaginiamo di avere decine di array di 1000 elementi Array1[1000],

Array2[1000],Array3[1000]...

Devo sviluppare una routine che lavora su questi array senza passare tutto l'array su cui lavorare ma semplicemente un puntatore all'array come faccio ?

Non so se è possibile e neanche se sono stato cheiaro su quello che è il mio problema.... <_<

....

Link al commento
Condividi su altri siti

Gianluca Caredda

Sinceramente non sei stato molto chiaro, comunque trovi informazioni sull'indirect adressing al capitolo 3 (Organize tags) del manuale "Logix5000 Controllers Common Procedures"

Link al commento
Condividi su altri siti

A MIO PARERE LA SOLUZIONE AL TUO PROBLEMA E' USARE DEI SALTI AD UNA SUBROUTINE DOVE COME PARAMETRO DI INGRESSO GLI PASSI IL TUO ARRAY DA CUI OTTIENI I PARAMETRI DI USCITA DI CUI HAI BISOGNO.

SINCERAMENTE NON LA HO MAI USATA PER PASSARE UN ARRAY MA PENSO SIA POSSIBILE AL MENO NELL'. SEMBREREBBE COSì.

CIAO E BUON LAVORO

Link al commento
Condividi su altri siti

Chiaramente sarebbe buona cosa o creare una Struttura Dati (UDT) contenente

i 30 Array da 1000 Char (SINT)

Oppure Creare degli Array a Dimensione 2

oppure cosa molto più semplice un array Stampante da SINT[30,1000]

Tag Name Style Type Description

stampante Decimal SINT[30,1000] Strutture Stampanti

con la Struttura crea un Nuovo UDT Chiamato per esempio Stampante,

inserisci un Elemento chiamato Buffer

Name Data Type Style Description

Buffer SINT[1000] ASCII Array N^ Stampante

Poi crea una nuova Tag chiamata per esempio Printer usando

la struttura che hai appena creato "Stampante" con Dimensioni di 30

Tag Name Style Type Description

Printer {...} Stampante[30] Le mie Stampanti

Poi puoi sempre copiare un Array da un Elento ad un Altro, esempio

con l'struzione COP

COP(Printer[0],Printer[11],1) Sposti Array[0] nel Array[11], Length 1Array

spero di essere stato un pò chiaro, ciao

Link al commento
Condividi su altri siti

Grazie per le risposte!!!!

Il punto è che ho lavorato in questo modo!!!!

Passando tutta la struttura UDT alla routine.... Tutto funziona e lavora bene!!!

La mia domand era che facendo in questo modo la complessità dei tempi di gestione nel richiamare la routine di stampa è elevata!!! tipo 70 msec. Questi tempi lunghi credo siano dovuti al passaggio dell'intero bffer alla funzione.

Questo non è un problema ma volendo ottimizzare i tempi del software ....

Tuttavia stavo riflettendo (non lo faccio ora in quanto l'impianto è completo e va consegnato) di far lavorare la routine direttamente sul buffer interessato passando ad essa semplicemente l'indice della struttura e non tutto il buffer!!!!!!! In questo modo la complessità temporale diminuisce anche se poi son legato alla struttura stessa....

Che ne pensate????

Link al commento
Condividi su altri siti

  • 2 weeks later...

Purtroppo con CLX5000 non esistono i puntatori ( come in S7 per intenderci).

Alle funzioni vengono passati i dati con una COP nascosta dal sistema, da quì i tempi elevati da te segnalati. Per non parlare del fatto che non essendoci i nomi dei parametri è possibile sbagliare facilmente con conseguente crash del sistema.

Un modo efficiente di passare grandi moli di dati come i tuoi è quello di dichiararli nei Controller Tags (Globali) e passare alla tua routine, l'indice iniziale del dato da trattare ed eventualmente la larghezza.

Purtroppo addio incapsulazione dei dati. :(

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