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

RS232 überwachen

 

Mr-Neutron
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 02.11.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2007, 09:57     Titel: RS232 überwachen
  Antworten mit Zitat      
Erstmal Hallo und ein Lob an das Forum. Habe hier schon viele Tipps und Tricks rund um MatLab erfahren.
Ich habe ein kleines Porblem, bei welchem ich euch um Rat fragen wollte.

Ich bin gerade dabei in MatLab ein Skript zu schreiben, mit welchem ich ein CD-Laufwerk über RS232 steuern will.
Kurz zum Versuchsaufbau: Das laufwerk hängt über I2C-Bus an einer Steuerplatine. Die Platine hat einen RS232 Port der am PC hängt.

Das senden von Befehlen wie (Play, Stop, Next u.s.w) klappt schon. Die Befehle werden in Hex in einen Frame gepackt und über RS232 ans Laufwerk gesendet. Wie gesagt, das funktioniert wunderbar.

Nun zu meinem Problem. Ich muß nicht nur senden, sonder auch lesen. Und zwar so: Mein Skript soll auf ganz bestimmte Antwort-Messages und Timeinformationen vom CD-Laufwerk warten (die kommen über seriell zurück) und dann eine Funktion im Skript starten. Ich muß also im Hintergrund meien RS232 Schnittstelle überwachen und in den ankommenden Hex-Frames nach ganz bestimmten Nachrichen suchen.
Ich hab einfach keine Idee wie ich das realisieren soll.

Vielleicht könnt Ihr mir da weiterhelfen.

Danke schon mal.
Private Nachricht senden Benutzer-Profile anzeigen


Babel42
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 05.10.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2007, 10:25     Titel:
  Antworten mit Zitat      
Hallo Mr-Neutron,
ich habe etwas ähnliches gemacht, vielleicht hilft es dir. Ich habe ein Messgrerät mit Matlab kommunizieren lassen. Das Meßgerät kann kontinuierlich oder einzeln messwerte schicken. Wenn das Meßgerät kontinuierlich Messwerte schickt, geschieht das so lange,bis der Puffer voll ist. erst wenn der Puffer ausgelesen ist schreibt das Messgerät wieder Werte rein. Ich verwende allerdings die Einzelmesswert-Variante:

Code:
fprintf(B510,char([16 2 69 16 3 86]));  % Schreibt auf die RS232, Sende Einzelmesswert
pause(0.3);                             %Zeit zum Füllen des Puffers, die benötigt das Messgerät
BA=B510.BytesAvailable;                 %Anzahl der verfügbaren Bytes im Puffer
out=fscanf(B510, '%c' ,BA);         %Auslesen des Puffers


In 'out' habe ich dann einen Zeichenstring aus dem ich dann im weiteren Verlauf den Messwert selektiere und in eine Zahl umwandle. B510 ist die Bezeichnung für mein serielles Schnittstellenobjekt. '%c' wirst du sicher auch nicht so stehen lassen können. (%x -> Signed hexadecimal integer)
Mit:
Code:
Werte = Werte(Werte==hexzahl);

solltest du deine gesuchten hexzahlen selektieren können. Du kannst aber auch mit
Code:
X=find(Werte==hexzahl)
prüfen, ob die Hexzahl überhaupt da ist. Wenn nichts gefunden wird, ist X leer.

Was ich allerdings nicht weiß, wie man das im Hintergrund, bzw parallel laufen lassen kann.

Bei der Gelegenheit: Wie kennzeichne ich denn in Matlab Hex-Zahlen? 0xA1 funzt nicht?

Grüße Babel42
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 06.11.2007, 19:32     Titel:
  Antworten mit Zitat      
Zitat:
Ich muß also im Hintergrund meien RS232 Schnittstelle überwachen und in den ankommenden Hex-Frames nach ganz bestimmten Nachrichen suchen. Ich hab einfach keine Idee wie ich das realisieren soll.


Schau in der Hilfe nach folgenden Eigenschaften der seriellen Schnittstelle:
BytesAvailableFcn
BytesAvailableFcnCount
BytesAvailableFcnMode

BytesAvailableFcn startet automatisch eine Funktion, wenn die empfangenen Daten entweder eine bestimmte Menge an Bytes beinhalten (BytesAvailableFcnCount und BytesAvailableFcnMode=BYTES) oder bei einer bestimmten Bytesfolge (BytesAvailableFcnMode=TERMINATOR)

Mehr Info in der offline ML Doku...



MfG
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 - 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.