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

Simulink build auf dSpace

 

alex1991
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 15.11.16
Wohnort: ---
Version: Matlab R2015b
     Beitrag Verfasst am: 15.11.2016, 13:22     Titel: Simulink build auf dSpace
  Antworten mit Zitat      
Hallo,

ich bin gerade dabei, ein Programm für einen Modellprüfstand zu schreiben. dafür nutze ich Simulink. Das Simulink-Modell soll dann auf einer dSpace MicroLabBox laufen (quasi ein Microcontroller). Um das Programm zu exportieren, gebe ich den Befehl
Code:
rti_build('Programmname')
ein. Das ganze funktioniert auch. Allerdings werden meine Integratoren nicht zurückgesetzt.

Ich habe angegeben, dass bei fallender Flanke die Integratoren zurückgesetzt werden sollen. Davor habe ich einen Schalter gesetzt. In der Simulation werden die Integratoren auch zurückgesetzt, im dSpace-Test allerdings nicht. Wo kann ich anfangen zu suchen?

Liebe Grüße,
Alex

Porgrammteil.jpg
 Beschreibung:

Download
 Dateiname:  Porgrammteil.jpg
 Dateigröße:  76.1 KB
 Heruntergeladen:  477 mal
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2016, 18:09     Titel:
  Antworten mit Zitat      
Irgendwo solltest Du zu dem Programm C-Code finden können. Wenn Du Deinen Blöcken und Signalen sinnvolle Namen gibst und das Programm neu erzeugst, ist der Code halbwegs menschenlesbar. Am besten guckst Du da mal nach, ob der Code-Generator das gewünschte Verhalten überhaupt im Code umsetzt...
Private Nachricht senden Benutzer-Profile anzeigen
 
alex1991
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 15.11.16
Wohnort: ---
Version: Matlab R2015b
     Beitrag Verfasst am: 17.11.2016, 15:42     Titel:
  Antworten mit Zitat      
Hallo,

