WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Crash-Kurs in Real Time Programmierung mit Simulink

 

RienSte
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.09.15
Wohnort: Salzburg / Österreich
Version: ---
     Beitrag Verfasst am: 08.09.2015, 08:24     Titel: Crash-Kurs in Real Time Programmierung mit Simulink
  Antworten mit Zitat      
Hallo zusammen,

ich steige gerade in das Thema der Real Time Programmierung mit Matlab und Simulink ein. Allerdings gibt es da noch ein paar Stolpersteine...
Hier mal die Rahmenbedingungen: es stehen mir Matlab / Simulink in der Version R2014b mit den Toolboxen: Control Systems, Signal Processing, Matlab / Simulink Coder und Stateflow zur Verfügung.

Programmiert wird eine MicroAutoBox II (DS1401 / 1511) von dSPACE.

Erfahrung in der uC-Programmierung habe ich mit den Systemen von NI (LabView) und vom Arduino. Hier läuft das nun allerdings etwas anders ab, wie ich (leider) feststellen musste.

Hier mal meine Fragen:
1) Gibts irgendwo einen Crash-Kurs bzw. ein Tutorial wo die Grundlagen erklärt werden?
2) konkeret: wie "zeichnet" man in Simulink die Initialisierungsphase? Also den Bereich, der nicht zyklisch durchlaufen wird und in dem die Variablen deklariert werden? Ich weiß, dass das normalerweise on demand gemacht wird, allerdings möchte ich einen gleitenden Mittelwert Filter realisieren (oder einen x-beliebigen Filter) und bräuchte dafür ein Array bzw. irgendeine Art von Schieberegister / Ringpuffer. Das gehört aber erstmal deklariert, denn wenn das immer wieder gemacht wird, ist es ja immer wieder leer bzw. mit den Anfangswerten gefüllt. Den FIFO-Block habe ich mir mal angesehen, aber daraus werde ich irgendwie nicht schlau.

EDIT: kurze Anmerkung: den Filter würde ich gerne mit einer Embedded Matlab / C / S Function realisieren. Außer es geht anders komfortabler...

Vielen Dank schon mal im Voraus!!!

Grüße,
Stephan
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2015, 09:21     Titel:
  Antworten mit Zitat      
Guck mal hier: http://de.mathworks.com/help/simuli.....ovingaverageobsolete.html

Und die Initialisierung ist in Simulink mehr so implizit. Normalerweise wird alles mit 0 Initialisiert. So lange das in Ordnung ist, musst Du nichts unternehmen.
Private Nachricht senden Benutzer-Profile anzeigen
 
RienSte
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.09.15
Wohnort: Salzburg / Österreich
Version: ---
     Beitrag Verfasst am: 08.09.2015, 09:35     Titel:
  Antworten mit Zitat      
Danke für den Link! Der Moving Average Filter wurde laut der Seite vom Discrete FIR Filter abgelöst. Ich werde den mal probieren.

Das mit der Initialisierung bei Simulink ist mir klar, aber der C-Compiler kann damit nicht umgehen. Wenn ich also einen Embedded-Code einbaue, in dem ich diverse Variablen verwende, muss ich diese vorher (einmalig beim Programmaufruf) irgendwo mal definiert und initialisiert haben. Sonst gibt mir der Compiler einen Fehler aus (undefined variable).
Private Nachricht senden Benutzer-Profile anzeigen
 
RienSte
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.09.15
Wohnort: Salzburg / Österreich
Version: ---
     Beitrag Verfasst am: 08.09.2015, 13:44     Titel:
  Antworten mit Zitat      
Hallo nochmal,

ich habe mir jetzt mal die "Custom Code" Blöcke der Simulink Coder Library angesehen. Hier lassen sich Header-Argumente (in C) integrieren, unter anderem auch Variablendeklaration. Das geht genau in die Richtung, die ich meine. Im kompilierten C-File stehen dann die Variablen, die ich (bspw.) im Block "System Start" deklariere in der

Code:

static void first_steps_initialize(void)
{
}
 


So, nun müsste ich nur noch im eigentlichen Modell darauf zugreifen können. Hier ist nun die Frage: wie?
Der Embedded-Matlab-Code-Block kann kein C, die S-Functions lesen beim Kompilieren nicht den "System Start"-Block und laufen daher in einen Fehler ==> ergo muss ich hier wieder die Variablen deklarieren, was dann ja aber wieder zyklisch passiert und ich wieder nichts zwischenspeichern kann.

