ich möchte einen Timer programmieren, der solange den Status eines über RS232 verbundenen Geräts abfragt, bis sich dieser geändert hat. Hier mein bisheriger Code:
function a = statusempfang(timerObj, event) global serial1
% Abfrage nach Actual_Status Averaging fprintf(serial1,'A_S? A') % Empfangen des Status
Status = fscanf(serial1);
Hallo
Habe schon mal 3 Fehler entdeckt, welche du ausbessern musst:
Code:
% 1) Du Überschreibst Funktion TIMER, bitte anders benennen functiontimer(hObject, eventdata, handles)
%% COM1-Schnittstelle konfigurieren % ... % 2) Callback sowie TimerFcn haben keine Rückgabewerte
a = statusempfang;
% 3) Serielle Verbindung wird gleich geschlossen. % Timer kann dann nicht mehr darauf zu greifen. % du muss bedenke, dass Timer Prozess in Hintergrund ausgeführt wird. % deswegen es wird nicht auf Timer Funktion gewartet.
flushinput(serial1) fclose(serial1);
delete(serial1);
end
function statusempfang(timerObj, event) persistent serial1;
switch(event.Type) case 'TimerFcn'
% Abfrage nach Actual_Status Averaging fprintf(serial1,'A_S? A') % Empfangen des Status
Status = fscanf(serial1);
if Status(7) ~= 'W'
stop(timerObj);
end case 'StartFcn'
% COM1-Schnittstelle konfigurieren
serial1 = serial('com1');
set(serial1, 'DataBits', 8);
set(serial1, 'Parity', 'none');
set(serial1, 'StopBits', 1);
set(serial1, 'BaudRate', 9600);
%Herstellen der seriellen Verbindung
fopen(serial1);
case 'StopFcn'
flushinput(serial1) fclose(serial1);
delete(serial1);
clear serial1;
end
vielen Dank für deine Hilfe. Wenn ich deinen Code betrachte, ist mir fast alles verständlich. Auf so einen Stil möchte ich hinarbeiten.
Allerdings wird mir beim Ausführen deines Codes folgende Fehlermeldung ausgegeben:
Zitat:
??? Error while evaluating StartFcn for timer 'Timer1'
SWITCH expression must be a scalar or string constant.
??? Error while evaluating StopFcn for timer 'Timer1'
SWITCH expression must be a scalar or string constant.
Was muss ich mir unter "event" vorstellen und wie wird er generiert? Ich habe damit noch nicht gearbeitet. Scheinbar darf ja hinter "switch" nur ein Skalar oder String stehen.
es funktioniert! Ich danke dir von ganzem Herzen. Ein digitaler Kuss soll dich ereilen.
Viele Grüße
pfeili
Martin_Frank
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 05.10.2015, 11:22
Titel:
Besteht die Möglichkeit die Eigenschaft UserData vom timer in einen struct umzuwandeln. Ich möchte in meiner TimerFcn mehrer Variablen hier abspeichern und dann in der stopFcn wieder aufrufen...
Du kannst einfach einen Struct definieren und diesen in den UserData speichern.
Gruß, Jan
Einstellungen und Berechtigungen
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
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.