antstan Inserito: 2 settembre 2005 Segnala Share Inserito: 2 settembre 2005 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 More sharing options...
Gianluca Caredda Inserita: 5 settembre 2005 Segnala Share Inserita: 5 settembre 2005 Hai provato a lavorare con l'Indirect Addressing? Link al commento Condividi su altri siti More sharing options...
antstan Inserita: 5 settembre 2005 Autore Segnala Share Inserita: 5 settembre 2005 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 More sharing options...
Gianluca Caredda Inserita: 5 settembre 2005 Segnala Share Inserita: 5 settembre 2005 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 More sharing options...
Betù Inserita: 11 settembre 2005 Segnala Share Inserita: 11 settembre 2005 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 More sharing options...
Henon Inserita: 17 settembre 2005 Segnala Share Inserita: 17 settembre 2005 Chiaramente sarebbe buona cosa o creare una Struttura Dati (UDT) contenentei 30 Array da 1000 Char (SINT)Oppure Creare degli Array a Dimensione 2oppure 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 30Tag Name Style Type Description Printer {...} Stampante[30] Le mie Stampanti Poi puoi sempre copiare un Array da un Elento ad un Altro, esempiocon l'struzione COP COP(Printer[0],Printer[11],1) Sposti Array[0] nel Array[11], Length 1Arrayspero di essere stato un pò chiaro, ciao Link al commento Condividi su altri siti More sharing options...
antstan Inserita: 17 settembre 2005 Autore Segnala Share Inserita: 17 settembre 2005 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 More sharing options...
RAMSON Inserita: 26 settembre 2005 Segnala Share Inserita: 26 settembre 2005 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora