首页 理论教育现场总线控制算法的存储与恢复

现场总线控制算法的存储与恢复

【摘要】:如果再将控制算法信息分为存储信息与运行信息,会造成一定的重复,产生双倍的RAM需求。这要求控制算法运行信息存放的介质兼有数据存储功能,即掉电数据不丢失。所以,μC/OS-Ⅱ内存管理模块的相关信息也必须得到存储。在程序再次运行时,再次加载控制算法就是将备份区中的信息恢复到内存池中和回路头指针中。

在系统的需求分析中曾经提到,系统要求对控制算法的信息进行存储,做到掉电不丢失,重新上电后可以重新加载原有的控制算法。

对于控制算法的存储,如果以控制算法的原始形态进行存储,即以控制算法信息解析之前的形态存储,控制卡需要在接收到上位机的控制算法信息后逐条存储。以此种方式进行存储,如果存在频繁的控制算法修改操作,就会造成控制算法存储信息的激增,并且存储的信息量没有上限。而且,以原始形态存储控制算法,在重新加载时需要对控制算法重新解析,这也需要一定的时间。在本系统设计中没有采用这种方式,而是采用解析后控制回路的形式进行存储。

以解析后控制回路的形式进行控制算法的存储,不存在信息激增和信息量无上限的情况,因为对回路的修改操作只是对已有回路的修改,并不会产生新的回路。并且,在系统设计时限定最多容纳255个控制回路,所以,控制算法的信息量不会是无限制的。而且,以此种形式存储的控制算法,再次加载时不需要重新解析。

解析后的控制回路实际上就是一种运行状态的控制回路,以此种方式存储的控制算法兼有运行时的形态,只是模块内部具体数值不同而已。如果再将控制算法信息分为存储信息与运行信息,会造成一定的重复,产生双倍的RAM需求。

既然控制算法的存储态与运行态是一致的,那就可以将控制算法的运行区与存储区相结合,将运行信息作为存储信息。这要求控制算法运行信息存放的介质兼有数据存储功能,即掉电数据不丢失。外扩的RAM中,无论是具有后备电池供电的SRAM,还是磁存储器MRAM都具有数据存储特性,都可满足将控制算法存储区与运行区相结合的基本要求。

除了保证存储介质的数据保存功能外,还要保证数据不会被破坏。本系统中的控制算法存储在一个个的内存块中,这些内存块由μC/OS-Ⅱ的内存管理模块进行分配与回收,如果μC/OS-Ⅱ的内存管理模块不知道之前分配的内存块中存储着控制算法信息,在程序再次运行时,没有记录原先的内存块的使用情况,当再次向μC/OS-Ⅱ的内存管理模块进行内存块的申请或交还操作时,就会对原有的内存块造成破坏。所以,μC/OS-Ⅱ内存管理模块的相关信息也必须得到存储。(www.chuimin.cn)

要使μC/OS-Ⅱ内存管理模块的信息得到有效存储,涉及整个μC/OS-Ⅱ中内存的规划。而且要使存储的信息有效,还要保证μC/OS-Ⅱ内存规划的固定性,比如内存池的个数、内存池的大小、内存池管理空间的起始地址、内部内存块的大小和内存块的个数等信息都必须是固定的,即每次程序重新加载时,上述信息都是固定不变的。因为,一旦上述信息发生了变化,之前存储的信息也就失去了意义。

在μC/OS-Ⅱ内存初始规划阶段,就必须确定内存池的个数,严格限定每个内存池的起始地址与大小,以及内部内存块的大小和个数,并且不得更改。只有这样,记录的内存池内部内存块的使用信息才会有意义。

其实,存储只是一种手段,恢复才是最终目的。保证存储介质的数据保存能力和控制算法信息不会被破坏,仅仅是使控制算法信息得到了存储,但仍不足以在程序再次运行时使控制算法信息得到恢复。要使控制算法信息能够得到有效恢复,必须提供能够重建之前控制算法运行环境的信息。为此,必须单独开辟一块区域,作为备份区,以用于存储能够重建之前控制算法运行环境的信息。这些信息包括内存池使用情况信息和回路头指针信息。在每次完成控制算法的解析工作后,就需要将这些信息复制一份存储到备份区中。在程序再次运行时,再次加载控制算法就是将备份区中的信息恢复到内存池中和回路头指针中。这样原先的控制算法运行环境就得以重建。以回路头指针为例,在本系统中控制算法以回路的形式表示,而且回路就是串接着各个功能模块的链表。对于一个链表而言,得到了头指针,就可以依次找到链表中的各个节点,在本系统中就是有了回路头指针,才可以依次找到回路中的各个功能模块。

经过数次运算后的功能模块的信息与刚解析完成时的功能模块的信息是不一样的,主要是模块运算结果不再是0。在重新加载控制算法信息后,希望能够重新开始控制算法的运行,所以需要设立控制算法初始运行标志,在各功能模块运算时需要根据此标志选择性地将模块暂存的运算结果清除,以产生功能模块与刚解析完成时一样的效果。