注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- 工业自动化网络论坛 -- 工业自动化网络论坛(非专题) -- 协议标准

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

工业自动化网络论坛(非专题)分类  

全部论题

协议标准

硬件配置

发表人:emtronix 发表时间:2010/11/11 15:43:00  

 

 本栏论题: 工控——多任务系统看门狗的实现  [2514]

    看门狗分硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂狗”),因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但在可靠性方面不如硬件定时器,比如系统内部定时器自身发生故障就无法检测到。当然也有通过双定时器相互监视,这不仅加大系统开销,也不能解决全部问题,比如中断系统故障导致定时器中断失效。
   
      看门狗本身不是用来解决系统出现的问题,在调试过程中发现的故障应该要查改设计本身的错误。加入看门狗目的是对一些程序潜在错误和恶劣环境干扰等因素导致系统死机而在无人干预情况下自动恢复系统正常工作状态。看门狗也不能完全避免故障造成的损失,毕竟从发现故障到系统复位恢复正常这段时间内怠工。同时一些系统也需要复位前保护现场数据,重启后恢复现场数据,这可能也需要一笔软硬件的开销。
   
   
   
    图1:(a) 多任务系统看门狗示意图 ;(b) 相应的看门狗复位逻辑图。
   
      在单任务系统中看门狗工作原理如上所述,容易实现。在多任务系统中情况稍为复杂。假如每个任务都像单任务系统那么做,如图1(a)所示,只要有一个任务正常工作并定期“喂狗”,看门狗定时器就不会溢出。除非所有的任务都故障,才能使得看门狗定时器溢出而复位,如图1(b)。
   
      而往往我们需要的是只要有一个任务故障,系统就要求复位。或者选择几个关键的任务接受监视,只要一个任务出问题系统就要求复位,如图2(a)所示,相应的看门狗复位逻辑如图2(b)所示。
   
      在多任务系统中通过创建一个监视任务TaskMonitor,它的优先级高于被监视的任务群Task1、Task2...Taskn。TaskMonitor在Task1~Taskn正常工作情况下,一定时间内对硬件看门狗定时器清零。如果被监视任务群有一个Task_x出现故障,TaskMonitor就不对看门狗定时器清零,也就达到被监视任务出现故障时系统自动重启的目的。另外任务TaskMonitor自身出故障时,也不能及时对看门狗定时器清零,看门狗也能自动复位重启。接下来需要解决一个问题是:监视任务如何有效监视被监视的任务群。
   
   
   
    图2:(a) 多任务系统看门狗示意图;(b) 正确的看门狗复位逻辑图。
   
      在TaskMonitor中定义一组结构体来模拟看门狗定时器组,
   
      typedef struct
   
      {
   
      UINT32 CurCnt, LastCnt;
   
      BOOL RunState;
   
      int taskID;
   
      } STRUCT_WATCH_DOG;
   
      该结构体包括被监视的任务号taskID,用来模拟“喂狗”的变量CurCnt、LastCnt(具体含义见下文),看门狗状态标志RunState用来控制当前任务是否接受监视。
   
      被监视的任务Task1~Taskn调用自定义函数CreateWatchDog(int taskid)来创建看门狗,被监视任务一段时间内要求“喂狗”,调用ResetWatchDog(int taskid),这个“喂狗”动作实质就是对看门狗定时器结构体中的变量CurCnt加1操作。TaskMonitor大部分时间处于延时状态,假设硬件看门狗定时是2秒,监视任务可以延时1.5秒,接着对创建的看门狗定时器组一一检验,延时前保存CurCnt的当前值到LastCnt,延时后比较CurCnt与LastCnt是否相等,都不相等系统才是正常的。需要注意的是CurCnt和LastCnt数据字节数太小,而“喂狗”过于频繁,可能出现CurCnt加1操作达到一个循环而与LastCnt相等。
   
      如果有任意一组的CurCnt等于LastCnt,认为对应接受监视的任务没有“喂狗”动作,也就检测到该任务出现故障需要重启,这时候TaskMonitor不对硬件看门狗定时器清零,或者延时很长的时间,比如10秒,足以使得系统重启。反之,系统正常,Task1~Taskn定期对TaskMonitor“喂狗”,TaskMonitor又定期对硬件看门狗“喂狗”,系统就得不到复位。还有一点,被监视任务可以通过调用PauseWatchDog(int taskid)来取消对应的看门狗,实际上就是对STRUCT_WATCH_DOG结构体中的RunState操作,该标志体现看门狗有效与否。
   
      这种方式可监视的最大任务数由STRUCT_WATCH_DOG结构数据的个数决定。程序中应该有一个变量记录当前已创建的看门狗数,判断被监视任务Task1~Taskn是否“喂狗”只需比较CurCnt与LastCnt的值n次。
   
   
   
    图3:系统复位逻辑图。
   
      硬件看门狗监视TaskMonitor任务,TaskMonitor任务又监视其他的被监视任务Task1~Taskn,形成这样一种链条。这种方式系统的故障图表示如图3所示。被监视任务Task1~Taskn及TaskMonitor都是或的关系,因此被监视的任一任务发生故障,硬件电路看门狗就能复位。
   
      为实现多任务系统的看门狗监视功能额外增加了TaskMonitor任务,这个任务占用执行时间多少也是一个重要问题。假设TaskMonitor任务一个监视周期延时1.5秒,此外需要执行保存当前计数值,判断是否“喂狗”等语句,它的CPU占用时间是很小的。用一个具体的试验证实,使用50M工作频率的CPU(S3C4510),移植vxWorks操作系统,cache不使能条件下监视10个任务,每个监视周期占用220~240微秒。可见该任务绝大多数时间都处于任务延时状态。
   
      被监视任务可能有获取消息、等待一个信号量等的语句,往往这个消息、信号量的等待是无限期的等待。这就需要将这类语句作一些修改。比如在vxWorks中将一次无期限的获取信号量操作
   
      semTake(semID, WAIT_FOREVER); // WAIT_FOREVER为无限时间等待
   
      分解为
   
      do
   
      {
   
      ResetWatchDog; // “喂狗”操作
   
      }while(semTake(semID, sysClkRateGet( )) != OK); // 1s内的等待信号量操作
   
      多次的时间范围内的获取信号量操作,这样才能保证及时“喂狗”。
   
      另外需要注意的是系统中是否有的任务优先级比TaskMonitor高并且长时间处于执行状态,TaskMonitor长时间得不到调度,使得看门狗错误复位。良好的任务划分,配置是不应该出现这种高优先级任务长期执行状况的。
   
   
   