ich habe auch c-Code gefunden
Code:

    /* DiscreteIntegrator: '<S5>/Discrete-Time Integrator' incorporates:
   *  Constant: '<Root>/Start measuring'
   */
  if ((inertia_torque_P.Startmeasuring_Value <= 0.0) &&
      (inertia_torque_DW.DiscreteTimeIntegrator_PrevRese == 1)) {
    inertia_torque_DW.DiscreteTimeIntegrator_DSTATE =
      inertia_torque_P.DiscreteTimeIntegrator_IC;
  }

  if (inertia_torque_DW.DiscreteTimeIntegrator_DSTATE >=
      inertia_torque_P.DiscreteTimeIntegrator_UpperSat) {
    inertia_torque_DW.DiscreteTimeIntegrator_DSTATE =
      inertia_torque_P.DiscreteTimeIntegrator_UpperSat;
  } else {
    if (inertia_torque_DW.DiscreteTimeIntegrator_DSTATE <=
        inertia_torque_P.DiscreteTimeIntegrator_LowerSat) {
      inertia_torque_DW.DiscreteTimeIntegrator_DSTATE =
        inertia_torque_P.DiscreteTimeIntegrator_LowerSat;
    }
  }

  inertia_torque_B.DiscreteTimeIntegrator =
    inertia_torque_DW.DiscreteTimeIntegrator_DSTATE;

  /* End of DiscreteIntegrator: '<S5>/Discrete-Time Integrator'
 


Ich kann im Code jedoch keine Reset-Funktion erkennen. Möglicherweise ist es das PrevRese, aber dazu gibt es nichts, was es zurücksetzt

Grüße,
Alex

inertia_torque_usr.c
 Beschreibung:

Download
 Dateiname:  inertia_torque_usr.c
 Dateigröße:  1.41 KB
 Heruntergeladen:  472 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
alex1991
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 15.11.16
Wohnort: ---
Version: Matlab R2015b
     Beitrag Verfasst am: 17.11.2016, 18:11     Titel:
  Antworten mit Zitat      
Nachdem ich nun eine Weile den Code inspiziert habe, ist mi beim builden folgendes aufgefallen:

Code:

NOTE: The following option in the Configuration Parameters dialog has been
      used:

      Optimization:
      "Conditional input branch execution" On

      This leads to code optimization in which blocks are not computed if their
      outputs are not required in the simulation step, for example, if their
      output values are used as input for a Switch block and the Switch
      currently routes another signal. When the corresponding output signals
      are displayed in ControlDesk, their values are static.

      To ensure that the blocks are computed, turn off the
      "Conditional input branch execution" option and rebuild the model.
 


Ich werde morgen nochmal schauen, was passiert, wenn ich diese Option nicht aktiviere. Wobei ich bis jetzt diese Option nicht gefunden habe. Allerdings gibt es in simulink die Möglichkeit unter "Configuration Parameters" -> "Code Generation" -> "RTI general build options" -> "Compiler optimiziations" none einzustellen. Möglicherweise kann ich damit den Fehler verhindern.

Grüße,
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
alex1991
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 15.11.16
Wohnort: ---
Version: Matlab R2015b
     Beitrag Verfasst am: 18.11.2016, 08:55     Titel:
  Antworten mit Zitat      
Hallo,

ich glaube, dass die Zeilen
Code:

if ((inertia_torque_P.Startmeasuring_Value <= 0.0) &&
      (inertia_torque_DW.DiscreteTimeIntegrator_PrevRese == 1)) {
    inertia_torque_DW.DiscreteTimeIntegrator_DSTATE =
      inertia_torque_P.DiscreteTimeIntegrator_IC;
  }
 

doch den Integrator zurücksetzen. IC müsste dann für initial state stehen. Aber wo kann ich dann weiter suchen?

Ich habe in der .trc-Datei geschaut und festgestellt, dass dort kein Eingang für den Reset zur Verfügung steht. auf die tra- und trc-Dateien greift aber das dSpace-Programm zum Hochladen des Programms zu.

Hier die trc-Datei (tra kann ich nicht öffnen)
Code:

group "Discrete-Time\nIntegrator" -- block-group
      {
       block: "DiscreteIntegrator"
      }
         p_0_inertia_torque_real_T_0[0]
         {
          type:    flt(64,IEEE)*
          alias:   "Out1"
          flags:   OUTPUT|READONLY
 addr:    0x48053b38
}
         p_1_inertia_torque_real_T_0[9]
         {
          type:    flt(64,IEEE)*
          alias:   "gainval"
          flags:   PARAM
 addr:    0x48053b40
}
         p_1_inertia_torque_real_T_0[10]
         {
          type:    flt(64,IEEE)*
          alias:   "InitialCondition"
          flags:   PARAM
 addr:    0x48053b40
}
         p_1_inertia_torque_real_T_0[11]
         {
          type:    flt(64,IEEE)*
          alias:   "UpperSaturationLimit"
          flags:   PARAM
 addr:    0x48053b40
}
         p_1_inertia_torque_real_T_0[12]
         {
          type:    flt(64,IEEE)*
          alias:   "LowerSaturationLimit"
          flags:   PARAM
 addr:    0x48053b40
}





      endgroup -- block-group "Discrete-Time\nIntegrator"
 


Die Einstellung keiner Optimierung (wie oben beschrieben) hat nicht geholfen. Die vorgeschlagene Einstellung, die Optimierung auszuschalten, habe ich nicht gefunden
Private Nachricht senden Benutzer-Profile anzeigen
 
alex1991
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 15.11.16
Wohnort: ---
Version: Matlab R2015b
     Beitrag Verfasst am: 18.11.2016, 16:02     Titel:
  Antworten mit Zitat      
Hallo,

ich habe mir jetzt selbst einen Integrator geschrieben, der intern aufgrund des Codes einen Reset durchführen sollte. Auch dieser Reset wird wegoptimiert. Allerdings passiert das auch wieder nach der C-Code-Generation. Ich bin langsam am Ende mit meinem Latein.

Code:

function [y,swit] = integrator(enable)
%first half of the triangle
%yOld is persistent all times
persistent yOld;
if (isempty(yOld)) %at the beginning, yOld is not initialised
    yOld = 0; %at the beginning, yOld is 0
end
pause(0.1) %integrates every second
if(enable==0) %enable = 0 -> reset = active
    yOld=0; %set to beginning
    y=0; %set to beginning
else %enable-signal is active
    y=yOld+6; %slope is 60 rpm per sec =6rpm/0.1sec
end
if (y>=3000) %maximum of output signal is 3000 rpm
   y=3000;
   yOld=3000;
   swit=0;
else
    swit=1;
end
%save yOld for next step
yOld=y;
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
alex1991
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 15.11.16
Wohnort: ---
Version: Matlab R2015b
     Beitrag Verfasst am: 21.11.2016, 09:47     Titel:
  Antworten mit Zitat      
Was auch immer der Fehler war, weiß ich nicht. Nachdem ich mir überlegt habe, das Komplette Build und das dSpace-Programm zu löschen und alles neu zu builden, lief das Programm.
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.