掌桥专利:专业的专利平台
掌桥专利
首页

一种编译验证方法、装置、设备及计算机可读存储介质

文献发布时间:2023-06-19 09:52:39


一种编译验证方法、装置、设备及计算机可读存储介质

技术领域

本发明涉及计算机应用技术领域,特别是涉及一种编译验证方法、装置、设备及计算机可读存储介质。

背景技术

安全控制器作为功能安全级的产品,安全控制器的组态软件主要的功能是实现用户逻辑的编译和下装。目前,组态软件的编译和下装比较容易实现,但是针对安全控制器中T3安全级产品工具等级要求下的组态软件,除了支持编译和下装功能外,还需要有一套故障安全的机制对编译过程进行保护,以避免发生如软件bug和工控机硬件故障可能带来的危险故障。

现有的用户逻辑编译过程主要是通过采用“正编译+反编译”的机制来保证用户逻辑编译的正确性,该机制的实现过程包括:首先,用户在组态软件进行用户逻辑程序的编写(如FBD、LD、ST等逻辑编程语言);其次,组态软件对用户逻辑程序进行编译并生成安全控制器可执行的机器代码,此过程即为“正编译”;再者,组态软件对“正编译”生成的机器代码进行逆向编译,生成用户逻辑语言,此过程即为“反编译”;最后,组态软件将用户初始编写的用户逻辑程序与进行“正编译+反编译”处理后的用户逻辑程序进行比对,比对的过程需要用户参与。如果比对一致,则进行用户逻辑程序下装的后续步骤。如果比对不一致,则编译过程出错,下装失败。

但是“正编译+反编译”的故障安全机制不支持ST逻辑编程语言,ST逻辑编程语言对于大型化工应用的复杂用户逻辑十分有效,由于不支持ST逻辑编程语言,导致安全控制器应用到大型化工现场时,复杂的用户逻辑可能不能实现。对用户初始编写的用户逻辑程序和反编译的用户逻辑程序的比较过程需要人工参与,对于稍微复杂的用户逻辑,人工比对会引入新的风险点,从功能安全角度并不是绝对的可靠,对组态软件的安全造成威胁。

综上所述,如何有效地解决现有的逻辑编译方式支持ST逻辑编程语言,易导致复杂的用户逻辑不能实现,威胁组态软件的安全性等问题,是目前本领域技术人员急需解决的问题。

发明内容

本发明的目的是提供一种编译验证方法,该方法提升了复杂用户逻辑的可实现性,提高了组态软件的安全性;本发明的另一目的是提供一种编译验证装置、设备及计算机可读存储介质。

为解决上述技术问题,本发明提供如下技术方案:

一种编译验证方法,包括:

利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码;

分别为各所述目标中间语言代码分配相应的中间语言编译器;

利用各所述中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码;

判断各所述目标机器指令代码是否一致;

若否,则输出编译失败提示信息。

在本发明的一种具体实施方式中,利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,包括:

利用所述逻辑编辑器对所述目标逻辑程序进行双冗余异步初始编译。

在本发明的一种具体实施方式中,利用所述逻辑编辑器对所述目标逻辑程序进行双冗余异步初始编译,包括:

利用所述逻辑编辑器对所述目标逻辑程序以程序组织单元POU为单位进行双冗余异步初始编译。

在本发明的一种具体实施方式中,分别为各所述目标中间语言代码分配相应的中间语言编译器,包括:

获取各类别的中间语言编译器,得到中间语言编译器集合;

将所述中间语言编译器集合中各所述中间语言编译器分配给各所述目标中间语言代码。

一种编译验证装置,包括:

初始编译模块,用于利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码;

语言编译器分配模块,用于分别为各所述目标中间语言代码分配相应的中间语言编译器;

指令代码获得模块,用于利用各所述中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码;

判断模块,用于判断各所述目标机器指令代码是否一致;

信息输出模块,用于当确定各所述目标机器指令代码不一致时,输出编译失败提示信息。

在本发明的一种具体实施方式中,所述初始编译模块具体为利用所述逻辑编辑器对所述目标逻辑程序进行双冗余异步初始编译的模块。

在本发明的一种具体实施方式中,所述初始编译模块具体为利用所述逻辑编辑器对所述目标逻辑程序以程序组织单元POU为单位进行双冗余异步初始编译的模块。

在本发明的一种具体实施方式中,所述语言编译器分配模块包括:

编译器集合获得子模块,用于获取各类别的中间语言编译器,得到中间语言编译器集合;

语言编译器分配子模块,用于将所述中间语言编译器集合中各所述中间语言编译器分配给各所述目标中间语言代码。

一种编译验证设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如前所述编译验证方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前所述编译验证方法的步骤。

本发明所提供的逻辑编译方法,利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码;分别为各目标中间语言代码分配相应的中间语言编译器;利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码;判断各目标机器指令代码是否一致;若否,则输出编译失败提示信息。通过对目标逻辑程序进行冗余编译,得到多组编译得到的目标机器指令代码,通过对各目标机器指令代码进行一致性比较进行编译验证。不需要进行反编译,支持对ST逻辑编程语言的编译验证,提升了复杂用户逻辑的可实现性,自动对机器指令代码进行一致性对比,不需要人工参与,规避了引入人为错误的风险,提高了组态软件的安全性。

