Bonjour,
Abstract : Problèmes de ports d'entrée et de sortie à taille dynamique pour un bloc décrit par une SFunction.
Je souhaite écrire en C une S-function pour Simulink simple :
Typage des ports d'entrée/sortie du bloc :
3 entrées :
- Input1 : entier supérieur à 0
- Input2 et Input3 : vecteurs à taille dynamique
ssSetInputPortWidth(S, 2, DYNAMICALLY_SIZED);
1 sortie :
Output1 : vecteur à taille dynamique également.
Prérequis :
Input2 et Input3 sont 2 vecteurs de taille égale t1, taille variable donc mais qui est renseignée par Input1 (Input1 = t1).
Output1 est de taille t2 = t1*2.
Traitement :
La fonction mdlOutputs qui gère le traitement insère successivement les valeurs de Input2 et Input3 dans Output avec l'algorithme suivant :
for (i = 0 to t1)
{
Output[i] = Input2[i];
Output[i+1] = Input3[i];
}
Mon problème :
Mon résultat est incohérent : le vecteur de sortie est de la même taille que le vecteur d'entrée et toutes les valeurs de sortie sont à zéro.
Si j'arrête d'écrire au delà de l'indice t1-1 du tableau, alors le résultat est correct. Il parait impossible d'avoir un vecteur de port de sortie de taille dynamique supérieure à celle d'un vecteur d'un port d'entrée également dynamique.
Je n'ai trouvé aucune documentation correspondante permettant d'expliquer les conséquences induites par l'utilisation de taille de vecteurs dynamiques. Mon niveau en Simulink étant celui d'un débutant, je suppose que la réponse est simple et que d'autres ont déjà tenté ce genre d'expériences avant moi.
Je remercie d'avance les personnes qui pourront m'apporter un éclaircissement sur ce sujet.
Cordialement,
Laurent C.
Edit : Mon code n'étant pas confidentiel, je peux le diffuser sur ce sujet. Il ne m'a pas apparu nécessaire de le faire, mais quelqu'un peut être intéressé pour le tester en l'intégrant dans un bloc.
Partager