本申请公开了一种内存管理方法、装置、设备及存储介质,包括:当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和未发生变化的第一变量,并记录第一变量的内存信息得到第一变量内存信息;创建与所述控制器等量的新内存,并根据第一变量内存信息将所述第一变量回填至新内存中;获取当前新内存中的空闲区,并在空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。本申请基于增量的内存管理方式来管理控制器中的内存,在不改变其它变量内存地址和运行状态的情况,实现对变化的变量数据的有效内存分配,达到无扰增量分配内存地址,即在不影响控制器正常运行的前提下实现控制器中内存的在线修改维护。在线修改维护。在线修改维护。
【技术实现步骤摘要】
一种内存管理方法、装置、设备及存储介质
[0001]本申请涉及计算机
,特别涉及一种内存管理方法、装置、设备及存储介质。
技术介绍
[0002]工业控制系统中的控制器运行的工程程序来源于上位机的组态软件,即上位机的组态软件依据控制器的资源配置编辑生成工程组态数据,然后通过编译将组态语言信息、硬件配置信息、工程附属信息、网络变量信息、任务配置信息、SOE(Sequence Of Event,事件顺序记录)变量信息等工程组态数据编译成目标控制器平台的机器语言,并下装到目标控制器中进行运行,工程组态定义和使用的各种变量在运行时需要的内存是在编译时分配的,包括内存区号、内存偏移地址及所占内存大小。
[0003]然而,由于工业控制系统中的控制器属于嵌入式设备,内部资源有限,对数据的安全性要求较高,并且内存承担程序运行时的数据存储,因此如何安全有效的管理内存显的特别重要,尤其是对正在运行的控制器的工程进行修改调整,涉及到内存变动时的管理技术难度大,处理不完善会对现场控制造成严重影响。
[0004]针对上述问题,目前的内存管理方法比较简单粗暴,不能对变化的变量内存进行精准的管理和分配,只是简单的对所有变量重新初始化分配内存地址,因此,对于同一个变量,每次编译时都会重新分配内存地址,导致其内存地址可能每次都不一样,其值也可能被重新初始化,不能保持变量的原有值,数据的连续性得不到有效保证,这对于正在运行的控制器来说是不可接受的。另外,因为变量内存的重新分配,对于那些未做修改的变量,与之相关的逻辑计算,数据搬运等工程应用也要作相应的调整,从而变相的扩大了变更的范围,也增加了编译时的工作量和时耗。
[0005]综上所述,如何对控制器的内存进行安全有效的管理是目前还有待进一步解决的问题。
技术实现思路
[0006]有鉴于此,本申请的目的在于提供一种内存管理方法、装置、设备及存储介质,能够在不影响控制器正常运行的前提下实现控制器中内存的在线修改维护。其具体方案如下:
[0007]第一方面,本申请公开了一种内存管理方法,包括:
[0008]当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息;
[0009]创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中;
[0010]获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内
存地址,再进行初始化处理。
[0011]可选的,所述内存管理方法,还包括:
[0012]获取所述控制器中目标数据区的所有变量,并通过编译对所述所有变量进行初始化分配内存地址,以得到所述初始化目标变量。
[0013]可选的,所述增量变量包括发生了删除、新增和数据类型修改中的任意一种或几种操作的变量。
[0014]可选的,所述确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息,包括:
[0015]确定出初始化目标变量中已经发生了删除操作的第二变量和发生了新增操作的第三变量;
[0016]确定出所述初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存地址信息和内存大小信息,得到第一变量内存信息。
[0017]可选的,所述获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,包括:
[0018]获取当前所述新内存中与发生了删除操作的所述第二变量对应的删除空闲区;
[0019]判断所述删除空闲区所占的内存大小是否小于所述第三变量对应的内存大小,若小于则将部分所述第三变量分配至所述删除空闲区,并将其余部分所述第三变量分配至所述新内存中的剩余空闲区,若不小于则将全部所述第三变量分配至所述删除空闲区。
[0020]可选的,所述内存管理方法,还包括:
[0021]当监测到当前所述控制器中的内存数据发生了变量数据类型修改操作时,则确定出与所述发生了变量数据类型修改操作对应的第四变量;
[0022]相应的,所述获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,还包括:
[0023]根据所述变量数据类型修改操作对所述新内存中的所述第四变量的数据类型进行修改,并为修改后的所述第四变量重新分配内存。
[0024]可选的,所述进行初始化处理,包括:
[0025]通过对所述增量变量和所述第一变量的内存配置信息进行编辑生成相应的工程组态数据,并通过编译将所述工程组态数据下装到所述控制器。
[0026]第二方面,本申请公开了一种内存管理装置,包括:
[0027]变量确定模块,用于当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息;
[0028]内存创建模块,用于创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中;
[0029]内存地址分配模块,用于获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。
[0030]第三方面,本申请公开了一种电子设备,包括处理器和存储器;其中,所述处理器执行所述存储器中保存的计算机程序时实现前述的内存管理方法。
[0031]第四方面,本申请公开了一种计算机可读存储介质,用于存储计算机程序;其中,
所述计算机程序被处理器执行时实现前述的内存管理方法。
[0032]可见,本申请当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息得到第一变量内存信息,然后创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中,最后获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。可见,本申请基于增量的内存管理方式来管理控制器中的内存,在不改变其它变量内存地址和运行状态的情况,实现变化的变量数据的有效内存分配,达到无扰增量分配内存地址,即在不影响控制器正常运行的前提下实现控制器中内存的在线修改维护。
附图说明
[0033]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0034]图1为本申请公开的一种内存管理方法流程图;
[0035]图2为本申请公开的一种具体的初始化编译分配内存示意图;
[0036]图3为本申请本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种内存管理方法,其特征在于,包括:当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息;创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中;获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。2.根据权利要求1所述的内存管理方法,其特征在于,还包括:获取所述控制器中目标数据区的所有变量,并通过编译对所述所有变量进行初始化分配内存地址,以得到所述初始化目标变量。3.根据权利要求1所述的内存管理方法,其特征在于,所述增量变量包括发生了删除、新增和数据类型修改中的任意一种或几种操作的变量。4.根据权利要求3所述的内存管理方法,其特征在于,所述确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息,包括:确定出初始化目标变量中已经发生了删除操作的第二变量和发生了新增操作的第三变量;确定出所述初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存地址信息和内存大小信息,得到第一变量内存信息。5.根据权利要求4所述的内存管理方法,其特征在于,所述获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,包括:获取当前所述新内存中与发生了删除操作的所述第二变量对应的删除空闲区;判断所述删除空闲区所占的内存大小是否小于所述第三变量对应的内存大小,若小于则将部分所述第三变量分配至所述删除空闲区,并将其余部分所述第三变量分配至所述新内存中...
【专利技术属性】
技术研发人员:徐兴平,兰文华,
申请(专利权)人:杭州和利时自动化有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。