|
|
Intrument Control Toolbox - TCP/IP - Callbacks |
|
zyzyx |
Forum-Newbie
|
|
Beiträge: 9
|
|
|
|
Anmeldedatum: 05.11.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.11.2007, 19:08
Titel: Intrument Control Toolbox - TCP/IP - Callbacks
|
|
|
|
|
Hallo,
Ich nutze die Instrument Control Toolkox für meine TCP/IP Kommunikation.
Ich nutze die von der Toolbox bereitgestellten Callbacks, die ich folgendermaßen definiert habe :
Ich erhalte über die Schnittstelle einen Datenstring der seine eigene Länge mitsendet. Dies tut er bis zur 13. Stelle.
Datenstring = {Länge(13 Bytes), Daten}
Aus diesem Grund löse ich die Callback Funktion nach 13 Bytes aus, lese die Länge aus diesen 13 Bytes und entnehme die Daten mit einer For-Schleife, die über eben dieser Länge läuft aus dem Puffer.
Ich möchte die, mit der Callback-Funktion erhaltenen Daten in meiner Main Routine nachdem ich sie erhalten habe verarbeiten.
Mein Problem besteht darin, dass ich bei Datenstring die grösser gleich 26 Bytes sind nicht in die Main Routine komme, denn der Callback wird mehrmals hintereinander ausgelösst!
Gibt es eine Möglichkeit einen Callback nach einem Aufruf zu deaktivieren oder zu stoppen?
|
|
|
|
|
outsider |
Forum-Meister
|
|
Beiträge: 806
|
|
|
|
Anmeldedatum: 03.09.07
|
|
|
|
Wohnort: München
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 06.11.2007, 11:48
Titel:
|
|
|
|
|
ich hatte das Problem ebenfalls und zwar recht einfach mit einer Flag-Variable gelöst.
Diese ist bei der Initialisierung gleich 0. Wenn die ersten 13 Bytes eingelesen - ist alles ok. Dein Callback berechnet die länge für den nachvolgenden Packet (was programmierst du eigentlich - die Arbeitsschritte sind in meinem Fall genau so - habe einen ICQ-Client mit remote Steuerung für MATLAB programmiert) setzt die Flag-Variable global auf 1 und liest anschliessend die restlichen Daten aus.
Aufgrund der Datenmenge werden jedoch weitere Callbacks gefeuert, während der erste Callback noch fleissig die Daten ausliest und verarbeitet. Wird nun so ein "dummy"-Callback "parallel" aufgerufen, so checkt dein Callback ob die Flag-Variable 0 oder 1 ist... Der Rest dürfte nun nachvollziehbar sein. Wurden die Daten von dem ersten Callback ausgelsen und verarbeitet, so wird der Falg wieder auf 0 gesetzt.
Nebenbei sollte aber auch geprüft werden ob "BytesAvailable" größer 0 ist oder nicht, denn die dummy Callbacks in einer queue landen und werden aufgerufen, nach dem der erster Callback die Daten erfolgreich ausgelesen und die Flag-Variable zurückgesetzt hat... In diesem Falle kann man abfragen ob irgendwas im Puffer vorliegt oder nicht...
Eine stabiliere Lösung (auf die bin ich dann später auch gewechselt) ist jedoch den Callback nicht bei einer bestimmten Datenmenge abzufeuern, sondern bei einer bestimmten Bytesfolge (also mit TERMINATOR abreiten, statt mit BYTE)
MfG
|
|
|
zyzyx |
Themenstarter
Forum-Newbie
|
|
Beiträge: 9
|
|
|
|
Anmeldedatum: 05.11.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2007, 20:52
Titel:
|
|
Das mit dem Flag ahbe ich ausprobiert und es funktioniert bei mir nicht!
Einen Terminator kann ich ebenfalls nicht verwenden, weil wich nicht weiss wie der String aussieht den ich bekomme.
Es wäre schon wenn es noch andere Ideen gibt.
|
|
|
outsider |
Forum-Meister
|
|
Beiträge: 806
|
|
|
|
Anmeldedatum: 03.09.07
|
|
|
|
Wohnort: München
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 07.11.2007, 21:12
Titel:
|
|
Zitat: |
Das mit dem Flag ahbe ich ausprobiert und es funktioniert bei mir nicht! |
Tja... offensichtlich hast Du es nicht richtig umgesetzt...
Zitat: |
...weil wich nicht weiss wie der String aussieht den ich bekomme. |
Wieso sagst nicht gleich, dass Du weisst, dass auf String wartest?!
Mit FGETL kann man einen empfangen String auslesen.
MfG
|
|
|
|
|
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.
|
|