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-Modell zu C-Code exportieren und in C-Prog verwende

 

TransporterXXL

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2017, 21:17     Titel: Simulink-Modell zu C-Code exportieren und in C-Prog verwende
  Antworten mit Zitat      
Ich habe das folgende Simulink-Modell:

Ich möchte das Modell als C-Code exportieren und in einem C-Programm verwenden. Das Target habe ich dazu schon auf "Embedded Coder" ("Code Generation") geändert und "continuous time" sowie "Reusable function" ("Interface") aktiviert. Es ist auch eine feste Schrittweite von 0.1 für den Solver eingestellt.

Außerdem habe ich das Modell mit einem Testmodell getestet:

Das Ergebnis (Scope) sieht so aus:

Jetzt habe ich ein C-Programm geschrieben, dass eigentlich das gleiche tuen sollte wie das Testmodell:
Code:
#include <stddef.h>
#include <stdio.h>
#include "pid_controller.h"            /* Model's header file */
#include "rtwtypes.h"

struct MODEL
{
    RT_MODEL_pid_controller_T model;
    B_pid_controller_T blockIO;/* Observable signals */
    DW_pid_controller_T dwork;/* Observable states */
    X_pid_controller_T contStates;/* Observable continuous states */
};

int main(int argc, char* argv[])
{
    FILE* fp;
    real_T sim_time;
    real_T time;
    real_T inputs[2];
    real_T outputs[1];
    struct MODEL model;
    memset(&model, 0, sizeof(struct MODEL));
    model.model.blockIO = &model.blockIO;
    model.model.dwork = &model.dwork;
    model.model.contStates = &model.contStates;

      pid_controller_initialize(&model.model);
      sim_time = 30.0;
      time = 0.0;
      inputs[0] = 1.0;
      inputs[1] = 0.0;
      outputs[0] = 0.0;
      fp = fopen("data.csv", "w");
      while (time < sim_time)
      {
          pid_controller_step(&model.model, inputs[0], inputs[1], &outputs[0]);
          time = model.model.Timing.t[0];
          fprintf(fp, "%.8f;%.8f;%.8f;%.8f\n", time, inputs[0], inputs[1], outputs[0]);
          if (time == 5.0 || time == 10.0 || time == 15.0 || time == 20.0 || time == 25.0 || time == 30.0)
          {
              if (inputs[0] == 1.0)
                  inputs[0] = 0.0;
              else
                  inputs[0] = 1.0;
          }
          inputs[1] = outputs[0];
      }
      pid_controller_terminate(&model.model);
      fclose(fp);
      return 0;
  }


Aber das Ergebnis sieht ganz ********** aus

Code:
data=dlmread('data.csv',';');
plot(data(:,1),data(:,2),data(:,1),data(:,3))
grid on;




Was habe ich falsch gemacht?


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.