7

Click here to load reader

Programation de S Function Simulink en C

  • Upload
    jocovic

  • View
    53

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programation de S Function Simulink en C

eivd institut d’Automatisation industrielle (iAi)

Programmation de S-Function de Simulink en C

Michel ETIQUE, institut d’Automatisation industrielle (iAi), ecole d’ingenieursdu canton de Vaud (eivd), 1400 Yverdon-les-Bains, Switzerland

[email protected] Phone : +41(0)24.423.23.18 Fax : +41(0)24.425.00.50http ://www.eivd.ch/iai, http ://iai1.eivd.ch

Table des matieres

1 Introduction 1

2 Procedure de creation d’une S-Function pour simuler un systemenumerique avant implantation (regulateur, filtre, etc) 22.1 Telechargement de fichiers . . . . . . . . . . . . . . . . . . . . . . 22.2 Programmation des equations d’etat . . . . . . . . . . . . . . . . 32.3 Programmation de l’equation de sortie . . . . . . . . . . . . . . . 32.4 Definition des proprietes du systeme . . . . . . . . . . . . . . . . 32.5 Passage des parametres . . . . . . . . . . . . . . . . . . . . . . . . 42.6 Declaration du nom de la S-Function . . . . . . . . . . . . . . . 42.7 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Test 5

1 Introduction

Il est possible de programmer des S-Function de Simulink en C. Il y a aumoins 2 avantages a cela :

1. Le code C compile avec le compilateur Watcom sera environ 10 fois plusefficace que la meme fonction programmee en langage MATLAB ou graphi-quement avec Simulink ;

2. Le code C utilise pour la simulation peut etre utilise tel quel pour etrerecompile pour d’autre cibles que Simulink, par exemple un DSP ou uneroutine temps reel programmee pour Windows NT. Les fichiers canevasmis a disposition ont ete developpes dans le cadre des travaux de l’iAi etfacilitent cette operation.

Seuls 2 fichiers C doivent etre edites :

Programmation de Simulink en C, v.1.1 1 mee simulink˙C 24 avril 2002

Page 2: Programation de S Function Simulink en C

eivd institut d’Automatisation industrielle (iAi)

1. Le fichier ou sont implantes les equations d’etat (fonction state eq()) dusysteme considere ainsi que l’equation de sortie output eq() (c’est le fichierequ pi.c dans le cas de l’exemple traite ci-apres) ;

2. Le fichier ou sont declares les parametres generaux du systemes (nombred’entrees/sorties, ordre, etc), les parametres de fonctionnement (par exempleKp, h, etc) (equ pi.h dans le cas de l’exemple).

Dans le repertoire doit egalement se trouver le fichier s tpl.c. Le compilateurWatcom n’est pas livre avec Simulink. L’iAi dispose d’une licence, installee surson serveur.

2 Procedure de creation d’une S-Function pour

simuler un systeme numerique avant implan-

tation (regulateur, filtre, etc)

Pour presenter la methode de creation d’une S-Function, on se base surl’exemple de la creation du code C d’un regulateur PI numerique, qui doit doncetre implante sous Simulink pour etre teste avant, par exemple, d’etre compilepour l’application tournant sur une tout autre cible.

La compilation pour Simulink cree une DLL dont le nom (equ pi.dll dansle cas particulier) devra etre utilise pour parametrer le bloc S-Function d’unschema de simulation.

2.1 Telechargement de fichiers

Il faut au prealable effectuer les operations suivantes :– copier le contenu du repertoire s:\regulation\matlab\Simulink_C\canevas

dans votre repertoire de travail– Editer equ_canevas.c et equ_canevas.h, les sauver sous les noms equ_PI.c,

respectivement equ_PI.h.Ces fichiers sont egalement accessibles via le site iai1.eivd.ch.

Programmation de Simulink en C, v.1.1 2 mee simulink˙C 24 avril 2002

Page 3: Programation de S Function Simulink en C

eivd institut d’Automatisation industrielle (iAi)

2.2 Programmation des equations d’etat

Editer equ_PI.c et programmer les equations d’etat du systeme discret dansla fonction void state_eq(double *x, double *u). u est un pointeur sur lesignal d’entree u(k). La valeur du premier signal d’entree s’obtient donc par u[0]ou *u, celle du second (si le systeme a 2 entrees) par u[1], etc. x est quant a luiun pointeur sur le vecteur d’etat −→x (k) dont l’acces aux composantes s’effectuepar exemple par x[0], x[1], ... x[n-1] ou n est l’ordre du systeme. L’equationd’etat d’un regulateur PI numerique peut s’ecrire

x(k + 1) = x(k) + u(k)

ce qui devient, programme en C :

void s t a t e eq (double ∗ x , double ∗ u){x [ 0 ] = x [ 0 ] + u [ 0 ] ;}

2.3 Programmation de l’equation de sortie

Editer equ_PI.c et programmer l’equation de sortie du systeme discret dansla fonction void output_eq(double *y, double *x, double *u). Le signal desortie y(k) est pointe par y et la valeur de y(k) s’obtient en dereferencant lepointeur : *y ou y[0]. L’equation de sortie a pour expression

