一种对控制程序进行编译的方法和装置制造方法

文档序号:6628618阅读:440来源:国知局
一种对控制程序进行编译的方法和装置制造方法
【专利摘要】本发明实施例公开了一种对控制程序进行编译的方法和装置。该方法包括:将源程序进行编译和链接,生成具有有限可变特性的中间语言程序;根据具有有限可变特性的中间语言程序与可被目标处理器直接执行的目标指令之间的映射关系,将所述具有有限可变特定的中间语言程序映射为目标指令。通过本发明实施例,可以满足系统对可靠性和安全性的要求。
【专利说明】一种对控制程序进行编译的方法和装置

【技术领域】
[0001]本发明涉及工业控制领域,特别是涉及一种对控制程序进行编译的方法和装置。

【背景技术】
[0002]在工业控制领域,常常会涉及到将用户使用高级语言编写的控制程序(即源程序)转换为可以被工业设备(例如,处理器)直接执行的控制指令,该转换过程即为控制程序的编译过程。用户使用的高级语言一般为工业控制领域的相关标准规定的编程语言,例如,IEC 61131-3规定的编程语言、IEC 61499规定的编程语言以及适用于特定领域的CFC(Sequential Funct1n Chart,顺序功能流程图)、SAMA(Scientific Apparatus MakersAssociat1n,科学仪器制造商协会)图等编程语言。一般情况下,针对每种不同的编程语言,都需要一个特定的编辑器完成编辑过程以及一个特定的编译器完成相应的编译过程。
[0003]在相关技术中,一种比较常用的编译方式为编译执行方式,即,编译器通过对源程序进行一次编译,直接生成与工业设备的类型匹配,并且可以被工业设备执行的控制指令。由于工业控制领域的相关标准所规定的编程语言是面向应用的,而工业设备执行的控制指令是面向机器的,因此,将源程序直接编译成控制指令的过程是非常复杂的。并且,编译器所生成的控制指令与工业设备的类型有关,也就是说,当工业设备的类型发生改变时,需要重新修改编译器。在实际应用中,不易于实现跨平台编译。
[0004]为了降低编译复杂度以及实现跨平台编译,另一种比较常用的编译方式为:先将源程序编译成为通用的中间语言,例如,C语言或其它通用的高级语言,然后调用广泛适用的通用语言编译器(如,C语言编译器)将通用的中间语言编译成为控制指令。可以理解的,由于使用的是通用语言编译器,因此,无论工业设备是什么类型,通用语言编译器都可以将通用的中间语言编译成为可被该工业设备直接执行的控制指令。即,这种方式可以实现跨平台编译。
[0005]但是,在实现本发明的过程中,本发明的发明人发现现有技术中至少存在如下问题:
[0006]一方面,整个过程需要经历两次复杂的编译,S卩,每次编译都需要经历“词法分析”、“语法分析”、“语义分析”和“目标语言生成”等几个环节,并且,每次编译时都需要进行不同的错误分析。因此,编译复杂度仍然很大,这样会增加系统失效的发生概率,因此,不适用于对可靠性要求高的系统。
[0007]另一方面,通用的中间语言是为通用的应用场景所设计的,其最大的特点是具有强大的功能和操作能力,即,具有很高的可变性,但是,也因此使得通用的中间语言程序的编译过程和编译结果具有很大的不确定性。这种不确定性对于安全性要求很高的工业控制系统会形成劣势,特别是在对通用的中间语言进行编译时,如果出现编译错误或编译异常的情况,就可能导致诸如非法访问系统资源、系统软件崩溃等问题,影响系统的安全性。
[0008]另外,通用语言编译器是一种第三方编译器,其开发过程并没有也不可能遵循针对特定的工业控制领域而制定的安全要求规范和安全开发流程,并且,从实际操作角度来看,也很难实现对第三方编译器编译生成的结果进行安全性验证。因此,通用语言编译器无法达到高安全要求,不适用于对安全要求高的系统。


【发明内容】

