|
|
Serielle Schnittstelle dauerhaft auslesen |
|
Ceres |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 24.09.07
|
 |
|
 |
Wohnort: In der Nähe von Göttingen
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.09.2007, 17:04
Titel: Serielle Schnittstelle dauerhaft auslesen
|
 |
Hallo,
ich möchte mit Matlab ein Programm schreiben, mit dem ich meine Akkuladestation (später auch Wetterstation) auslesen kann. Das Gerät wird über die RS-232-Schnittstelle an den Rechner angeschlossen. Alle 2 Sekunden erhält man Informationen über einen Ladeschacht. Das Auslesen der Daten mittels fread klappt soweit auch ganz gut, aber ich möchte nicht nur einmal die Daten auslesen, sondern permanent. Am besten wäre es natürlich, wenn Matlab immer wenn Werte verfügbar sind, diese holt. Ist das irgendwie möglich? Ich habe auch schonmal eine Endlosschleife fabriziert, aber dann hat er immer ausgelesen, auch in der Zeit wo keine Werte verfügbar waren, aber das ist ja Ressourcenverschwendung.
Bin für jeden Tip dankbar.
MfG
Ceres
|
|
|
|
|
steve |

Ehrenmitglied
|
 |
Beiträge: 2.029
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: Wien
|
 |
|
 |
Version: R2024a
|
 |
|
|
 |
|
Verfasst am: 26.09.2007, 08:15
Titel:
|
 |
Da ich mich demnächst u.a. mit automatischer/zeitgesteuerter Bilderkennung beschäftigen werde, habe ich mich schon ein bisschen umgehört und habe erfahren, dass Matlab interne Timer hat. Diese könnten dir behilflich sein. Allerdings weiß ich (noch) nicht wie man diese anspricht bzw. implementiert.
Aber ich denke, dass die Hilfe in diesem Fall eine gute Anlaufstelle ist.
Gruß
Alex
_________________
>> I told me to.
____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
outsider |

Forum-Meister
|
 |
Beiträge: 806
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 26.09.2007, 14:27
Titel:
|
 |
|
 |
|
Hände weg von WHILE-Schleifen und von Timern...
mit der WHILE-Schleife blockierst Du MATLAB! Und ein extra Timer ist überflüssig, weil die Serieller Objekt unter MATLAB einen Timer schon mit sich bringt, allerding wäre das nicht empfehlenswert zu benutzen.
Wie Du schon selbst vorgeschlagen hast - sollte MATLAB selbst einen Callback feuern, sobald Daten empfangen wurden - und das geht mit MATLAB. Zauberstichwörter sind:
BytesAvailableFcn
BytesAvailableFcnCount
BytesAvailableFcnMode
Terminator
"BytesAvailableFcn" feuert einen Callback wenn eine bestimmte Anzahl an Bytes vorliegt (im Falle, wenn Du weisse, dass alle 2 sekunden zB genau 40Bytes gesendet werden, muss also "BytesAvailableFcnCount" auf 40 stehen). Oder Du definierst einen Terminator (LF, CR, oder auch Bytes Folge). Solange diese Bytes oder die Steuerzeichen empfangen werden, feuert Dein Callback von "BytesAvailableFcn".
Je nach dem wie Du vorgehst sollte der "BytesAvailableFcnMode" auf "Byte" oder "Terminator" entsprechend gesetzt werden.
MfG
|
|
|
Ceres |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 24.09.07
|
 |
|
 |
Wohnort: In der Nähe von Göttingen
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.09.2007, 11:21
Titel:
|
 |
Danke für die Antworten. Und wie gehe ich vor wenn die Anzahl der Bytes immer unterschiedlich ist?
|
|
|
Bijick |

Ehrenmitglied
|
 |
Beiträge: 914
|
 |
|
 |
Anmeldedatum: 18.06.07
|
 |
|
 |
Wohnort: Nürnberg
|
 |
|
 |
Version: R2006b, R2008b
|
 |
|
|
 |
|
Verfasst am: 01.10.2007, 17:42
Titel:
|
 |
Hallo Ceres,
wie outsider schon schrieb, musst Du dann einen Terminator definieren (also eine Zeichenfolge, oder CR für "Enter") der den Datenstrom immer abschließt. Sobald dieser im input buffer vorliegt, wird die angegebene Callback-Funktion ausgeführt. Mit der Instrument Control Toolbox kann man je nach Inputformat auch eosCharCode ("end of string") als BytesAvailableFcnMode wählen.
Ich kann es hier nicht testen, aber nach der Hilfe müsste es mit Terminator so gehen:
Das ist nicht gerade mein Spezialgebiet, aber vielleicht hilft es ja immerhin, das Problem einzugrenzen. Herzliche Grüße
Bijick
_________________
>> why
|
|
|
entchen |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.04.2014, 22:30
Titel:
|
 |
|
 |
|
Hallo zusammen,
ich grabe mal den alten Thread aus, da ich mich im Rahmen meiner Masterarbeit mit dem Einlesen der RS232 Schnittstelle befasse.
Dazu habe ich ein paar Verständnisfragen:
Zitat: |
Hallo Ceres,
wie outsider schon schrieb, musst Du dann einen Terminator definieren (also eine Zeichenfolge, oder CR für "Enter") der den Datenstrom immer abschließt. Sobald dieser im input buffer vorliegt, wird die angegebene Callback-Funktion ausgeführt. Mit der Instrument Control Toolbox kann man je nach Inputformat auch eosCharCode ("end of string") als BytesAvailableFcnMode wählen.
|
Die Funktion fread() liest doch nur Daten aus dem Buffer ein; der Datenempfang über RS232 (und somit Speicherung im Buffer) läuft doch im Hintergrund permanent, sobald fopen() aufgerufen wird?
Falls dem so ist, dann müsste ja für ein kontinuierliches Auslesen der seriellen Schnittstelle nur ein fread() in der callbackfunktion stehen...
Damit der buffer immer wieder resettet wird, müsste ich doch den Port nach jedem fread() wieder schließen und danach wieder öffnen, oder wird der Buffer automatisch nach jedem Aufruf nach fread () gelöscht?
Sorry für die vielen Fragen, aber so ganz hab ich das Konzept mit dem seriellen Port noch nicht verstanden.
Gruß
|
|
|
|
|
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 - 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.
|
|