相应的,本发明还提供了与上述编译验证方法相对应的编译验证装置、设备和计算机可读存储介质,具有上述技术效果,在此不再赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中编译验证方法的一种实施流程图;

图2为本发明实施例中编译验证方法的另一种实施流程图;

图3为本发明实施例中一种编译验证装置的结构框图;

图4为本发明实施例中一种编译验证设备的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一:

参见图1,图1为本发明实施例中编译验证方法的一种实施流程图,该方法可以包括以下步骤:

S101:利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码。

当对安全控制器的组态软件进行编译时,预先获取待编译的目标逻辑程序。预先设置对目标逻辑程序进行一步编译的次数,利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码。

需要说明的是,对目标逻辑程序进行异步初始编译的次数可以根据实际情况进行设定和调整,本发明实施例对此不做限定,如可以设置为2。

S102:分别为各目标中间语言代码分配相应的中间语言编译器。

在对目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码之后,分别为各目标中间语言代码分配相应的中间语言编译器。具体的,可以为每个目标中间语言代码单独分配一个中间语言编译器,从而做到对各目标中间语言代码进行单独进行一步编译,互不干扰。

S103:利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码。

在分别为各目标中间语言代码分配相应的中间语言编译器之后,利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码,即得到二进制的目标机器指令代码。各中间语言编译器可以同步对各自负责编译的目标中间语言代码进行中间语言编译,从而提高对各目标中间语言代码的编译效率。

S104:判断各目标机器指令代码是否一致,若否,则执行步骤S105,若是,则执行步骤S106。

在对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码之后,判断各目标机器指令代码是否一致,若否,则说明在编译过程中可能存在软件失效或硬件失效的故障,编译失败,执行步骤S105,若是,则说明编译过程正常,执行步骤S106。

S105:输出编译失败提示信息。

当确定各目标机器指令代码不一致时,说明在编译过程中可能存在软件失效或硬件失效的故障,输出编译失败提示信息,从而提示用户不能将编译得到的目标机器指令代码直接下装给控制器,规避了下装不正确的目标机器指令代码对组态软件造成的风险,保证了组态软件的安全。

S106:输出编译成功提示信息。

当确定各目标机器指令代码一致时,说明编译过程正常,输出编译成功提示信息,从而提示用户可以将对目标逻辑程序编译得到的目标机器指令代码下装到控制器,使得控制器对目标机器指令代码进行加载和运行。

本发明所提供的逻辑编译方法,利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码;分别为各目标中间语言代码分配相应的中间语言编译器;利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码;判断各目标机器指令代码是否一致;若否,则输出编译失败提示信息。通过对目标逻辑程序进行冗余编译,得到多组编译得到的目标机器指令代码,通过对各目标机器指令代码进行一致性比较进行编译验证。不需要进行反编译,支持对ST逻辑编程语言的编译验证,提升了复杂用户逻辑的可实现性,自动对机器指令代码进行一致性对比,不需要人工参与,规避了引入人为错误的风险,提高了组态软件的安全性。

需要说明的是,基于上述实施例一,本发明实施例还提供了相应的改进方案。在后续实施例中涉及与上述实施例一中相同步骤或相应步骤之间可相互参考,相应的有益效果也可相互参照,在下文的改进实施例中不再一一赘述。

实施例二:

参见图2,图2为本发明实施例中编译验证方法的另一种实施流程图,该方法可以包括以下步骤:

S201:利用逻辑编辑器对目标逻辑程序以程序组织单元POU为单位进行双冗余异步初始编译,得到各目标中间语言代码。

在获取到目标逻辑程序之后,利用逻辑编辑器对目标逻辑程序以程序组织单元POU为单位进行双冗余异步初始编译,得到各目标中间语言代码。通过对目标逻辑程序以程序组织单元POU为单位进行初始编译,提高了编译效率,使得编译任务更加有序地进行。通过对目标逻辑程序进行双冗余异步初始编译,在能够根据冗余编译结果进行编译验证的同时,提高了编译效率。如通过对目标逻辑程序进行双冗余异步初始编译,两次初始编译分别生成中间语言代码A和中间语言代码B。

S202:获取各类别的中间语言编译器,得到中间语言编译器集合。

获取不同类别的中间语言编译器,得到由不同类别的中间语言编译器构成的中间语言编译器集合。当对目标逻辑程序进行初始编译为双冗余异步初始编译时,对应的将中间语言编译器设置为不同类别的双中间语言编译器。

S203:将中间语言编译器集合中各中间语言编译器分配给各目标中间语言代码。

在得到由不同类别的中间语言编译器构成的中间语言编译器集合之后,将中间语言编译器集合中各中间语言编译器分配给各目标中间语言代码。当通过对目标逻辑程序进行双冗余异步初始编译分别得到中间语言代码A和中间语言代码B,并获取到不同类别的双中间语言编译器之后,将不同类别的双中间语言编译器分别分配给中间语言代码A和中间语言代码B。

