Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Softwareentwickler (m/w) automatische Codegenerierung
Umsetzung, Neuprogrammierung und Weiterentwicklung in Simulink, TargetLink und C
EFS - Ingolstadt, Wolfsburg

Software Entwicklungsingenieur (m/w) TargetLink
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Continental AG - Nürnberg

Funktionsentwickler (w/m) Automobile
Entwicklung von modellbasierten Softwarelösungen in Simulink inklusive Autocode-Generierung
Bertrandt Ingenieurbüro GmbH - Frankfurt am Main

Produkt-Softwareentwickler/in Motorsteuerung
Entwicklung von Steuergeräte-Funktionen zur Regelung des Luftsystems für Benzin und Dieselmotoren
Robert Bosch GmbH - Schwieberdingen

Ingenieur (w/m) modellbasierte Entwicklung / Embedded Programmierung
Organisation und Durchführung von Projekten zur Integration von TargetLink in aktuelle Entwicklungsprozesse
dSPACE GmbH - Pfaffenhofen

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

die Veränderung der Parameter bei 1-D Lookup Table

 

DAFeinfach
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 66
Anmeldedatum: 07.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2017, 11:07     Titel: die Veränderung der Parameter bei 1-D Lookup Table
  Antworten mit Zitat      
Hallo Zusammen,

wie wir wissen, mit der Einstellung von "Table" und "BreakpointsForDimension1" 1-D Lookup Table kann man unterschiedliche Kurve beim Ausgang bekommen. Aber ist das möglich bei GUI etwa Code zu schreiben, um diese beide Parameter während der Verlauf von Simulation zu verändern. Dann kann man unterschiedliche Kurve in dem ganzen Verlauf von Simulation bekommen.

meine Code wie folgende
Code:
time_cycle = get_param('easy_model_sim','SimulationTime');
set_param('easy_model_sim/Lookup Table1','Table', '[0 1 0 1 0 1 0 1 0 1 0]');
    set_param('easy_model_sim/Lookup Table1','BreakpointsForDimension1', '[time_cycle:time_cycle+10]');
    % Update simulation if the model is running
        status = get_param('easy_model_sim','simulationstatus');
        if strcmp(status,'running')
             set_param('easy_model_sim','simulationCommand','Update');
        end


Leider habe ich eine Fehlermeldung bekommen.

Cannot change the dimensions of run-time parameter 'Table' in 'easy_model_sim/Lookup Table1'
from [1x2] to [1x11] while model is executing

Bedeutet das, man kann nicht die Parameter von 1-D Lookup Table während der Verlauf von Simulation verändern ?


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


Harald
Forum-Meister

Forum-Meister


Beiträge: 17.963
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 07.07.2017, 18:22     Titel:
  Antworten mit Zitat      
Hallo,

wenn du table oder breakpoints änderst, passt das ja nicht mehr zusammen. Wenn, dann müsste man beides auf einmal ändern, etwa so:
Code:
set_param('easy_model_sim/Lookup Table1','Table', '[0 1 0 1 0 1 0 1 0 1 0]' ,'BreakpointsForDimension1', '[time_cycle:time_cycle+10]');


Falls das nicht geht, sehe ich keine Möglichkeit, die Anzahl der Werte zu ändern. Die Fehlermeldung legt aber nahe, dass die Werte an sich durchaus änderbar sind. Es müssen nur weiterhin gleich viele (bei dir: 2) bleiben.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 66
Anmeldedatum: 07.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2017, 22:34     Titel:
  Antworten mit Zitat      
Hallo Harald,

wie wir gedacht, es geht nicht. Ich bekomme noch die gleiche Fehlermeldung.

Cannot change the dimensions of run-time parameter 'BreakpointsForDimension1' in
'easy_model_sim/Lookup Table1' from [1x2] to [1x11] while model is executing

Ich denke, wir können die Parameter "Table" während der Verlauf verändern. Aber als für 'BreakpointsForDimension1' kann man nicht bei der Verlauf verändern. Bedeutet das, die Parameter 'BreakpointsForDimension1' ist eine statische Parameter , kann nicht dynamisch verändert ?



Grüße
Jieshen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.963
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 08.07.2017, 08:12     Titel:
  Antworten mit Zitat      
Hallo,

wie gesagt:
Zitat:
Falls das nicht geht, sehe ich keine Möglichkeit, die Anzahl der Werte zu ändern. Die Fehlermeldung legt aber nahe, dass die Werte an sich durchaus änderbar sind. Es müssen nur weiterhin gleich viele (bei dir: 2) bleiben.

Alternativ von Anfang an 11 Werte.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 66
Anmeldedatum: 07.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2017, 10:55     Titel:
  Antworten mit Zitat      
Hallo Harald,


vielen Danke. Du bist richtig. Wenn man von Anfang 11 Werte einstellt, kann die Parameter 'BreakpointsForDimension1' während der Verlauf von Simulation verändert werden. Aber das ist nur gültig für eine bestimmt BreakpointsForDimension1, z.B. wie [20:(20+10)] oder [20.5:(20.5+10)].

