1 系统设计原理
为了完成控制系统中多任务的实时响应要求,可以利用定时中断作为系统的时钟。每个中断的间隔作为时钟的最小基本单位,这个值要小于或等于被控制的各个任务中对时间要求最苛刻的任务的最大允许响应时间。定时间隔越短,响应越快捷,但系统CPU的负担也越重(因为CPU休眠的时间也越来越少)。这是一对相互矛盾的事物,需要设计者谨慎的协调才能达到最完美的效果。例如在配料控制系统中,如果加料速度为20 kg/s,要求配料误差为1 kg,则系统的实时性必须保证在50 ms之内。为了留有余地,可将定时中断间隔设置为20 ms。 1.2 通过对所有任务的及时“照看”来管理多任务 可以根据各个任务对实时性要求的不同程度,将任务分为不同的类型。对实时性要求越是苛刻的任务,就需要得到系统越频繁的“照看”。对于实时性要求不高的任务,系统对它的“照看”时间间隔可以长一些。例如,有两个任务A和B,任务A每秒必须“照看”10次,任务B每秒必须“照看”2次,则控制流程如图1所示。从图1中可以看出,任务A每隔0.1 s“照看”1次,任务B每隔0.5 s“照看”1次。对实时性要求基本相同的若干任务,可依次“照看”,其程序流程如图2所示。
图1处理实时性要求不同的任务
1.3将任务分解为若干状态 对于执行时间大于定时间隔的任务,其执行过程都是由若干不同状态构成的。在不同状态下,需要系统进行不同方式的“照看”,为此,为这个任务设置一个状态变量,以指示该任务当前的状态。当系统“照看”该任务时,首先读取该任务的状态变量,然后根据状态变量的值来执行对应的“照看”操作。 为了使系统能够及时从某个任务脱身,以便及时“照看”另外的任务,则任何“照看”操作都必须非常简短(远小于定时间隔)。如果某个任务的某种状态需要系统较长时间的“照看”(如进行一段比较复杂的数据处理),则必须将这个状态再分解为若干状态,直到每个状态需要的处理时间均比定时中断间隔短得多。也可以设置若干标志,将这些耗时的处理过程放在后台处理。 1.3将任务分解为若干状态 ① 本方法没有优先级的概念,所有任务都一视同仁得到“照看”,不存在“任务调度”问题,从根本上简化了系统软件设计,也大大降低了对硬件资源的要求。 ② 本方法与“时间片轮回”方法类似,但有两点不同:第一是每个任务得到的“时间片”是不固定的,与该任务的当前状态有关,当该任务处于停止状态时,其“照看”操作所需要的时间就比较短,占用的“时间片”也就比较短;第二是以“照看”操作来划分“时间片”,每个任务的“照看”都是一个完整的过程,不存在被打断的情况,故不需要为每个任务配置“堆栈”。各个任务之间的通信和同步可以通过变量和标志来完成,实现起来也比较简单。 ③ 由于本方法对处于“停止状态”的任务也要不停地“照看”,显然时间利用率不高,当系统任务数量较多或实时性要求很高时就难于胜任,故本方法只能在任务数量较少的中低档系统中采用;任务数量较多或实时性要求很高的系统,仍然应该采用基于实时操作系统的编程方法。 2 设计实例 现结合一个配料系统的设计实例来说明该类系统的设计方法。在配料系统中,配方中的每种成分都由一个独立的料斗来配置,并由一个独立的电子秤来计量。进行配料操作时,为了提高工作效率,各个料斗同时进行加料,达到配方中各自规定的重量后则停止加料。当所有料斗都完成加料过程后,便同时(或按预定顺序)出料,进行混合处理。各个料斗均出料结束后,间隔若干秒钟自动开始下一轮配料过程。 ◆ 键盘管理任务。采集操作者的按键动作并解释执行,用来设置配方数据和配料次数,控制系统运行。 系统的软件结构如图3所示。左边是主程序,只安排了睡眠任务;右边是定时中断子程序,安排了其他所有任务。
图3系统软件结构示意图 除配料控制任务外,其他任务运行一次的时间均远小于定时间隔,在每次定时中断中均可以完整地运行一次,故采用普通的编程方法将其运行过程写出来即可。配料控制任务无法在一次定时中断里完成,只能用不断“照看”的方法来完成。如果配料任务的运行时间(运行周期)为40 s,定时中断间隔时间为20 ms,则每次配料过程都是通过2000次“照看”来实现的。设配方有四种成分,则系统有四个料斗并行工作,“配料控制”任务的“照看”操作实际上由“照看料斗1”、“照看料斗2”、“照看料斗3”、“照看料斗4”组成(如图2所示),即每次定时中断都要依次“照看”四个料斗。四个料斗的“照看”操作方式基本相同。由于配方数据的差异,四个料斗的状态不一定每时每刻都同步。如果不考虑加料时的“落差”现象,就一个料斗而言,“照看”操作内容设计如表1所列。 配料过程由键盘操作来启动(使“允许配料”标志=1),以后各次配料操作由前一次配料的状态5来启动,直到完成预定的配料次数。 从表1中可以看出,所有的“照看”操作都是由“判断-分支”结构组成,操作时间也很短,满足设计要求。 3 小结
注:当状态变量的值为5时,为了同步和避免重复计算配料次数,只有料斗1执行指定的操作,其他料斗均不进行任何操作,直接结束照看。 在实时多任务系统中,为了保证系统的实时性,采用实时操作系统是首选设计方案;但在中低档系统中,为了简化设计和降低成本,利用本文介绍的方法,基于裸机编程同样可以满足要求。在中低档系统占有很大比例的产品市场中,本文介绍的编程方法对降低成本和提高产品竞争力显然是有帮助的。 |