y(k) = Kp ·

e(k) +

Gi︷︸︸︷1

Ti

·k∑

i=0

u(i) · h

= Kp · (e(k) + Gi · h · x(k))

et devient, en langage C :

void output eq (double ∗ y , double ∗ x , double ∗ u){y [ 0 ] = Kp∗( u [ 0 ] + Gi ∗ TECH ∗ x [ 0 ] ) ;}

2.4 Definition des proprietes du systeme

Editer equ_PI.h et fixer les valeurs des proprietes suivantes :

#define NUMCONTSTATES 0 /∗ nombre d ’ e ta t s ana log iques ∗/#define NUMDISCSTATES 1 /∗ nombre d ’ e ta t s d i s c r e t ∗/#define NUMINPUTS 1 /∗ nombre d ’ entrees ∗/#define NUMOUTPUTS 1 /∗ nombre de s o r t i e s ∗/#define DIRECTFEEDTHROUGH 1 /∗ indique s i l e systeme possede

Programmation de Simulink en C, v.1.1 3 mee simulink˙C 24 avril 2002

Page 4: Programation de S Function Simulink en C

eivd institut d’Automatisation industrielle (iAi)

un comportement s t a t i qu e ∗/#define NUMSAMPLETIMES 1 /∗ nombre de per iodes d ’ echan t i l l onnage ∗/#define NUMINPUTARGS 3 /∗ nombre d ’ arguments d ’ entree ∗/

Le regulateur PI numerique possede :– aucun etat analogique (=⇒#define NUMCONTSTATES 0)– 1 etat discret (=⇒#define NUMDISCSTATES 1)– 1 entree, l’erreur e(k) (=⇒#define NUMINPUTS 1)– 1 sortie, la commande u(k) (=⇒#define NUMOUTPUTS 1)– une transmission directe de l’entree vers la sortie, l’erreur e(k) influencant

directement la commande u(k) (=⇒#define DIRECTFEEDTHROUGH 1)– une seule periode d’echantillonnage (=⇒#define NUMSAMPLETIMES 1)– 3 arguments d’entree, Kp, Gi et h (=⇒#define NUMINPUTARGS 3)

2.5 Passage des parametres

Les parametres Kp, Gi et h donnes par l’utilisateur dans le bloc Simulink sontrecuperes facilement a l’aide des macros suivantes, se trouvant dans equ_PI.h :

#def ine Kp mxGetPr( ssGetArg ( Sglobal , 0 ) ) [ 0 ]#de f ine Gi mxGetPr( ssGetArg ( Sglobal , 1 ) ) [ 0 ]#de f ine TECH mxGetPr( ssGetArg ( Sglobal , 2 ) ) [ 0 ]

2.6 Declaration du nom de la S-Function

Il reste a fixer le nom de la S-Function : editer a nouveau equ_PI.h et donnerle nom, comme suit.

/∗NOM DE LA S−FONCTION, EN GENERAL LE NOM DE CE FICHIER∗/#def ine S FUNCTION NAME equ PI

2.7 Compilation

La compilation s’effectue directement a partir de l’expace de commande MAT-LAB a l’aide de la commande Editer equ_PI.h et fixer les valeurs des proprietessuivantes :

mex equ PI . c

Le compilateur recommande est Watcom. Il se trouve sur le serveur iAi, dansle repertoire

1. s:\reseau\watcom (du domaine iAi)

2. iai-serveur\serveur\reseau\watcom (d’un autre domaine reconnu parl’iAi, tel EINET)

Pour configurer MATLAB afin qu’il trouve ce compilateur, on peut executer

Programmation de Simulink en C, v.1.1 4 mee simulink˙C 24 avril 2002

Page 5: Programation de S Function Simulink en C

eivd institut d’Automatisation industrielle (iAi)

mex − setup

Il faut alors selectionner le nom et la version du compilateur (Watcom v.10.6)ainsi que le chemin donne ci-dessus.

3 Test

Pour effectuer le test du bon fonctionnement de la S-Function, il suffit d’ou-vrir Simulink, de creer un nouveau schema, d’ouvrir la librairie Signals and

Systems, de selectionner le bloc S-Function, de le glisser dans le schema ouvert,de double-cliquer sur ce nouveau bloc et de specifier :

– le nom de la DLL equ PI.dll

– les parametres Kp, Gi et h

Programmation de Simulink en C, v.1.1 5 mee simulink˙C 24 avril 2002

Page 6: Programation de S Function Simulink en C

eivd institut d’Automatisation industrielle (iAi)

Il egalement possible d’appeller la DLL a partir d’un fichier MATLAB, sans memeouvrir Simulink, a l’aide de la ligne

sim ( ’ equ pi ’ )

Programmation de Simulink en C, v.1.1 6 mee simulink˙C 24 avril 2002

Page 7: Programation de S Function Simulink en C

eivd institut d’Automatisation industrielle (iAi)

Version du docu-ment

Date Notes

v1.1 24 avril 2002 Correction erreur loi de com-mande PI

Tab. 1 – Versions publiees

Programmation de Simulink en C, v.1.1 7 mee simulink˙C 24 avril 2002