Aber in meiner Code
Code:
function pushbutton_start_cycle_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_start_cycle (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
time_cycle = get_param('easy_model_sim','SimulationTime');
set_param('easy_model_sim/Lookup Table1','Table', '[0 1 0 1 0 1 0 1 0 1 0]');
    set_param('easy_model_sim/Lookup Table1','BreakpointsForDimension1', '[time_cycle:(time_cycle+10)]');
    % Update simulation if the model is running
        status = get_param('easy_model_sim','simulationstatus');
        if strcmp(status,'running')
             set_param('easy_model_sim','simulationCommand','Update');
        end


Gibt es noch Fehlermeldung

Invalid setting in 'easy_model_sim/Lookup Table1' for parameter 'BreakpointsForDimension1'.
Undefined function or variable 'time_cycle'

Ich habe schon mit der Code
Code:
time_cycle = get_param('easy_model_sim','SimulationTime');

den Wert von time_cycle definiert. Wieso bekomme ich diese Fehlermeldung ?
Bedeutet das, ich habe noch nicht den Wert von time_cycle bekommen ?


Grüße
Jieshen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.963
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 08.07.2017, 19:01     Titel:
  Antworten mit Zitat      
Hallo,

es kann sein, dass Simulink in einem anderen Workspace nach der Variable sucht. Bei Simulink typischerweise im Base Workspace.
Eine mögliche Abhilfe wäre, den String komplett zu konstruieren:
Code:
   set_param('easy_model_sim/Lookup Table1','BreakpointsForDimension1', ...
['[' num2str(time_cycle) ':' num2str(time_cycle+10) ']']);


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 66
Anmeldedatum: 07.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2017, 19:18     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe aufgrund deiner Vorschlag die Code verändert. wie Fogelnd

Code:

time_cycle = get_param('easy_model_sim','SimulationTime');
    set_param('easy_model_sim/Lookup Table1','Table', '[0 1 0 1 0 1 0 1 0 1 0]','BreakpointsForDimension1',  '[' num2str(time_cycle) ':'num2str(time_cycle+10) ']');
    % Update simulation if the model is running
        status = get_param('easy_model_sim','simulationstatus');
        if strcmp(status,'running')
             set_param('easy_model_sim','simulationCommand','Update');
 


Leider habe ich folgende Fehlermeldung bekommen.

'[' num2str(time_cycle) ':' num2str(time_cycle+10) ']'
should not be a MATLAB expression.

Bedeutet das , man kann num2str nicht wie das benutzen ?



Grüße
Jieshen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.963
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 08.07.2017, 21:30     Titel:
  Antworten mit Zitat      
Hallo,

dann verwende doch mal bitte den Debugger, um dem auf den Grund zu gehen. Ich kann das nicht für dich erledigen, da ich den kompletten Code und das Modell nicht habe.
Ist time_cycle vielleicht schon ein String? Dann braucht man natürlich nicht mehr umzuwandeln.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 66
Anmeldedatum: 07.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2017, 22:15     Titel:
  Antworten mit Zitat      
Hallo Harald,

die Anlage ist die einfache Modell. In dieser Oberfläche will ich mit der Haupt Knöpfe "Start", "Pause" und "Stop" die ganze Simulationsmodell kontrollieren. Als für die Nebenknöpfe "Start", "Pause" und "Stop" will ich nur die Block über Lookup Table kontrollieren. Das heißt, wenn ich nur den Haupt Knöpf "Start" drucke, läuft die ganze Modell, aber es scheint keine Graph in Scope. Nur wenn ich den Neben Knöpf "Start" drucke, läuft die Graph in Scope und immer zyklisch läuft. Wenn ich den Neben Knöpf "Stop" drucke, dann gibt es kein mehr Graph weiterhin. Deshalb denke ich, muss man die Code
Code:
time_cycle = get_param('test_sim','SimulationTime');

benutzten.

Leider es funktioniert nicht wie wir vorher besprochen. Deshalb wende ich an dich. Wenn du Zeit hast, kannst du für mich einmal gucken.



Grüße
Jieshen

test.zip
 Beschreibung:

Download
 Dateiname:  test.zip
 Dateigröße:  33.37 KB
 Heruntergeladen:  32 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.963
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 09.07.2017, 07:51     Titel:
  Antworten mit Zitat      
Hallo,

du hast ja viele solche set_param - Zeilen. Ich habe beispielhaft Zeile 114 angesehen und das dort so ersetzt
Code:
set_param('test_sim/Lookup Table1','Table', 'sin(0:0.01:2*pi)','BreakpointsForDimension1',  ['[' num2str(time_cycle) ':0.01:' num2str(time_cycle+ 2*pi) ']']);

und dann bekomme ich zumindest keine Fehlermeldung.

Das musst du dann eben konsequent durchziehen. Wenn es wo Probleme gibt, dann erstelle den String zuvor in einem separaten Schritt und schau dir an, wo die Probleme genau liegen.

Grüße,
Harald
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2018 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.