Bonjour,
j'ai un programme écrit en matlab que je veux embarquer dans un modèle simulink via l'utilisation d'une s-function. J'ai beau essayé, mais en vain.
Merci d'avance pour votre aide.
Bonjour,
j'ai un programme écrit en matlab que je veux embarquer dans un modèle simulink via l'utilisation d'une s-function. J'ai beau essayé, mais en vain.
Merci d'avance pour votre aide.
Bonjour,
Pour utiliser du code MATLAB tu devrais plutôt utiliser un bloc Embedded MATLAB Function, il est fait pour ca.
Duf
Simulink & Embedded Coder
Au boulot : Windows 7 , MATLAB r2016b
A la maison : ArchLinux mais pas MATLAB
Merci pour ta réponse. J'ai essayé avec Embedded function mais j'ai toujours pas résolu le problème.
Voici le code que je veux embarquer en s-function
Le code prends 3 variables d'entrée et il renvoie 3 variables en sortie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 %Matlab Code to generate Switching functions % Inputs are magnitude u1(: ),angle u2(: ) % and ramp time signal for comparison u3(: ) function [sf]=aaa(u) ts=0.0002; vdc=1; peak_phase_max= vdc/sqrt( 3); x=u(2); y=u( 3); mag=(u(1)/peak_phase_max) * ts; %sector I if (x>=0) && (x<pi/ 3) ta = mag * sin(pi/3-x);tb = mag * sin(x); t0 =(ts-ta-tb); t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];t1=cumsum(t1); v1=[0 1 1 1 1 1 0];v2=[0 0 1 1 1 0 0];v3=[0 0 0 1 0 0 0]; for j=1:7 if(y<t1(j)) break end end sa=v1(j);sb=v2(j);sc=v3(j); end % sector II if (x>=pi/3) && (x<2*pi/3) adv= x-pi/3; tb = mag * sin(pi/3-adv);ta = mag * sin(adv); t0 =(ts-ta-tb); t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];t1=cumsum(t1); v1=[0 0 1 1 1 0 0];v2=[0 1 1 1 1 1 0];v3=[0 0 0 1 0 0 0]; for j=1:7 if(y<t1(j)) break end end sa=v1(j);sb=v2(j);sc=v3(j); end %sector III if (x>=2*pi/3) && (x<pi) adv=x-2*pi/3; ta = mag * sin(pi/3-adv);tb = mag * sin(adv); t0 =(ts-ta-tb); t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4]; t1=cumsum(t1); v1=[0 0 0 1 0 0 0];v2=[0 1 1 1 1 1 0];v3=[0 0 1 1 1 0 0]; for j=1:7 if(y<t1(j)) break end end sa=v1(j);sb=v2(j);sc=v3(j); end %sector IV if (x>=-pi) && (x<-2*pi/3) adv = x + pi; tb= mag * sin(pi/3 - adv);ta = mag * sin(adv); t0 =(ts-ta-tb); t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];t1=cumsum(t1); v1=[0 0 0 1 0 0 0];v2=[0 0 1 1 1 0 0];v3=[0 1 1 1 1 1 0]; for j=1:7 if(y<t1(j)) break end end sa=v1(j);sb=v2(j);sc=v3(j); end % sector V if (x>=-2*pi/3) && (x<-pi/3) adv = x+2*pi/3; ta = mag * sin(pi/3-adv);tb = mag * sin(adv); t0 =(ts-ta-tb); t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];t1=cumsum(t1); v1=[0 0 1 1 1 0 0];v2=[0 0 0 1 0 0 0];v3=[0 1 1 1 1 1 0]; for j=1:7 if(y<t1(j)) break end end sa=v1(j);sb=v2(j);sc=v3(j); end %Sector VI if (x>=-pi/3) && (x<0) adv = x+pi/3; tb = mag * sin(pi/3-adv);ta = mag * sin(adv); t0 =(ts-ta-tb); t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/44]; t1=cumsum(t1); v1=[0 1 1 1 1 1 0];v2=[0 0 0 1 0 0 0];v3=[0 0 1 1 1 0 0]; for j=1:7 if(y<t1(j)) break end end sa=v1(j);sb=v2(j);sc=v3(j); end sf=[sa, sb, sc];
Merci d'avance
Quel est le problème avec Embedded MATLAB Function?
Simulink & Embedded Coder
Au boulot : Windows 7 , MATLAB r2016b
A la maison : ArchLinux mais pas MATLAB
Essaye de définir ta variable 'sa' en dehors des IF, en mettant par exemple au début de ta fonction:
P.S. Cela doit aussi être vrai pour sb et sc entre autres
Code : Sélectionner tout - Visualiser dans une fenêtre à part sa = 0;
Simulink & Embedded Coder
Au boulot : Windows 7 , MATLAB r2016b
A la maison : ArchLinux mais pas MATLAB
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager