Verfasst am: 19.06.2009, 15:31
Titel: Initialisierung einer Maske, Problem mit set_param
Hallo liebe Leidensgenossen,
um euch das WE zu verschönern hier noch eine kleine Nuss zum Knacken. Folgendes Problem:
In einem Subsystem befinden sich zwei From-Blöcke. Der eine von ihnen bekommt immer einen Minuten-Impuls (Imp_min).
Der andere From-Block bekommt einen Impuls, der von der äusseren Beschaltung abhängt. Meine Idee ist, dass über ein PullDown-Menü in der Maske des Subsystem die Impulsart ausgewählt werden kann (h, d, w, etc.) und sich damit das Tag des From-Blocks ändert. Das funktioniert bisher nur für den angezeigten Namen des Subsystems.
Folgender Code steht dafür im Initialization Menü der Maske:
Code:
% Auswerten der Impulsart aus dem PullDown-Menü switch PullDown
case1
StrPD = 'h';
case2
StrPD = 'd';
case3
StrPD = 'w';
case4
StrPD = 'm';
case5
StrPD = 'y';
end
% neue Impulsart festlegen
TagNew = ['Imp_' StrPD];
% Pfade der beiden From-Blöcke ermitteln
FromPath = find_system(gcb,'LookUnderMasks','all','BlockType','From');
% Aktuelles Tag von From-Block aus Pfad 1 auslesen
TagOld = get_param(FromPath(1), 'GoToTag');
% Imp_min muss bestehen bleiben, also bei gleichem String den anderen Pfad ändern ifstrcmp(TagOld, 'Imp_min') set_param(FromPath(2), 'GoToTag', TagNew);
else set_param(FromPath(1), 'GoToTag', TagNew);
end
Bei der Ausführung wird mir dieser Fehler angezeigt:
MATLAB error message: Error using ==> set_param
Invalid Simulink object specifier.
Die seperate Ausführung des Codes im CommandWindow funktioniert.
Kann es sein das bei der Initilisierung eines Blocks keine änderung der Block-Bezeichnung mehr möglich ist?
Danke fürs Lesen und eure Hilfe!
Ein schönes WE
Volker
Ich habe den Fehler gefunden. Bei der Abfrage der Systempfade mit find_system werden Zellen übergeben, die aber von dem set_param Befehl nicht verarbeitet werden können. Es muss also eine Umwandlung in String erfolgen:
Code:
...
% Pfade der beiden From-Blöcke ermitteln
FromPath = find_system(gcb,'LookUnderMasks','all','BlockType','From');
% Umwandeln der Zellen in String
FromPath1 = char(FromPath(1));
FromPath2 = char(FromPath(2));
% Aktuelles Tag von From-Block aus Pfad 1 auslesen
TagOld = get_param(FromPath1, 'GoToTag');
% Tag des From-Blocks ändern ifstrcmp(TagOld, 'Imp_min') set_param(FromPath2, 'GoToTag', TagNew);
else set_param(FromPath1, 'GoToTag', TagNew);
end
% Ende der Initilisierung -------------------------------------------------
Kurzer Nachtrag:
Ein Kollege gab mir den Hinweis das bei den Cell-Arrays nicht mit runden sondern mit geschweiften Klammern gearbeitet werden muss, wenn man die einzelnen Zellen auslesen will
So würde der Code aus meinem ersten Post sich nur geringfügig ändern:
Code:
...
% Pfade der beiden From-Blöcke ermitteln
FromPath = find_system(gcb,'LookUnderMasks','all','BlockType','From');
% Aktuelles Tag von From-Block aus Pfad 1 auslesen
TagOld = get_param(FromPath{1}, 'GoToTag');
% Tag des From-Blocks ändern ifstrcmp(TagOld, 'Imp_min') set_param(FromPath{2}, 'GoToTag', TagNew);
set_param(FromPath{2}, 'BackgroundColor', Color);
else set_param(FromPath{1}, 'GoToTag', TagNew);
set_param(FromPath{1}, 'BackgroundColor', Color);
end
% Ende der Initilisierung -------------------------------------------------
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.