Matlab Simulink set and refreshdata()功能



前言

matlab中与单片机进行交互时需要用到定时器timer,用它可以模拟单片机的定时器中断服务。在此基础上进行拓展,可用串口(serial)+定时器(timer)通过matlab实现上位机数据的实时显示等功能。进一步的,通过设置菜单,可以实现更为复杂的调试功能。

一、set and refreshdata()

% set 可以用于很多地方,比如设置图形的相关属性,设置串口对象、定时器对象的相关属性等。在命令行输入 doc set ,回车就能看到关于set命令的官方help文档
% refreshdata() 作用:更新数据
% 拓展思路:通过这两个功能结合matlab的串口中断,可实现数据接收,接近实时显示

1.1命令行输入doc + set

doc set

显示结果如下: 蓝色表示相关的内容,红色表示具体信息(简要介绍、语法、描述、例子、技巧、等)
在这里插入图片描述

二、测试例子

例2.1 简单测试set 与 refreshdata()函数

%% 1、简单测试set 与 refreshdata()函数
figure 
subplot(2,1,1);
index = plot(dis_data,'b');
set(index,'YDataSource','dis_data');

subplot(2,1,2);
dis_data =[1 1 1 1 1 1 1 1 1 1] ;
index2 = plot(dis_data,'r');
set(index2,'YDataSource','dis_data');
refreshdata(index)

运行结果
运行到refreshdata(index) 这一句之前打断点,数据显示为:
在这里插入图片描述

运行后结果为:

在这里插入图片描述
可以看出 ,第一行图的数据已被更新

例2.2 将set与refreshdata结合,借助队列数据结构,实现数据读入并更新

%% 2、将set与refreshdata结合,借助队列数据结构,实现数据读入并更新
global run_flag  %运行状态
run_flag = 1;

%初始化句柄
figure
index = plot(dis_data,'b');
%使用set设置数据从dis_data中获取,否则无法及时刷新数据
set(index,'YDataSource','dis_data'); 
global update_num
update_num = 0;

global ccm 

%指令提示
fprintf('0->exit\n');
fprintf('1->run\n');
ccm = input('input your ccm:');

while run_flag
    switch ccm(1,1)
        case 0 
            run_flag = 0;%退出程序
        case 1
            %循环刷新,显示
            while update_num>=0  
                update_num = input('input a num:(input a num(<0) to exit current loop)');
                refreshnum(update_num,10);   %刷新数据
                disp(dis_data);              %命令行显示
                refreshdata(index);          %更新句柄,plot中的图像会更新
            end
        otherwise %指令提示
            fprintf('0->exit\n');
            fprintf('1->run\n');
    end
    if run_flag %系统运行,等待新指令
        ccm = input('input your ccm:'); 
    end
end

% 模拟队列,先进先出,更新dis_data的内容
function refreshnum(a,num)
    global dis_data 
    for i = num : -1 : 1
        if i == 1
            dis_data(i) = a;
        else
            dis_data(i) = dis_data(i-1);
        end
    end
end

运行结果,没有数据输入时:
在这里插入图片描述
输入1,进入运行模式,依次输入 100,90 ,80,70,50,70,30,得如下结果:
在这里插入图片描述
再依次输入 20 ,20,20 ,20,结果为:
在这里插入图片描述
根据结果,说明数据随着输入的改变实时更新了。

输入负数,退出数据更新的循环。再输入0,退出程序。 当前程序只实现了大于等于0的功能,可以继续拓展,实现全实数域数字的更新,可选的一种方法是借助定时器+标志位。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值