Verfasst am: 03.11.2011, 10:26
Titel: Problem RS-232 Antwort
Hallo zusammen,
ich denke ihr könnt mir sicher weiterhelfen.
Folgendes Problem:
Es geht um die Ansteuerung eines Schrittmotors mittels vorhandener Controllerplatine. Die Kommunikation erfolgt über die serielle Schnittstelle. Die Befehle werden binär an den Controller gesendet. Das Senden der Befehle funktioniert auch wunderbar.
Das Problem tritt jedoch beim Auslesen der Schnittstelle auf. Es scheint keine eingehende Kommunikation über die Schnittstelle zu erfolgen. Ich habe parallel zu Matlab einen seriellen Port Monitor laufen, um zumindest dort eine eingehende Antwort zu empfangen. Es tut sich aber gar nichts. Mit der zum Motor und Controller mitgelieferten Software funktioniert jedoch alles wunderbar.
Hier der Codeausschnitt zur Kommunikation:
Code:
% open com port for data transfer
fid = fopen('COM1:','r+');
In dem Code steht doch jetzt aber nur der Sendebefehl an die Schnittstelle. Wie liest du sie denn aus
Hast du auf folgenden Hinweis zum fopen Befehl geachtet...denn du benutzt ja r+
Zitat:
Note If the file is opened in update mode ('+'), an input command like fread, fscanf, fgets, or fgetl cannot be immediately followed by an output command like fwrite or fprintf without an intervening fseek or frewind. The reverse is also true: that is, an output command like fwrite or fprintf cannot be immediately followed by an input command like fread, fscanf, fgets, or fgetl without an intervening fseek or frewind.
Sorry, das habe ich vergessen zu erwähnen. Ich habe vorerst nur den Schreibbefehl verwendet und mit dem Port Sniffer nachgesehn, ob überhaupt irgendwas zurückkommt. Das sollte ja dann erstmal unabhängig vom Einlesen in Matlab sein, oder verstehe ich da irgendetwas falsch?
Ich dachte, dass ich vielleicht etwas falsch mache beim Öffnen des Ports. Dass dieser doch nur für Schreibzugriffe geöffnet ist oder Ähnliches.
Das sieht sehr umständlich aus. "byte1" ist ein CHAR String aus '0' und '1'? BIN2DEC macht daraus ein DOUBLE. Den wandelst Du dann in ein CHAR um, das intern ein UINT16 ist. Dieses schreibst Du dann als 'uint8'.
Kannst Du die Bytes nicht direkt im UINT8-Format benutzen?
Ja, das mag tatsächlich zu umständlich sein. Es tut aber vorerst was es soll
Das Ansprechen des Ports funktioniert ja auch wunderbar. Beim Einlesen der Antwort tritt aber ein Timeout auf.
Wie gesagt, ich habe parallel einen Portsniffer laufen. Mir ist es vorerst nicht wichtig die Daten in Matlab einzulesen, lediglich den Port für das Schreiben und Lesen bereitzustellen. Und das mache ich doch automatisch mit
Manchmal sieht man den Wald vor lauter Bäumen nicht. Das kennt doch jeder. Verräts du uns dennoch die Ursache, damit auch andere Suchende diesen Fehler ausschließen können
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.