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

Matlab RS232 Communication

 

DID
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 19.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2007, 13:09     Titel: Matlab RS232 Communication
  Antworten mit Zitat      
Mahlzeit,


studiere zur Zeit an der FH-BRS und wir wollen über Matlab und der Seriellen Schnittstelle Kommunikation ermöglichen.

Die fscanf / fprintf hat uns schon zu erfolge geführt allerdings wollen wir das so nur Simulieren und Später einen Mikrocontroller ansteuern, welcher einen Motor ansteuert daher wollen wir Byte weise eine Kommunikation ermöglichen,

Daher sind wir auf binäre Kommunikation umgestiegen, unser Code:

Code:
delete(instrfindall);
global count ;
serobj = serial('COM1','Baudrate', 9600,'Parity', 'none','Databits', 8, 'StopBits', 1);
serobj.Flowcontrol = 'hardware'                            
serobj.ReadAsyncMode = 'manual'  % Lets do it in asynchronous mode
s.BytesAvailableFcnCount = 40;
s.BytesAvailableFcnMode = 'byte';

get(serobj) ;
fopen(serobj);
get(serobj, 'Status')
serobj.BytesToOutput

n=0;
num_of_bytes = 0;

while(n < 1000)

n=n+1;

fwrite(serobj,42,'uint8') ;
end

fclose(serobj);
delete(serobj);
clear serobj;
 



Mit folgende Code hatten wir auch Versucht ausgelesen:

Code:
%while(num_of_bytes==0)
% [tt,num_of_bytes]=fread(serobj,1);
%end
 



Da wir auch nichts über das Hyperterminal empfangen hatten gehen wir davon aus, dass das Senden nicht funktioniert,

daher würden wir nun dazu übergehen mit S-Function und C-Code die Sache zu lösen oder ggf die Pins Binär anzusteuern.

Seht ihr einen Fehler?
Habt Ihr Erfahrung?
Was meint Ihr?

grüße

D

In der FH haben wir Matlab 7.0 ich selbst verwende MATLAB R2007a Student am Laptop.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Babel42
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 05.10.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2007, 18:11     Titel:
  Antworten mit Zitat      
Kann man nicht auch mit fread und fwrite Byte-weise schreiben?

Aus der Hilfe:
A = fread(fid, count, precision, skip) includes
an optional skip argument that specifies the number of
bytes to skip after each precision value is read. If precision specifies a bit format like 'bitN' or 'ubitN',
the skip argument is interpreted as the number of bits
to skip. See Specifying a Skip Value,
below.

