Cronos. Inserito: 5 settembre 2009 Segnala Share Inserito: 5 settembre 2009 Mi domandavo se qualcuno avesse trovato una soluzione umana a questo problema:Poniamo di avere un array di strutture ( ma il problema lo si ha anche con un array normale così a memoria ) e di voler mostrare questi valori in una schermata, scorrendo con un tasto l'indice si visualizzano i vari dati e l'utente deve poterli modificarePoniamo che il dato che si tenti di visualizzare abbia questo nome : PLC_PLC.Brush[Temp.Brushl].ABS_VelDove, PLC_PLC è ovviamente una cartellaBrush è il nome dell'arrayTemp.Brushl è una variabile temporanea che fa da indiceABS_Vel è il nome del dato che si tenta di modificare / displayareIn caso si tenti di displayarlo, la cosa funziona correttamenteil problema è che non è possibile attivare la modalità ingresso per questo datoUtilizzando i pulsanti è possibile fare operazioni con "on temporaneo" scrittura di valori e quant'altro, la limitazione è per l'appunto sulla modifica dei dati con un visualizzatore numericoL'idea che mi era venuta per risolvere il problema è quella di utilizzare una variabile di appoggio che viene aggiornata / aggiorna il dato tramite uno script, ma la questione è un filo più complicata di quello che sembraIntanto se ho 50 dati in questa pagina devo crearmi 50 variabili e scrivermi il codice che le aggiornaIn secondo luogo nella pagina deve girare uno script perpetuo che cicla ogni tot millisecondi, ma anche a mezzo secondo va più che bene per le mie esigenzequesti due però sono finti problemi, gli script gestiscono correttamente tutti e 2 i casi,lo script quindi deve divenire qualcosa del tipo ( faccio un esempio con una sola variabile ovviamente )Temp.ABS_Vel := PLC_PLC.Brush[Temp.Brushl].ABS_Vel.getIntValue(); questo codice deve ciclare in uno script ogni 0.5sec Il visualizzatore numerico visualizzerà Temp.ABS_Vel, non essendo questa una variabile "particolare" può essere quindi abilitata tranquillamente anche la modifica del dato ora, il problema è che non esiste un evento che dica "ho premuto l'ok per modificare il dato", ed è difficile diagnosticare quando c'è stata 1 modifica una possibile soluzione è quella di fare un codice di questo tipo ( ometto i getIntValue() e i write() altrimenti il codice è illeggibile ) if (Temp.ABS_Vel != Temp.OLD_Abs_Vel) { // Ho aggiorna il valore, quindi ho premuto un tasto PLC_PLC.Brush[Temp.Brushl].ABS_Vel = Temp.ABS_Vel; Temp.OLD_Abs_Vel = Temp.ABS_Vel; } else { // Non ho aggiornato il valore, aggiorno il valore da plc Temp.ABS_Vel = PLC_PLC.Brush[Temp.Brushl].ABS_Vel.getIntValue(); Temp.OLD_Abs_Vel = PLC_PLC.Brush[Temp.Brushl].ABS_Vel.getIntValue(); }ma è una soluzione parecchio dispendiosa quando si hanno più di 50 variabili in una sola paginaqualcuno ha trovato quacosa di meglio? Link al commento Condividi su altri siti More sharing options...
prog_jlaw Inserita: 7 settembre 2009 Segnala Share Inserita: 7 settembre 2009 ciaoPLC_PLC è ovviamente una cartellaBrush è il nome dell'arrayTemp.Brushl è una variabile temporanea che fa da indiceABS_Vel è il nome del dato che si tenta di modificare / displayaresto andando a memoria ( non ho il sw sotto per essere esatto ) comunque quello che vuoi fare ( se non ho capito male ) e' fattibile mettendo , nella proprieta della variabile , nel campo indice la variabile interna "Brushl"cosi in base al valore di "Brushl" la tua variabile "ABS_Vel" assumera valori in base all'array.In questo modo pero potrai visualizzare/modificare un valore alla volta.e' questo quello che volevi ???spero di sibye Link al commento Condividi su altri siti More sharing options...
prog_jlaw Inserita: 7 settembre 2009 Segnala Share Inserita: 7 settembre 2009 dichiari una VAR00 con indice INDEX che legge word 100dichiari una VAR01 con indice INDEX che legge word 101dichiari una VAR02 con indice INDEX che legge word 102dichiari una VAR03 con indice INDEX che legge word 103dichiari una VAR04 con indice INDEX che legge word 104....modificando INDEX ottieni la tua tabella (creata da VAR00 - 0n ) indicizzata bye Link al commento Condividi su altri siti More sharing options...
Cronos. Inserita: 8 settembre 2009 Autore Segnala Share Inserita: 8 settembre 2009 E' certamente una buona idea e risolve il problema che ho esposto in caso la disposizione della memoria sia, diciamo,"semplice"ovvero contigua o in ogni caso venga disposta ogni "tot" wordNel mio caso, ho indicizzato una struttura che contiene vari tipi di dati ( bool, word, doppie word.. ) e non so nemmeno ogni "quanto" la struttura si ripete e in ogni caso questo "ogni quanto" è passabile di modifiche perchè aggiungo un bool o similarePer rendere più chiaro l'esempio io sto cercando di modificare una struttura presa da unity che è un array di strutture, in altre parole si presenta più o meno come segueBrush[0] ABS_Vel ( word ) ABS_Pos ( dword ) ABS_Start ( bool ) Home_Pos Home_Start Home_Type .. .. Brush[1] ABS_Vel ( word ) ABS_Pos ( dword ) ABS_Start ( bool ) Home_Pos Home_Start Home_Type .. .. Brush[2] ABS_Vel ( word ) ABS_Pos ( dword ) ABS_Start ( bool ) Home_Pos Home_Start Home_Type .. .. .. ..le posizioni delle variabili vengono decise da unity in modo da rendere il tutto contiguo, se io un giorno mi accorgo che mi serve "Home_HomingVel" per esempio, lo devo aggiungere.. e questo mi manderebbe a quel paese tutti i dati che vengono dopo "Home_HomingVel" e probabilmente anche "ogni quanto" la struttura si ripete, rendendo il tutto veramente poco gestibile e a rischio di gravi danni nel caso io mi scordi di aver fatto una modifica e non la riporti sul pannellino, in quel caso si scriverebbe su word sbagliate con le note conseguenze..senza considerare che calcolarne gli offset può divenire un impresa epica Link al commento Condividi su altri siti More sharing options...
prog_jlaw Inserita: 11 settembre 2009 Segnala Share Inserita: 11 settembre 2009 visto come e' strutturato piu che "array" mi sembrerebbero "ricette" o sbaglio ?in base all'indice di ricetta -->(Brush[n])carichi la ricetta composta da piu ingredienti -->ABS_Vel ( word ) ABS_Pos ( dword ) ABS_Start ( bool ) Home_Pos Home_Start Home_Type .. ..io userei la funzione ricette ... l'indice puo arrivare a 255bye Link al commento Condividi su altri siti More sharing options...
Cronos. Inserita: 11 settembre 2009 Autore Segnala Share Inserita: 11 settembre 2009 No, non sono ricette, sono semplicemente i parametri degli azionamenti brushless, inverter, e altre cose, che sono fisseè il numero di brushless/inverter che è alto ( circa una 10ina di inverter e un paio di brushless, ma conoscendo il cliente il numero può variare e non intendo rifare il programma ogni volta )sostanzialmente sono parametri che non vengono mai cambiati, salvo in casi molto particolari"prova a far andare quel nastro più veloce""l'altro un po più lento"quindi devono essere velocemente accessibili e devono riuscire a farlo anche loro se io sono altrovestrutturandoli in questo modo fare il check degli allarmi è banale, ed altri vantaggi ancora che non sto ad illustrare visto che non è questo lo scopo del thread ( ma se vi interessano non ci sono problemi ovviamente )ho provato a chiedere anche a pronto contatto, mi hanno risposto che è una cosa poco utilizzata e che sarà sviluppata in futuro, ovviamente nessuna data stabilita Link al commento Condividi su altri siti More sharing options...
bigalex Inserita: 12 gennaio 2010 Segnala Share Inserita: 12 gennaio 2010 Se non sbaglio VijeoDesigner non contempla l'utilizzo nè di array multidimensionali nè di array di strutture nè di strutture di dati (user data type).Credo che sia possibile solo l'utilizzo di array monodimensionali di dati non strutturati.Comunque dall'. in linea dovrebbe essere possibile trovare la risposta.Ciaobigalex 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