hellf Inserito: 15 dicembre 2010 Segnala Share Inserito: 15 dicembre 2010 Salve a tutti, eccomi nuovamente qui tra queste mura Vi spiego il mio problema...come ho scritto qualche post fa sono neofita e sto finendo le ultime cose della tesi...diciamo che ormai ho già fatto tutto (ho fatto un osservatore di stato non lineare per applicazioni di FDI)..a questo punto mi manca da fare un integrale definito nel tempo del tipoint from {t-T} to {t}la mia idea è molto semplice: faccio un integrale e poi applico una sorta di delay di T in modo tale da avereU(t) - U(t-T) Ho già un FB funzionante per l'integrazione numerica quindi resta da fare il delay..la mia idea è semplicemente quella di fare una queue di N elementi (con N=T) e fare una semplice sottrazione tra campione 1 e campione N e qui la nota "dolente" ovvero...come fare la coda... per ora ho fatto un codice molto semplice del tipo: VAR_INPUT in : REAL; END_VAR VAR_OUTPUT out : REAL; END_VAR VAR // Variabili statiche QUEUE : ARRAY[1..5] OF REAL; index : INT := 5; END_VAR BEGIN IF index > 0 THEN QUEUE[index] := in; index := index -1; ELSE QUEUE[5] := QUEUE[4]; QUEUE[4] := QUEUE[3]; QUEUE[3] := QUEUE[2]; QUEUE[2] := QUEUE[1]; QUEUE[1] := in; END_IF; out := QUEUE[5] - QUEUE[1];Il codice funziona e in teoria fa quello che interessa a me...il problema è che non mi piace molto la parte dell'ELSE...qualcuno sa se esistono delle funzioni in modo da rendere il codice un pò più "bellino"?? perché, ok in questo caso ho un'array di soli 5 elementi e posso ancora scrivere un else di quel tipo, ma se ovessi usare array da più elementi decisamente sarebbe una porcheria colossale ps: scusate se sono stato prolisso ma ho visto da altri thread che volete più informazioni possibili e spero di essere stato esauriente!!aspetto vostre notizie!!pps: Grazie in anticipo a chi mi potrà aiutare :superlol: Link al commento Condividi su altri siti More sharing options...
hellf Inserita: 16 dicembre 2010 Autore Segnala Share Inserita: 16 dicembre 2010 Ok mi rispondo da solo!! una soluzione è quella di usare, ad esempio, un WHILE:... ELSE index:=5; WHILE index > 1 do QUEUE[index] := QUEUE[index-1]; index:=index-1; END_WHILE; QUEUE[1] := in; END_IF;Qualcun'altro conosce altre vie? tipo se esistono funzioni di shift di elementi dell'array? o queste funzioni sono da scrivere? Link al commento Condividi su altri siti More sharing options...
Federico Milan Inserita: 16 dicembre 2010 Segnala Share Inserita: 16 dicembre 2010 Ciao,per più bello intendi più performante o contratto?A mio avviso, trattandosi di un coda o un buffer circolare manterrei gli elementi sempre fissi al più sposterei solo l'indice iniziale e finale, così che ad ongi ingresso o estrazione muovo solo un puntatore, in modo da maggiorare le performace di velocità del codice.Non ho un esempio in SCL ma solo AWL, ma se hai compreso il concetto ti sarà semplice realizzarlo.ciao Link al commento Condividi su altri siti More sharing options...
hellf Inserita: 16 dicembre 2010 Autore Segnala Share Inserita: 16 dicembre 2010 (modificato) Ciao Federico!!per più bello intendi più performante o contratto?eheh scusa per il linguaggio poco professionale intendevo una forma più contratta, poi ovviamente se è anche performante è meglio visto che da quanto ho letto l'scl è un pò più pesante rispetto ad altri!A mio avviso, trattandosi di un coda o un buffer circolare manterrei gli elementi sempre fissi al più sposterei solo l'indice iniziale e finale, così che ad ongi ingresso o estrazione muovo solo un puntatore, in modo da maggiorare le performace di velocità del codice.Effettivamente con i puntatori è sicuramente più leggero rispetto ad utilizzare un WHILE (nonostante siano solo 6 righe di codice)ps: cosa intendi per mantenere gli elementi fissi?Tanto per fare un esempio (ps non so come uscirà ______________ | | | | | | 2 ==> | 3 | 4 | 5 | 6 | 7 | ==> 8 |___|___|___|___|___|Tu intendi che col puntatore vado a "7" e "2" (facendo una specie di sliding window?)e che gli estremi dei puntatori mi definiscono la finestra temporale? ma in questo caso come faccio a tener memoria degli elementi?ps: potresti (sempre che non ti crei alcun problema) farmi vedere come lo implementi su AWL?Grazie mille per la risposta! Modificato: 16 dicembre 2010 da hellf 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