[0009]为了解决上述技术问题,本发明实施例提供了一种对控制程序进行编译的方法和装置,以满足系统对可靠性和安全型的要求。
[0010]本发明实施例公开了如下技术方案:
[0011]一种对控制程序进行编译的方法,包括:
[0012]将源程序进行编译和链接,生成具有有限可变特性的中间语言程序;
[0013]根据具有有限可变特性的中间语言程序与可被目标处理器直接执行的目标指令之间的映射关系,将所述具有有限可变特定的中间语言程序映射为目标指令。
[0014]优选的,所述方法还包括:
[0015]在将源程序进行编译和链接之前,为在所述源程序外部定义的外部变量和/或在所述源程序内部定义的内部变量按预设的固定规则分配内存空间。
[0016]优选的,所述在将源程序进行编译和链接之前,为所述源程序的内部变量按预设的固定规则分配内存空间为:
[0017]以程序组织单元POU为单位,为POU中定义的内部变量分配一个固定的内存空间。
[0018]优选的,所述以POU为单位,为POU中定义的内部变量按预设的固定规则分配内存空间为:
[0019]以程序组织单元POU为单位,按照各个POU在所述源程序中定义的前后顺序,为POU中定义的内部变量分配一个固定的内存空间,以使得分配给各个POU的内存空间在地址上是前后连续的。
[0020]优选的,当将源程序进行增量编译时,所述将源程序进行编译和链接,生成具有有限可变特性的中间语言程序为:
[0021]将源程序进行增量编译和链接,生成具有有限可变特性的中间语言程序;
[0022]所述在将源程序进行增量编译和链接之前,为在所述源程序外部定义的外部变量和/或在所述源程序内部定义的内部变量按预设的固定规则分配内存空间,包括:
[0023]以被修改的POU为单位,为被修改的POU中定义的内部变量分配一个固定的内存空间。
[0024]优选的,所述方法还包括:
[0025]在将源程序进行编译和链接之前,为各个POU互相交换的所有参数分配一个固定的内存空间。
[0026]优选的,当所述POU中定义的内部变量包括对象实例和/或类时,所述为POU中定义的内部变量分配一个固定的内存空间,包括:
[0027]在所述内存空间中,为不同的对象实例分配不同的内存子空间;
[0028]和/ 或,
[0029]在所述内存空间中,为不同的类分配不同的内存子空间。
[0030]一种对控制程序进行编译的装置,包括:
[0031]编译单元,用于将源程序进行编译和链接,生成具有有限可变特性的中间语言程序;
[0032]映射单元,用于根据具有有限可变特性的中间语言程序与可被目标处理器直接执行的目标指令之间的映射关系,将所述具有有限可变特性的中间语言程序映射为目标指令。
[0033]优选的,所述装置还包括:
[0034]第一内存分配单元,用于在将源程序进行编译和链接之前,为在所述源程序外部定义的外部变量和/或在所述源程序内部定义的内部变量按预设的固定规则分配内存空间。
[0035]优选的,所述第一内存分配单元具体用于,以程序组织单元POU为单位,为POU中定义的内部变量分配一个固定的内存空间。
[0036]优选的,所述第一内存分配单元具体用于,以POU为单位,按照各个POU在所述源程序中定义的前后顺序,为POU中定义的内部变量分配一个固定的内存空间,以使得分配给各个POU的内存空间在地址上是前后连续的。
[0037]优选的,当将源程序进行增量编译时,所述编译单元具体用于,将源程序进行增量编译和链接,生成具有有限可变特性的中间语言程序;
[0038]所述第一内存分配单元具体用于,以被修改的POU为单位,为被修改的POU中定义的内部变量分配一个固定的内存空间。
[0039]优选的,所述装置还包括:
[0040]第二内存分配单元,用于在将源程序进行编译和链接之前,为各个POU互相交换的所有参数分配一个固定的内存空间。
[0041]优选的,当所述POU中定义的内部变量包括对象实例和/或类时,所述第一内存分配单元包括:
[0042]对象实例分配子单元,用于在所述内存空间中,为不同的对象实例分配不同的内存子空间;
[0043]和/ 或,
[0044]类分配子单元,用于在所述内存空间中,为不同的类分配不同的内存子空间。
[0045]由上述实施例可以看出,与现有技术相比,本发明的优点在于:
[0046](I)整个编译过程简化了一次复杂编译过程,从中间语言到处理器代码,无需经过复杂的“词法分析”、“语法分析”、“语义分析”,降低复杂度,降低系统失效概率;
[0047](2)避免使用第三方编译器,使整个系统开发和验证完全可控,全面满足安全完整性的要求;
[0048](3)使用有限可变中间语言,避免了 C语言的一些过于灵活和底层的操作特性的安全隐患;
[0049](4)完全确定的内存分配机制,避免了对堆栈和动态内存的大量依赖,提高程序运行的确定性。

