Matlab中Timer的使用_matlab timer-程序员宅基地

技术标签: matlab  

http://blog.sina.com.cn/s/blog_9183ba080101olx3.html
鉴于Matlab 中缺乏多线程机制,使用Timer 无疑是一个很重要的工具,Matlab 中Timer 是一个Java 对象。

(1) Timer 的定义

t=timer();

设置属性:

eg. set(t,‘Name’,‘your_timer_name’);

当然可以一次性设置完成:

例如:

TaskTimer=timer(…

‘Name’,‘FebirdTimer’,…

‘TimerFcn’,@ExecuteTask,…

‘ErrorFcn’,@ExecuteError,…

‘Period’,1,…

‘ExecutionMode’,‘fixedrate’);

这里TimerFcn 为Timer 执行的函数,后面的‘@ExcuteTask’ 就是你定义的函数名

同样ErrorFcn 也是一样。

Period 为执行周期,ExecutionMode 为执行模式,fixedrate 为固定频率。当然前面所说的都是在这个前提之上。

(2) 关于TimerFcn 的定义

当以TimerFcn 的定义默认必须有两个参数

function ExcuteTask(obj,eventdata)

% TODO

end

其中obj 为执行该函数所对应的timer 对象,eventdata 为事件数据,一般里面为具体时间。

当需要在ExcuteTask 中传入参数的时候,那么Timer 可以这样定义:

那么这时函数定义应该为:

function ExcuteTask(obj,eventdata,var1)

% TODO

end

其他函数的定义也类似。

(3) 关于UserData

UserData 在Timer 比较有用,因为当时用上面的方法传递参数是,Matlab 只会在第一次传入参数。

所以我们可以在UserData 这个域中保存我们的数据。

例如:

t=[0];

lh=plot(t,sin(t),’-’);

t=timer(…

'Name','MyTimer',...

'TimerFcn',@ExecuteTask,... 

'ErrorFcn',@ExecuteError,...

'Period',1,'TasksToExecute',100,...

'ExecutionMode','fixedrate'); 

ud=struct(‘linehandle’,lh,‘count’,0);

set(t,‘UserData’,ud);

start(t);

function ExecuteTask(obj,eventdata,UserData) ;

 ud=obj.UserData;

 l=ud.linehandle;

 c=ud.count;

 t=get(l,'XData');

 y=get(l,'YData');

 t=[t c];

 y=[y sin(0.1*c)]; 

 set(ud.linehandle,'XData',t,'YData',y); 

 drawnow; %一般放置在set命令后,用于重构刷新图形。

 ud.count=ud.count+1; 

 set(obj,'UserData',ud);

end

以上给出了一个使用Timer 画图的方法。

关于使用drawnow函数

这里需要说明的是:drawnow是用来强制刷新屏幕,可以在任何情况下改变事件队列优先顺序,同时刷新当前figure下的所有对象,其消耗的时间有可能得不偿失。

总的来说,在Matlab中,以下6中情况可能导致刷新屏幕:
1.在命令窗口输入新的绘图命令或绘图操作
2.遇到一个临时终止的函数,比如pause、keyboard、input和waitforbuttonpress等
3.执行一个getframe命令
4.执行figure命令
5.重新设置图形窗口大小
6.执行drawnow命令

(4) 关于Timer 的函数

1.start();

2.stop();

3.timerfind();

eg.删除所有的timer

ts=timerfind;

if length(ts)>0

stop(ts); 

delete(ts); 

end

通过Name 查找特定的Timer:

t=timerfind(‘Name’,‘FebirdTimer’);

例如:

% — Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

tb= timer(‘Name’,‘ButtonTimer’,‘StartDelay’, 4,‘Period’, 4,‘TasksToExecute’, 2,…

      'ExecutionMode','fixedRate');  

tb.StartFcn = {‘my_callback_fcn’, ‘My start message’};

tb.StopFcn = { @my_callback_fcn, ‘My stop message’};

tb.TimerFcn = @(x,y)disp(‘Hello World!’);

start(tb);

% — Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

tb=timerfind(‘Name’,‘ButtonTimer’);