Ich bin mir nur nicht sicher, ob das auch für serial funktioniert.
Ansonsten kann man auch mit dem Programm SerialWatcher schauen, was aus dem com-port raus kommt. (einfach mit nem gekreuzten serial-Kabel an einen anderen com-port anklemmen.
Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
DID
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 19.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2007, 14:49     Titel:
  Antworten mit Zitat      
Babel42 hat Folgendes geschrieben:
Kann man nicht auch mit fread und fwrite Byte-weise schreiben?


da hab ich ja gemacht (siehe Code oben) und ob das funktioniert war meine Frage, bzw wo der Fehler ist.

Das mit Serialwatcher werd ich mir mal angucken...
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
DID
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 19.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2008, 15:01     Titel:
  Antworten mit Zitat      
Dank dem SerialWatcher hab ich feststellen können, dass der Sender funktioniert,
den Empfang hab ich nun soweit abgeändert:

Code:
while(n < 255)
 n=n+1;

  tt=fscanf(serobj)
 
  while(serobj.TransferStatus ~= 'idle')
  end

end



Läuft nun wie gewünscht
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Noxin99
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 14.12.07
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 22.01.2008, 10:39     Titel:
  Antworten mit Zitat      
hi zusammen,

befinde mich zur zeit auch im versuchsstatus mit matlab daten per usb-rs232 adapter zu verschicken und natürlich auch zu empfangen.

es is zwar ne blöde frage, aber ich möchte nur wissen ob ich das wirklich nicht falsch verstanden habe:

wenn ich per matlab meinen port angesprochen hab (FOPEN)
kann ich genau diesen port nicht mit nem anderen programm ansprechen.
es kann also immer nur ein program auf ein und den selben port zugreifen, oder is das falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
power
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 25.10.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2008, 11:37     Titel:
  Antworten mit Zitat      
Kommt auf das Programm an. Du kannst den Port nicht nocheinmal öffnen mit fopen(s) aber Kommunikation sollte auch aus einem anderen m.file gehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
DID
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 19.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2008, 12:46     Titel:
  Antworten mit Zitat      
Wie willst du denn Parallel eine Leitung nutzen?

In meinen Augen müsste man einen Verteiler nutzen, sprich V1 und V2, X Programme können dann anhand von 2 Werten, Empfänger und Wert übermitteln.

Allerdings können mehrere Ports gleichzeitig von einem Programm geöffnet werden. Das sollte kein Problem darstellen ...
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Noxin99
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 14.12.07
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 22.01.2008, 15:31     Titel:
  Antworten mit Zitat      
wenn ich mit matlab gerade auf den com port zugreife
kann ich nicht gleichzeitig mit serialwatcher drauf zugreifen.
so habe ich das zumindest verstanden....
Private Nachricht senden Benutzer-Profile anzeigen
 
DID
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 19.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2008, 10:47     Titel:
  Antworten mit Zitat      
Richtig,
der Serialwatcher beobachtet auf dem 2. Rechner den Eingang. Der die Daten vom 1. Rechner empfängt.

Der 1. Rechner hat da Matlab aktiviert und greift auf einen Port zu und Sendet Daten. Wink
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Babel42
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 05.10.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2008, 12:20     Titel:
  Antworten mit Zitat      
Wie DID schon sagt, kannst du nicht auf ein und den selben Port mit Matlab und dem Serialwatcher auf dem selben Rechner zugreifen. Es sollte aber möglich sein zum Beispiel aus dem COM1 Daten an COM2 auf dem selben Rechner zu schicken. In deinem Falle, Noxin99, brauchst du dann sicher zwei USP-RS232-Adapter.
Grüße
_________________

„I think the problem, to be quite honest with you, is that you've never actually known what the question is.“
Private Nachricht senden Benutzer-Profile anzeigen
 
Noxin99
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 14.12.07
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 23.01.2008, 17:30     Titel:
  Antworten mit Zitat      
dann hab ich das ja richtig verstanden!

habe mittlerweile meinen laptop mit usb-rs232 adapter ausgestattet und mit matlab die ersten daten versendet.
habe einen älteren laptop mit rs232 schnittstelle, allerdings ohne matlab, da es ein firmenlaptop ist. zumindest kann ich per hyperterminal bzw. serialwatcher daten hin und her senden! mit matlab klapt das auch schon ganz gut. nur mit simulink hab ich da so einige probleme. werd mich morgen dazu mal auslassen. hab im moment die schnauze voll!
Private Nachricht senden Benutzer-Profile anzeigen
 
Irauschek

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2009, 08:34     Titel: Matlab RS232 Communication with µC
  Antworten mit Zitat      
Hallo!
Um nocheinmal zum Hauptthema zurückzukehren:
Für die binäre Kommunikation mit einem Mikrocontroller ist, wie schon von DID erwähnt, das formatierte Lesen (fscanf) und Schreiben (fprintf) ungeeignet.
Stattdessen können binäre Daten mit Hilfe von fwrite über die geöffnete
serielle Schnittstelle versendt werden.
z.B.:
Code:
fwrite(serial_pointer_obj, data, 'uint8');


Binäres Empfangen gelingt folgender maßen:
Code:
[data,count,msg] = fread(serial_pointer_obj, amount, 'uint8');

Wobei msg die Fehlermeldung beinhaltet, wenn zum Beispiel ein Timeout
auftritt. Bei erfolgreichem Empfang ist isempty(msg) == true.

Um das Problem mit der binären Kommunikation mit den formatierten Varianten zu verdeutlichen noch ein kleines Beispiel.

Werden die Daten in einer Schleife mittels
Code:
data=uint8(fscanf(serial_pointer_obj,'%i',1));
oder
Code:
data=uint8(fscanf(serial_pointer_obj,'%c',1));
gelesen, erhält man
[] statt 0
1
2
...
126
127
255 statt 128
255 ....
255
... bis ca. 165, danach
166
167
...
254
255
obwohl als Daten vom µC die Werte 0-255 versandt wurden.
Abhilfe schaft
Code:
[data,count,msg] = fread(serial_pointer_obj, 1, 'uint8');
in einer Schleife für byteweises lesen.

Freundliche Grüße an alle Hilfesuchenden.
 
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.