Message truncation/concatenation in TCP/IP between MATLAB and Swistrack

1 vue (au cours des 30 derniers jours)
Ira
Ira le 14 Avr 2011
Hi
I'm new working with TCP/IP but my project requires interfacing Swistrack, a visual tracking software, with Matlab. Swistrack outputs data as NMEA 0183 protocol with checksums.
The messages Swistrack sends look like these "$PARTICLE,4,122.863,296.96,1.28146,204.197,400.507*37" or "$FRAMENUMBER,331*43". I wrote a program in MATLAB to establish the connection between two programs and it receives the data when I ran both programs. However, the messages that MATLAB receives are sometimes concatenated and truncated, hence, the important information is lost. For example this is what MATLAB recieves: "$PARTICLE,0,415.927,416.624,-0.$FRAMENUMBER,333*41". I have a feeling that I'm forgetting to set some buffer properties but I'm not sure how to fix this. Can you please help me understand why the data is truncated and lost? I would really appreciate. Thank you.
Here is the code that I'm using:
close all; clc;clear all;
myIP = % I use the IP of my computer
t = tcpip('myIP', 3000);
fopen(t);
pause(.5);
while (get(t, 'BytesAvailable') > 0)
Data = fscanf(t);
fprintf(Data)
pause(0.001);
end
fclose(t);
delete(t);

Réponse acceptée

Ankit Desai
Ankit Desai le 15 Avr 2011
fscanf reads the data from the object until one of the following conditions is met:
  1. The terminator is read. For TCPIP objects, the terminator is given by the Terminator property.
  2. The time specified by the Timeout property passes.
  3. The input buffer is filled.
You might be running into one or more of these conditions resulting in truncated data.
You might also want to consider doing an event based read rather than using a while loop. The online help for events and callbacks is a good start.
Hope this helps.
-Ankit

Plus de réponses (1)

Ira
Ira le 21 Avr 2011
Thank you, Ankit! It was a timeout and buffer issues. To fix it I simply changed while loop into while(1) and got rid of the pause(0.001) within that loop and also set the InputBufferSize at the beginning.
Thanks again. =)

Catégories

En savoir plus sur Instrument Control Toolbox dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by