if length(tb)>0

stop(tb);

delete(tb);

end

function my_callback_fcn(obj, event, string_arg)%传入参数,前两个为默认参数

%其中event.Type为回调函数类型,event.Data为回调函数数据

txt1 = ’ event occurred at ';

txt2 = string_arg;

event_type = event.Type;%get type

event_time = datestr(event.Data.time);%get timer period

msg = [event_type txt1 event_time];

disp(msg)

disp(txt2)

end

以上给出了通过GUI button 按钮来控制timer开始和终止的方法。

[经验总结]定时器或串口回调函数绘图时弹出新窗口的问题作者:Kevin
本总结意在解决如下问题:利用定时器回调函数或串口回调函数在GUI指定的axes上绘图时,曲线或图片总是不显示在指定的坐标轴上,总是会弹出新的窗口显示。
利用guide来创建GUI程序时,可能大家对figure的HandleVisibility属性以及axes的NextPlot属性关注的不多。figure的HandleVisibility属性有三个属性值:onoffcallback。前两个的含义顾名思义,其作用可以看帮助文件,在此不详述。最后一个callback属性值,它是确保该figure的句柄(handle)对figure内的控件的回调函数以及回调函数内定义的函数来说是‘可见’的,而对于其它例如通过命令行来访问的用户来说是‘不可见’的,这样可以确保该figure不被无意中删除或修改其中的内容。
可见,figure的HandleVisibility属性的callback属性值带有明显的保护figure的作用,是有益的。但是这种保护机制对于使用定时器或串口自定义回调函数来绘制曲线的用户来说,就会带来麻烦。
因为定时器或串口对象不是figure所包含的对象,所以其回调函数在调用figure内的axes来绘图时,就会发现找不到该figure的handle,以为该figure对象不存在,于是就会新建figure窗口,在其中创建axes来显示的曲线。
根据以上分析,如果用户在利用定时器或串口回调函数绘制图形时出现上述问题,解决办法如下:
1、fugure的‘HandleVisibily’属性值默认为‘callback’,把它改为‘on’;
2、axes的‘NextPlot’的属性值默认为‘replace’,改为‘add’。
3、在绘图语句的前面使用语句axes(handles.axes1);%‘axes1’为axes的’tag’

先前有会员在编程时遇到同样的问题,根据以上方法,问题顺利解决。
希望有遇到类似问题的会员可以参考该帖子。

以上是个人经验,如有不足,欢迎指正修改,多谢。
分享:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40769843/article/details/113181923

智能推荐

hdoj Be the Winner 2509 (NIM博弈)_hduojbe the winner-程序员宅基地

文章浏览阅读326次。Be the WinnerTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2713 Accepted Submission(s): 1484Problem DescriptionLet's consider m_hduojbe the winner

unity 手游虚拟摇杆代码参考-程序员宅基地

文章浏览阅读3.2k次。手游 摇杆_摇杆代码

memlock过低导致的数据库性能问题(r6笔记第10天)-程序员宅基地

文章浏览阅读824次。今天在一台备库机器上准备搭建active data guard ,在主库上做配置的时候,发现主库的反应有些慢,主要的感觉就是敲命令的时候似乎都有些停顿。带着疑问查看了下数..._memlock limit is less than 64mb

推荐几本shell学习的书 (r9笔记第98天)-程序员宅基地

文章浏览阅读180次。周末整理了一下书架,一来书架上实在是放不下东西了,四层书架,两层在闺女的触及范围之内,所以直接拿胶带封住,留下两层勉强可用。二来书架已经不是放书的地儿,生活用品已..._shell 书籍 推荐 杨建荣

PE文件格式_pe工具的文件扩展名-程序员宅基地

文章浏览阅读1.2k次。PE文件格式分析及修改(图)12009-01-09 14:08PE 的意思是 Portable Executable(可移植的执行体)。它是 Win32环境自身所带的执行文件格式。它的一些特性继承自Unix的Coff(common object file format)文件格式。“Portable Executable”(可移植的执行体)意味着此文件格式是跨Win32平台的_pe工具的文件扩展名

