2008-09-04 18 views
1

Ich habe eine Simulink xPC-Zielanwendung, die Blöcke mit diskreten Zuständen bei mehreren verschiedenen Abtastraten und einige Abschnitte mit kontinuierlichen Zuständen enthält. Meine Absicht, die kontinuierlichen Zustände beizubehalten, dient der besseren numerischen Integration.Ausführen eines Simulink xPC-Blocks mit einer höheren Rate als der kontinuierlichen Rate

Was verursacht das Problem: Ein Block liest ein Gerät mit einer sehr schnellen Rate (500 Hz). Der Rest der Anwendung kann und sollte mit einer langsameren Rate laufen (z. B. 25 oder 50 Hz), weil es zu viel ist, um sie mit der höchsten Rate auszuführen, und weil der Prozessor einfach nicht einen vollen Anwendungszyklus in die 0,002 Sekunden drücken kann der schnelleren Rate. Also ich brauche beide Tarife. Die kontinuierlichen Zustände laufen per Definition in Simulink jedoch mit der schnelleren diskreten Rate der gesamten Anwendung ab! Dies bedeutet, dass überall, wo ich kontinuierliche Zustände habe, sie gezwungen sind, mit 500 Hz zu laufen, wenn 25 Hz dies tun würden!

Gibt es eine Möglichkeit, die kontinuierlichen Zustände in xPC-Ziel auf eine Rate zu erzwingen, die nicht die schnellste in der Anwendung ist? Oder gibt es alternativ eine Möglichkeit, bestimmte Blöcke schneller laufen zu lassen als der Rest der Anwendung?

Antwort

0

Meine Annahme ist, dass es nicht möglich ist. Eine Möglichkeit, dies zu erreichen, besteht darin, die kontinuierlichen Zustände durch diskrete zu ersetzen (vielleicht mit einer mittleren Rate, sagen wir 100 Hz) und mir die Daumen zu drücken, dass der Genauigkeitsverlust erträglich ist.

Vielleicht ist es möglich, einen Block zu isolieren und es separat mit einer höheren Geschwindigkeit irgendwie laufen zu lassen, aber ich weiß es nicht.

2

Sie denken über kontinuierliche Löser in der falschen Weise - kontinuierlich bedeutet nicht nur, dass es so schnell wie möglich ausgeführt wird - es verwendet einen grundlegend anderen Algorithmus zur Lösung der Gleichungen als diskret. Aus diesem Grund müssen sie mindestens so schnell wie die diskreten Löser ausgeführt werden.

Von Using Simulink:

Continuous Lösern verwenden numerische Integration Ein kontinuierliche Zustände zum aktuellen Zeitpunkt Schritt von den Zuständen bei vorhergehenden Zeitschritten und die Zustands Derivate des Modells zu berechnen. Kontinuierliche Löser verlassen sich auf die Blöcke des Modells, um die Werte der diskreten Zustände des Modells zu jedem Zeitpunkt Schritt zu berechnen.

Mathematicians haben zur Lösung der gewöhnlichen Differentialgleichungen (ODE), dass repräsentieren die Zustände der kontinuierlichen dynamischer Systeme eine breite Vielfalt von numerischer Integration Techniken entwickelt. Simulink bietet eine umfangreiche Reihe von festen Schritt-und variable Schritt kontinuierliche Löser, jede Umsetzung einer spezifischen ODE-Lösung Methode (siehe Solvers).

Diskrete Löser existieren in erster Linie zu lösen rein diskrete Modelle. Sie berechnen die nächste Simulationszeit Schritt für ein Modell und nichts anderes. Sie tun berechnen nicht kontinuierliche Zustände und sie verlassen sich auf die Blöcke des Modells, um die diskreten Zustände des Modells zu aktualisieren.

So das Ergebnis ist, dass keine es nicht gut genug ist für den Dauerlauf hat langsamer als die schnellste diskreten Solver - sonst sind sie per definitionem nicht kontinuierlich. Sie sollten überdenken, warum Sie sie als fortlaufend angeben.

Was möchten Sie erreichen, indem Sie die kontinuierlichen Solver verlangsamen? Ist dies ein Simulationszeit/Leistungsproblem?

-Adam

0

wirklich kontinuierliche Berechnung ist in einem digitalen Prozessor, wie beispielsweise den Computer unmöglich.

Was MATLAB/Simulink mit "kontinuierlich" meint, ist "Ich werde (dynamisch) versuchen zu erraten, welche diskrete Schrittgröße klein genug ist, so dass der Diskretisierungsfehler in Ihrer Anwendung sehr klein ist".

Wenn Sie bereits wissen, dass Ihre 20ms (50Hz) klein genug sind, dann verwenden Sie diskret - 50Hz.