我试图从COM3端口读取数据 我使用此代码:
in = fscanf(s);
if(in == 'A')
fclose(s);
break;
end
问题是当没有数据发送到com3端口时,fscanf()
将等待一定的时间间隔,然后暂停。
有没有办法只在数据出现时读取数据?
答案 0 :(得分:4)
您可以读出串行对象Add Service Reference
的{{1}} - 属性,以了解准备好读取的缓冲区中有多少字节:
BytesAvailable
然后,您可以检查s
的值以符合您的条件。假设char是1个字节,那么您可以在读取缓冲区之前轻松检查它。
bytes = get(s,'BytesAvailable'); % using getter-function
bytes = s.BytesAvailable; % using object-oriented-addressing
您可以手动将串行对象bytes
的{{1}} - 属性设置为较低的值,以便在默认超时之前继续执行。
if (bytes >= 1)
in = fscanf(s);
% do the handling of 'in' here
end
您很可能会收到以下警告:
读取失败:终结者发生超时 达到..
可以通过在Timeout
之前执行以下命令来抑制它。
s
以下是一个例子:
set(s,'Timeout',1); % sets timeout to 1 second (default is 10 seconds)