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