电控冰箱软件模块化设计
2019-02-26左秋杰汪良树
左秋杰 汪良树 任 猛
(长虹美菱股份有限公司 合肥 230601)
引言
随着科技发展、社会进步、人们生活水平的提高,电冰箱几乎成为每个家庭必备的家用电器[1],电冰箱的发展也从最基本的低温保鲜功能,发展到如今的多种功能俱全更智能化的现状,导致电冰箱产品开发过程中软件实现起来越发复杂。
把一个复杂问题分解为若干个基本问题,再分别求解这些容易解决的基本问题,就是使复杂问题简单化。
软件开发过程中,面对一个复杂的程序设计,通常做法是根据系统功能需求,一个功能需求整合成一个模块,整个程序由多个模块组成,每个模块再细分为更小的模块,直到每个小的模块单独完成一个特定的功能,实现模块化程序设计。
软件开发过程中,采用模块化的方法,可以使每个模块实现功能与结构的独立,同时每个模块的工作量更小,可以将工作过程细分化,提高工作效率。
1 程序模块化设计
1.1 模块化程序设计结构
一个完整的程序通常包括主程序和子程序,主程序负责调用职能,子程序负责实现具体的功能模块,主程序调用子程序,这是程序模块化的要求。在主程序运行完一个循环的过程中完成了对各功能模块的顺序调用,如图1所示。
采用这种结构,各个模块之间相互独立、结构清晰、接口简单,我们可以象搭积木一样,根据系统功能需求,来实现功能模块的增减。
1.2 模块的事件驱动机制
主程序按顺序依次调用各个功能模块,若每个模块都执行一遍,势必会增加系统的运行时间,而有些模块不需要执行或不具备执行的条件,就可以避免执行这些模块。采取事件驱动机制,避免执行这些模块,可以优化主程序结构,提升程序的执行速度。
事件驱动机制,就是设置若干使能标志,一一对应各功能模块,通过此标志置一或清零触发/不触发该模块代表的事件。即,在每次执行某些功能时,先判断该功能所在模块是否满足执行条件,如果满足则执行[3]。
1.3 时间片与分时调度机制
当系统较复杂、功能需求较多时,为了保证每个功能都有充足的时间分配,需要采用分时调度机制。将系统时间分成若干份时间片,当满足某一个时间片条件时,执行一个或者多个功能模块。
如果分时调度的执行者是主程序,我们可以将应用程序的所有功能都按照分时调度机制调用(见图3)。
1.4 中断与前/后台的程序结构
如果采用依次调用各功能模块外加分时调度机制,完全可以完成一般的程序设计工作。但是遇到突发事件时,不能实时响应,这时需要引入中断。
中断是独立于主程序之外且优先级高于主程序的程序流程,每次中断产生均可暂停主程序正在处理的流程,待处理完中断程序后,主程序再回到原来中断的地方,继续执行原来被中断的程序(见图4)。
对于中断程序来讲,通常以越短越精简为佳,尽量避免在中断程序中进行大量的逻辑关系运算。原则上中断函数的执行时间需要远远小于中断间隔时间。 避免出现因执行时间过长导致主程序大部分时间处于等待状态不能实时处理功能函数等问题。
图1 程序结构图
图2 功能模块的程序结构
2 控制软件架构
根据冰箱电控系统的工作原理制定模块化控制策略,将控制软件划分为3大部分,系统初始化程序、主程序循环体、中断程序。
2.1 系统初始化程序
单片机控制系统在上电之后,首先进行系统复位,然后跳转到主程序运行。在系统实现主程序功能之前,首先对系统进行初始化,需要设定与对系统时钟、中断、串口相关的寄存器,设定各通用IO口的初始状态、设置各功能模块所涉及变量的定义与初始值等。初始化操作只需要执行一次。
图3 主程序采取分时调度结构
图4 前/后台的程序结构模型
2.2 主程序循环体
系统初始化之后,所需的工作环境就设置好了,下一步是进入主程序。主程序一般是个循环体,负责执行系统需求各项功能任务,如输入检测(AD采集、按键等)、负载输出控制等。这些功能语句通常写成子程序形式,由主程序进行调用。
根据目前电控冰箱的控制需求,需要执行的任务主要有:通信数据的准备与读取、显示数据准备、按键读取与处理、制冷逻辑计算、化霜逻辑计算、各负载的控制逻辑及控制数据准备。
如图5所示,为主程序流程图。
2.3 中断程序
我们把实时性要求很高的功能函数模块如通信数据的收发、LED显示扫描、风门的单步驱动、PWM输出,放在中断中执行;把实时性要求低的任务如制冷逻辑计算、负载输出控制等交给主程序区调度。
图5 主程序流程图
图6 定时器中断程序流程图
定时器中断处理程序为系统提供一个基准时间,软件各功能模块中各类时间:如化霜时间、制冷时间、开门时间等计时均以此为基准。
3 结论
在电控冰箱软件开发过程中,模块化设计使模块与模块之间的相互影响降到最低,降低了产品设计的风险,同时也可以提高产品的可靠性和设计质量,使程序设计、调试和后续维护等操作更加简单化,可缩短控制软件开发周期,降低研发成本。