2013-06-09 13 views
7

Desidero recuperare i dati da simulink durante la simulazione e utilizzare la funzione di rete seriale per inviare questi dati a un altro programma. Perché ho bisogno di usare un altro programma per fare alcuni trucchi e inviare il comando a simulink, quindi devo ottenere dati da simulink durante il runtime in modo che un altro programma possa fare il comando giusto.Come esportare i dati simulink nello spazio di lavoro durante la simulazione?

Ho provato a utilizzare il blocco Workspace per esportare i dati.

enter image description here

Tuttavia, posso ottenuto solo il valore in fin dall'inizio della simulazione.

E ho anche provato a utilizzare l'ambito e modificare alcune proprietà: selezionare Salva dati nello spazio di lavoro e deselezionare Limite dati su Ultimo.

enter image description here

enter image description here

In primo luogo, ho iniziato la simulazione, e ho trovato lo ScopeData non sembra nell'area di lavoro. Solo quando interrompo la simulazione, ScopeData appare nello spazio di lavoro.

enter image description here

E dopo questo, posso usare ScopeData.signals.values ​​per ottenere i valori.

Ma quello che voglio è: quando avvio la simulazione, ScopeData appare nello spazio di lavoro in modo che possa inviare questi dati ad altri programmi.

Qualcuno sa come ottenere questo?

Ho trovato this page potrebbe essere utile, ma non so ancora come esportare continuamente i dati durante la simulazione.

+0

Stai inviando i dati a un programma Matlab oa un programma diverso come Excel o qualcosa del genere? Se sì, quale altro programma? –

+0

Sto inviando dati a Proteus, perché voglio scrivere alcuni comandi su microchip per controllare i blocchi in simulink. –

+0

So che puoi ottenere i dati sulle linee simulink usando ['get_param'] (http://www.mathworks.com/help/simulink/slref/get_param.html) cammand quando il simulink è impostato su ** esterno modalità ** durante la simulazione (non sono sicuro delle altre modalità). È possibile impostare un timer (con la stessa frequenza del simulink) e farlo nel suo 'callback'. – pm89

risposta

10

Utilizzare get_param per leggere i dati solo al momento attuale. Anche per inviare i dati a Simulink con set_param di un guadagno o di un altro blocco.

Un esempio di get_param

Prima carico e inizio la simulazione:

load_system('myModel') 
set_param('myModel','SimulationCommand','Start'); 

per leggere i dati su tutte le linee del modello Simulink:

  1. Ottieni un blocco simulink obje ct (proviamo un orologio con il nome Clock):

    block = 'myModel/Clock'; 
    rto = get_param(block, 'RuntimeObject'); 
    
  2. quindi ottenere i dati sulla sua prima (o qualsiasi) porta di uscita (o ingresso) di quel blocco.

    time = rto.OutputPort(1).Data; 
    

Si potrebbe fare la lettura, in un callback del timer.

Anche questo potrebbe essere utile: Command Line Functionality for Simulink

+3

Anche se questo potrebbe ottenere alcuni dati, il timer funziona in MATLAB e ha niente a che fare con il tempo di simulazione Simulink, quindi non c'è alcuna garanzia di ottenere dati nei tempi di simulazione che potrebbero essere necessari. –

+0

Sono d'accordo con te @PhilGoddard, ma ho trovato che questo fosse l'unico modo. Esistono tuttavia alcuni accorgimenti e trucchi sporchi per evitare la mancanza di dati, come l'aumento della frequenza del timer (per ridurre la possibilità di perdere dati) e l'impostazione di un contatore in simulink (per evitare di ottenere gli stessi dati due volte e scansionare se ci sono dati) perso o no). – pm89

+0

Le soluzioni alternative non impediscono la mancanza di dati. Possono aiutare a perdere meno dati, ma non possono garantire di non perdere nessun dato. –

3

Durante la simulazione Simulink memorizza i dati registrati in un buffer interno e scrive i dati nello spazio di lavoro solo quando la simulazione viene messa in pausa o interrotta. Sembra davvero che tu debba scrivere una funzione S (che otterrà i valori del segnale su base temporale) e comunicare con Proteus in questo modo.

Ovviamente Simulink è un simulatore non in tempo reale, quindi se stai parlando di fare qualcosa che assomiglia al controllo in tempo reale, probabilmente stai prendendo l'approccio sbagliato del tutto.

+0

Voglio controllare un braccio robotico in simulink (simmeccanica, in realtà) usando microchip in Porteus come controller. Quindi questo non è realizzabile? Non capisco il significato di Simulink è un simulatore non in tempo reale ~ –

+2

Nessuno dei sistemi operativi su cui MATLAB/Simulink vengono eseguiti sono in tempo reale. Tra l'altro ciò significa che 1 unità di tempo di simulazione è (quasi certamente) non uguale a 1 unità di tempo reale. L'orologio in Simulink potrebbe dire che è in esecuzione da 10 secondi, ma l'orologio sulla tua parete potrebbe dire qualcosa di meno di 10 secondi o qualcosa di più lungo di 10 secondi (a seconda della complessità del tuo modello). A meno che non si richiedano solo frequenze di campionamento lente e non si preoccupino delle prestazioni garantite, per il controllo in tempo reale è necessario convertire il modello in C (utilizzando Simulink Coder) e quindi compilare ed eseguire tale codice su un sistema operativo in tempo reale. –

+0

È sempre possibile testare la logica con streaming simulink di dati in tempo reale su un controller, è sufficiente tenere presente che non è in tempo reale. La logica principale può essere testata, ma le attività di temporizzazione critiche non saranno possibili (ad esempio il tempo di reazione in microsecondi di un evento che si verifica su interrupt o qualcosa di equivalente) – Karim

2

In qualsiasi momento durante la simulazione è possibile forzare Simulink per scrivere i dati in uscita di simulazione per l'area di lavoro:

set_param(bdroot,'SimulationCommand','WriteDataLogs'); 

ho trovato che questo comando è abbastanza instabile nel mio Matlab 2010a per Win64. In particolare, devo evitarlo quando la simulazione viene interrotta (ad esempio, prima controlla get_param(bdroot,'SimulationStatus')), altrimenti Matlab mostra un errore e chiede di essere riavviato.

+0

Questo era quello che stavo cercando! Funziona anche durante una simulazione in tempo reale. –

Problemi correlati