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

Echtzeit Plot, Serielle Schnittstelle

 

Maria25
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 30.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2019, 02:15     Titel: Echtzeit Plot, Serielle Schnittstelle
  Antworten mit Zitat      
Hallo,

ich lese Daten von einem Steuermodul über eine RS485 Schnittstelle aus.

Mein Code zum auslesen:
Code:

%Aufräumen:
clc;
clearvars;

%Messparameter:
mi = 5;                   %Messinterval in Sekunden
tmax = Inf;               %Maximale Messzeit in Sekunden ("Inf" für unendlich)
rs485comport = 'COM4';
modul01 = '0B';           %Geräteadresse des e.bloxx-Moduls Nr. 1 (2-Byte Birär-ASCII: 0B = 11)
modul02 = '0C';           %Geräteadresse des e.bloxx-Moduls Nr. 2 (2-Byte Birär-ASCII: 0C = 12)


%Serielle Schnittstelle initialisieren:
rs485 = instrfind('Type', 'serial', 'Port', rs485comport); %Geöffnete serielle Schnittstelle "rs485comport" suchen
if ~isempty(rs485)
    fclose(rs485);                                       %Wenn die Schnittstelle verwendet wird, dann Schnittstelle schließen
    delete(rs485);
end
rs485 = serial(rs485comport, ...
    'BaudRate', 19200, ...
    'DataBits', 8, ...
    'Parity', 'even', ...
    'StopBits', 1.0, ...
    'Terminator', 'CR',...
    'FlowControl', 'none', ...
    'Timeout', 1);
fopen(rs485);

tic;
t0=toc;
for i = 1:inf
    t=toc;

    % read data from variable: $ aa R kk <cr>; aa= destination adress; kk =  variable
   
        fprintf(rs485,['$',modul01,'R01']);   % Read 1st device's variable No. 1
        data1=fscanf(rs485);
       
     
    wait=ceil(t/mi)*mi-t;
    if (t-t0>mi)
        fprintf(['Messinterval um ',num2str(t-t0-mi),'s überschritten!\n']);
    else
        pause(wait);
    end
    t0=toc;
    if (t>tmax), break; end
end
fclose(rs485);
 


Das auslesen an sich ist kein Problem, ich möchte/muss nun den Temperaturwert ( Variable data1) über die Zeit plotten.

Vielen Dank für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.484
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2019, 18:24     Titel:
  Antworten mit Zitat      
Hallo,

und was hast du versucht bzw. wo liegt das Problem dabei?
Soll der Plot laufend aktualisiert werden oder erst nach Abschluss der Messung dargestellt werden?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Maria25
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 30.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2019, 19:51     Titel:
  Antworten mit Zitat      
Danke ich habe es inzwischen hinbekommen Very Happy
Falls jemand an meiner Lösung interesiert ist:
Code:
clearvars;
%% Messparameter:
mi = 1;                   %Messinterval in Sekunden
rs485comport = 'COM4';
modulA5 = '0B';           %Geräteadresse des e.bloxx-Moduls Nr. 1 (2-Byte Birär-ASCII: 0B = 11): A5-1-Modul

%% Serielle Schnittstelle initialisieren:
rs485 = instrfind('Type', 'serial', 'Port', rs485comport); %Geöffnete serielle Schnittstelle "rs485comport" suchen
if ~isempty(rs485)
    fclose(rs485);                                       %Wenn die Schnittstelle verwendet wird, dann Schnittstelle schließen
    delete(rs485);
end

% Objekt für Serielle Schnittstelle erzeugen und diese öffnen:
rs485 = serial(rs485comport, ...
    'BaudRate', 19200, ...
    'DataBits', 8, ...
    'Parity', 'even', ...
    'StopBits', 1.0, ...
    'Terminator', 'CR',...
    'FlowControl', 'none', ...
    'Timeout', 1);
fopen(rs485);

%% Set up the figure window
time = mi;
temp = 0;
figureHandle = figure('NumberTitle','off',...
    'Name','Temperaturmessung Pt100','Visible','off');
% Set axes
axesHandle = axes('Parent',figureHandle,...
    'YGrid','on','XGrid','on');
hold on;
plotHandle = plot(axesHandle,time,temp,'Marker','x','LineWidth',1);
xlim(axesHandle,[min(mi) max(mi+inf)]);%[min(time) max(time+inf)]);
% Create xlabel
xlabel('Zeit in s','FontWeight','bold','FontSize',14);
% Create ylabel
ylabel('Temperatur in °C','FontWeight','bold','FontSize',14);
% Create title
title('Temperaturmessung Pt100','FontSize',15);

timeInterval = mi;
%% Daten messen
count = 1;
while (1)
    time(count) = mi;
    fprintf(rs485,['$',modulA5,'R00']);
    data = fscanf(rs485);
    data = data(2:end);
    data = str2double(data)
    temp(count) = data;
    set(plotHandle,'YData',temp,'XData',time);
    set(figureHandle,'Visible','on');
    pause(timeInterval);
    count = count +1;
    mi = mi+1;
end

%% Schnittstelle schließen
fclose(rs485);
 
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.