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

In Anwendung Parameter an Simulink-exe übergeben

 

Tobser92
Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2018, 10:23     Titel: In Anwendung Parameter an Simulink-exe übergeben
  Antworten mit Zitat      
Hallo Leute,

ich habe eine GUI mit einem Button, welche mittels Compiler in eine matlab-unabhängige Anwendung umgewandelt werden soll. Über den Button soll eine Simulation gestartet werden. Das Modell hab ich in eine exe generiert mittels rapid Simulation Target und tunable Parameter verwendet.
Mit
Code:
rtP=rsimgetrtp('testmodel','AddTunableParamInfo','on');

habe ich ein struct erzeugt, welches ich in einer .mat-File speichere.
Code:
save('myrtP.mat','rtP');

Die mat-File wird von der GUI geladen. Anschließend nehme ich manuell Parameteränderungen vor (da rsimsetrtpparam wohl vom Compiler nicht untersttzt wird) und wird erneut abgespeichert. Danach wird die exe ausgeführt und dabei die mat-File übergeben.

Zuletzt werden die Simulationsergebnisse in Diagramme eingetragen.

Hier mal der Code der Button-Funktion

Code:

load('myrtp.mat');
rtP.parameters(1).values(1)=str2num(get(handles.editmta, 'String'));        %Js
rtP.parameters(1).values(12)=str2num(get(handles.editla, 'String'));        %r
rtP.parameters(1).values(9)=str2num(get(handles.editra, 'String'));         %fw
rtP.parameters(1).values(11)=str2num(get(handles.editmp, 'String'));        %mp
rtP.parameters(1).values(5)=str2num(get(handles.edithpl, 'String'));        %d
rtP.parameters(1).values(6)=str2num(get(handles.editrp, 'String'));         %fp

%Festlegen der Art der Führungsgröße
fuehrungsgroesse=get(handles.fuhrung, 'value');
rtP.parameters(1).values(8)=fuehrungsgroesse;                               %fuehrungsgroesse

%Übergeben der Parameter der Führungsgröße
if fuehrungsgroesse == 1
    rtP.parameters(1).values(10)=str2num(get(handles.feld1, 'String'));     %hoehe
    rtP.parameters(1).values(15)=str2num(get(handles.feld2, 'String'));     %zeitsp
end
if fuehrungsgroesse == 2
    rtP.parameters(1).values(13)=str2num(get(handles.feld1, 'String'));     %steigung
    rtP.parameters(1).values(14)=str2num(get(handles.feld2, 'String'));     %zeitr
end
if fuehrungsgroesse == 3
    rtP.parameters(1).values(7)=str2num(get(handles.feld1, 'String'));      %frequenz
    rtP.parameters(1).values(4)=str2num(get(handles.feld2, 'String'));      %amplitude
end

%Übergeben der Anfangsbedingungen
rtP.parameters(1).values(3)=str2num(get(handles.alphastart, 'String'));     %alphastart
rtP.parameters(1).values(2)=str2num(get(handles.alphapunktstart, 'String'));%alphapunktstart

%Modellparameter speichern
save('myrtP.mat','rtP');

%Starten der Simulation
!GUIModell -p myrtP.mat

%Plotten der Simulationsergebnisse
load('GUIModell.mat')

%Alphapunkt
axes(handles.axes4);
plot(rt_tout, rt_alphadot)

%Alpha
axes(handles.axes1);
plot(rt_tout, rt_alfa)

%Moment
axes(handles.axes6);
plot(rt_tout, rt_M)
 


Nun zu meinem Problem:
In MatLab funktioniert das einwandfrei. Wenn ich dies aber compiliere mittels Compiler und die Testanwendung ausführe, werden die Ergebnisse im Diagramm ausgegeben. Wenn ich jedoch Parameteränderungen vornehme und erneut simuliere ändert sich das Ergebniss nicht.

Scheinbar werden die Änderungen nicht angenommen. Kann mr jemand helfen?

Vielen Dank im Voraus,

Grüße Tobser
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.06.2018, 20:21     Titel:
  Antworten mit Zitat      
Hallo,

ist es möglich, dass das Simulink-Modell auf eine woanders gespeicherte .mat zugreift?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Tobser92
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2018, 13:11     Titel:
  Antworten mit Zitat      
Den Gedanken habe ich auch gehabt. Ich habe dem Compiler die myrtP.mat mit übergeben. Ich weis also nicht, wo diese dann später liegt. Auch wenn ich das Struct in einer neuen Datei speichere und der exe übergebe, wird die Grundeinstellung (ohne Parameteränderungen) simuliert.
Code:


%Modellparameter speichern
save('myrtPneu.mat','rtP');

%Starten der Simulation
!GUIModell -p myrtPneu.mat
 

Ich sehe zwei mögliche Problemursachen:
1. die Parameterübergabe funktioniert generell in der Anwendung nicht
oder
2. bei der Übergabe an die exe wird die gespeicherte mat-File nicht gefunden

Beim Starten der Simulation wird in dem Ordner, indem sich die Anwendung befindet, dann die myrtP.mat erstellt.

Wie kann ich es dann schaffen, dass er auf die neu erstellte mat-File zugreift?
Das war mein Versuch, der leider nicht funktioniert
Code:

Der Grundgedanke war, dass ich in das Verzeichnis wechsle, wo sich die Anwendung befindet, da ich dachte, dass sich mit mat-File ebenfalls dort befindet.

Oder kann ich mir den Pfad zu dieser myrtP.mat, die ich dem Compiler übergeben habe, rausbekommen, um anschließend in dieses Verzeichnis zu wechseln?

Oder gibt es sonst noch Lösungsansätze dafür?
Private Nachricht senden Benutzer-Profile anzeigen
 
Tobser92
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2018, 14:07     Titel:
  Antworten mit Zitat      
Ich habe jetzt den Pfad, unter den dem die erzeugte .mat-File zu finden ist direkt angegeben. In MatLab funktioniert das prima
Code:
!GUIModell -p C:\Users\...\for_testing\myrtP.mat

Somit ist doch die erzeugte Datei eindeutig angesprochen. Ich frage mich jetzt, ob es überhaupt möglich ist, in einer compilierten Anwendung einer Simulink-Exe eine .mat-File als Parameter zu übergeben???

Nachtrag:
Des Weiteren hab ich herausgefunden, dass die myrtP.mat korrekt geändert wurde. Ich hatte auch den Verdacht, dass die Struct nicht geändert wird. Damit liegt das Problem auf jeden Fall bei der Übergabe.
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.