Verfasst am: 17.11.2016, 10:17
Titel: Real Time Target - Socket mit S-function
Hallo.
Ich möchte mit einer s-function in Matlab/Simulink einen Smart Meter in Echtzeit mit einem xpc-target auslesen. Ich verwende Matlab R2016a und Simulink Real Time 2016a auf dem TargetPC. In Simulink selbst funktioniert mein Programm einwandfrei. Ich kann es aber nicht auf den EchtzeitPC spielen und bekomme folgende Fehlermeldung:
The call to slrt_make_rtw_hook, during the exit hook generated the following error:
Invalid Simulink object name: loader
The build process will terminate as a result.
Caused by:
Invalid Simulink object name: loader
No block diagram 'loader' is loaded.
Ich vermute es liegt an den headern (z.B. winsock.h) die der TargetPC nicht zur Verfügung hat? Oder was ist das Problem?
Bin über jeden Hinweis, der mir eine Lauffähigkeit auf dem TargetPC bringen kann, sehr dankbar.
/* Funktion: mdlInitializeSizes ===========================================
* Nutzen:
* Größe, Anzahl und Eigenschaften der Paramter, Zustände, Eingänge und
* Ausgänge werden gesetzt.
*/
static void mdlInitializeSizes(SimStruct *S) {
// Parameter
ssSetNumSFcnParams(S, 0); // Anzahl der externen Paramter
if(ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)){
// Fehler für Anzahl der erwarteten Paramter != Anzahl Paramter in
// DialogBox return;
}
// Zusände
ssSetNumContStates(S, 0); // Anzahl der kontinuierlichen Zusände: 0
ssSetNumDiscStates(S, 0); // Anzahl der diskreten Zusände: 0
// Eingänge
if(!ssSetNumInputPorts(S, 0))return; // Anzahl der Eingänge: 0
// ssSetInputPortWidth(S,0,0); // Port 0 mit Breite 1
// ssSetInputPortRequiredContiguous(S,0,true); // Durchgriff für Port
// ssSetInputPortDirectFeedThrough(S,0,1); // Änderung am Ausgang Port
// Ausgänge
if(!ssSetNumOutputPorts(S, 14))return; // Anzahl der Ausgänge: 14
ssSetOutputPortWidth(S, 0, 1); // Port 0 mit Breite 1(Ausgang 1)
ssSetOutputPortWidth(S, 1, 1); // Port 1 mit Breite 1(Ausgang 2)
ssSetOutputPortWidth(S, 2, 1); // Port 2 mit Breite 1(Ausgang 3)
ssSetOutputPortWidth(S, 3, 1); // Port 3 mit Breite 1(Ausgang 4)
ssSetOutputPortWidth(S, 4, 1); // Port 4 mit Breite 1(Ausgang 5)
ssSetOutputPortWidth(S, 5, 1); // Port 5 mit Breite 1(Ausgang 6)
ssSetOutputPortWidth(S, 6, 1); // Port 6 mit Breite 1(Ausgang 7)
ssSetOutputPortWidth(S, 7, 1); // Port 7 mit Breite 1(Ausgang 8)
ssSetOutputPortWidth(S, 8, 1); // Port 8 mit Breite 1(Ausgang 9)
ssSetOutputPortWidth(S, 9, 1); // Port 9 mit Breite 1(Ausgang 10)
ssSetOutputPortWidth(S, 10, 1); // Port 10 mit Breite 1(Ausgang 11)
ssSetOutputPortWidth(S, 11, 1); // Port 11 mit Breite 1(Ausgang 12)
ssSetOutputPortWidth(S, 12, 1); // Port 12 mit Breite 1(Ausgang 13)
ssSetOutputPortWidth(S, 13, 1); // Port 13 mit Breite 1(Ausgang 14)
// Setzen der Abtastzeit
ssSetNumSampleTimes(S, 1);
/* Funktion: mdlTerminate =================================================
* Nutzen:
* Hier werden alle Funktionen deklariert, die nach Beendigung einer
* Simulation durchgeführt werden müssen.
* Zum Beispiel muss reservierter Speicherplatz wieder freigegeben
* werden.
* Dies wird hier nicht benötigt.
*/
static void mdlTerminate(SimStruct *S) { }
#ifdef MATLAB_MEX_FILE // Wird dieses File als Hex-File kompiliert?
#include "simulink.c" // Mex-Dateischnittstelle mit Simulink
#else
#include "cg_sfun.h" // Funktion um Code zu erzeugen
#endif
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.