[MatLab] Data-aqcuisitie callbacks

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • supersook
  • Registratie: Januari 2001
  • Laatst online: 28-07 17:09

supersook

Professioneel prutser

Topicstarter
Momenteel ben ik me aan het verdiepen in data-aqcuisitie met behulp van MatLab. Gelukkig is de help van MatLab vrij uitgebreid, waardoor het verkrijgen van data eigenlijk probleemloos gaat. Om het geheel wat gebruiksvriendelijker te maken wil ik het eea. ook in een GUI (mbv. GUIDE) gaan gebruiken.

Hier liep ik eigenlijk ook gelijk tegen een probleem op. Aangezien ik gebruik maak van een trigger die uiteindelijk een x aantal samples oplevert, wil ik graag gebruik maken van de SamplesAcquiredFcn callback functie om na het verkrijgen van data een actie uit te voeren. Nu heb ik in GUIDE een GUI gemaakt, waarin alle initialisatie van de data-aqcuisitie gebeurd. Het is me echter niet gelukt om een zelfgemaakte functie te laten uitvoeren door deze als string op te geven in de SamplesAcquiredFcn van het analoginput object. Deze methode lijkt alleen te werken als het een losse .M-file met een functie betreft.

Dus: weet iemand of het mogelijk een callback van een data-aqcuisitie object te laten verwijzen naar een functie in de .M file van een GUI?

Acties:
  • 0 Henk 'm!

  • japsai
  • Registratie: Augustus 2003
  • Niet online
kun je de code geven? Specifiek de callback-string?

Weet niet hoe het precies zit met deze event, en ik bouw de GUI's zonder GUIDE, maar in principe moet zo'n callback ook een lokale functie kunnen aanspreken.

En je GUI code zelf zit in een script of functie?

btw hier is de documentatie van callback syntax

[ Voor 43% gewijzigd door japsai op 02-08-2007 13:40 ]


  • supersook
  • Registratie: Januari 2001
  • Laatst online: 28-07 17:09

supersook

Professioneel prutser

Topicstarter
Het is inmiddels alweer even geleden dat ik er mee ben bezig geweest; dank voor de reactie in elk geval. Ik heb 't inmiddels na wat leeswerk en proberen zelf weten op te lossen. Uiteraard zal ik even kort vertellen waar het 'm nu in zat.

Eerst even wat code (opgeslagen als measure.m):

Matlab:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function measure ()

    ai0 = analoginput('dtol', 0);   % get device
    ch = addchannel(ai0, 0);        % add channel to it

    ai0.TriggerType = 'software';   % let MatLab handle triggering
    ai0.TriggerDelay = -0.2;        % set a pretrigger (skip backwards 0.2s)
    ai0.TriggerConditionValue = 0.2;% trigger value
    ai0.TriggerChannel = ch;        % channel to trigger on

    ai0.TriggerFcn = @triggered;    % function to call when triggered
    
    start(ai0);                     % start measurement

function triggered ()

    beep;                            % beep when triggered


Het probleem zat hem dus in regel 11, waar ik het alleen voor elkaar kreeg om een Matlab commando of .M-file aan te roepen, en niet zoals in dit voorbeeld een subroutine in dezelfde M-file. Elke keer kreeg ik de melding:
??? Error using ==> measure>triggered 
Too many input arguments.

Als ik daarentegen regel 11 verving door:
Matlab:
11
ai0.TriggerFcn = 'beep';    % function to call when triggered

ging het wel goed.

Na het doorlezen van de nodige documentatie (oa. uit je linkje) blijkt dat bij een callback er een tweetal variabelen worden doorgegeven op de volgende manier:
function myCallback(src,eventdata)

Ontzettend domme fout dus! Op zich heb ik geen behoefte aan de meegestuurde variabelen, daarom heb ik het maar zo opgelost:

Matlab:
15
16
17
function triggered (varargin)

    beep;                            % beep when triggered