仅在存在时读取数据

时间:2015-06-19 07:55:58

标签: matlab serial-port scanf

我试图从COM3端口读取数据 我使用此代码:

in = fscanf(s);
    if(in == 'A')
        fclose(s);
        break;
    end

问题是当没有数据发送到com3端口时,fscanf()将等待一定的时间间隔,然后暂停。

有没有办法只在数据出现时读取数据?

1 个答案:

答案 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)