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

Problem RS-232 Antwort

 

DenisR
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2011, 10:26     Titel: Problem RS-232 Antwort
  Antworten mit Zitat      
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+');

%send command
fwrite(fid,char(bin2dec(byte1)),'uint8');
fwrite(fid,char(bin2dec(byte2)),'uint8');
fwrite(fid,char(bin2dec(byte3)),'uint8');
fwrite(fid,char(bin2dec(byte4)),'uint8');
fwrite(fid,char(bin2dec(byte5)),'uint8');
fwrite(fid,char(bin2dec(byte6)),'uint8');
fwrite(fid,char(bin2dec(byte7)),'uint8');
fwrite(fid,char(bin2dec(byte8)),'uint8');
fwrite(fid,char(bin2dec(byte9)),'uint8');

% close com port connection
fclose(fid);
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 03.11.2011, 11:09     Titel:
  Antworten mit Zitat      
In dem Code steht doch jetzt aber nur der Sendebefehl an die Schnittstelle. Wie liest du sie denn aus Question

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
DenisR
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2011, 11:25     Titel:
  Antworten mit Zitat      
Erstmal danke für die Antwort!

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 03.11.2011, 13:43     Titel:
  Antworten mit Zitat      
Wie man den Port anspricht, kann man doch der Doku entnehmen Wink

Code:

s = serial('COM1');
fopen(s)
fprintf(s,'RS232?') % Schnittstelle abfragen -> 'return serial port communications settings'
% z.B. Übertragungsparameter auslesen
settings = fgetl(s)
fclose(s)
delete(s)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.11.2011, 14:01     Titel:
  Antworten mit Zitat      
Hallo DenisR,
Zitat:
Code:
fwrite(fid,char(bin2dec(byte1)),'uint8')

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?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DenisR
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2011, 17:11     Titel:
  Antworten mit Zitat      
Ja, das mag tatsächlich zu umständlich sein. Es tut aber vorerst was es soll Wink

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
Code:

s = serial('COM1');
fopen(s)
 

oder? Wenn ich jetzt Befehle versende kommen sie auch beim Controller an. Jedoch kommt nichts zurück, obwohl eine Antwort verschickt wird.

Ich bin leicht verzweifelt...und/oder auf dem Holzweg? Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 03.11.2011, 17:39     Titel:
  Antworten mit Zitat      
Bzgl des Timeout...evtl. kann dir ja der Post von Jan weiterhelfen

http://www.gomatlab.de/timeout-nich.....854,highlight,serial.html
Private Nachricht senden Benutzer-Profile anzeigen
 
DenisR
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2011, 15:37     Titel:
  Antworten mit Zitat      
Nochmal danke für die Hilfe und Anregungen. Es war ein ganz blöder Fehler... und jetzt läufts!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 04.11.2011, 15:50     Titel:
  Antworten mit Zitat      
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 Wink
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 - 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.