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

Serial Port - Daten richtig einlesen

 

CS2000
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 26.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2010, 15:54     Titel: Serial Port - Daten richtig einlesen
  Antworten mit Zitat      
Hallo Leute,

ich steuere derzeit ein Messgerät über den serial port an, was bis jetzt auch wunderbar funktioniert.

Nur habe ich ein Problem mit dem Einlesen der Messwerte.

Ich bekomme vom Messgerät erst einen ErrorCode (in diesem Fall OK00 und anschließend die Messwerte, getrennt durch ein Komma). In der Produktbeschreibung steht folgendes:

"Data are output in blocks of 100 pieces. Each piece of data is 8-byte ASCII data (4-byte floating data converted to ASCII code), separated by
commas."

Ich habe schon alle möglichen Befehle und Formate ausprobiert, bekomme aber nie die richtigen Zahlen (ich kann das anhand der eigentlichen Messgerät-Software überprüfen).

Hier der Quellcode:


%-----------------------------------------------------------------%
clear
%Connect Instrument:
if length(instrfind) > 0
fclose(instrfind);
end

s = serial('COM4');
s.Terminator = 'LF';
s.BytesAvailableFcnMode = 'terminator';
s.BytesAvailableFcn = @instrcallback;

fopen(s);

fprintf(s,'MEDR,1,1,01'); %Befehl an das Instr. "Measure Data Read"

answer = fread(s,100,'float')
fid = fopen('answers.txt', 'w');
fprintf(fid, answer);
fclose(fid);
fid = fopen('answers.txt','r');

ErrorCheckCode = fscanf(fid,'%s',4);
tf=strmatch('ER20',ErrorCheckCode);
if (tf==1)
disp('No data!.');
end

tf=strmatch('OK00',ErrorCheckCode);
if (tf==1)
%SpectralData = num2str(fgetl(s));
%SpectralData= num2str(fread(s,[100,1],'float'));
%SpectralData = fread(s, 100, 'double','ieee-be')
%SpectralData = fgets(s)
%SpectralData = fread(s,[100,1],'uint')
SpectralData = fscanf(fid,'%f')
fid = fopen('spectraldata.txt', 'w+');
fprintf(fid, '%f ', SpectralData);
fclose(fid);
disp('Data read has been completed.');
end

%Delete from Workspace
fclose(s);
delete(s);
%clear

Wie man sieht, habe ich schon eine Menge ausprobiert.

Hat jemand bessere Vorschläge?

Vielen Dank schonmal,

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