Forum: Digitale Signalverarbeitung / DSP / Machine Learning Echtzeit-Simulation mit Simulink?


von Thomas W. (Gast)


Lesenswert?

Hallo,

kann man Simulink irgendwie dazu überreden? Mit Echtzeit meine ich hier
nicht, was man normalerweise in unseren Kreisen darunter versteht,
sondern dass eine Simulation auch wirklich in der Geschwindigkeit
abläuft wie in Echt. Also, z.B. dass eine Zeitkonstante von 3s auch
tätsächlich erst nach 3s erreicht wird und nicht so schnell wie der
Rechner kann. Oder, dass ein Rechteck von 0.1Hz aus dem "Pulse
Generator" auch wirklich 10s für eine Periode braucht, und nicht nur
im Computer.

Gruß, Thomas

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Mich hat auch im neuen Elektor (Aprilheft) gewundert, dass man mit
Matlab in Echtzeit DRM-Signale demodulieren kann - offensichtlich
gehts. Das sind immerhin NF-Signale um 12 kHz Mittenfrequenz, mit der
Soundkarte digitalisiert. Wäre schön, wenn das auch mit dem kostenlosen
Matlab-Clone Octave ginge.

von Ralf (Gast)


Lesenswert?

Hallo Thomas,

was definierst du als Echtzeit? Was du mit Simulink machst, ist eine
Simulation, d.h. die eigentliche Berechnung deines Modells dauert für
Simulink 0 Sekunden. Was Simulink macht:
- berechne alle Blöcke und liefere ein Ergebnis
- gehe zum nächsten Berechnungsschritt (abhängig vom Solver, variable
oder fixed step)
- friere die Simulationszeit ein
- berechne alle Blöcke und liefere ein Ergebnis
- gehe zum nächsten Berechnungsschritt
- usw...

Gehst du dann auf ein reales System (z.B. eine Autobox von dSPACE als
Regler) mit einer realen Strecke welches geregelt werden soll (z.B. ein
Motor oder Flugzeug) über, ist das Verhalten u.U. ein ganz anderes, weil
dort dann die Rechenzeit des Reglers auf der Autobox miteingeht.

Grüße,
Ralf

von Thomas W. (Gast)


Lesenswert?

Hallo zusammen,

hier mal was zum Hintergrund, damits etwas klarer wird:
Ich arbeite mit dem "Embedded Target for Motorola MPC555". Damit habe
ich eine Regelung aufgebaut, die in Echtzeit auf dem Tagret läuft. Diese
Regelung kommuniziert über CAN mit einem Simulink Model, von wo aus sich
Regelparameter, Sollwertvorgabe und Sampling-Time zur Laufzeit ändern
lassen. Außerdem lassen sich dort über ein Scope Verlauf von Istwert
und Stellgröße visualisieren.
Bis jetzt ist es so, dass ich den Sollwert von Hand ändern muß, indem
ich eine Constant-Source editiere (alles zur Laufzeit). Nun will ich
aber statt der Konstant-Quelle ein Rechtecksignal verwenden, welches
alle 5s die Führungsgröße ändert. Das Problem dabei ist, dass Simulink
sowas nicht in "Echtzeit" macht, sondern so schnell wie der Rechner
kann. Und das ist nunmal so schnell, dass meine Hardware davon
garnichts mitbekommt, egal wie lange ich die Periodendauer wähle. Alles
was ich will ist also, dass die Zeit in Simulink genauso schnell abläuft
wie unsere Reelle Zeit, und nicht dass wie im Moment auf der x Achse des
Scopes die 10s Periodendauer zwar richtig angezeigt wird, diese aber in
Wirklichkeit nur vielleicht 1ms dauert.
Das ganze ließe sich zwar sehr einfach als Echtzeitmodel fürs Target
generieren, kommt aber für mich nicht in Frage, da ich Regelprozess und
Benutzervorgaben strikt voneinander trennen will. So lassen sich dann
auch ohne Neucompillierung schnell änderungen vornehmen.
Wenns gar nicht anders geht benuzte ich halt die empfangenen CAN
Messages als Zeitbasis (die werden vom Target in Echtzeit alle 1ms
verschickt) und bastel mir daraus meine "Echtzeit" in Simulink.

