Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Timeout problem in matlab

Asked by Jim on 24 May 2013

Hi,

I am trying to read data through serial communication in matlab

I am reading 2 bytes of data

First byte is zero for most of the times and 2nd byte contains information.

I am getting timeout error Is there any command to read data starting with zeros Warning: Unsuccessful read: A timeout occurred.

Code:
  nexys = serial('COM1', 'BaudRate', 9600, 'Parity', 'odd', 'Terminator', '', 'Timeout', 1);
  fopen(nexys);
  myNum = 4563;
  %fprintf(nexys, 'd1539'); %Fungerar
  %fprintf(nexys, 'd%4d', myNum); %Fungerar
  for i=1:2
      fprintf(nexys, 's');
      scan_s1 = fscanf(nexys,'%s')-0;
      fprintf(nexys, 't');
      scan_s2 = fscanf(nexys,'%s')-0;
  end

Can anybody suggest something about this

Thanks Jim

2 Comments

Matt Kindig on 24 May 2013

On what line is the timeout error thrown? Have you verified that the scan_s1 and scan_s2 are incorrect?

It looks like you are setting the 'Terminator' to empty. In my experience, a timeout error can arise when the device does not send a specified terminator string that Matlab recognizes. I'm not sure how it would respond with an empty terminator specified.

Jim on 24 May 2013

Hi Matt kindig,

Thanks for ur reply. Even when I am using LF as terminator I am getting the same error: Yes, I think matlab does not recognizes the data I am sending Is this because 1st byte contains 00000000? Is there any command to recognize zeros in matlab

Thanks in advance

Jim

Products

1 Answer

Answer by Jan Simon on 25 May 2013
Accepted answer

You try to read a string but do not define a terminator. Even the the LF terminator, the string might not be terminated, when no LF appears in the data stream. So are you sure, that FSCANF for a string is what you want?

FREAD read all values, while the import of a string might be impeded by a zero byte, because they terminate strings in C.

2 Comments

Jim on 25 May 2013

Hi Jan,

Thanks for your reply. In the command fscanf

scan_s1 = fscanf(nexys,'%s')-0;

What does "-0" will do exactly?

What is the need of substracting 0 from a string

Thanks Jim

Jan Simon on 26 May 2013

@Jim: Subtracting 0 from a CHAR array converts the type to DOUBLE:

c = '123'
d = c + 0
class(d)

Alternative, which is less funky:

d = double(c);
Jan Simon

Contact us