Verfasst am: 07.07.2017, 11:07
Titel: die Veränderung der Parameter bei 1-D Lookup Table
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', '[01010101010]');
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');
ifstrcmp(status,'running') set_param('easy_model_sim','simulationCommand','Update');
end
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.
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 ?
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.
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', '[01010101010]');
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');
ifstrcmp(status,'running') set_param('easy_model_sim','simulationCommand','Update');
end
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:
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', '[01010101010]','BreakpointsForDimension1', '[' num2str(time_cycle) ':'num2str(time_cycle+10) ']');
% Update simulation if the model is running
status = get_param('easy_model_sim','simulationstatus');
ifstrcmp(status,'running') set_param('easy_model_sim','simulationCommand','Update');
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.
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
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
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
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.