Rock'n'Roll,
Thomas

von Björn (Gast)


Lesenswert?

Simulink lässt sich mit dem Real Time Target in Echtzeit betreiben.
Dafür wird ein extra Kernl gestartet der mit dem eigentlichen OS nichts
mehr zu tun hat.
Das die Sampling Rate begrenzt ist, versteht sich von selbst.
Zwei Links um einen Eindruck zu gewinnen:

http://www.mathworks.com/access/helpdesk/help/toolbox/rtwin/
http://www.mathworks.com/products/rtwt/

Björn

von Alex (Gast)


Lesenswert?

In welchen Preislagen bewegt man sich eigentlich, wenn man Matlab in
Verbindung mit solch spezieller Hardware nutzen möchte, auf der Seite
sind die Preise leider nicht frei zugänglich.

von Thomas W. (Gast)


Lesenswert?

@Björn
Danke für den Tip, werd mir das morgen mal anschauen. Aber nur dafür
wieder ne Toolbox deren Fähigkeiten kaum genutzt werden zu
registrieren, das werd ich wol kaum rechtvertigen können.
Dabei bräuchte Simulink ja einfach nur die Simulationszeit mit der
Systemzeit abzugleichen, das würde mir ja völlig reichen. Ich denke,
dass ein solches Feature gerade auch im Bildungsbereich für
anschaulichen Unterricht sinnvoll währe.

@Alex
Auf der Homepage ganz oben, links neben dem Suchfenster auf Store
klicken, da kannst du dir die Preise anschauen. Da ist aber immer noch
was drinn, wir zahlen z.B. als Hochschule nur 500€ für ein embedded
Target, laut Preisliste währen es 700€.
Aber damit ist es dann noch nicht getan, erst müssen noch die ganzen
Abhängigkeiten aufgelöst werden. So setzen die ganzen Targets den
"Realtime Workshop" und den "Realtime Workshop embedded Coder"
voraus, die kosten uns auch nochmal jeweis 500€. Kommerzielle Lizenzen
sind deutlich teurer. Und dann braucht man natürlich noch nen Compiler,
in meinem Fall Metrowerks CodeWarrior. Ich meine der kostet gut 7000€
für kommerzielle Nutzung!

Rock'n'Roll,
Thomas

von Björn (Gast)


Lesenswert?

Kannst du dir nicht ein Clock-Signal aus dem Target generieren lassen
und darüber dann deine Sollgröße "triggern"??? Hab so etwas ähnliches
mal mit einem VR-Tracking-System und UDP gemacht. Das hat eigentlich
ganz gut geklappt.

Björn

von Thomas W. (Gast)


Lesenswert?

Ich zitiere mich mal selber:

"Wenns gar nicht anders geht benuzte ich halt die empfangenen CAN
Messages als Zeitbasis (die werden vom Target in Echtzeit alle 1ms
verschickt) und bastel mir daraus meine "Echtzeit" in Simulink."

;)
Genauso mach ichs jetzt auch, aber ganz sauber find ich das ja nicht.

Gruß, Thomnas

von Björn (Gast)


Lesenswert?

Ok Punkt für dich ;-) Hab ich wohl überlesen ;-)))

Das Einzige was mir noch einfallen würde, wäre ne S-Function zu
schreiben, sich dort die Systemzeit zu holen und die dann so lange in
eine Schleife zu schicken, bis Systemzeit = Sampelperiod. Sauber ist
das aber auch nicht und mit Echtzeit hat das schon gar nichts zu tun.
Und wenn man noch nie etwas mit S-Functions in C gemacht hat, auch
nicht mal eben in ner halben Stunde erledigt.
Garantierte Echtzeit gibt es - AFAIK - nur mit dem RTW.

Björn

von Thomas W. (Gast)


Lesenswert?

