有关中断任务(alarm task)和时间循环任务的配合问题

已锁定

西门鹏飞

  • 帖子

    6
  • 精华

    0
  • 被关注

    2

论坛等级:新手

注册时间:2011-08-24

普通 普通 如何晋级?

有关中断任务(alarm task)和时间循环任务的配合问题

1011

2

2011-09-05 20:13:49

小弟初用TDC做项目开发,遇到了一个比较棘手的问题,请各位路过的专家给予指导。
问题如下:
我编写了两个任务,一个是扫描周期为2ms的时间循环任务,一个是硬件中断任务(为了测试方便,使用软件中断代替硬线连接的外部中断输入)。在时间循环任务中有两个功能块,一个是自增的功能块,每次增加2,输出值即为程序运行的时间值(毫秒数)。时间循环任务中还有一个功能块SQGB产生一个高电平宽度为25ms的方波用于启动中断任务,即该功能块的输出连接到软件中断任务初始化功能块PAS的IN上,PAS的TMB管脚设定为0,即只有上升沿才能触发中断任务。中断任务中有一个比较功能块NCM,输入值X1和X2分别为时间循环任务中自增功能块的输出和一个设定值40,输出QU连接到时间循环任务中自增功能块的输入上。
编写这两个任务想实现的功能是通过时间循环任务产生时间值(ms),并每隔50ms启动中断任务一次。中断任务读取改时间值,若此时间值大于40,则对时间循环任务中的自增功能块输入及输出复位,使其从0开始自增。
遇到的问题是:
由于中断任务启动周期为50ms,第一次中断发生时,中断任务读取的时间数肯定是50,大于设定值40,NCM的输出位QU为1,由于中断任务没有时间概念,中断任务结束后,这个标志位QU始终为1。由于使用这个标志作为时间循环任务中自增功能块的复位标志,因此在第二个50毫秒中,时间任务中的自增快总是0,第二个50ms结束时,中断任务第二次被启动,读取的时间值为0,小于40,NCM的输出位QU为0,这显然是不正确的,因为中断任务的启动周期是50ms,此时读取的时间值应该是50才对,也就是NCM的输出位QU永远为1才对。
小弟仔细考虑了一下,觉得是因为cfc不像C语言似的可以使用中间变量,中断任务的输出直接和循环任务的输入相连,中断结束后,输出的标志位无法改变引起的。知道原因,却找不到处理这类中断和时间循环任务的方法,叙述的有点啰嗦,有兴趣的可以详聊,我发测试程序过去。
有关中断任务(alarm task)和时间循环任务的配合问题 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

DCS/SIMATIC PCS7

共有4410条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。