以下是关于《工控——多任务系统看门狗的实现》论题的回复(共4篇)

回复人:梁帅武 

 回复时间:2010/11/20 11:00:00

支持(535) | 反对(479)

 

    这东西好啊

回复人:tc1xiaoyi 

 回复时间:2012/12/20 9:29:00

支持(337) | 反对(294)

 

    您的工控机管家,大连同创自控。主要代理产品:是研华工控大连经销商,华北工控大连唯一代理商,研祥工控大连经销商,深圳三锘智能伺服变压器辽宁代理商,MOXA卡、阿尔泰卡大连经销商,世纪星组态软件大连代理,三维力控组态软件大连经销商。大连同创立足于本地,以自身多年的工控产品的销售及服务为大连的研发机构,院校,环保科研,交通,智能化等自动化领域提供优质的服务。
    http://www.dltcac.com/index.asp (可通过网址直接查询)
    大连同创世纪自控科技发展有限公司
    地址:大连沙河口区中山路429号
    电话:0411-39734386
    传真:0411-39734389
    联系人:李先生
   

回复人:空洞 

 回复时间:2016/8/1 11:37:00

支持(233) | 反对(408)

 

    好广告,搂主辛苦,支持一下,顶!

回复人:杭州双翌 

 回复时间:2017/6/29 16:26:00

支持(388) | 反对(423)

 

    杭州双翌自动化科技有限公司主要致力于发展
   
    MicroPos机械手视觉定位系统:MicroPos机械手视觉定位系统是双翌光电自主研发的软件算法,MicroPos功能齐备,使用简便,满足自动化绝大部分的应用需求,开放的通讯接口,能快速搭建如1相机的拾取加工、2相机或者多颗相机的高精装配等应用
   
    机器视觉:机器视觉系统主要由三部分组成:图像的获取、图像的处理和分析、输出或显示,双翌为客户提供配套的机器视觉产品。从光源、镜头、相机到图像处理库,实现最大化脱离人工干预的自动化,为工业4.0助力
   
    MicroDistPro对位系统 :MicroDistPro视觉对位系统是双翌光电科技专门针对高精度对位需求而自主研发的视觉对位产品。先进的机器视觉技术与运动控制相结合,无需提供精密的辅助工具,就能完成精确的系统自标定,实现精准的对位应用。简单易学的使用理念,强大的算法功能,助你快速实现高效的生产。MicroDistPro视觉对位系统有着广泛的应用领域,在精密加工与装配方面发挥着重要作用。双翌光电科技追求在自动控制领域中实现客户的梦想,为客户创造与众不同的价值。
   
    图像处理库: SYMV是面向工业自动化的图像处理库,为你带来简洁实用的6个类库:SYBASE/SYBLOB/SYCOLOR/SYGAUGE/SYIMGPROC/SYMCH,涵盖定位,识别,测量等机器视觉主要应用领域。 SYMV图像处理库,将继续立足于工业机器视觉,不断改进性能,增加更多实用性功能。
   
    杭州双翌自动化科技有限公司 宋永辉(YongHui Song)Maketing Manager
    TEL:0571-28350143 FAX:0571-88315242
    Add:杭州市西湖区文三路249号联强大厦A座421室
    Web:www.shuangyi-tech.com
    Mobile: (+86)135-8847-3224

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