Bonjour à tous,
Mon problème est le suivant :
J'utilise un périphérique (centrale inertielle) dont le fabricant fournit des interfaces COM. Ces interfaces fonctionnent très bien dans le cadre d'un fichier M classique. Mais les choses se compliquent lorsque je souhaite utiliser ce code dans une S-function.
Le but est d'effectuer l'initialisation (création du serveur COM et configuration du matériel) une seule fois par simulation, car cette partie prend beaucoup de temps de calcul.
Ensuite, une partie "mesures" s'effectue à chaque pas de simulation.
Jusqu'ici pas de problème.
Seulement voilà, après avoir créé mon serveur COM (fonction 'actxserver'), dans le callback d'initialisation, il n'est plus reconnu à l'extérieur de cette callback (comme s'il n'était déclaré qu'en local).
Dans le Help (section "Releasing COM Interfaces and Objects"), on peut lire que Matlab efface automatiquement les objets COM dès lors qu'ils "Out of scope". Donc serait-il possible de les conserver, pour ne pas avoir à les redéclarer à chaque cycle ?
voici l'essentiel du programme :
- Si je regroupe le code d'initialisation et de fermeture dans le callback 'Outputs', tout marche bien, (mais bien sûr très lentement).
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 function MTi_G(block) setup(block); function setup(block) [...] function Initialization(block) cmtcom = actxserver('MotionTracker.CMT.1'); try cmtcom.cmtCreateInstance('demo1'); cmtcom.cmtOpenPort(5); deviceId = cmtcom.cmtGetDeviceId; cmtcom.cmtGotoConfig; cmtcom.cmtSetDeviceMode(2111,5,100,deviceId); cmtcom.cmtGotoMeasurement; pause(0.01); catch [...] end function Output(block) cmtcom.cmtGetNextDataBundle; cmtcom.cmtDataContainsRawAcc; data = cmtcom.cmtDataGetRawAcc; block.OutputPort(1).Data = data; function Terminate(block) delete(cmtcom)
- Sinon, comme je l'ai tapé ci-dessus, il ne reconnait plus l'objet 'cmtcom', une fois passée l'initialisation.
Merci de votre aide,
et merci de votre compréhension car je débute avec ces notions.
thegill
Partager