Timeout problem in matlab
22 views (last 30 days)
Show older comments
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.
Accepted Answer
Jan
on 25 May 2013
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
Jan
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);
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!