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 object/bytesavailablefcn bug im deploy-mode

 

ismirbrille
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2013, 09:08     Titel: serial port object/bytesavailablefcn bug im deploy-mode
  Antworten mit Zitat      
Hallo,
ich habe hier ein kurzes Programm, welches Daten einer externen HW abholt, via serieller Schnittstelle.


Code:

function test_script(port)
   delete(instrfindall)   % Close prior ports.
      promiaCommand = [1 32 32 32 32 67 77 68 49 55 66 3];   % Command to send data continuously.
   
   % Create port object.
   portObj      = serial(port,...
                  'BaudRate',115200,...
                  'DataBits',7,...
                  'Parity','even',...
                  'StopBits',1, ...
                        'InputBufferSize', 500000, ...
                        'OutputBufferSize', 500000, ...
                        'TimeOut', 2);

   % Use BytesAvailableCallback with terminator mode.
   portObj.Terminator            = {6,6};
   portObj.BytesAvailableFcnMode   = 'terminator';
   portObj.BytesAvailableFcn      = {@cb_read_data};

   % Open port and send start command.
   fopen(portObj);  
   fwrite(portObj,promiaCommand,'uint8');
end


% Callback for bytesAvailable.
function cb_read_data(hObj,eventData)
   bytesAvailable   = hObj.BytesAvailable;
   if (bytesAvailable ~= 485)   % We need to exactly read 485 bytes of data.
        disp(['Error: ' datestr(now,'SS.FFF') ': ' 'Verfügbar:' num2str(bytesAvailable)]);   % DEBUG
      if (bytesAvailable > 0)
         fread(hObj, bytesAvailable);   % Get data from port and throw them away.
        end
      return
   end
   
   % Use correct data.
   data = fread(hObj, bytesAvailable);
   disp(['i.O. :' datestr(now,'SS.FFF') ': ' num2str(length(data)) ' - ' (data(end)) '|']); % DEBUG
end
 



Innerhalb von Matlab funktioniert es prima.
Wenn ich es mittels Deploytool übersetze funktioniert es nicht (auf drei verschiedenen PC´s getestet).
1. Es kommt nicht die richtige Anzahl bytes zurück (mal mehr mal weniger!)
2. Code stoppt nach wenigen Callback-Aufrufen.

Auffällig ist, dass sich die Anzahl an verfügbaren bytes ändert
Code:
bytesAvailable = hObj.BytesAvailable;
mehrmals hintereinander im callback ausgeführt -> unterschiedliche Werte (im Matlab-Modus ist das nicht der Fall)

Hat jemand Erfahrung mit diesem Problem? Ist die BytesAvailableFcn im Deploy nicht nutzbar? Wie sieht der Workaround aus?

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


ismirbrille
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2013, 09:52     Titel:
  Antworten mit Zitat      
Problem gelöst:

Der MCR macht was er will...
Er springt raus und es kommen falsche Daten, warum auch immer...
Folgender Code löst die beiden Probleme:

http://www.mathworks.de/support/sol.....7KKC5J/?solution=1-7KKC5J
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.