一种工业控制系统数据内存的管理方法

文档序号:6312961阅读:296来源:国知局
一种工业控制系统数据内存的管理方法
【专利摘要】本发明公开了一种工业控制系统数据内存的管理方法。控制系统通常包含组态软件和控制器两大部分,组态软件负责生成算法程序,控制器负责执行程序实现控制功能。组态软件编写算法程序时,需要定义若干数据来实现其逻辑,并将运算结果保存在控制器的数据内存中用于运算与监控。控制系统分配固定大小的内存空间供数据使用,针对待处理的数据按照其属性(类型、大小、对齐要求等)在控制器数据内存中分配内存空间;数据信息删除或修改后,将其使用内存进行回收并与空闲内存合并;在线修改算法程序时的内存管理方法。通过本发明可以实现控制系统数据内存的高效管理,更为重要的是可以满足控制系统在线修改算法程序的要求。
【专利说明】一种工业控制系统数据内存的管理方法

【技术领域】
[0001]本发明属于工业自动化控制系统【技术领域】,更具体地说,涉及一种工业控制系统数据内存的管理方法。

【背景技术】
[0002]在工业自动化控制中,由组态软件与控制器(也称为上位机与下位机)组成的控制系统广泛的应用于各控制领域:如分布式控制系统(00、可编程控制器(卩仏)等。组态软件负责生成算法程序,控制器负责执行程序实现控制功能。组态软件编写算法程序时,需要定义若干数据来实现其逻辑,并将运算结果保存在控制器的数据内存中用于监控。由于控制器中的数据存储空间有限,正确、高效的管理数据内存是控制系统稳定运行的前提和基础;同时在线修改控制器程序时,必须保证数据的内存空间及内存中数据不被随意更改,这是在线修改控制系统算法程序的重要前提之一。


【发明内容】

[0003]有鉴于此,本发明提供一种工业控制系统数据内存的管理方法,用来完成控制系统数据内存大小的分配、回收等工作,然后在此基础上,设计一种数据内存管理方法,使之完成对数据使用的内存进行维护、再分配,对不再使用的内存进行回收、合并等工作,二者结合完成对数据内存的管理,同时该内存管理方式可以满足工业控制系统在线修改算法逻辑要求。
[0004]为了更好地理解本发明的技术方案,首先对本发明所要使用的几个技术术语进行说明如下:
[0005]控制系统:包含作为上位机的组态软件和作为下位机的控制器两大部分,组态软件负责生成算法程序,控制器负责执行程序实现控制功能。
[0006]数据的对齐方式:指不同类型数据所定义的字节数;
[0007]其中,基础类型数据的对齐方式是指不同类型数据所定义的字节数;
[0008]复杂类型数据的对齐方式是指其所有基础类型数据的成员中定义的最大字节数。
[0009]本发明的技术方案是这样实现的:
[0010]一种工业控制系统数据内存的管理方法,其特征在于:该方法在作为下位机的控制器中预先分配固定大小的内存空间,在所述预先分配固定大小的内存空间中定义内存空闲块,将待处理的数据按照其属性在控制器所述内存空闲块中分配内存空间。
[0011]所述管理方法还进一步包括:当作为上位机的组态软件删除或修改控制器中的数据时,回收该数据原来使用的内存空间。
[0012]一种工业控制系统数据内存的管理方法,其特征在于,所述方法包括以下步骤:
[0013](1)在控制器中预先分配固定大小的内存空间,并且在所述预先分配固定大小的内存空间中定义内存空闲块,建立内存空闲块列表,所述内存空闲块表示空闲的数据内存,内存空闲块的信息包括空闲内存的起始地址及长度;内存空闲块在本申请中有时简称为空闲块,内存空闲块列表有时简称为空闲块列表;
[0014](2)在上位机组态软件需要针对算法逻辑进行编译时,首先读取已经加载到控制器中的算法程序的数据内存信息,并与作为上位机的组态软件的数据进行比较,判断作为上位机的组态软件中的数据是否有新增、修改或删除;
[0015](3)当作为上位机的组态软件新增、修改了相应数据时,进入步骤(4)在控制器中对新增和/或修改了数据重新分配,并将组态软件中新增、修改了相应的数据加载到控制器中;当作为上位机的组态软件删除了相应数据时,进入步骤(5),回收对应数据所使用的内存空间;
[0016](4)按照待处理的数据的对齐方式进行降序排序,即将需要从作为上位机的组态软件加载到控制器中的算法程序中所使用到的所有数据按照对齐方式从大到小的顺序进行排列,然后遍历空闲块列表,按照优先将内存空闲块分配给对齐方式大的数据的原则对新增和/或修改了数据重新进行内存分配,其中当作为上位机的组态软件修改了相应数据时,在控制器中对修改了的数据完成内存分配后还要进入步骤(5)回收修改前的数据原来所使用的内存空间;
[0017](5)将控制器中算法程序中的对应数据即需要删除或修改的数据原来所使用的内存回收,并将回收的内存与内存空闲块合并。
[0018]本申请还进一步包括以下优选方案:
[0019]在步骤(1)中,在控制器中预先分配的内存空间,其初始状态为一整块内存空闲块,随着数据内存的分配,会将该内存块分割为很多小的内存空闲块,这些空闲块的集合,定义为空闲块列表,同时将列表中的内存空闲块按照起始地址从小到大的顺序进行排序。
[0020]在步骤⑵中,优选包括以下内容:
[0021]从控制器中读取已经加载到控制器中的算法程序的数据内存信息,按照约定好的数据关键字为基础,与作为上位机的组态软件中的数据进行比对,其中所述关键字为数据名或数据编号:
[0022]若作为上位机的组态软件中存在该数据,而下位机中并没有该数据,则判断作为上位机的组态软件新增了数据信息;
[0023]若作为上位机的组态软件的数据与对应的控制器中的算法程序中的数据关键字相同,但是其属性发生变化,则判断作为上位机的组态软件修改了数据信息;
[0024]若控制器算法程序中存在该数据,而上位机组态软件中已将其删除,则判断作为上位机的组态软件删除了数据信息。
[0025]在步骤(4)中,优选按照以下步骤对新增和/或修改了数据重新进行内存分配:
[0026]4.1将需要从作为上位机的组态软件加载到控制器中的算法程序中所使用到的所有数据按照对齐方式从大到小的顺序进行排列;按照顺序逐一对数据进行内存分配,以下步骤中将对齐方式最大的待分配数据简称为待分配数据;
[0027]4.2逐个遍历内存空闲块列表中的内存空闲块,针对每一个内存空闲块,进入步骤4.3 ;若所有内存空闲块均已遍历而仍未正确完成分配,则该待分配数据分配失败,转至步骤 4.6 ;
[0028]4.3针对某一内存空闲块,判断其起始地址是否为待分配数据的对齐方式的整数倍,即判断该内存空闲块的起始地址是否满足待分配数据的对齐要求;
[0029]4.4若当前内存空闲块的起始地址是待分配数据的对齐方式的整数倍时,认为该内存空闲块满足待分配数据的对齐要求,则进一步判断内存空闲块的长度是否大于待分配数据的大小:若小于待分配数据,则表示该内存空闲块所表示的内存无法容纳待分配数据,则转至4.2 ;若大于待分配数据,则将待分配数据的内存地址置为该内存空闲块的起始地址,表示待分配数据使用从该起始地址开始长度为其大小的内存;同时更新内存空闲块的信息,内存空闲块的起始地址修改为原起始地址-待分配数据大小,内存空闲块的长度修改为原大小-待分配数据大小,待分配数据正确完成分配,转至步骤4.6;若修改后的内存空闲块长度为0,则表示该内存空闲块中已没有可用空间,将其从内存空闲块列表中删除;
[0030]4.5若当前内存空闲块的起始地址不是待分配数据对齐方式的整数倍时,需要先对内存空闲块进行对齐预处理,当前内存空闲块记为1(1.0^86^, 1.1611),1.0^86^表示起始地址,1.1611表示长度。具体的:(1)取待分配数据大小的最小整数倍X,使得1(大于当前内存空闲块起始地址;(2)将当前内存空闲块1分为两部分,第一部分为内存空闲块八,起始地址等于1的起始地址,长度为待分配数据大小的最小整数倍1(-内存空闲块1的长度,记为八(八.0打861:,八.1611),其中八.0打861: = 1.1611 =尺-!.0打861:;第二部分为内存空闲块8,起始地址等于X,长度为内存空闲块1的长度-内存空闲块4的长度,记为8 (8.0打86七,8.1611),其中8.0打861: = X,8.1611 = 1.1611-八.1611。将八称为对齐预留空闲块,8称为剩余空闲块;
[0031]预处理之后,剩余空闲块的起始地址满足待分配数据对齐方式要求,按照步骤4.4的方法进行内存分配;若正确完成分配,剩余空闲块8更新为8’出’.0打8的,8’.16=),其中8,.0打861: = 8.0打861:-待分配数据的大小,8’.1611 = 8.1611-待分配数据的大小,将I从内存空闲块列表中删除,并将对齐预留空闲块八和完成分配的剩余空闲块8’作为新的内存空闲块加入到空闲块列表中,如果8’的长度为0,则只加入预留空闲块八,转至步骤4.6 ;否则分配失败,转至步骤4.2;
[0032]4.6针对下一个数据进行内存分配,直到对新增和/或修改了数据全部完成内存分配。
[0033]在步骤(5)中,具体包括以下内容:
[0034]5.1获取控制器算法程序中删除或修改数据原来使用的内存信息,并将其记录,作为待回收数据;
[0035]5.2逐个处理5.1中记录的数据信息,将其内存空间进行回收,并与内存空闲块进行合并:
[0036]5.3遍历每个内存空闲块,找到起始地址大于待回收数据的内存地址的空闲块,将该空闲块定义为当前内存空闲块,内存空闲块列表中在当前空闲块前的空闲块定义为前一空闲块;
[0037]5.4判断数据内存回收后是否可以与当前空闲块及其前一空闲块进行合并前一空闲块与当前空闲块之间的位置,即为待回收数据内存的位置,是否可以合并的判断条件为:回收后前一空闲块、数据的内存空间、当前空闲块是否连续在一起,连续后的空闲块认为可进行合并,若可合并则修改相应空闲块的信息,若不可合并则创建新的空闲块插入到空闲块列表中;
[0038]5.5若不存在起始地址大于待回收数据内存地址的情况,则定义最后一块空闲块为前一空闲块,判断其与数据内存是否连续,若连续则将两个空闲块进行合并;否则将数据内存加入到空闲块列表末尾。
[0039]本发明的有益效果是,提供了一种用于工业控制系统的内存管理方法,普遍适用于各工业领域的控制系统,并很好的满足了系统在线修改算法程序的需求。本发明提出的内存管理方法,具有较高的效率且不易产生内存碎片,极大程度保证了系统运行的平稳性及安全性。

【专利附图】

【附图说明】
[0040]为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。
[0041]图1为本发明提供的一种工业控制系统数据内存的管理方法流程示意图;
[0042]图2为本发明实施例提供的满足在线修改算法程序的内存管理方法示意图;
[0043]图3为本发明提供的数据内存分配示意图;
[0044]图4为本发明提供的数据内存回收示意图;
[0045]图5为本发明实施例中数据内存分配处理流程图;
[0046]图6为本发明实施例中数据内存回收处理流程图。

【具体实施方式】
[0047]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一种实施例,而不是全部的实施例。
[0048]请参阅图1,其为本发明提供的一种工业控制系统数据内存的管理方法流程示意图。
[0049]下面以符合12061131-3标准的工业控制系统为例,说明如何实现工业控制系统的内存管理,满足在线修改算法程序的要求。
[0050]一种工业控制系统数据内存的管理方法包括以下步骤:
[0051]本发明满足在线修改算法程序的数据内存管理示意图参阅图2所示。下面针对该实施例进行详细的描述。
[0052]步骤1:在控制系统中申请固定大小的数据内存空间,用于分配算法程序中使用的数据,并将数据的运算结果保存在其对应的内存中,实现逻辑运算与现场控制。将申请的内存空间作为内存空闲块增加至内存空闲块列表中。
[0053]步骤2:在上位机组态软件需要针对算法逻辑进行编译时,首先读取已经加载到控制器中的算法程序的数据内存信息,并与作为上位机的组态软件的数据进行比较,判断作为上位机的组态软件中的数据是否存在新增、修改或删除的情况;
[0054]该步骤具体实现方式如下:
[0055]从控制器中读取运行工程的数据内存排布信息,以数据的名称作为关键字,与上位机算法程序中使用的数据进行比对,判断数据变化情况,进一步的:
[0056](21)遍历上位机程序中的所有数据,针对每个数据进行判断;
[0057](22)该数据是否存在于控制器运行的程序中,若存在则转(23),否则该数据为新增的数据,对该数据进行标示,需要分配新的内存空间及进行初始化;
[0058](23)与控制器中的数据进行详细比对,包括数据的各种属性:类型、大小等,同时标示控制器中的数据为已比较状态;若属性相同则转(24),否则该数据为修改的数据,对该数据进行标示,需要分配新的内存空间及进行初始化,同时原内存空间需要回收;
[0059](24)判断控制器中数据是否全部完成比较,若存在未比较数据,则该数据在上位机新的程序中已删除,属于已删除数据,需要回收其内存空间。
[0060]步骤3:当作为上位机的组态软件新增、修改了相应数据时,在控制器中对新增和/或修改了数据重新分配,并将组态软件中新增、修改了相应的数据加载到控制器中,完成在线修改算法逻辑功能;当作为上位机的组态软件删除了相应数据时,进入步骤5,回收对应数据所使用的内存空间;
[0061]该步骤具体实现方式如下:
[0062](31)针对新增、修改的数据,重新为其重新分配新的内存空间,具体分配方式参见步骤(4)中的描述;
[0063](32)进行在线修改控制器中的算法程序,此时新增、修改的数据已经成功加载到控制器中,在线修改成功转至(34),否则转至(35);
[0064](34)在线修改成功后,针对删除的数据,需要回收其空间,回收的具体流参见步骤
(5)中的描述。回收完成后在线修改算法程序工作正确结束;
[0065](35)在线修改失败,则控制器恢复到修改算法前的状态,由于未对控制器中已使用数据进行扰动,因此可重新针对运算数据进行查看及监控,极大程度保证了在线修改的稳定性及安全性。
[0066]步骤4:针对新增及修改数据进行数据内存分配。
[0067]本发明的数据内存分配示意图参阅图3所示。
[0068]本实施例中,数据内存分配的处理流程如图5所述,具体的:
[0069](41)将需要从作为上位机的组态软件加载到控制器中的算法程序中所使用到的所有数据按照对齐方式从大到小的顺序进行排列;按照顺序逐一对数据进行内存分配。本实施例的控制系统算法程序使用的数据对齐方式通常包括1字节对齐、2字节对齐和4字节对齐三种方式;将待处理的数据排序后,按照顺序逐一的处理每一待分配数据;
[0070](42)按照空闲块的起始偏移,从小到大遍历空闲块列表中所有空闲块,针对每一个空闲块进入(43);若遍历所有空闲块均未成功分配,则该待分配变量分配内存失败,转至(46);
[0071](43)针对每一内存空闲块,判断其起始地址是否为待分配数据的对齐方式的整数倍,即判断该内存空闲块的起始地址是否满足待分配数据的对齐要求,满足时转至(44),不满足是转至(45);
[0072](44)当前内存空闲块的起始地址是待分配数据的对齐方式的整数倍,则进一步判断内存空闲块的长度是否大于待分配数据的大小,若小于转至(441),大于转至(442);
[0073](441)该内存空闲块所表示的内存无法容纳待分配数据,则转至(42);
[0074](442)将待分配数据分配在该内存空闲块中,该数据的地址为内存空闲块的起始地址,占用其类型对应的空间。更新内存空闲块的信息,内存空闲块的起始地址修改为原起始地址-待分配数据大小,内存空闲块的长度修改为原大小-待分配数据大小,待分配数据正确完成分配,转至步骤(46)。若修改后的内存空闲块长度为0,则表示该内存空闲块中已没有可用空间,将其从内存空闲块列表中删除。
[0075](45)当前内存空闲块的起始地址不是待分配数据对齐方式的整数倍时,需要先对内存空闲块进行对齐预处理,将当前内存空闲块分为两部分,第一部分为对齐预留空闲块,起始地址等于当前空闲块的起始地址,长度为待分配数据大小的大于空闲块起始地址的最小整数倍-内存空闲块的长度;第二部分为剩余空闲块,起始地址等于待分配数据大小的大于空闲块起始地址的最小整数倍,长度为当前内存空闲块的长度-对齐预留空闲块的长度。
[0076]预处理之后,剩余空闲块用于数据的内存分配,其起始地址满足待分配数据对齐方式要求,按照(44)中的方法进行内存分配。分配失败则转至(42);若正确完成分配,更新剩余空闲块的信息,将其起始地址与长度的值修改为减去待分配数据大小,将原内存空闲块从空闲块列表中删除,并将对齐预留空闲块和完成分配的剩余空闲块作为新的内存空闲块加入到空闲块列表中,如果完成分配的剩余空闲块长度为0,则只加入预留空闲块,转至(46)。
[0077](46)顺序分配每一个数据,所有数据完成分配后正确退出,分配失败时进行错误提示。
[0078]步骤5:在完成控制系统算法程序在线修改操作后,新增及修改的数据已经使用了新的数据内存进行运算,需要将删除和修改的数据原来使用的数据内存进行回收。
[0079]本发明的数据内存回收示意图参阅图4所示。逐个数据进行回收,并与空闲内存是否进行合并。
[0080]本实施例中,数据内存回收的处理流程如图6所述,具体的:
[0081](51)获取删除及修改数据原来使用的内存信息,并将其记录为待回收的数据,转
(52)
[0082](52)逐个处理(51)中记录的数据信息,将其内存空间进行回收,并与内存空闲块进行合并:
[0083](53)遍历每个内存空闲块,找到起始地址大于待回收数据的内存地址的空闲块,将该空闲块定义为当前内存空闲块,内存空闲块列表中在当前空闲块前的空闲块定义为前一空闲块;
[0084](54)判断数据内存回收后是否可以与当前空闲块及其前一空闲块进行合并,前一空闲块与当前空闲块之间的位置,即为待回收数据内存的位置:
[0085](541)若待回收数据的内存不可以与其他空闲块合并,即回收的数据内存的起始偏移不等于前一块空闲块的结束偏移,且待回收数据内存的结束偏移不等于当前空闲块的起始偏移,此时创建新的内存空闲块加入空闲块列表中,插入到当前空闲块前即可,转至
(56);
[0086](542)若只可与其列表中前一空闲块合并,即回收的数据内存的起始偏移恰好等于前一块空闲块的结束偏移,且待回收数据内存的结束偏移不等于当前空闲块的起始偏移,此时将前一空闲块的长度增加该数据内存的长度即可,转至(56);
[0087](543)若只可与当前空闲块合并,即回收的数据内存的结束偏移恰好等于当前空闲块的起始偏移,且待回收数据的起始偏移不等于列表中前一空闲块的结束偏移,此时将当前空闲块的起始偏移修改为待回收数据的起始偏移,将长度增加待回收数据内存的长度即可,转至(56);
[0088](544)若与前一空闲块和当前空闲块均可合并,即回收的数据内存的结束偏移恰好等于当前空闲块的起始偏移,且待回收数据的起始偏移恰好等于列表中前一空闲块的结束偏移,此时形成大空闲块,修改当前空闲块的信息,起始偏移为前一空闲块的起始偏移,长度为三部分内存长度之和,同时在空闲块列表中删除其前一的空闲块即可,转至(56);
[0089](55)若不存在起始地址大于待回收数据内存地址的情况,则定义最后一块空闲块为前一空闲块:
[0090](551)若待回收数据的内存不可以与前一空闲块合并,即回收的数据内存的起始偏移不等于最后的空闲块的结束偏移,此时创建新的内存空闲块加入空闲块列表中,插入到空闲块类表末尾即可,转至(56);
[0091](552)若可与其列表中前一空闲块合并,即回收的数据内存的起始偏移恰好等于最后的空闲块的结束偏移,此时将最后的空闲块的长度增加该数据内存的长度即可,转至
(56);
[0092](56)修改或删除数据的内存信息回收成功,正确退出。
[0093]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明实施例的精神或范围的情况下,在其它实施例中实现。因此,本发明实施例将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【权利要求】
1.一种工业控制系统数据内存的管理方法,其特征在于:该方法在作为下位机的控制器中预先分配固定大小的内存空间,在所述预先分配固定大小的内存空间中定义内存空闲块,将待处理的数据按照其属性在控制器所述内存空闲块中分配内存空间。
2.根据权利要求1所述的工业控制系统数据内存的管理方法,其特征在于: 当作为上位机的组态软件删除或修改控制器中的数据时,回收该数据原来使用的内存空间。
3.—种工业控制系统数据内存的管理方法,其特征在于,所述方法包括以下步骤: (1)在控制器中预先分配固定大小的内存空间,并且在所述预先分配固定大小的内存空间中定义内存空闲块,建立内存空闲块列表,所述内存空闲块表示空闲的数据内存,内存空闲块的信息包括空闲内存的起始地址及长度;内存空闲块在本申请中有时简称为空闲块,内存空闲块列表有时简称为空闲块列表; (2)在上位机组态软件需要针对算法逻辑进行编译时,首先读取已经加载到控制器中的算法程序的数据内存信息,并与作为上位机的组态软件的数据进行比较,判断作为上位机的组态软件中的数据是否有新增、修改或删除; (3)当作为上位机的组态软件新增、修改了相应数据时,进入步骤(4)在控制器中对新增和/或修改了数据重新分配,并将组态软件中新增、修改了相应的数据加载到控制器中;当作为上位机的组态软件删除了相应数据时,进入步骤(5),回收对应数据所使用的内存空间; (4)按照待处理的数据的对齐方式进行降序排序,即将需要从作为上位机的组态软件加载到控制器中的算法程序中所使用到的所有数据按照对齐方式从大到小的顺序进行排列,然后遍历空闲块列表,按照优先将内存空闲块分配给对齐方式大的数据的原则对新增和/或修改了数据重新进行内存分配,其中当作为上位机的组态软件修改了相应数据时,在控制器中对修改了的数据完成内存分配后还要进入步骤(5)回收修改前的数据原来所使用的内存空间; (5)将控制器中算法程序中的对应数据即需要删除或修改的数据原来所使用的内存回收,并将回收的内存与内存空闲块合并。
4.根据权利要求3所述的工业控制系统数据内存的管理方法,其特征在于: 在步骤(I)中,在控制器中预先分配的内存空间,其初始状态为一整块内存空闲块,随着数据内存的分配,会将该内存块分割为很多小的内存空闲块,这些空闲块的集合,定义为空闲块列表。
5.根据权利要求3所述的工业控制系统数据内存的管理方法,其特征在于: 在步骤(2)中,优选包括以下内容: 从控制器中读取已经加载到控制器中的算法程序的数据内存信息,按照约定好的数据关键字为基础,与作为上位机的组态软件中的数据进行比对,其中所述关键字为数据名或数据编号: 若作为上位机的组态软件中存在该数据,而下位机中并没有该数据,则判断作为上位机的组态软件新增了数据信息; 若作为上位机的组态软件的数据与对应的控制器中的算法程序中的数据关键字相同,但是其属性发生变化,则判断作为上位机的组态软件修改了数据信息; 若控制器算法程序中存在该数据,而上位机组态软件中已将其删除,则判断作为上位机的组态软件删除了数据信息。
6.根据权利要求3所述的工业控制系统数据内存的管理方法,其特征在于: 在步骤(4)中,优选按照以下步骤对新增和/或修改了数据重新进行内存分配: 4.1将需要从作为上位机的组态软件加载到控制器中的算法程序中所使用到的所有数据按照对齐方式从大到小的顺序进行排列;按照顺序逐一对数据进行内存分配,以下步骤中将对齐方式最大的待分配数据简称为待分配数据; 4.2逐个遍历内存空闲块列表中的内存空闲块,针对每一个内存空闲块,进入步骤4.3 ;若所有内存空闲块均已遍历而仍未正确完成分配,则该待分配数据分配失败,转至步骤 4.6 ; 4.3针对某一内存空闲块,判断其起始地址是否为待分配数据的对齐方式的整数倍,即判断该内存空闲块的起始地址是否满足待分配数据的对齐要求; 4.4若当前内存空闲块的起始地址是待分配数据的对齐方式的整数倍时,认为该内存空闲块满足待分配数据的对齐要求,则进一步判断内存空闲块的长度是否大于待分配数据的大小:若小于待分配数据,则表示该内存空闲块所表示的内存无法容纳待分配数据,则转至4.2 ;若大于待分配数据,则将待分配数据的内存地址置为该内存空闲块的起始地址,表示待分配数据使用从该起始地址开始长度为其大小的内存;同时更新内存空闲块的信息,内存空闲块的起始地址修改为原起始地址-待分配数据大小,内存空闲块的长度修改为原大小-待分配数据大小,待分配数据正确完成分配,转至步骤4.6;若修改后的内存空闲块长度为0,则表示该内存空闲块中已没有可用空间,将其从内存空闲块列表中删除; 4.5若当前内存空闲块的起始地址不是待分配数据对齐方式的整数倍时,需要先对内存空闲块进行对齐预处理,当前内存空闲块记为1(1.0^86^,1.1611),1.0^86^表示起始地址,1.16!!表示长度,取待分配数据大小的最小整数倍X,使得1(大于当前内存空闲块起始地址,将当前内存空闲块1分为两部分,第一部分为内存空闲块八,起始地址等于1的起始地址,长度为待分配数据大小的最小整数倍1(-内存空闲块1的长度,记为八(八.0^86^,八.1611),其中八.0打861: = 1.0打86七,八.1611 =尺-!.0打861:;第二部分为内存空闲块8,起始地址等于X,长度为内存空闲块1的长度-内存空闲块4的长度,记为8 (8.0^86^, 8.1611),其中8.0打86七=X,8.1611 = 1.1611-八.1611,将4称为对齐预留空闲块,8称为剩余空闲块;预处理之后,剩余空闲块的起始地址满足待分配数据对齐方式要求,按照步骤4.4的方法进行内存分配;若正确完成分配,剩余空闲块8更新为8’出’.0打8的,8’.16=),其中8,.0打861: = 8.0打861:-待分配数据的大小,8’.1611 = 8.1611-待分配数据的大小,将I从内存空闲块列表中删除,并将对齐预留空闲块八和完成分配的剩余空闲块8’作为新的内存空闲块加入到空闲块列表中,如果8’的长度为0,则只加入预留空闲块八,转至步骤4.6 ;否则分配失败,转至步骤4.2; 4.6针对下一个数据进行内存分配,直到对新增和/或修改了数据全部完成内存分配。
7.根据权利要求3所述的工业控制系统数据内存的管理方法,其特征在于: 在步骤(5)中,具体包括以下内容: .5.1获取控制器算法程序中删除或修改数据原来使用的内存信息,并将其记录,作为待回收数据; .5.2逐个处理5.1中记录的数据信息,将其内存空间进行回收,并与内存空闲块进行合并: . 5.3遍历每个内存空闲块,找到起始地址大于待回收数据的内存地址的空闲块,将该空闲块定义为当前内存空闲块,内存空闲块列表中在当前空闲块前的空闲块定义为前一空闲块; . 5.4判断数据内存回收后是否可以与当前空闲块及其前一空闲块进行合并前一空闲块与当前空闲块之间的位置,即为待回收数据内存的位置,是否可以合并的判断条件为:回收后前一空闲块、数据的内存空间、当前空闲块是否连续在一起,连续后的空闲块认为可进行合并,若可合并则修改相应空闲块的信息,若不可合并则创建新的空闲块插入到空闲块列表中; . 5.5若不存在起始地址大于待回收数据内存地址的情况,则定义最后一块空闲块为前一空闲块,判断其与数据内存是否连续,若连续则将两个空闲块进行合并;否则将数据内存加入到空闲块列表末尾。
【文档编号】G05B19/418GK104391496SQ201410746644
【公开日】2015年3月4日 申请日期:2014年12月9日 优先权日:2014年12月9日
【发明者】师嘉, 徐延明, 李维, 王沿海 申请人:北京四方继保自动化股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1