|
|
Von der Zeit (diskret) abhängige Ausgabewerte |
|
razmatazz |

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 18.08.11
|
 |
|
 |
Wohnort: Mönchengladbach
|
 |
|
 |
Version: R2010b
|
 |
|
|
 |
|
Verfasst am: 23.08.2011, 22:51
Titel: Von der Zeit (diskret) abhängige Ausgabewerte
|
 |
|
 |
|
Guten Abend,
ich versuche eine Steuerung für einen Industrieroboter zu erstellen, wobei die Gelenk-Winkelstellungen, -geschwindigkeiten, -beschleunigungen als Sollwerte ausgegeben werden. Die Ausgabe soll in zeitlich definierten Intervallschritten erfolgen.
Mein Problem ist nun, dass ich nicht weiß, wie ich authentisch und realitätsnah diese Ausgabe umsetzen soll, da ich nicht weiß, wie Matlab in Echtzeit externe Komponenten wie Motoren ansteuert. Ich habe zwar 2-3 Tutorials gelesen, bzw. überflogen, verstand aber nur Bahnhof, zumal sie sich auf spezielle Boards mit Ein- und Ausgängen bezogen, was mir nicht zur Verfügung steht und daher nicht relevant ist.
Gibt es spezielle Anweisungen, mit denen man die Werte aus Variablen weiterleiten kann?
Gibt es eine Möglichkeit eine Zeitvariable mitlaufen zu lassen, bzw. wäre eine Formulierung über eine if-Bedingung (IF zeit=0.5s, dann leite den Wert aus Variable x weiter) legitim und "realitätsnah". Matlab rechnet die Ergbenisse ja i.d.R. viel schneller aus, als die Werte ausgegeben werden sollen.
Ich habe die "timer"Funktion gefunden, aber verstehe deren Anwendung, bzw. die callback-Funktion nicht. Sollte das die Antwort auf meine Frage sein, wäre ich über ein sehr einfaches Beispiel dankbar.
Umgekehrt müssen die umgesetzten IST-Werte, aus dem angesteuerten System, abgetastet und rückgeführt werden. D.h. ein Ablegen der Sollwerte in eine Matrix, mit einer Zeitspalte, funktioniert nicht, da sie nicht unabhängig vom IST-Zustand generiert werden können.
Das Ziel ist es, dass die Steuerung so aussieht, als könne sie ohne große Modifikation ein reales System ansteuern kann.
Was ich also von euch erbitte ist:
-Im Falle, dass die timer-Funktion die Lösung ist, ein sehr einfaches Beispiel (insbesondere der Callbackfunktion)
-Eine Aussage, ob es legitim ist, es über eine if-Bedingung umzusetzen und ein paar Stichworte, nach denen ich weitersuchen kann
-Eine Beschreibung, wie Matlab als Echtzeitsteuerung funktioniert
Vielen Dank für das Durchlesen meiner Fragen
und mit freundlichem Gruß verbleibe ich bis zu eurer Antwort,
Christoph
|
|
|
|
|
razmatazz |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 18.08.11
|
 |
|
 |
Wohnort: Mönchengladbach
|
 |
|
 |
Version: R2010b
|
 |
|
|
 |
|
Verfasst am: 25.08.2011, 10:34
Titel:
|
 |
|
 |
|
Ich muss leider mal pushen, da seit gestern Abend nur noch einer reingeschaut hat, und bisher noch keiner antworten konnte.
Ich meine: ist diese Art legitim, um "so zu tun" als ob es eine zeit-intervallmäßige Ausgabe von Werten gibt? Die Ausgabe und Berechnung beschränken sich beispielhaft auf den Plot, zu dem ich im Folgenden auch nochmal eine Frage habe:
Oder gibt es andere Möglichkeiten die Ausgabe "real" zu gestalten. Ich möchte ungern einfach alles runterrechnen lassen, und dann sagen: "Die Ausgabe erfolgt natürlich in zeitlich definierten Abständen, wurde hier aber nicht implementiert".
Mir würden auch Stichwörter und/oder eine kurze Beschreibung der Funktionsweise von Matlab in dieser Beziehung helfen, dann kann ich nochmal suchen und mir Gedanken machen, wie man die Echtzeit "simulieren" kann.
[Das ganze ist für eine Abschlussarbeit, nur leider ist mein Prof. im Urlaub, und kann das nicht mehr mit im abklären, wie man und ob man das umsetzen soll. Nur davon hängt jetzt ein großer Teil des Programmier"stils" ab.]
*
Über "getframe" und "movie" wollte es einfach nicht funktionieren, weil Matlab gewisse Frames als "uninitialised" (** Für die Suchfunktion Fehlermeldung unten) angesehen hat. Habe auch einen Grund für den Fehler gefunden: durch die Bedingung werden nur bestimmte Frames geschrieben, und zum Zeitpunkt t=0.008 z.B. existiert kein Frame. Mit der untenstehenden Anpassung kommt aber Fehler (***), dass das Argument von M den falschen Typ hat. Aber durch das hinzuaddieren von "1" ist doch das Argument ein reel positiver Wert?!
Mit freundlichem Gruß ,
Christoph
**
***
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 25.08.2011, 12:33
Titel:
|
 |
