Matlab simulink 中一个图像框中多条动态曲线的更新

Matlab simulink 中一个图像框中多条动态曲线的更新



前言

Matlab中通过refeshdata()这个函数,可以更新各种数据,这个结合plot()函数可以实现动态的效果

1、了解函数

doc refreshdata %查看更新函数的详细信息
doc plot 		%查看plot相关属性
doc YDataSourse %需要用set设置plot的数据源
doc legend 		%图例显示,因为是多图像显示,如果需打印,可以设置曲线为不同的形状,--**

2、上代码

close
clc;
data1 = [1 2 3 4 5 6];
data2 = [1 4 9 16 25 36];

% 建立图表
index1 = plot(data1,'blue');        %1条曲线的句柄,曲线为蓝色
set(index1,'YDataSource','data1');  % 设置y轴数据来源 data1
grid on     % 显示网格      
hold on     % 为了让两条图线在一个图中显示

index2 = plot(data2,'red');         %2条曲线的句柄,曲线为红色
set(index2,'YDataSource','data2');  % 设置y轴数据来源 data2
%grid on     % 显示网格

legend('iq ref','iq sample');   % 显示图例
a = input('stop and show :');   % 暂停,随便在命令窗口输入个什么,开始更新数据

fprintf('数据更新开始\n');
% refreshdata  by 300ms/time rate 
for i = 1:6
data1(i) = data1(i)+i;  
data2(i) = data2(i)+i;
pause(0.3);     % 按照0.3秒间隔更新一次
%更新数据
refreshdata(index1);  
refreshdata(index2);
end
fprintf('数据更新完毕\n');

3、运行结果:

运行到input()这一句时,数据显示为:
在这里插入图片描述

在这里插入图片描述
输入1(随便输入什么都行),运行前后结果为:
输入前:
在这里插入图片描述
输入后:
在这里插入图片描述

根据结果,说明数据更新了。

4、一幅图中多个子窗口的实现

clc;  
close;%关闭窗口
global data1 data2 data3 %定义数据,数据放在了updata_data 函数中
global index1 index2 index3 index4

% 建立图表窗口
subplot(3,1,1);
index1 = plot(data1,'blue','marker','*');        % 第一条曲线的句柄,曲线为蓝色
set(index1,'YDataSource','data1');  % 设置y轴数据来源 data1
set(gca,'xlim',[1 7],'ylim',[0 50]);
grid on     % 显示网格      
hold on     % 为了让两条图线在一个图中显示

index2 = plot(data2,'red');         %2条曲线的句柄,曲线为红色
set(index2,'YDataSource','data2');  % 设置y轴数据来源 data2

legend('data1 ',' data2');   % 显示图例
hold off    % 为了让两条图线在一个图中显示


subplot(3,1,2)
index3 = plot(data2,'green');
set(index3,'YDataSource','data2');  % 设置y轴数据来源 data2
set(gca,'xlim',[1 7],'ylim',[0 50]);
grid on

subplot(3,1,3)
index4 = plot(data3,'black');
set(index4,'YDataSource','data3');  % 设置y轴数据来源 data2
set(gca,'xlim',[1 7],'ylim',[1 10]);
grid on

%更新
update_data;


%更新数据 这个也可以单独写进一个m文件中
function update_data()
	global data1 data2 data3 
	global index1 index2 index3 index4
	
	data1 = [1 2 3 4 5 6];
	data2 = [1 4 9 16 25 36];
	data3 = [2 2 2 2 2 2];
	for j = 1:3 %刷新3次,看是否可以正常刷新
	    a = input('stop and show input 1 to continue:');   % 暂停,随便在命令窗口输入个什么,开始更新数据
	    switch a
	        case 0 
	            fprintf('exit')
	            break;
	        case 1
	            fprintf('数据更新开始\n');
	            % refreshdata  by 300ms/time rate 
	            for i = 1:6
	                data1(i) = data1(i)+1;  
	                data2(i) = data2(i)+1;
	                data3(i) = data3(i)+1;
	                pause(0.3);     % 按照0.3秒间隔更新一次
	                %更新数据
	                refreshdata(index1);  
	                refreshdata(index2);
	                refreshdata(index3);
	                refreshdata(index4);
	            end
	            fprintf('数据更新完毕\n');
	        otherwise
	            fprintf('input number 0 (exit)or 1(run again)');
	    end
	    
	end

end

运行代码:
初始图形
在matlab命令行输入 1,图形中数据开始更新,如下
在这里插入图片描述
下面是全部更新完后的效果:
更新结束后
经过多次修改、测试,功能准确可靠,把demo代码保存下来,以后需要时回顾。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值