S204:利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码。

在将中间语言编译器集合中各中间语言编译器分配给各目标中间语言代码之后,利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码。承接上述举例,当将不同类别的双中间语言编译器分别分配给中间语言代码A和中间语言代码B之后,利用中间语言代码A对应的中间语言编译器对中间语言代码A进行中间语言编译,得到机器指令代码C,利用中间语言代码B对应的中间语言编译器对中间语言代码B进行中间语言编译,得到机器指令代码D。通过采用不同类别的中间语言编译器分别对目标中间语言代码进行编译,由于不同类别的中间语言编译器的设计机理和理念存在差异,规避了同一团队开发的中间语言编译器可能产生的共因失效问题。

S205:判断各目标机器指令代码是否一致,若否,则执行步骤S206,若是,则执行步骤S207。

在得到各目标机器指令代码之后,判断各目标机器指令代码是否一致。承接上述举例,在得到机器指令代码C和机器指令代码D之后,对双中间语言编译器得到的机器指令代码C和机器指令代码D进行比较,判断机器指令代码C和机器指令代码D是否一致。

对目标逻辑程序进行编译过程中可能出现的故障总结如表1所示。

表1

通过利用双中间语言编译器冗余处理的方法,能够发现编译过程中可能存在的Hazard-002~Hazard-004编译错误现象,从而及时提示用户进行故障安全处理。

S206:输出编译失败提示信息。

S207:输出编译成功提示信息。

本实施例区别于独立权利要求1所要求保护的技术方案对应的实施例一,还增加了从属权利要求2至4对应要求保护的技术方案,当然,根据实际情况和要求的不同,可将各从属权利要求对应要求保护的技术方案在不影响方案完整性的基础上进行灵活组合,以更加符合不同使用场景的要求,本实施例只是给出了其中一种包含方案最多、效果最优的方案,因为情况复杂,无法对所有可能存在的方案一一列举,本领域技术人员应能意识到根据本申请提供的基本方法原理结合实际情况可以存在很多的例子,在不付出足够的创造性劳动下,应均在本申请的保护范围内。

相应于上面的方法实施例,本发明还提供了一种编译验证装置,下文描述的编译验证装置与上文描述的编译验证方法可相互对应参照。

参见图3,图3为本发明实施例中一种编译验证装置的结构框图,该装置可以包括:

初始编译模块31,用于利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码;

语言编译器分配模块32,用于分别为各目标中间语言代码分配相应的中间语言编译器;

指令代码获得模块33,用于利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码;

判断模块34,用于判断各目标机器指令代码是否一致;

信息输出模块35,用于当确定各目标机器指令代码不一致时,输出编译失败提示信息。

本发明所提供的逻辑编译装置,利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码;分别为各目标中间语言代码分配相应的中间语言编译器;利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码;判断各目标机器指令代码是否一致;若否,则输出编译失败提示信息。通过对目标逻辑程序进行冗余编译,得到多组编译得到的目标机器指令代码,通过对各目标机器指令代码进行一致性比较进行编译验证。不需要进行反编译,支持对ST逻辑编程语言的编译验证,提升了复杂用户逻辑的可实现性,自动对机器指令代码进行一致性对比,不需要人工参与,规避了引入人为错误的风险,提高了组态软件的安全性。

在本发明的一种具体实施方式中,初始编译模块31具体为利用逻辑编辑器对目标逻辑程序进行双冗余异步初始编译的模块。

在本发明的一种具体实施方式中,初始编译模块31具体为利用逻辑编辑器对目标逻辑程序以程序组织单元POU为单位进行双冗余异步初始编译的模块。

在本发明的一种具体实施方式中,语言编译器分配模块32包括:

编译器集合获得子模块,用于获取各类别的中间语言编译器,得到中间语言编译器集合;

语言编译器分配子模块,用于将中间语言编译器集合中各中间语言编译器分配给各目标中间语言代码。

相应于上面的方法实施例,参见图4,图4为本发明所提供的编译验证设备的示意图,该设备可以包括:

存储器41,用于存储计算机程序;

处理器42,用于执行上述存储器41存储的计算机程序时可实现如下步骤:

利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码;分别为各目标中间语言代码分配相应的中间语言编译器;利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码;判断各目标机器指令代码是否一致;若否,则输出编译失败提示信息。

对于本发明提供的设备的介绍请参照上述方法实施例,本发明在此不做赘述。

相应于上面的方法实施例,本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如下步骤:

利用逻辑编辑器对预获取的目标逻辑程序进行预设次数的异步初始编译,得到各目标中间语言代码;分别为各目标中间语言代码分配相应的中间语言编译器;利用各中间语言编译器对相应的目标中间语言代码进行中间语言编译,得到各目标机器指令代码;判断各目标机器指令代码是否一致;若否,则输出编译失败提示信息。

该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

对于本发明提供的计算机可读存储介质的介绍请参照上述方法实施例,本发明在此不做赘述。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置、设备及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

相关技术
  • 一种编译验证方法、装置、设备及计算机可读存储介质
  • 一种组件编译方法、装置、设备及计算机可读存储介质
技术分类

06120112329782