Bonjour à tous,
Bien que connaissant Matlab depuis un certaine temps deja, je me suis mis récemment à la prog avec GUIDE, sous une matlab 7.5 2007b.
Actuellement je suis sur un projet ou je dois interfacer une appareil de mesure type impédance mètre (Agilent 4294A pour ceux que ca intéresse) tout cela grace au port GPIB de l'appareil. Donc pour le moment, j'arriver bien à commander et récupérer les données de l'appareil, ce qui est deja un bon début. Mais actuellement, pour lancer une série de mesure, je suis obligé de cliquer sur un bouton, et j'aimerais automatiser cette tache par le biais d'un timer.
J'ai donc chercher à faire un timer, qui aura une callback, appelant les fonctions callback "classiques" qui sont reliées à mes boutons. Donc je me suis crée un nouveau bouton "timer" qui créer un timer MATLAB, je lui passe une fonction callback, et je le start(). Jusque la tout marche bien, il rentre dans la callback, effectue une première série de mesure, et attend une période (je suis en mode fixedDelay).
Maintenant mon problème est que lorsqu'il repasse dans cette callback, il fait nimporte quoi : il ouvre une nouvelle figure(), me met ses données dedans... Donc j'ai pensé que c'etait un problème de handle de ma zone d'axes, donc j'ai essayé de lui filer tous les gcf, gca que je pensais possible, mais apparement pas.
Je viens donc à vous pour trouver une solution, car il semble que je ne passe pas les bonnes données à ma fonction timer_callback. Pour simplifier la démo, comme j'imagine que pas tout le monde a un appareil à 40k$ chez lui, j'ai fait un programme minimaliste à partir d'un code que j'ai récupéré ici, et écrit par DUT qui semble maitriser totalement l'art du matlabisme, pour info, il provient de ce fil : http://www.developpez.net/forums/sho...d.php?t=444275.
Je l'ai adapté pour que le bouton "plot" fasse un plot de 10 points au hasard, et que le bouton timer démarre un timer qui est sensé appelé le bouton "plot" toutes les 2 secondes... Le code est très simpliste, et les boutons pas du tout au bon endroit. Et plus drole encore, il n'arrive pas à faire marcher le "plot" plus d'une fois car il ne retrouve pas les bonnes infos pour afficher : Error using ==> guidata at 89. H must be the handle to a figure or figure descendent.
voila le code du fichier matlab :
Merci pour votre aide, car ca fait 2 jours que je suis la-dessus sans avoir avancer d'un pas...
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 function test_timer fig=figure; axes('tag','myAxes','visible','on') uicontrol('units','normalized',... 'position',[.02 .2 .1 .05],... 'string','Timer',... 'tag','selectbutton',... 'callback', @timerBT) uicontrol('units','normalized',... 'position',[.02 .3 .1 .05],... 'string','Plot',... 'tag','displaybutton',... 'callback', @plotBT) h=guihandles(fig); guidata(fig,h); function timerBT(obj,event) h=guidata(gcbf); h.timer = timer(); set(h.timer, ... 'TimerFcn', {@timerCB, gcbf}, ... 'Period', 2, ... 'ExecutionMode', 'fixedSpacing'); start(h.timer); function timerCB(obj,event, handles) h=guidata(handles); plotBT(obj, event) hold on; function plotBT(obj,event) h=guidata(gcbf); axes(h.myAxes); plot(rand(10, 1), rand(10, 1)) hold on;
A++
Xavier
EDIT/PS : j'oubliais, c'est mon premier message ici, donc si j'ai fait une erreur sur la facon de poster, merci d'avance de m'expliquer quoi et de me le pardonner ^^
Partager