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
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.
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
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
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
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.
@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
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
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
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
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
Hi, probiers mal mit getdate(). Da bekommst du Datum + Zeit. Ich glaube so gar Millisekunden "genau". Gruß Matze
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
Hier noch eine genial einfache Lösung: http://www.mathworks.com/support/solutions/data/1-15JAW.html?1-15JAW
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
Hallo! Ich bin neu in Target und mich würd interresieren, wie man die "Echtzeitsimulation in Target durchführt. Danke für antworten!
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...
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
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
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.
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.
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.