So, läuft. Ich benutze jetzt den CAN Message-Trigger, der immer
ausgelöst wird wenn eine CAN Nachricht mit bestimmter ID ankommt um
eine Matlab Function aufzurufen. Diese Funktion erhöht dann jedes mal
den Wert einer Variablen um 0.001 (1ms ist die Abtastrate meiner
Regelung).
Damit steht mir dann in Simulink eine ziemlich genaue Uhr zur
Verfügung. Diese verhaspelt sich zwar schonmal wenn der Rechner mal
wieder was besseres zu tun hat, das ist aber für meine Zwecke egal und
bei geringerer Zeitauflösung verschwindet das Problem völlig.
Hat jemand ne Ahnung, wie man in Matlab an die Systemzeit kommt?
>>time [tab]
liefert nichts, und ein bischen genauer als
>>date
sollte es dann schon sein... ;)
Das "Real-Time Windows Target" werde ich mir aber auch noch
anschauen, villeicht ist das ja doch was für uns.

Gruß,
Thomas

von M. Doering (Gast)


Lesenswert?

Hi,

probiers mal mit getdate().
Da bekommst du Datum + Zeit.
Ich glaube so gar Millisekunden "genau".

Gruß

Matze

von Marco Pfister (Gast)


Lesenswert?

Guten Tag,

Um eine Simulation in Echtzeit laufen zu lassen bieten wir, die Firma
SisNova Enginering GmbH (www.sisnova.ch), ein ganz einfaches tool an,
das sisRealTime for Simulink. Es ist primär für die RealTime Simulation
mit DAQ Karten gedacht, wir bieten aber auch eine "abgespeckte
Version" für Zeitsynchronisation unter Simulink an. Im Gegensatz, zu
dem von The Mathworks angebotenen RealTime Windows Target, brauch unser
Lösung den RealTime Workshop nicht. Was natürlich auch die
Softwareanschaffungskosten um Faktoren günstiger macht.

Freundliche Grüsse

Marco Pfister
CEO
SisNova Engineering GmbH

von Thomas W. (Gast)


Lesenswert?


von Marco Pfister (Gast)


Lesenswert?

Diese Lösung ist zwar sehr einfach, ist jedoch nur für sehr langsame
Samplezeiten geeignet. Die SampleZeit wird nicht genau abgetastet da
unter Windows noch andere Prozesse laufen. Bei unserer Lösung wird der
Timer ganz genau eingehalten, deshalb sind auch SampleZeiten bis 500 us
möglich. Unser Timer läuft im Kernel mode

Freundliche Grüsse

Marco Pfister

von elektroroboter (Gast)


Lesenswert?

Hallo!
Ich bin neu in Target und mich würd interresieren,
wie man die "Echtzeitsimulation in Target durchführt.

Danke für antworten!

von Thomas W. (Gast)


Lesenswert?

Tut mir leid, aber ich versteh deine Frage nicht.
Du arbeitest also mit dem "Embedded Target for Motorola MPC555"?
Was genau willst du jetzt machen? Programme auf dem Target laufen immer
in Echtzeit.
Gib uns mehr Infos, dann kann dir villeicht auch geholfen werden...

von Weinga-Unity (Gast)


Angehängte Dateien:

Lesenswert?

Hallo! Interessantes Thema, beschäftige mich auch gerade mit so was
ähnlichem.

Ich habe für die UNI gemeinsam mit einem Kollegen ein Projekt gemeacht
(uC-LTI), in dem auf einem ATMega8 LTI-Systeme berechnet werden.
Funktionen: Mehrere Systeme, Systeme verlinken, verlinken der Ein- und
Ausgänge, Messung der Ein- und Ausgänge. Das alles kann über die
serielle Schnittstelle RS232 gemacht werden. Abtastzeiten is man ab 4ms
dabei. System 6. Ordnung (Tiefpass->Sys 4. Ordnung->Tiefpass) haben wir
mit 9ms bereits laufen gehabt. Neben 4 realen AD-Eingängen und 2 realen
AD-Ausgängen existieren auch noch 2 virtuelle Eingänge, die über die
RS232 gesetzt werden können -> Ersparniss eines Signalgenerators.

