2011-09-28 11 views
5

Sono alle prese con la dimensione dei file di output per i modelli Modelica di grandi dimensioni. Ovviamente posso proteggere alcuni oggetti per rimuoverli completamente dal file dei risultati. Tuttavia, che dà origine a due problemi:Ricerca di un concetto come "verbosity" in Modelica

  1. Non è possibile ridichiarare oggetti protetti
  2. se voglio mettere alla prova il mio modello nel dettaglio (ad esempio, per un breve periodo di tempo), ho bisogno di dichiarare quegli oggetti pubblicamente di nuovo per vedere le loro variabili

Mi chiedo se c'è un trucco per impostare la 'verbosità' di un modello Modelica. Forse quello che vorrei è una terza parola chiave accanto a public, protected, ad es. transparent. Poi, quando si imposta una simulazione, voglio essere in grado di impostare il livello di verbosità a 1, o 2 con il seguente effetto:

1 -> considerano tutti transparent come elementi protected

2 -> prendere in considerazione tutti gli elementi transparent come public

Questo effetto si propagherebbe a tutti i modelli e sottomodelli.
Non penso che questo già esista. Ma c'è una soluzione facile?

Grazie, Roel

risposta

3

Roel,

so che molte persone alle prese con questo problema. Al momento, tutto dipende dallo strumento utilizzato. Non so come altri strumenti gestiscano il filtraggio dei risultati, ma in Dymola lo controlli (come fai notare) dando ai segnali qualificatori speciali (ad esempio protetti).

Una cosa che ho fatto in passato è di estendere da un modello e quindi aggiungere un mucchio di segnali di uscita per le cose che mi interessano. Quindi puoi selezionare "Output" in Dymola per assicurarti che entrino il file dei risultati. Questo è tutt'altro che perfetto perché a) elencare tutto ciò che si desidera può diventare noioso eb) il riferimento alle variabili protette non è strettamente consentito (anche se Dymola consente di farla franca ma emette un avviso).

In Dassault, stiamo discutendo attivamente di questa idea e speriamo di fornire alcune funzionalità migliori in questo senso. Non è chiaro se tale funzionalità sarà strettamente specifica degli strumenti o se coinvolgerà il linguaggio in qualche modo. Ma se è legato alla lingua, lavoreremo (ovviamente) con il gruppo di progettazione per formulare una specifica che anche altri fornitori di strumenti possono supportare.

+0

Grazie per la risposta. Proteggere il più possibile e aggiungere risultati è quello che ho fatto davvero, ma sono d'accordo con entrambi i punti a) eb). Spero che verrà fuori una soluzione standard per la lingua, in quanto le soluzioni specifiche degli strumenti stanno riducendo il vantaggio cross-tool che Modelica ha chiaramente. – saroele

2

Non sono sicuro che questo ti aiuti, ma in Dymola puoi andare su Simulazione-> Setup-> Uscita e selezionare una casella di controllo che dice "Memorizza variabili protette". In questo modo è possibile dichiarare la maggior parte delle variabili come protette: durante la normale simulazione non vengono memorizzate, ma quando si esegue il debug del modello, si contrassegna tale casella e vengono memorizzate. Ovviamente non è lo stesso della parola chiave suggerita trasparente, ma forse aiuta un po '...

+1

Grazie per la tua risposta, questo aiuta davvero perché ora posso proteggere tutto ciò di cui non ho bisogno per una lunga simulazione, e in 1 click recupera tutto per una sessione di debug. Ma rendere quasi tutto protetto mi obbliga ancora a infrangere le regole (che Dymola accetta) e il riferimento alle variabili protette. – saroele

6

Come ha scritto sopra Michael Tiller, questo non è gestito allo stesso modo in tutti gli strumenti Modelica e non c'è una risposta definita . Per dare una risposta specifica di OpenModelica, è possibile utilizzare simulate(ModelName,outputFilter="regex"), per memorizzare solo le variabili che soddisfano pienamente la regex data (l'impostazione predefinita è .*, corrispondente a qualsiasi variabile).

+0

grazie per il suggerimento. Quindi, per usare efficacemente questa funzione, dovresti aggiungere un "marker" specifico come _o a tutte le variabili che otterresti nell'output di una lunga simulazione. Sarebbe bello se la comunità di modelica potesse venire a una specifica di linguaggio che è cross-tool però. – saroele

+0

Non è necessario taggare le variabili. Con le espressioni regolari è possibile abbinare 'a | b | c' (a o b o c) o' a \ .b \ .c \ [. * \]. X' (abc [1] .x .. abc [ n] .x). È molto noioso scrivere gli schemi, ma sono versatili e facili da implementare per gli strumenti. Mentre sono d'accordo sul fatto che sarebbe stato utile trovare una soluzione cross-tool, le specifiche Modelica toccano solo il problema delle simulazioni in alcuni punti. –

3

In SystemModeler, si passa alla scheda Impostazioni in Experiment Browswer nel Centro di simulazione. Fare clic su Output in basso e selezionare le variabili da memorizzare.

(Le opzioni sono state variables, derivatives, algebraic variables, parameters, protected variables e se si seleziona la Store simulation log -opzione, si otterrà alcune statistiche interessanti sugli eventi nel corso valutazioni di tempo e di funzione, aprendo un'altra possibilità di rintracciare le parti del simulazione e modello che crea più valutazioni)

0

Un po 'tardi, ma in Dymola 2013 FD01 e versioni successive è possibile selezionare le variabili da memorizzare in base ai nomi (e ai nomi dei modelli) utilizzando l'annotazione __Dymola_selections e persino il filtro su definito dall'utente tag - in modo da poter creare un nome di tag "trasparente" nel modello. Vedi "Abbinamenti e selezioni variabili" nel manuale.