企业: | 控制网 | 日期: | 2005-11-07 |
---|---|---|---|
领域: | 机器视觉 | 点击数: | 984 |
1 系统概述 系统设计目标为:在TIG焊条件下,焊接速度为24cm/min时,焊头与焊缝偏差小于1mm。 系统的功能块有信号采集、信号处理、控制运算、输出等。另外由于本系统的弧光干扰严重,为防止程序运行中因一个环节出错而导致系统混乱以致无法控制焊头与焊缝的偏差,本系统设计了监视模块用来及时纠错。 系统结构图如图1所示,由外而内可分三层,分别为硬件电路层、任务层及操作系统层。 2 硬件电路层设计 本系统的硬件电路层包括一块信号采集板和一块驱动板。前者的用途在于从电弧传感器获取电流信号并将其转换成电压信号。此电流信号能有效表征焊头与焊缝的位置关系,此电压信号将被任务层的信号采集任务获取。后者的用途在于制任务层中输出任务产生的命令(此命令作用于单片机输出口)传输到电机,从而改变焊头和焊缝的偏差。 3 任务层设计 3.1 系统任务层组成及其优先权设置 3.2 任务的状态 当一个任务点用CPU时该任务处于运行态,其优先权必较所有就绪态任务优先权高。若系统运行导致就绪态某一任务的优行权高于运行态任务优先仅,则调用调度函数,运行态任务将丧失对CPU的占用权而转为就绪态,优先权最高的就绪态任务转为运行态。某一时刻只能有一个任务处于运行态。任务在就绪态和运行态间的转化被称为任务切换。 当运行态的任务期待某一消息时(即别的任务和该任务的数据传递,本设计中任务间的数据传递被称为消息),该任务将丧失对CPU的占用权而转为等待态,等待时间可由系统设定。若等待时间内该任务收到消息,任务将转为就绪态,否则将被时间管理函数强行转为就绪态。 中断发生时运行态的任务将转入中断态,丧失对CPU的占用权。因为断中可能有消息发送使等待态的任务转入就绪态,故中断返回后将首先运行调度函数,决定任务状态。 3.3 任务的构成 任务堆栈以存储CPU寄存器内容。当某任务由运行态变为其它状态时,CPU寄存器内容压入相应任务堆栈,反之则将相应任务堆栈内容置入CPU寄存器。 作为系统中定义中一个数据结构,任务控制块的内容包括任务堆栈的地址、任务当前状态、任务优先权等。操作系统通过查询任务控制块内容实现对任务的管理。 3.4监视任务的设计 监视任务设计思路为:被监视任务正常运行时其执行时间是可预估的,被监视任务在其即将运行完毕时向监视任务发送消息说明自身运行正常。被监视任务运行时,监视任务处于等待态,等待被监视任务给它发送消息,等待时间被设定为预计的任务正常运行所需的最大时间。若等待时间内监视任务收到消息,则认为发送消息的任务运行正常,依照各任务执行顺序的先后下一任务开始运行,监视任务等待下一任务发送的消息。若等待时间已过,监视任务仍未收到消息,则系统的时间管理函数将强行把监视任务为就绪态。因监视任务的优先权是最高的,它将抢占对CPU的控制权并采取相应的纠错方案。本系统中针对常见故障建立对策库,并将之置于ROM,以便实现应用中根据故障的具体情况采取相应措施。 现以信号采集任务中常出现的一个扰动为例加以介绍。信号采集任务进行信号采集前者先查询一个标志位,该标志位显示焊接是否开始。若该标志位置1表明焊接已经开始,任务开始信号采集,否则任务一直查询直至该标志位置1。若该位在位置时由于瞬间振动导致未能置位成功以致信号采集任务不断查询该标志位,将导致系统混乱。若未采用监视任务,则系统只能依靠看门狗复位。在本设计中由于操作系统的采用,使各任务的关系由传统的顺序机制变成并行机制。监视任务在预定的等待时间仍未收到信号采集任务发送的消息,被时间管理函数置为就绪态,且由于其优先权较信号采集任务高,将获得CPU的使用权,使信号采集任务重新运行以消除扰动的影响,即刷新看门狗寄存器的值,将信号采集任务置为就绪态,并将信号采集任务的任务堆栈的断点地址值改为采集任务起始地址后重新将自身置为等待态。 4 操作系统层设计 4.2 消息队列 其中osqstart为指向消息队列起始地址的指针,osqend为消息队列结束单元的下一地址的指针,osqstart、osqend使消息队列构成一个循环的缓冲区。osqsize为消息队列的总单元数,该值的大小视任务的需要而定。osqentry为消息队列中消息数,其值随数据存取而改变。 osqin为指向消息队列存入下一条消息的指针。osqout为指向消息队列取出下一条消息的指针。系统初始化及osqin、osqout到达osqend时将被调整指向消息队列起始地址。系统完成消息队列创建后即开始对其进行初始化,将osqentry置为0,osqin、osqout指向消息队列起始地址。消息队列的存取采取先进先出的原则,osqin、osqout随数据的存取相应改变。 消息队列1被信号采集任务用于发送消息给信号处理,监视任务;消息队列2被信号处理任务用于发送消息给控制运算,监视任务;消息队列3被控制运行任务用于发送消息给输出任务,监视任务;消息队列4被输出任务用于发送消息给监视任务。 本系统定义数据结构--队列控制块业实现对多个消息队列的管理,每个消息队列对应一个队列控制块。队列控制埠的内容包括指向消息队列的指针以及该消息队列对应的等任务。消息存取采取优先权原则,即消息队列非空时,该消息队列对应的队列中等待任务列表内优先权最高的任务先从消息队列中取消息。因消息发送可能会导致任务状态的变化,为维护消息的完整,消息发送中禁止任务切换。 因本系统中对消息的存取采取先入先出以及优先权的原则,故各任务发送消息至消息队列的顺序为:先发送给监视任务的消息,后发送给其它任务的消息。各任务从消息队列读取的顺序为:监视任务先读,其它任务后读。 4.3 系统调度 本系统采用静态优先权,若就绪态中任务的最高优先权变化,则必有任务从等待态转化成就绪态。而任务从等待态转化成就绪态的前提为有消息产生,故调用调度函数时机为任务为消息发送完成以及中断返回。 4.4 时间管理函数 5 系统运行过程分析 系统运行首要环节为初始化,包括两部分:第一部分为建立任务,为之分配优先权,将其置为就绪态;第二部分为实现任务间的数据传递、建立消息队列及对应的队列控制块初始化消息队列。 系统初始倾听各任务即可开始调度运行。刚开始时各任务均处就绪态,此时监视任务优先权最高,最先运行,查询消息队列1即信号采集任务有无给它发送消息,因消息队列1为空,监视任务变为等待态并确定等待时间。此时输出任务在所有就绪态任务中优先权最高,可以运行,但也因消息队列2空变为等待态,依此类推。虽信号采集任务优先权最低,但其无需等待别的任务给它发送消息,故信号采集任务得到CPU控制权。若信号采集任务未能正常运行则等待时间过后消息队列仍这人。时间管理函数将强行置监视任务为就绪态,因监视任务的优先权高将获得CPU控制权并根据故障情况从对策库中找出相应解决方案。若信号采集任务正常运行则在等待时间内发送消息至消息队列1,信号处理任务及监视任务转为就绪态。因监视任务优先权较高,先从消息队列1获取消息以确认信号采集任务运行无误。查询消息队列2即信号处理任务有无给它发送消息,因信号处理任务尚未运行,消息队列2为空,监视任务退出运行态转入等待态并确定等待时间,信号处理任务获得对CPU控制权,读消息并开始运行。其余任务的运行依此类似。当所有任务均运行一次后所有任务状态为就绪态,开始下一周期的运行。 经系统实际运行证明,因实时嵌入式操作系统uC/OS-II以及监视任务的采用,较好地提高了系统安全性能,有效地减少了复位次数,达到了系统设计目标。 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
1.我有以下需求: | |
|
|
2.详细的需求: | |
* | |
姓名: | * |
单位: | |
电话: | * |
邮件: | * |