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

SimMechanics Schwerpunkt "CG" über m-file festleg

 

##Robert##
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2012, 20:42     Titel: SimMechanics Schwerpunkt "CG" über m-file festleg
  Antworten mit Zitat      
Hallo Zusammen,

ich bin gerade dabei einige Parameter eines SimMechanics (1.Generation) Body-Block über eine m-file "von außen" her festzulegen.

Der betreffende Teil des Codes sieht so aus:

Code:

set_param('ModelDoppelpendel/Pendel1',...
                  'Mass',num2str(M_Body1),...
                  'Inertia',mat2str(J_Body1),...
                  'CG',mat2str(Xg_Body1'),...
                  'AttachedToCS','CS1',...
                  'GraphicsMode','GFXFILE',...
                  'GraphicsFileName',[handles.filename_Body1(1:end-2) '.stl'])
 


Das funktioniert auch gut, bis auf den Schwerpunkt "CG", also die Zeile
Code:
'CG',mat2str(Xg_Body1'),...
. Der Code läuft zwar ohne Problem-Meldung durch aber beim öffnen des Body-Blocks kommt die Fehlermeldung "Error Id: MATLAB:class:InvalidEnumValue"

Ich habe dann mit
Code:
paramStruct = get_param('ModelDoppelpendel/Pendel1', 'ObjectParameters')
geschaut welche Parameter es gibt und danach mit
Code:
paramValue = get_param('ModelDoppelpendel/Pendel1','CG')
herausgefunden wie "CG" überhaupt aussieht. Es wurde
Code:
paramValue =
Left$CG$[0 0 0]$CS1$CS1$m$[0 0 0]$Euler X-Y-Z$deg$CS1$false$none
angezeigt. Es sah so aus, als ob die Position von "CG" im ersten Vektor festgelegt wird.

Als ich dann in diesen Vektor "mat2str(Xg_Body1')" einsetzte,
also den Code so
Code:
'CG',mat2str(Xg_Body1'),...
durch
Code:
'CG','Left$CG$[mat2str(Xg_Body1')]$CS1$CS1$m$[0 0 0]$Euler X-Y-Z$deg$CS1$false$none',...
ersetzte, lief alles problemlos durch und der BodyBlock ließ sich auch öffnen. Aber anstatt des richtigen (Zahlen)-Ergebnisses zeigte er mit "mat2str(Xg_Body1')" an, ist ja auch irgentiwie logisch wegen dem '-Zeichen.

Es gibt zwar dann noch den Parameter "CGPos" der auch die Position von "CG" angibt, aber wenn ich
Code:
'CGPos',mat2str(Xg_Body1'),...
schreibe passiert gar nichts.

Es ist zum verrückt werden. Ich habe leider keine Ahnung wie ich hier weiter kommen soll. Vielleicht ist die Lösung auch sehr leicht, nur seh ich sie grad nicht.

Könnte mit hier bitte jemand helfen?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


##Robert##
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2012, 12:15     Titel:
  Antworten mit Zitat      
Hallo Zusammen,

habe das Problem inzwischen gelöst.

Falls jemand mal ein ähnliches Problem hat, ist hier die Lösung (dies ist ein Callback innerhalb einer GUI zum verändern eines bestehenden SimMechanics-Modells):

Code:


    function Erstelle_Modell_callback(handles, eventdata)
     
        handles = guidata(gcbf);
       
        load_system('mblibv1');
        sys='ModelDoppelpendel';
        open_system(sys);
       
        density_Body1 = str2double(get(handles.Dichte_Body1,'String'));
        [M_Body1,Xg_Body1,J_Body1] = stl2sm(handles.filename_Body1(1:end-2),density_Body1);
 
        CG_Body1_alt = 'Left$CG$[0 0 0]$CS1$CS1$m$[0 0 0]$Euler X-Y-Z$deg$CS1$false$none';
        CG_Body1_neu = strrep(CG_Body1_alt,'CG$[0 0 0]',['CG$' mat2str(Xg_Body1')]);
       
        set_param('ModelDoppelpendel/Pendel1',...
                   'Mass',num2str(M_Body1),...
                   'Inertia',mat2str(J_Body1),...
                   'CG',CG_Body1_neu,...
                   'AttachedToCS','CS1',...
                   'GraphicsMode','GFXFILE',...
                   'GraphicsFileName',[handles.filename_Body1(1:end-2) '.stl']);

        guidata(gcbf, handles);
       
    end

 


Innerhalb von "set_param" kann ich nicht auf den Substring von dem Hauptstring "CG", welcher die Postition von "CG" bestimmt, zugreifen (jedenfalls ich nicht).

Aber wenn ich davor einen String mit dem gewünschten veränderten Substring definiere (also alten String mit "strrep" in neuen String umbauen), lässt sich dieser als neuer Wert des Hauptstrings "CG" setzten.

Gruß
Robert
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.