Hallo razmatazz,
Deine Frage sprengt den Rahmen für eine knappe und präzise Antwort. Für ein Echtzeit-Programmier-System muss man einfach mehr als ein paar Tutorials lesen. Per TIMER Funktion lassen sich zwar einige Real-Time-Features nachbilden, allerdings kann z.B. eine automatische Festplatten-Defragmentierung des Betriebssystems einen TIMER-Callback schonmal um eine Sekunde oder Minute verzögern. Und Programme, die _fast_ Real-Time-Eigenschaften haben, haben genau genommen _gar keine_.
Zum zweiten Teil der Frage: In "M(t)" muss t unbedingt einen ganzzahligen Wert größer als 0 haben.
Gruß, Jan
|
|
|
razmatazz |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 18.08.11
|
 |
|
 |
Wohnort: Mönchengladbach
|
 |
|
 |
Version: R2010b
|
 |
|
|
 |
|
Verfasst am: 25.08.2011, 13:02
Titel:
|
 |
Hey, danke für die Antwort.
Wenn das so komplex ist, dann wird das auch nicht erwartet. Werde dann einfach weiter mit der Programmierung machen, es runter rechnen lassen, unter de Annahme, dass die Ausgabe in den gewünschten Abschnitten erfolgt. Geht sich primär darum, mit der Umsetzung zu zeigen, dass die Trajektorieplanung etc. so funktioniert, wie mein Steuerungsentwurf es vorsieht.
Wäre sein Assistent nicht auch im Urlaub, würde ich ihn mit diesen Fragen belangen.
Aber haben sie Dank, das hilft mir schonmal weiter.
Zur fehlermedlung: Mist, hab Integer verwechselt. Ganzzahliger Datentyp... Aber wenn ich dann M( (t+1)*1000 ) schreibe, ist das Argument doch ganzzahlig und größer 0. Dennoch wird die gleiche Fehlermeldung erzeugt.
Mit freundlichem Gruß,
Christoph
Edit: Hm, man kann immer nur den letzten beitrag editieren:
Es sollte heißen:
Hatte eine falsche Version kopiert, eine von vielen Rumprobierereien
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 25.08.2011, 14:44
Titel:
|
 |
Hallo razmatazz,
Zitat: |
Aber wenn ich dann M( (t+1)*1000 ) schreibe, ist das Argument doch ganzzahlig und größer 0. |
Bist Du da sicher? Obwohl MATLAB das Gegenteil behauptet? Dann probiere es mal aus:
Ohne Runden bleiben da also auf jeden Fall Fehler durch die begrenzte Anzahlö von Nachkommastelle.
Gruß, Jan
|
|
|
razmatazz |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 18.08.11
|
 |
|
 |
Wohnort: Mönchengladbach
|
 |
|
 |
Version: R2010b
|
 |
|
|
 |
|
Verfasst am: 25.08.2011, 16:18
Titel:
|
 |
Da wurd ich aber genatzt.
Müsste man eine zweite Variable mitlaufen lassen.
Mit freundlichem Gruß,
cristoph
[Falls hier ein Anfänger bzgl. der movie() Funktion liest: bei vielen Frames ist irgendwann der Arbeitsspeicher voll --> Lösung: direkt in eine .avi Datei speichern.
Siehe dazu: http://www-e.uni-magdeburg.de/bueck/matlab.pdf (~S.12), oder Schlagworte: avifile, addframe, movie2avi
Geht aber auch zu Lasten der Rechenzeit!
Oder in eine .gif Datei
http://www.gomatlab.de/animiertes-gif-mit-matlab-t2795.html (dort ist auch das mit der 2. Laufvariable zu sehen)]
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|