【专利附图】

【附图说明】
[0050]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0051]图1为本发明提供的一种对控制程序进行编译的方法的一个实施例的流程图;
[0052]图2为本发明提供的对控制程序进行编译的操作示意图;
[0053]图3为本发明提供的一种内存划分示意图;
[0054]图4为本发明提供的一种对控制程序进行编译的装置的一个实施例的结构图;
[0055]图5为本发明提供的一种对程序控制程序进行编译的装置的另一个实施例的结构图;
[0056]图6为本发明提供的一种对控制程序进行编译的装置的另一个实施例的结构图。

【具体实施方式】
[0057]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例进行详细描述。
[0058]方法实施例
[0059]请参阅图1,其为本发明提供的一种对控制程序进行编译的方法的一个实施例的流程图,该方法包括以下步骤:
[0060]步骤101:将源程序进行编译和链接,生成具有有限可变特性的中间语言程序。
[0061]步骤102:根据具有有限可变特性的中间语言程序与可被目标处理器直接执行的目标指令之间的映射关系,将所述具有有限可变特性的中间语言程序映射为目标指令。
[0062]源程序是在源程序编辑器中编辑的,并且,该编辑器还具有将编辑结果标准化和存档化的功能。每种不同编程语言的源程序对应一种特定的源程序编辑器,例如,LD (Ladder Diagram,梯形图)编辑器、FBD (Funct1n Block Diagram,功能块图)编辑器坐寸ο
[0063]编辑后的源程序是在源程序编译器中编译的,每种不同编程语言的源程序同样对应一种特定的源程序编译器。源程序编译器根据该源程序的编程语言的特点进行词法解析、语法解析以及语义分析等过程,无论输入的是哪种编程语言,经过源程序编译器的编译之后,均输出统一的格式的结果,即两部分内容:变量和/或符号表,以及具有可变特性的中间语言程序,该变量和/或符号表是由在源程序内部定义的内部变量编译生成的。
[0064]除了源程序编辑器之外,用户还需要在编辑单元中定义外部变量(该外部变量就相当于是系统的全局变量)以及其它配置信息。同样,该编辑单元也具有将编辑结果(即,外部变量以及其它配置信息)进行标准化和存档化的功能,并生成变量表和/或符号表。
[0065]由内部变量编译生成的变量表和/或符号表与由外部变量编译生成的变量表和/或符号表在物理上相互独立,共同组成系统的变量和/或符号表。系统的变量和/或符号表包含但不限于系统定义的变量和/或符号的名称、类型、地址以及大小等信息。
[0066]在本发明中,中间语言程序使用一种适用于安全控制的、具有确定性和有限可变特性的中间语言所编写。所谓“有限可变语言”就是指能力范围局限于应用的,用于工商业可编程电子控制器的,文本的或图形的软件编程语言。举例:下列引自IEC 61131-3和其他地方的有限可变语言,用来表示PLC系统的应用程序。
[0067]梯形图:一种图形语言,由线条(指出电流流向)将一系列输入符号(代表相似装置的行为,如常开接点和常闭接点)和输出符号(代表相似继电器的行为)连接构成。
[0068]布尔代数:带有增加某些记忆指令能力的,基于布尔运算符(如,AND、OR和NOT)的低级语目。
[0069]功能块图:除布尔运算符外,可使用更复杂的功能,如数据传输文件、块传输读/写、移位寄存器和序列发生器指令等。
[0070]顺序功能图:有顺序的程序的图形表示,由相互关联的步骤、动作和带转换条件的定向连接线构成。
[0071]有限可变的特性在于:(I)能够且只能够完成应用需要的所有逻辑功能要求;(2)对于一个特定的功能逻辑,只有一种特定的输出结果,即逻辑输出结果无二义性;(3)每条语句具有独立性和通用性,可独立映射为一段可执行的目标指令,并可支持映射为可被所有主流处理器执行的目标指令;(4)中间语言语句与目标指令之间的映射过程简单,可用查表法等简单机制实现;(5)中间语言的语言构成元素少,可以进行完全的测试;(6)具有安全约束特性,对潜在影响安全的程序特性进行严格限制,如,限制过深的调用嵌套、过多的调用参数以及死循环等。基于中间语言的有限可变特性,中间语言程序模型具有简单、确定和适合应用的特性,在工业标准高级语言和设备目标处理器指令之间建立一个高效可靠的桥梁。
[0072]在实现步骤102时,需要预先建立一个中间语言字典,在该中间语言字典中,定义了每条中间语言语句对应于目标处理器指令集的翻译规则。由于中间语言的设计特性,使得每条中间语言语句都能简单映射到特定的目标处理器的指令集,并且,这些指令集按照中间语言程序的逻辑方式组合在一起,作为目标指令执行。
[0073]为了实现跨平台的特性,针对不同的目标处理器,对应有不同的中间语言字典。
[0074]可以理解的,与编译器包含的复杂的“词法分析”、“语法分析”、“语义分析”等过程不同,本发明的步骤102仅仅是将语言从一种表示形式映射为另一种表示形式。在操作上,只需要根据与目标处理器对应的中间语言字典,就能够将中间语言程序直接转换为可执行的目标指令,例如,可以在一个目标指令翻译器中完成该映射过程,从而实现整个程序的编译。如图2所示,图2为本发明提供的对控制程序进行编译的操作示意图。
[0075]在本发明中,具有有限可变特性的中间语言程序可以直接映射为目标指令,下面详细说明将有限可变的中间语言直接映射为目标指令的过程。
[0076]高级语言中,POU(程序组织单元,Program Organizat1n Unit)有多种表现形态,诸如独立的程序、函数和功能块等,但是,在具有有限可变特性的中间语言中,POU仅具有一种表现形态,也就是说,该POU具有统一的结构和统一的处理范式。这种统一的结构和统一的处理范式可以使得中间语言程序直接映射为目标指令。
[0077]例如,高级语言中存在结构化条件语句(例如,if/else语句和case语句)、条件操作语句(例如,en/eno语句)和循环语句(例如,while语句、for语句和repeat语句)。为了便于理解,下面以IEC61131-3规定的ST语言为例,具有说明如何将高级语言的各种语句编译为具有有限可变特性的中间语言的语句。
[0078](I)条件操作语句(en/eno语句):这种操作语句可以附着大部分的单条操作语句,当en条件满足时,所附着的单条操作语句得以执行,否则跳过。在编译为中间语言时,首先编译所附着的单条操作语句,然后再将该语句嵌入en功能壳中。en功能壳是执行en条件判断以及确定是否要执行该条语句操作的核心,可以直接映射为条件测试及跳转类的目标指令。
[0079](2)结构化条件语句(if/else语句和case语句):在高级语言编译过程中,所有类别的条件语句均编译形成统一的一种结构化条件语句,从而避免编译过程中的二义性和输出不确定性。正是因为结构化条件语句具有形式的唯一性,因此,其可以直接被映射为目标指令。
[0080](3)循环语句(while语句、for语句和repeat语句):一般情况下,不建议在安全性要求高的应用场合实现循环语句,因为循环语句本身会存在执行时间和执行结果不确定的因素。但在一般应用场合中如果要实现循环语句,那么确定性编译过程应当将其编译成统一的形式,从而避免编译过程中的二义性和输出不确定性。一种可实施方式为:将循环语句拆分为结构化条件语句和/或循环寻址语句。当拆分为结构化条件语句和/或循环寻址语句之后,就容易直接映射为目标指令。
[0081]还需要说明的是,上述给出的示例均为一种可实施的实例,但本发明并不限于这一种实例。
[0082]还需要说明的是,当映射得到目标指令后,还需要进一步将目标指令下载至目标处理器中,以便目标处理器执行目标指令。
[0083]本发明的发明人还发现,在内存使用上,通用的中间语言会大量依赖于堆栈和动态内存分配,这种动态的内存使用特性会给编译过程带来很大的不确定性,进而影响系统的安全性。另外在编译过程中会使用复杂的编译算法,例如递归算法,对于安全开发而言都是不建议采纳的算法。
[0084]因此,在本发明的一种优选实施方式中,在将源程序进行编译和链接之前,为在所述源程序外部定义的外部定义的外部变量和/或在所述源程序内部定义的内部变量按预设的固定规则分配内存空间。这样可以保证编译过程所产生的变量的地址是确定性分配的。
[0085]作为一种实现方式,可以以POU为单位,为POU中定义的内部变量分配一个固定的内存空间。
[0086]这样虽然限定了每个POU可分配的变量数量,但是,可以确保变量的地址分配不依赖于编译时间、次数和次序等,实现完全独立的、确定的地址分配。
[0087]作为另一种实现方式,也可以以POU为单位,按照各个POU在所述源程序中定义的前后顺序,为各个POU中定义的内部变量分配一个固定的内存空间,以使得分配给各个POU的内存空间在地址上是前后连续的。
[0088]在上述两种实现方式中,根据变量的不同,可以将POU中定义的内部变量分为两种:对象实例和类。在为POU分配的内存空间中,可以为每一个对象实例分配一个独立的内存子空间,为每一个类分配一个独立的内存子空间。但是,同一个类所对应的不同类实例可以共享该类的内存子空间,作为类实例的中间存储变量。
[0089]因此,在本发明的另一个优选实施方式中,当所述POU中定义的内部变量包括对象实例和/或类时,所述为POU中定义的内部变量按预设的固定规则分配内存空间包括:在所述内存空间中,为不同的对象实例分配不同的内存子空间;和/或,在所述内存空间中,为不同的类分配不同的内存子空间。
[0090]所有POU的内存空间(每一个POU的内存空间作为一个程序数据区)可以共同构成一个程序数据空间,存放中间语言程序运行时需要操作的所有数据。另外,还可以为系统的全局变量分配一个固定的内存空间,作为系统全局变量区,该系统全局变量区的数据可以由所有程序共同访问。程序数据空间还可以包含该系统全局变量区。如图3所示的内存划分示意图,在该示意图中还包含有程序代码区(存放中间语言程序的执行指令)以及参数交换区,作为中间语言程序中各个函数、对象等执行单元之间相互调用的参数或传递的信息。
[0091]为了便于理解,以IEC 61131-3标准定义的程序模型为例,程序中的每一个类别即P0U,该POU包括FB (Funct1n Block,功能块)、FC (Funct1n,函数)和程序,不同种类的POU对应不同的内存空间,但对于FB ( S卩,对象)而言,每种FB可以包括多个FB实例(即,对象实例),每个FB实例均对应一个独立的对象实例内存子空间。
[0092]本发明所提出的针对中间语言程序的内存划分方法具有确定分配的特征,而不是由程序运行时动态确定的。
[0093]另外,为了进一步增加确定性,参数交换空间中交换的参数需要满足确定性的规贝U。一种可行的方法是:所有POU之间所交换的参数统一定义,例如,至包括一个指向程序数据区的指针,而所交换的参数的实际内容可以存放在程序数据区中,由于程序数据区中的数据都是确定分配的,具有受控的全局特性,所以通过该指针进行确定地访问。当然,实际实现确定性的交换参数的具体方法不一定仅限于这一种方法,该方法仅为示例性的方法。
[0094]由上述实施例可以看出,与现有技术相比,本发明的优点在于:
[0095](I)整个编译过程简化了一次复杂编译过程,从中间语言到处理器代码,无需经过复杂的“词法分析”、“语法分析”、“语义分析”,降低复杂度,降低系统失效概率;
[0096](2)避免使用第三方编译器,使整个系统开发和验证完全可控,全面满足安全完整性的要求;
[0097](3)使用有限可变中间语言,避免了 C语言的一些过于灵活和底层的操作特性的安全隐患;
[0098](4)完全确定的内存分配机制,避免了对堆栈和动态内存的大量依赖,提高程序运行的确定性。
[0099]装置实施例
[0100]与上述一种对控制程序进行编译的方法相对应,本发明实施例还提供了一种对控制程序进行编译的装置。请参阅图4,其为本发明提供的一种对控制程序进行编译的装置的一个实施例的结构图,该装置包括:编译单元401和映射单元402。下面结合该装置的工作原理进一步介绍其内部结构以及连接关系。
[0101]编译单元401、用于将源程序进行编译和链接,生成具有有限可变特性的中间语言程序;
[0102]映射单元402,用于根据具有有限可变特性的中间语言程序与可被目标处理器直接执行的目标指令之间的映射关系,将所述具有有限可变特性的中间语言程序映射为目标指令。
[0103]在本发明的一个优选实施方式中,如图5所示,该装置还包括:
[0104]第一内存分配单元403A,用于在将源程序进行编译和链接之前,为在所述源程序外部定义的外部变量和/或在所述源程序内部定义的内部变量按预设的固定规则分配内存空间。
[0105]在本发明的另一个优选实施方式中,所述第一内存分配单元403具体用于,以程序组织单元POU为单位,为POU中定义的内部变量分配一个固定的内存空间。
[0106]在本发明的另一个优选实施方式中,所述第一内存分配单兀403具体用于,以POU为单位,按照各个POU在所述源程序中定义的前后顺序,为POU中定义的内部变量分配一个固定的内存空间,以使得分配给各个POU的内存空间在地址上是前后连续的。
[0107]在本发明的一个优选实施方式中,当将源程序进行增量编译时,编译单元401具体用于,将源程序进行增量编译和链接,生成具有有限可变特性的中间语言程序;
[0108]第一内存分配单元403具体用于,以被修改的POU为单位,为被修改的POU中定义的内部变量分配一个固定的内存空间。
[0109]在本发明的一个优选实施方式中,当所述POU中定义的内存变量包括对象实例和/或类时,第一内存分配单元403包括:
[0110]对象实例分配子单元4031,用于在所述内存空间中,为不同的对象实例分配不同的内存子空间;
[0111]和/或
[0112]类分配子单元4032,用于在所述内存空间中,为不同的类分配不同的内存子空间。
[0113]在本发明的一个优选实施方式中,如图6所示,该装置还包括:
[0114]第二内存分配单元403B,用于在将源程序进行编译和链接之前,为各个POU互相交换的所有参数分配一个固定的内存空间。
[0115]由上述实施例可以看出,与现有技术相比,本发明的优点在于:
[0116](I)整个编译过程简化了一次复杂编译过程,从中间语言到处理器代码,无需经过复杂的“词法分析”、“语法分析”、“语义分析”,降低复杂度,降低系统失效概率;
[0117](2)避免使用第三方编译器,使整个系统开发和验证完全可控,全面满足安全完整性的要求;
[0118](3)使用有限可变中间语言,避免了 C语言的一些过于灵活和底层的操作特性的安全隐患;
[0119](4)完全确定的内存分配机制,避免了对堆栈和动态内存的大量依赖,提高程序运行的确定性。
[0120]所述领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0121]在本发明所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述到的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。
[0122]所述作为分离部件说明的单元可以是或者也可以是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0123]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,可以采用软件功能单元的形式实现。
[0124]需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random Access Memory, RAM)等。
[0125]以上对本发明所提供的一种对控制程序进行编译的方法和装置进行了详细介绍,本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种对控制程序进行编译的方法,其特征在于,包括: 将源程序进行编译和链接,生成具有有限可变特性的中间语言程序; 根据具有有限可变特性的中间语言程序与可被目标处理器直接执行的目标指令之间的映射关系,将所述具有有限可变特定的中间语言程序映射为目标指令。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括: 在将源程序进行编译和链接之前,为在所述源程序外部定义的外部变量和/或在所述源程序内部定义的内部变量按预设的固定规则分配内存空间。
3.根据权利要求2所述的方法,其特征在于,所述在将源程序进行编译和链接之前,为所述源程序的内部变量按预设的固定规则分配内存空间为: 以程序组织单元POU为单位,为POU中定义的内部变量分配一个固定的内存空间。
4.根据权利要求2所述的方法,其特征在于,所述以POU为单位,为POU中定义的内部变量按预设的固定规则分配内存空间为: 以程序组织单元POU为单位,按照各个POU在所述源程序中定义的前后顺序,为POU中定义的内部变量分配一个固定的内存空间,以使得分配给各个POU的内存空间在地址上是前后连续的。
5.根据权利要求1所述的方法,其特征在于, 当将源程序进行增量编译时,所述将源程序进行编译和链接,生成具有有限可变特性的中间语言程序为: 将源程序进行增量编译和链接,生成具有有限可变特性的中间语言程序; 所述在将源程序进行增量编译和链接之前,为在所述源程序外部定义的外部变量和/或在所述源程序内部定义的内部变量按预设的固定规则分配内存空间,包括: 以被修改的POU为单位,为被修改的POU中定义的内部变量分配一个固定的内存空间。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括: 在将源程序进行编译和链接之前,为各个POU互相交换的所有参数分配一个固定的内存空间。
7.根据权利要求3或4所述的方法,其特征在于,当所述POU中定义的内部变量包括对象实例和/或类时,所述为POU中定义的内部变量分配一个固定的内存空间,包括: 在所述内存空间中,为不同的对象实例分配不同的内存子空间; 和/或, 在所述内存空间中,为不同的类分配不同的内存子空间。
8.—种对控制程序进行编译的装置,其特征在于,包括: 编译单元,用于将源程序进行编译和链接,生成具有有限可变特性的中间语言程序; 映射单元,用于根据具有有限可变特性的中间语言程序与可被目标处理器直接执行的目标指令之间的映射关系,将所述具有有限可变特性的中间语言程序映射为目标指令。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括: 第一内存分配单元,用于在将源程序进行编译和链接之前,为在所述源程序外部定义的外部变量和/或在所述源程序内部定义的内部变量按预设的固定规则分配内存空间。
10.根据权利要求9所述的装置,其特征在于,所述第一内存分配单元具体用于,以程序组织单元POU为单位,为POU中定义的内部变量分配一个固定的内存空间。
11.根据权利要求9所述的装置,其特征在于,所述第一内存分配单元具体用于,以POU为单位,按照各个POU在所述源程序中定义的前后顺序,为POU中定义的内部变量分配一个固定的内存空间,以使得分配给各个P0U的内存空间在地址上是前后连续的。
12.根据权利要求9所述的装置,其特征在于, 当将源程序进行增量编译时,所述编译单元具体用于,将源程序进行增量编译和链接,生成具有有限可变特性的中间语言程序; 所述第一内存分配单元具体用于,以被修改的P0U为单位,为被修改的P0U中定义的内部变量分配一个固定的内存空间。
13.根据权利要求8所述的装置,其特征在于,所述装置还包括: 第二内存分配单元,用于在将源程序进行编译和链接之前,为各个P0U互相交换的所有参数分配一个固定的内存空间。
14.根据权利要求10或11所述的装置,其特征在于,当所述P0U中定义的内部变量包括对象实例和/或类时,所述第一内存分配单元包括: 对象实例分配子单元,用于在所述内存空间中,为不同的对象实例分配不同的内存子空间; 和/或, 类分配子单元,用于在所述内存空间中,为不同的类分配不同的内存子空间。
【文档编号】G06F9/45GK104267999SQ201410504292
【公开日】2015年1月7日 申请日期:2014年9月26日 优先权日:2014年9月26日
【发明者】裘坤, 刘志勇, 周曼, 平志明 申请人:浙江中控技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1