使用Matlab自动关闭串口。

4
以下指南展示了如何使用Matlab打开和读取串口:

Serial fOpen

操作步骤如下:

s = serial('COM1');
fopen(s)
fprintf(s,'*IDN?')
idn = fscanf(s);
fclose(s)

我有一个程序,可以不断地获取串行输出并绘制出来:
figure
s = serial('COM11');
fopen(s)

while(true)

    if (strcmp(comsStatus, 'open') == 1)

        tline(i) = str2num(fgetl(s));
        i = i+1
        plot(tline(1:i-1))
        drawnow
    end
end

fclose(s)

我想要做的是自动跳出while循环。但似乎没有简单的指示来判断串口是否停止传输。fgetl(s)部分会一直等待,直到有实际数据传输。有办法设置超时吗?有更好的方法吗?


1
你能否查询s.BytesAvailable,并且只有当s.BytesAvailable大于0时才调用fgetl呢? - H.Muster
@H.Muster 我还没有尝试过那个。你应该将它添加为答案,我会给它点赞。 - Fantastic Mr Fox
我也没有尝试过这个,因此目前它只是一个想法而不是一个可行的答案。因此,只是一条评论而已。你需要一个代码示例吗,还是可以自己尝试一下? - H.Muster
抱歉插队了。我在之前的项目中已经做过这个,希望能够利用我的经验。必须赶上你们才能拿到那些分数! - Sekkou527
1个回答

1
您可以按以下方式修改while循环:
figure
s = serial('COM11');
fopen(s)

while(s.BytesAvailable > 0)
        if (strcmp(comsStatus, 'open') == 1)

            tline(i) = str2num(fgetl(s));
            i = i+1
            plot(tline(1:i-1))
            drawnow
        end
    end

fclose(s)

Reference: http://home.iitb.ac.in/~rahul./ITSP/serial_comm_matlab.pdf

也来自个人经验。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接