原创 LabWindowsCVI 异步定时器使用

2013-3-15 15:38 4286 9 10 分类: 测试测量

我用软件版本是LabWindows CVI 8.5版本,我也是去年才开始摸索,因为有点 C语言的底子(我是学电子的,可大学除了数字电路和C语言课程每次都是高分外,其他几门课程完全靠老师的心情),学起来觉得不是很难,毕竟我不是编程科班出生,所以后的代码可能不是很规范,希望各位专业人士教教我,有什么错的或者不好的习惯跟我说说,小弟先在这多谢了,不说废话正题来了!

LabWindows CVI控件添加里面有个Timer如下图,是一个同步定时器,可是要当你用到多个定时器同事工作,这个定时中断就很让人蛋疼,特别是通讯过程中,会让主界面功能反应无法满意,所以就需要建立异步定时器来处理一些东西。下面是建立的步骤:

  

 

首先向主程序的源文件添加必要的头文件,以及向工程里添加异步定时器的.C文件,它的原始文件放在CVI安装目录里面,地址一般是C:\Program Files\National Instruments\CVI85\toolslib\toolbox,里面有三种文件,扩展名分别是.h / .c /.fp,其中.fp是控件的资源文件,异步定时器的名字是asynctmr,把这三个文件分别加入工程相应的目录中,然后再在工程文件中载入头文件,入下图

导入头文件:#include “asynctmr.h”

接下来就要开始建立异步定时器了,现在main()前面申请回调函数名,就是当中断发生时运行的函数。这个一定要按照以下格式命名,int CVICALLBACK NAV_Timer (int reserved, int timerId, int event, void *callbackData, int eventData1, int eventData2);//定义处理CNI上传数据异步定时器回调函数。

其中CNI_Timer是回调函数名字,其他不能变动,

接着就是建立一个异步定时器

有三个语句

       plNAV_TEMER = NewAsyncTimer (1.0, -1, 0, NAV_Timer,""); //建立一个异步定时器

       SetAsyncTimerAttribute (plNAV_TEMER, ASYNC_ATTR_ENABLED, 0);

SetAsyncTimerAttribute (plNAV_TEMER, ASYNC_ATTR_INTERVAL, 0.05);

plNAV_TEMER是一个static int类型的参数,用于保存以不定时器的句柄,设置属性或者要释放资源的时候会用到它。

SetAsyncTimerAttribute (plNAV_TEMER, ASYNC_ATTR_ENABLED, 0);这调语句是给异步定时器使能用的,最后个参数为0的时候不运行中断程序,当为1的时候运行中断程序,我们可以通过这条语句控制定时器的工作状态。参数plNAV_TEMER就是说我要调用哪一个控件,或者界面。

SetAsyncTimerAttribute (plNAV_TEMER, ASYNC_ATTR_INTERVAL, 0.05);这条语句定义的是定时器中断时间,0.05表示50ms中断一次。

最后释放异步定时器资源,语句是

DiscardAsyncTimer(plNAV_TEMER); //释放异步定时器

这个最好是程序结束时在释放,中间如果需要的话可以通过SetAsyncTimerAttribute (plNAV_TEMER, ASYNC_ATTR_ENABLED, 0);这条语句来暂停定时器。

最后还有就是编写中断回调程序,编写的格式是

int CVICALLBACK NAV_Timer (int reserved, int timerId, int event,

void *callbackData, int eventData1, int eventData2)//定义处理CNI上传数据

{

         switch (event)

       {

              case EVENT_COMMIT:

       在这里面写你的处理程序

                    

                     break;

       }

       return 0;

 

}

小弟我第一次写个专业的学习文档,希望各位能多给出指点。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1825844 2015-1-30 13:41

我的程序按照楼主的方法 做了一次,为何 interval设为1.0s 后,实际运行要1min才运行一次啊!!!
相关推荐阅读
用户436075 2013-03-18 18:00
LabWindows CVI控件隐藏喝显示
在用LabWindows CVI编写测试系统的时,有些控件功能要求我们失效,但又不能消失,随时打开,比如要求一个文本输入框在某个状态只能显示而不能输入。之前在网上找了好多资料,都没有。只能在属性编...
我要评论
1
9
关闭 站长推荐上一条 /3 下一条