WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variablen in Timer übergeben

 

pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 03.07.2017, 12:02     Titel: Variablen in Timer übergeben
  Antworten mit Zitat      
Liebe Leute,

ich suche eine Möglichkeit, wie ich von außen (aus dem WS) Variablen in die Timer-Funktion übergebe. Hier meine Timer-Funktion:

Code:

function T = motor_Timer(hObject, eventdata, handles)
% clc
global schritte
% Timer vorbereiten
T = timer(...
    'Name'          , 'Timer1',...
    'Tag'           , 'Motor',...
    'Period',           0.001,...
    'ExecutionMode',  'fixedDelay',...    
    'TasksToExecute',  schritte,...
    'TimerFcn'     ,  {@motor_Run_Timer},...
    'StartFcn'     ,  {@motor_Run_Timer},...
    'StopFcn'      ,  {@motor_Run_Timer});

% % Timer starten
start(T)
 


und hier die Callback:

Code:

function motor_Run_Timer(T, event)
global pin_richtung
global richtung
global pin_takt
switch (event.Type)
    case 'StartFcn'
        % Drehrichtung setzen (dauerhaft high oder low)
        putvalue(pin_richtung, richtung);
        disp('Timer gestartet')
    case 'TimerFcn'
       % Motorbewegung
        putvalue(pin_takt, 1)          % Takt setzen, high
        pause(0.001)
        putvalue(pin_takt, 0)          % Takt setzen, low
        pause(0.001)
        disp(T.TasksExecuted)
    case 'StopFcn'
        stop(T)
        disp('Timer beendet')
end

end
 


Derzeit mache ich es mit globalen Variablen, aber das möchte ich gern ändern. Ich möchte beispielsweise von außen die 'TasksToExecute' als Variable reingeben, z. B. so:
Code:

function T = motor_Timer(varargin, schritte)
% Timer vorbereiten
T = timer(...
    'Name'          , 'Timer1',...
    'Tag'           , 'Motor',...
    'Period',           0.001,...
    'ExecutionMode',  'fixedDelay',...    
    'TasksToExecute',  schritte,...
    'TimerFcn'     ,  {@motor_Run_Timer},...
    'StartFcn'     ,  {@motor_Run_Timer},...
    'StopFcn'      ,  {@motor_Run_Timer});
% % Timer starten
start(T)
 


Wenn ich dies mit

Code:

motor_Timer(varargin, schritte)
 


aufrufe (da ich gemerkt habe, dass hObject, eventdata, handles immer dastehen muss wollte ich diese über varargin ersetzen) erhalte ich:

Zitat:

Attempt to execute SCRIPT varargin as a function:
D:\Matlab2012\toolbox\matlab\lang\varargin.m

Error in test (line 13)
motor_Timer(varargin, schritte)


Kann mir hier jemand helfen? Was mache ich noch falsch?

Viele Grüße
pfeili
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.07.2017, 21:25     Titel: Re: Variablen in Timer übergeben
  Antworten mit Zitat      
Hallo pfeili,

Du erstellst den Timer zwar in einem Callback, das muss aber nicht so sein. hObject und EventData werden dazu ja gar nicht benötigt, oder? Dann schreibe doch eine eigenstädnige Funktion dafür:

Code:

function T = CreateTimer(schritte)
% Timer vorbereiten
T = timer(...
    'Name'          , 'Timer1',...
    'Tag'           , 'Motor',...
    'Period',           0.001,...
    'ExecutionMode',  'fixedDelay',...    
    'TasksToExecute',  schritte,...
    'TimerFcn'     ,  {@motor_Run_Timer},...
    'StartFcn'     ,  {@motor_Run_Timer},...
    'StopFcn'      ,  {@motor_Run_Timer});
% % Timer starten
start(T)

Und falls Du dies als Callback aus einem GUI aufrufen musst:
Code:
function GUICallback(hObject, EventData)
CreateTimer(schritte);
 


Zitat:
Code:
motor_Timer(varargin, schritte)

varargin muss in der Definition der Funktion in den Inputs stehen. Das kann man nicht einfach als "Dummy-Inputs" beim Aufruf einer Funktion verwenden.

Zitat:
Attempt to execute SCRIPT varargin as a function:

Woher diese Medlung stammt, ist mir jedoch nicht klar. Vielleicht ist
"D:\Matlab2012\toolbox\matlab\lang\" der aktuelle Ordner? Das sollte man unbedingt vermeiden: Niemals ein cd in einen Toolbox-Ordner von Matlab!

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.