|
|
mit handles Variablen rechnen? |
|
flora |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2008, 11:24
Titel: mit handles Variablen rechnen?
|
|
Hi,
ich habe folgendes Problem:
Ich habe eine Variable definiert handles.r=0;
mit dieser möchte ich in einer anderen Funktion rechnen, ungefähr so:
Die Funktion, in der die Rechnung durchgeführt wird, wird alle 5 Sekunden durchlaufen, sie zeigt aber für handles.r immer 1 an. Weiß jemand, woran das liegt?
Das handles.r=0; habe ich am Anfang gesetzt, bevor das GUI sichtbar wird.
Ich hoffe, mir kann jemand helfen.
Grüße flora
|
|
|
|
|
dib0r |
Forum-Guru
|
|
Beiträge: 413
|
|
|
|
Anmeldedatum: 09.05.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2008, 11:49
Titel:
|
|
Hallo,
du musst handles.r natürlich auch immer aktualisieren.
MfG
|
|
|
flora |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2008, 12:55
Titel:
|
|
Hi,
danke für die Antwort, aber leider bringt auch das nicht den gewünschten Effekt.
Muss ich denn wirklich jedesmal, wenn ich eine handles-Variable ändere die eine Zeile Code davor und die andere danach schreiben?
Finde ich schon ziemlich umständlich...da ist das handling mit globalen Variablen ja schon fast einfacher...
....hat jemand vielleicht noch einen Tipp, warum das nicht funktioniert?
Grüße,
flora
|
|
|
flora |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2008, 13:13
Titel:
|
|
Hab jetzt erst gesehen, dass man den "Status aktuell halten" soll...
...hab ich dann mal jetzt getan, und die Frage von oben gilt immernoch .
|
|
|
dib0r |
Forum-Guru
|
|
Beiträge: 413
|
|
|
|
Anmeldedatum: 09.05.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2008, 13:30
Titel:
|
|
Hallo,
ja, das muss man. Das ist das Prinzip von Speichern. Erst holt man sich den Wert aus dem Speicher, dann modifiziert man ihn, und schreibt ihn zurück. Da Matlab afaik nicht mit Zeigern umgehen kann, muss du das Holen und Zurückschreiben per Hand erledigen. Ist nun mal so
Kannst du etwas mehr Code anfügen? Ich sehe da gerade keinen Fehler, der muss dann schon etwas tiefer liegen.
MfG
|
|
|
flora |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2008, 13:52
Titel:
|
|
Hm. Ok. Also das Problem ist, ich kann Dir ja jetzt nicht meinen kompletten Code schicken...ist etwas viel und sicherlich unübersichtlich für Dich, abgesehen davon, hast Du bestimmt auch keine lust, Dich da durch zu wühlen .
Ich habe schon überlegt, ob es vielleicht daran liegen kann, dass es eine eigene callback-Funktion ist, die ich geschrieben habe, in der das ganze stattfindet.
Es handelt sich hierbei um die BytesAvailableFcn. Ich habe der Callback-Funktion mit folgendem Code, folgendes übergeben:
immer, wenn eine bestimmte Anzahl an Bytes am Comport vorhanden sind, wird mycallback aufgerufen.
Zitat: |
function mycallback (obj, event, hObject, handles)
handles = guidata(hObject);
handles.r = handles.r+1;
guidata(hObject, handles);
handles.r
|
Sagt Dir das was?
Grüße
flora
|
|
|
flora |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2008, 13:54
Titel:
|
|
..irgendwie komme ich mit dem Forum auch noch nicht ganz zurecht, wieso habe ich da ein "Zitat" eingefügt, wo es doch "Code" sein sollte?
Also der Übersichtlichkeit wegen nochmal:
|
|
|
dib0r |
Forum-Guru
|
|
Beiträge: 413
|
|
|
|
Anmeldedatum: 09.05.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2008, 14:22
Titel:
|
|
Hallo,
oh, in dem Bereich kenne ich mich überhaupt nicht aus. Was du noch überprüfen kannst:
- Ist hObject wirklich ein handle auf ein Objekt in der GUI?
- Was passiert wenn du anstelle von guidata getappdata / setappdata hernimmst und handles.r in dein serielles Objekt reinschreibst?
MfG
|
|
|
flora |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2008, 14:53
Titel:
|
|
...ich kenne mich damit leider auch nicht wirklich aus...
...ich verstehe auch vieles gar nicht und versuche es einfach zu verwenden, wenn es dann allerdings zu Schwierigkeiten kommt, weiß ich natürlich nicht, woher!
Deine Tipps zB verstehe ich leider auch nicht
Was bedeutet denn
Zitat: |
Ist hObject wirklich ein handle auf ein Objekt in der GUI?
|
Was genau ist eigentlich dieses hObject?
Zitat: |
Was passiert wenn du anstelle von guidata getappdata / setappdata hernimmst und handles.r in dein serielles Objekt reinschreibst?
|
und wie kann ich denn handles.r in mein serielles Objekt reinschreiben? Was meinst Du damit?
Grüße
flora
|
|
|
dib0r |
Forum-Guru
|
|
Beiträge: 413
|
|
|
|
Anmeldedatum: 09.05.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.11.2008, 10:58
Titel:
|
|
Hallo,
du verwendest in deiner Callback-Funktion ja hObject.
Damit du mit guidata Daten abrufen kannst, muss hObject (dein Aufruf ist ja handles = guidata (hObject) ) ein grafisches Objekt in deiner GUI sein, bzw. ein Handle davon (praktisch eine Zahl, die dieses Objekt repräsentiert). So ein Handle ist zum Beispiel die figure, eine Achse, ein Button oder ein Textfeld.
Du kannst mit setappdata bzw. getappdata einem Objekt irgendwelche Daten zuweisen. Ich habe gerade gesehen dass es mit seriellen Objekten anscheinend nicht geht (dein Objekt ist
oder so ähnlich).
Was passiert mit den anderen Werten in der Struktur handles. Bleiben die bei Änderungen auch gleich? Kannst du mal die Ausgabe von folgendem Code posten?
MfG
|
|
|
flora |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.11.2008, 12:09
Titel:
|
|
Hi,
also die Ausgabe von
ist bei JEDEM durchlauf folgende:
Und hObject sind alle meine grafischen Objekte? Oder wie? Aber ich habe doch gar kein Objekt, dem ich das zuweisen kann, oder? Es soll doch nur eine Variable sein, die in mehreren Funktionen verwendet wird.
..ich bin etwas ratlos
|
|
|
dib0r |
Forum-Guru
|
|
Beiträge: 413
|
|
|
|
Anmeldedatum: 09.05.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.11.2008, 13:09
Titel:
|
|
Hallo,
nein, hObject soll ein Zeiger auf ein Element der GUI sein, egal welches. Guidata schreibt dann in die GUI benutzerdefinierte Werte, in deinem Fall eine Struktur, u.a. mit dem Feld "r".
Um guidata nutzen zu können, benötigst du aber eine GUI (deshalb auch GUIdata). Ansonsten hat das ganze natürlich keinen Sinn.
Ich glaube, bei dir liegt das Problem etwas tiefer. Zum Zeitpunkt wo du
aufrufst, was genau ist da hObject? Kannst du da mal
posten?
MfG
|
|
|
flora |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.11.2008, 14:03
Titel:
|
|
Meinst Du das da:
BackgroundColor = [0.831373 0.815686 0.784314]
Callback = [ (1 by 54) char array]
CData = []
Enable = on
Extent = [0 0 5.4 1.38462]
FontAngle = normal
FontName = MS Sans Serif
FontSize = [8]
FontUnits = points
FontWeight = normal
ForegroundColor = [0 0 0]
HorizontalAlignment = center
KeyPressFcn =
ListboxTop = [1]
Max = [1]
Min = [0]
Position = [6 6.76923 13.8 1.76923]
String = Start
Style = togglebutton
SliderStep = [0.01 0.1]
TooltipString =
Units = characters
Value = [1]
BeingDeleted = off
ButtonDownFcn =
Children = []
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [12.0171]
Selected = off
SelectionHighlight = on
Tag = Startbutton
Type = uicontrol
UIContextMenu = []
UserData = []
Visible = on
|
|
|
dib0r |
Forum-Guru
|
|
Beiträge: 413
|
|
|
|
Anmeldedatum: 09.05.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.11.2008, 14:10
Titel:
|
|
Genau das. Was passiert, wenn du das selbe dir in der Funktion "mycallback" ausgeben lässt? Wie oft führst du
aus?
MfG
|
|
|
flora |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.11.2008, 14:31
Titel:
|
|
Das führe ich nur ein einziges mal aus. Und wenn ich das in "mycallback" ausgeben lasse, kommt das gleiche bei raus.
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
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.
|
|