Stelle ich mich hier äußerst dumm an? Wie gesagt, meine Erfahrung mit Simulink und Realtime Programmierung beschränkt sich auf ein Minimum.

PS und OT: In LabView ging das alles extrem einfach. Schieberegister-Block, Signalleitung auf der einen Seite rein, auf der anderen wieder raus. Entweder nach FIFO-Prinzip einen Wert oder das gesamte Register als 2D-Vektor.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2015, 13:51     Titel:
  Antworten mit Zitat      
Bis jetzt bin ich nie in die Verlegenheit gekommen, dass ich C-Code in meine Simulink-Modelle einfügen musste, um irgendwas auf einem dSpace-System realisieren zu können. Normalerweise existieren zu allem, was man braucht fertige Blöcke in Simulink, die sich auch problemlos in C-Code übersetzen lassen und dann auch kompilierbar sind.

Ansonsten gibt es in den Simulink Model Properties irgendwo den Punkt "Custom Code" oder so. Vielleicht kannst Du die Deklarationen dort unterbringen?
Private Nachricht senden Benutzer-Profile anzeigen
 
RienSte
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.09.15
Wohnort: Salzburg / Österreich
Version: ---
     Beitrag Verfasst am: 08.09.2015, 14:34     Titel:
  Antworten mit Zitat      
Ja, wahrscheinlich stelle ich mich zu blöd an Very Happy aber mein Problem ist an sich klar, oder? Wie würde sich das ohne Custom-Code realisieren lassen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2015, 19:11     Titel:
  Antworten mit Zitat      
Ja, mit dem Filterblock. Oder willst Du noch andere Dinge machen?

Vielleicht musst Du Dir einfach mal ein Simulink-Tutorial angucken...
Private Nachricht senden Benutzer-Profile anzeigen
 
RienSte
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.09.15
Wohnort: Salzburg / Österreich
Version: ---
     Beitrag Verfasst am: 09.09.2015, 07:32     Titel:
  Antworten mit Zitat      
Wie gesagt, Simulink und die Reglermodellierung an sich sind nicht das Problem. Ich komme halt mehr aus der textbasierten Programmierung bzw. kenne ich eben LabView, das ist deutlich stärker auf die Programmierung fokussiert. Simulink habe ich bisher nur als reines Simulationstool genutzt.

Mit dem Filterblock bin ich erstmal glücklich, danke!

Aber zu meiner (und deiner) anderen Frage: wo findet man gute Tutorials für den Einstieg in die Realtime-Programmierung? Wenn ich danach suche finde ich immer nur Tutorials für die Toolbox Simulink Realtime, diese ist aber bei mir nicht im Einsatz.

Danke nochmal für die Hilfe!!
Private Nachricht senden Benutzer-Profile anzeigen
 
RienSte
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.09.15
Wohnort: Salzburg / Österreich
Version: ---
     Beitrag Verfasst am: 09.09.2015, 15:06     Titel:
  Antworten mit Zitat      
Hallo nochmal,

so... jetzt hat sich ein neues Problem aufgetan. Für die Messung von Beschleunigungssignalen möchte ich gerne einen variablen Offset realisieren. Die Lage des Beschleunigungssensors ist nicht 100 %ig bestimmt (Einbau in einem Fahrzeug), das heißt der Offset muss sich ständig neu einstellen, damit eine Integration (brauche die Geschwindigkeit) möglich ist.

Nun sind wir wieder bei der Mittelwertbildung... ich würde also gerne laufend den Mittelwert der letzten x Samples bilden und das Signal dann um diesen Wert verschieben.

Wie würdet ihr so etwas lösen?

Danke!

Zuletzt bearbeitet von RienSte am 09.09.2015, 15:57, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2015, 15:20     Titel:
  Antworten mit Zitat      
Grundsätzlich unterscheiden sich Simulink für Simulationen und Simulink für Echtzeitanwendungen erstmal nicht voneinander. Da kannst Du auch jedes normale Simulink-Tutorial durcharbeiten. Das Denken in Signalflussplänen ist aber etwas gewöhnungsbedürftig...

Statt den Mittelwert zu berechnen und vom Signal abzuziehen, kannst Du auch gleich in Matlab ein FIR-Hochpass auslegen und das mit einem Discrete FIR-Filter in Simulink einbauen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.