Bluetooth MESH探究 --- (7) BLE core spec之为什么BLE能有更低功耗_ble 为什么功耗低-程序员宅基地

文章浏览阅读3.6k次。BLE与其它蓝牙协议最典型的区别就是BLE是专门为低功耗、低复杂度以及低成本设备设计。那么,BLE是通过什么方法做到更多功耗的呢? 对于蓝牙设备甚至可以说对于所有无线通信设备来说,最大的功耗就来自于射频电路部分。比如,对于TI CC2540芯片来说,RF处于接收状态的电流为19.6mA,RF处于发射状态的电流为24mA,而RF处于sleep状态的电流仅为0.9uA。所以,如果能够最大限度地_ble 为什么功耗低

随便推点

纳什博弈论-程序员宅基地

文章浏览阅读1.5k次。纳什博弈论的原理与应用   1950年和1951年纳什的两篇关于非合作博弈论的重要论文,彻底改变了人们对竞争和市场的看法。他证明了非合作博弈及其均衡解,并证明了均衡解的存在性,即著名的纳什均衡。从而揭示了博弈均衡与经济均衡的内在联系。纳什的研究奠定了现代非合作博弈论的基石,后来的博弈论研究基本上都沿着这条主线展开的。然而,纳什天才的发现却遭到冯·诺依曼的断然否定,在此之前他还受到爱因斯坦的冷遇。但是骨子里挑战权威、藐视权威的本性,使纳什坚持了自己的观点,终成一代大师。要不是30多年的严重精神病折_纳什博弈论

ios注意事项-程序员宅基地

文章浏览阅读177次。1.tableview顶部留白问题当cell的类型是plaint类型时,直接设置self.automaticallyAdjustsScrollViewInsets=NO;应该就可以的当cell的类型是group类型时,此时要去掉tableView顶部的空白需要两步:1.设置tableView的tableHeaderView高度为0.5;self.MenuTable.tableHea

数据结构——不带头节点的单链表_不带图节点的单链表类的成员函数-程序员宅基地

文章浏览阅读403次。作者:小琛欢迎转载,请标明出处单链表的概念概念:**链表是一种物理存储结构上非连续、非顺序,逻辑上连续的结构。**是通过链表中的指针链 接次序实现的。如下图:单链表的实现鉴于后续的面试和oj题目类型,这里实现不带头节点的单链表Plist.h#ifndef _LIST_H__#define _LIST_H__#include <stdio.h>#include &l..._不带图节点的单链表类的成员函数

Cento7配置网络及代理_centos7网卡不支持代理-程序员宅基地

文章浏览阅读528次。1、配置网络编辑网卡配置文件[root@localhost yum.repos.d]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736TYPE=EthernetBOOTPROTO=noneDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_..._centos7网卡不支持代理

input输入框赋值、取值_input框赋值取值-程序员宅基地

文章浏览阅读3.9k次。目录htmleasyuilayui自己做个记录,在对页面进行修改,开发的时候,总是去查资料html<input id="cpno" name="cpno" value="" />js: 赋值: $('#cpno').val( "CSDN有限公司"); -------方式1 $('#cpno').val("setValue", "CSDN有限公司"); -------方式..._input框赋值取值

如何有效预防CC攻击?_怎么防止被c&c攻击-程序员宅基地

文章浏览阅读348次。CC攻击也是属于流量型攻击中的一种,大部分的高防机房,是可以承受住大量的DDOS攻击的,这些防护主要来源于硬防。CC攻击可以算的上是DDOS攻击的一个升级版,如果想要抵御CC攻击可没有抵御DDOS攻击那么简单,单靠硬防还是不够的,必须要配合人工进行策略调控才可以防御住。CC攻击基本上都是针对端口的攻击,所以网站遇到CC攻击的几率会更大一些。在攻击模式上与一般的流量型攻击是差不多的,主要是通过伪装成正常的用户不停的对网站进行访问,从而导致服务器资源耗尽,无法正常的被访问。那么我们应该怎么去预防CC攻击呢?_怎么防止被c&c攻击

推荐文章

热门文章

相关标签