Bonjour à tous,
Relativement débutant en codage sur Simulink, je cherche à écrire une MATLAB Function (je suis sur la version MATLAB 2012b) au sein d'un modèle Simulink, cette fonction étant censée prendre en entrée un temps au format Unix/Posix (donc le nombre de secondes écoulées depuis le 1° janvier 1970 si j'ai bien compris la chose) et renvoyer en sortie la date correspondante sous forme Année / Mois / Jour / Heure / Minute / Seconde.
Ca n'avait pas l'air très compliqué et une fonction toute faite semblait faire ça, la fonction "datevec" qui renvoie en sortie un truc du style [Année Mois Jour Heure Minute Seconde].
J'ai donc essayé ce datevec, et j'ai reçu l'erreurme disant qu'en gros je ne peux pas appeler cette fonction depuis Simulink.The function 'datevec' is not supported for standalone code generation.
Suivant les conseils du diagnostic report, j'ai rajouté dans ma MATLAB Function la commande coder.extrinsic ('datevec'), pensant que ça me permettait d'utiliser le datevec dans ma fonction. Ca a l'air d'avoir fonctionné étant donné que je n'ai plus l'erreur ci-dessus ; mais j'ai désormais ce message lorsque j'essaie d'extraire les Années / Mois / etc. de ce que la fonction datevec a renvoyé :Histoire d'être plus précis, le moment où ça foire est là :Subscripting into an mxArray is not supported.
Je ne sais pas trop d'où vient le souci, ni pourquoi Matlab me parle de "mxArray", j'ai l'impression que c'est un souci inhérent à la Maltab Function, parce que je n'ai pas ce genre d'erreurs quand j'essaie de le faire directement dans le workspace...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 coder.extrinsic ('datevec') c = datevec (matlab_time); (matlab_time est un double, l'entrée de la fonction) Year = c(1); => à ce moment là le logiciel me dit que je ne peux pas "subscript into a mxArray", alors que je veux simplement rentrer dans ma variable de sortie 'Year' le premier nombre que datevec a dû calculer. Month = c(2); => même erreur pour les autres variables Day = c(3); Hour = c(4); Minute = c(5); Second = c(6);
Quelqu'un aurait-il une petite idée de pourquoi ça ne fonctionne pas ? Et est-ce que le datevec est vraiment la fonction qu'il faut nécessairement utiliser dans mon cas ?
Merci d'avance !
Quentin
Partager