PC-Seitig gibts standalone Programme mit GUI für WIN32 und LINUX
(Screenshot im Anhang), dann eine Matlab-Version und eine
SCICOS-Version. Man hat am PC eine INI-Datei, in der steht, wieviele
Systeme, Systemmatrizen A,B,C,D und die Verlinkungsinformationen ADC1
auf Eingang von System 2 usw. Daraus werden dann die Workspace-Daten
generiert, die über die RS232 an da Board in einen Buffer im RAM
geschrieben werden.

Die Echtzeitfähigkeit in Matlab erzwingen wir so, dass beim Messpaket
eben der Berechnungszyklus mitgeliefert wird und daraus mit der
Abtastzeit der Zeitpunkt bestimmt werden kann (wird für die
Messaufnahme verwendet).

Jetzt wäre es interessant, wie man z.B. in Simulink einen Block
gestalten kann, der das System wiederspiegelt mit den Ein- und
Ausgängen, das System aber wirklich dann mit den Daten gefüttert wird.
Beispiel: uCLT-Simulink-Block verbunden mit Scope-> Oszilloskop

Von Matlab aus funktionierts. Man sagt messen 10 sekunden lang, dann
noch Eingangsvektoren für die virtuellen Eingänge mit Zeitindizes und
das tuts.

Ginge das wie beschrieben in Simulink? Wenn ja, wie? Schlagwörter,
Links, alles ist erwünscht außer Kritiken wie, warum nehmt ihr keinen
DSP (es ging im Projekt darum, was man mit möglichst wenig Hardware und
Resourcen alles machen kann; wie wir gesehen haben anscheinend doch ne
Menge; Haben mit dem System bereits Praktikums-Projekte nachgebaut, die
auf der UNI mit DSPACE gemacht wurden).


mfg Weichinger Klaus

von elektroroboter (Gast)


Lesenswert?

Zitat:

"Tut mir leid, aber ich versteh deine Frage nicht.
Du arbeitest also mit dem "Embedded Target for Motorola MPC555"?
Was genau willst du jetzt machen? Programme auf dem Target laufen
immer
in Echtzeit.
Gib uns mehr Infos, dann kann dir villeicht auch geholfen werden..."

Ich will mit "TARGET 3001!" eine beliebige Simulation durchführen.
Wenn man nun den Graphen startet, dann soll z.B. die Spannungslinie
erst nach 20 Sekunden die 20 Sekunden Markierung erreicht haben.

Danke für Antworten

von Thomas W. (Gast)


Lesenswert?

Na da bist du aber hier völlig falsch, mach am besten einen eigenen
Thread im "µC & Elektronik" auf.

@Klaus
interessantes Projekt, gibt es dazu eine Homepage oder sowas? Seh ich
das richtig, dass das Teil einfach nur ne Strecke unter
Echtzeitbedingungen simulieren soll? Werden daran dann Regler getestet,
oder wie verwendet ihr das im Praktikum?
Wie ihr das in Simulink machen könnt kann ich euch leider nicht sagen,
villeicht mit ner C S-Function.

von Thomas W. (Gast)


Lesenswert?

Mir ist da grad noch was eingefallen:
Ich hab zwar keine Ahnung von Target3001, aber soviel ich weiß ist die
Simulation SPICE basierend. Dann könntest du deine Echtzeitsimulation
vergessen.

von Weinga-Unity (Gast)


Lesenswert?

@ Thomas

Hallo! Ja, es wird einfach ein LTI-System in am AVR abgebildet und die
Elektronik verhält sich dann wie das überspielte LTI-System.

Im Praktikum werden dann z.B. Zustandsbeobachter+Zustandsregler aber
auch PID implementiert und getestet an der realen Strecke. Wie gesagt,
auch höhere Ordnungen möglich.

Ne, ne Homepage gibts leider nicht.

mfg Weichinger Klaus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.