Cette S-function est l’implémentation minimale qui prend une chaîne comme paramètre de S-function. Elle est basée sur Matlab/Simulink : Modèle de S-function vide minimal
Important : Vous devez passer le paramètre de la S-function entre guillemets simples ('), les passer entre guillemets doubles ne fonctionne PAS et entraînera que la S-function recevra un paramètre de chaîne vide.
string_param_sfunc.cpp
#define S_FUNCTION_NAME string_param_sfunc
#define S_FUNCTION_LEVEL 2
#include "simstruc.h"
// Fonction : mdlInitializeSizes ===============================================
// Abstract :
// Configure la taille des différents vecteurs.
static void mdlInitializeSizes(SimStruct *S)
{
// Un paramètre : Chaîne
ssSetNumSFcnParams(S, 1);
}
#define MDL_START
static void mdlStart(SimStruct *S)
{
// Extraire le paramètre chaîne
const mxArray *param = ssGetSFcnParam(S, 0);
if(!mxIsChar(param)) {
ssSetErrorStatus(S, "Parameter is not a string!");
return;
}
const char* pCharArray = mxArrayToString(param);
printf("Extracted string parameter '%s'\n", pCharArray);
mxFree((void*)pCharArray);
}
// Fonction : mdlInitializeSampleTimes =========================================
// Abstract :
// Initialiser les temps d'échantillonnage à 1ms (1kHz)
static void mdlInitializeSampleTimes(SimStruct *S)
{
// Pour un exemple de ce qu'il faut ajouter ici, voir https://techoverflow.net/2024/10/20/matlab-level-2-s-function-example-sine-wave-continous-output/
}
// Fonction : mdlOutputs =======================================================
// Abstract :
// Calculer la sortie de l'onde sinusoïdale basée sur le temps de simulation.
static void mdlOutputs(SimStruct *S, int_T tid)
{
// Pour un exemple de ce qu'il faut ajouter ici, voir https://techoverflow.net/2024/10/20/matlab-level-2-s-function-example-sine-wave-continous-output/
}
// Fonction : mdlTerminate =====================================================
// Abstract :
// Cette fonction est appelée à la fin de la simulation pour le nettoyage.
static void mdlTerminate(SimStruct *S)
{
// Aucun nettoyage requis pour cet exemple
}
// Trailer S-function requis
#ifdef MATLAB_MEX_FILE
#include "simulink.c" // Mécanisme d'interface MEX-file
#else
#include "cg_sfun.h" // Interface de génération de code
#endifCompiler avec
build_string_param_sfunc.sh
mex -g string_param_sfunc.cpp CXXFLAGS="-std=gnu++17 -fPIC"
Consultez les articles similaires par catégorie :
Matlab/Simulink C++
Si cet article vous a aidé, pensez à m'offrir un café ou à faire un don via PayPal pour soutenir la recherche et la publication de nouveaux articles sur TechOverflow
