CN108121285A - 基于连续功能图的应用软件协同编译方法及装置 - Google Patents
基于连续功能图的应用软件协同编译方法及装置 Download PDFInfo
- Publication number
- CN108121285A CN108121285A CN201711381228.XA CN201711381228A CN108121285A CN 108121285 A CN108121285 A CN 108121285A CN 201711381228 A CN201711381228 A CN 201711381228A CN 108121285 A CN108121285 A CN 108121285A
- Authority
- CN
- China
- Prior art keywords
- file
- application library
- purpose project
- continuous function
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/04—Programme control other than numerical control, i.e. in sequence controllers or logic controllers
- G05B19/05—Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
- G05B19/056—Programming the PLC
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Automation & Control Theory (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于连续功能图的应用软件协同编译方法及装置,其中该方法包括:对每一应用程序库工程均执行如下操作:分别生成应用程序库工程中各连续功能图文件对应的C代码文件;生成应用程序库工程对应的应用程序库描述文件;将应用程序库工程中各连续功能图文件对应的C代码文件,分别编译成应用程序库工程对应的目标文件;将应用程序库工程对应的应用程序库描述文件和目标文件导出为应用程序库;在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件。本发明可以提高连续功能图文件关键算法的保密性。
Description
技术领域
本发明涉及工业控制技术领域,尤其涉及基于连续功能图的应用软件协同编译方法及装置。
背景技术
PLC(Programmable Logic Controller,可编程逻辑控制器)广泛应用于工业控制领域,从编译原理的角度来分,PLC可分为编译型和解释型。解释型PLC将应用程序编译成机器不能直接识别的中间代码,在执行过程中,运行在目标系统的运行时软件对中间代码进行解释执行,所以代码执行效率低,实时性差。同时,由于解释型PLC不仅要烧写解释程序,还要烧写全部硬件驱动程序和指令程序库,所以代码量大,存储占用量大。编译型PLC根据用户程序编译生成可执行代码,下载后可直接执行,所以具有执行效率高,实时性好,代码量小等优点。
IEC61131-3规定了PLC编程的5种语言,可分为图形化编程语言和文本化编程语言。图形化编程语言包括梯形图语言(LD),功能块图语言(FBD)和顺序功能图语言(SFD)。文本化编程语言包指令列表语言(IL)和结构化文本语言(ST)。
在分布式过程控制系统中,为了实现复杂的逻辑及控制功能,通常采用连续功能图的编程方法。连续功能图不仅具有PLC的典型元素,而且具有图形化编程的特性,提供了可视化的模块间的连线编程,清晰可见信号间的I/O流向,适合于模拟量处理及控制算法处理较多的应用场合。连续功能图是将实现一个简单的逻辑或运算功能编写为一个功能块,通过将不同的功能块的输入连接器和输出连接器进行连接,实现复杂的逻辑及控制功能。对于不同调度时间的功能块,将其分配在不同的周期调度任务中,每个周期调度任务设置为固定的调度周期,实现功能块的多周期调度任务控制。在同一张功能图中,相同调度周期的功能块被分配固定的执行顺序。在多张连续功能图中,相同调度周期的功能块按照连续功能图的顺序进行执行。
现有的连续功能图编程方法,功能块不仅可以按照周期任务进行调度,而且功能块还可以被设置为预置类任务,在周期任务调度之前,单独执行一次。CFC(ContinuousFunction Chart,连续功能图)编程还支持背景任务,通过人机交互实现对功能块的执行。因此,与IEC61131-3规定的5种编程语言相比,连续功能图编程具有更加灵活的功能。
目前的连续功能图编程软件,使用功能块库进行CFC编程,均展示了功能块的连接关系。一个工程由多个CFC组成,每个CFC由多个功能块连接组成。对于一个功能极其庞大复杂的工程来说,通常需要一个甚至多个团队协同开发来完成。在多团队协同开发的过程中,往往每个团队负责编写部分CFC文件,完成某种特定功能的实现,最后将所有的CFC导入到同一个工程中完成编译执行。尤其对于编译型PLC,当某些关键算法存在保密要求时,通过CFC文件和功能块库导入的方法无法满足该需求。
发明内容
本发明实施例提供一种基于连续功能图的应用软件协同编译方法,用以提高连续功能图文件关键算法的保密性,该方法包括:
对每一应用程序库工程均执行如下操作:分别生成应用程序库工程中各连续功能图文件对应的C代码文件;生成应用程序库工程对应的应用程序库描述文件;将应用程序库工程中各连续功能图文件对应的C代码文件,分别编译成应用程序库工程对应的目标文件;将应用程序库工程对应的应用程序库描述文件和目标文件导出为应用程序库;
在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件。
本发明实施例还提供一种基于连续功能图的应用软件协同编译装置,用以提高连续功能图文件关键算法的保密性,该装置包括:
每一应用程序库工程对应的应用程序库导出模块,以及目标工程处理模块;其中:
各应用程序库导出模块均包括:
应用程序库C代码生成器,用于分别生成应用程序库工程中各连续功能图文件对应的C代码文件;生成应用程序库工程对应的应用程序库描述文件;
应用程序库编译器,用于将应用程序库工程中各连续功能图文件对应的C代码文件,分别编译成应用程序库工程对应的目标文件;将应用程序库工程对应的应用程序库描述文件和目标文件导出为应用程序库;
目标工程处理模块用于在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述基于连续功能图的应用软件协同编译方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述基于连续功能图的应用软件协同编译方法的计算机程序。
本发明实施例中,采用应用程序库工程对应的应用程序库描述文件和目标文件的方式,将应用程序库工程中多个连续功能图文件生成一个应用程序库,在目标工程中导入多个应用程序库,编译生成一个目标工程可执行文件。通过本发明实施例不仅可以实现连续功能图工程的多团队协同开发,而且以目标文件形式导入的连续功能图文件,在目标工程中无法打开和查看连续功能图文件的具体内容,无法查看功能块的源代码,提高了连续功能图文件关键算法的保密性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中基于连续功能图的应用软件协同编译方法的示意图;
图2为本发明实施例中目标工程与n个应用程序库工程分别通过共享变量进行数据交互的示意图;
图3为本发明实施例中整个工程变量及功能块连接器内存分配示例图;
图4为本发明实施例中应用程序库导出示例图;
图5为本发明实施例中应用程序库内联代码生成示例图;
图6为本发明实施例中目标工程可执行文件生成的示例图;
图7为本发明实施例中Main.C文件生成示例图;
图8为本发明实施例中基于连续功能图的应用软件协同编译装置的示意图;
图9为本发明实施例中基于连续功能图的应用软件协同编译装置的一实例图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
如前所述,目前对于团队协同开发基于连续功能图的应用程序,通常是基于CFC文件导入导出的方法,在目标工程中加载功能块库,进行整个工程的编译链接,生成可执行文件。在多团队协同开发时,该方法不利于对关键算法的保护。本发明实施例提出了一种基于连续功能图的应用软件协同编译方法,在多团队协同开发的情况下,能够提高CFC文件中功能块连接关系及源代码的保密性。
图1为本发明实施例中基于连续功能图的应用软件协同编译方法的示意图,如图1所示,该方法可以包括:
步骤1、对每一应用程序库工程均执行如下操作:步骤11、分别生成应用程序库工程中各连续功能图文件对应的C代码文件;步骤12、生成应用程序库工程对应的应用程序库描述文件;步骤13、将应用程序库工程中各连续功能图文件对应的C代码文件,分别编译成应用程序库工程对应的目标文件;步骤14、将应用程序库工程对应的应用程序库描述文件和目标文件导出为应用程序库;
步骤2、在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件。
在本发明实施例中,需要编译生成可执行文件的工程为目标工程,需要被导出并导入到目标工程中的工程为应用程序库工程。由图1所示流程可以得知,通过本发明实施例不仅可以实现连续功能图工程的多团队协同开发,而且以目标文件形式导入的连续功能图文件,在目标工程中无法打开和查看连续功能图文件的具体内容,无法查看功能块的源代码,提高了连续功能图文件关键算法的保密性。
下面结合具体实例对本发明实施例的基于连续功能图的应用软件协同编译方法进行详细说明。
图2为实施例中目标工程与n个应用程序库工程分别通过共享变量进行数据交互的示意图。如图2所示,有n个应用程序库工程:应用程序库工程1,应用程序库工程2,……,应用程序库工程n,n为正整数。应用程序库工程1中有App1CFC1.CFC、App1CFC2.CFC、……、App1CFCj.CFC连续功能图文件,通过应用程序库1共享变量与目标工程进行数据交互。应用程序库工程2中有App2CFC1.CFC、App2CFC2.CFC、……、App2CFCk.CFC连续功能图文件,通过应用程序库2共享变量与目标工程进行数据交互。应用程序库工程n中有AppnCFC1.CFC、AppnCFC2.CFC、……、AppnCFCl.CFC连续功能图文件,通过应用程序库n共享变量与目标工程进行数据交互。应用程序库工程1,应用程序库工程2,……,应用程序库工程n含有各自的全局变量和功能块连接器。目标工程中有MainCFC1.CFC、MainCFC2.CFC、……、MainCFCm.CFC连续功能图文件。其中,j、k、l、m为正整数。
图3为实施例中整个工程变量及功能块连接器内存分配示例图。如图3所示,实施例中,为了防止应用程序库工程和目标工程之间全局变量及功能块连接器地址冲突,根据应用程序库工程的规模统一划分内存空间。应用程序库工程和目标工程具有独立的内存空间,从低地址到高地址依次存储由目标工程生成的与所有应用程序库工程交互的共享变量,目标工程的全局变量和功能块连接器;由应用程序工程1、应用程序库工程2,……,应用程序库工程n分别生成的各自的全局变量和功能块连接器。
本发明实施例中,对每一应用程序库工程均采用应用程序库工程对应的应用程序库描述文件和目标文件的方式,导出应用程序库。具体的,对每一应用程序库工程均执行如下操作:分别生成应用程序库工程中各连续功能图文件对应的C代码文件;生成应用程序库工程对应的应用程序库描述文件;将应用程序库工程中各连续功能图文件对应的C代码文件,分别编译成应用程序库工程对应的目标文件;将应用程序库工程对应的应用程序库描述文件和目标文件导出为应用程序库。
实施例中,在分别生成应用程序库工程中各连续功能图文件对应的C代码文件时,根据预设的内存空间范围,将应用程序库工程的全局变量和功能块连接器进行内存地址分配。
图4给出了以应用程序库工程1为例的应用程序库导出示例图,如图4所示,应用程序库导出包括C代码生成和编译两个过程。在C代码文件App1CFC1.C、App1CFC2.C、……、App1CFCj.C生成时,可以由应用程序库C代码生成器将应用程序库工程1中共享变量声明为extern属性,不进行内存地址的分配;根据预先设置好的内存空间范围,将内部的全局变量和功能块连接器进行直接地址分配。
实施例中,生成连续功能图文件对应的C代码文件,可以包括:按连续功能图文件的任务模式,采用功能块代码内联的方式,生成连续功能图文件对应的任务模式函数C代码文件。图5为实施例中应用程序库1内联代码生成示例图,如图5所示,本例中,应用程序库C代码生成器按照每个CFC中含有的功能块的任务模式采用功能块代码内联的形式生成相应CFC的任务模式函数。应用程序库工程1中App1CFC1.C、App1CFC2.C、……、App1CFCj.C均只有T1N和T2N任务模式,则在App1CFC1.C C代码文件中生成任务模式函数void App1CFC1T1N(void)和void App1CFC1T2N(void);在App1CFC2.C C代码文件中生成任务模式函数voidApp1CFC2T1N(void)和void App1CFC2T2N(void);……;在App1CFCj.C C代码文件中生成任务模式函数void App1CFCjT1N(void)和void App1CFCjT2N(void)。以任务模式函数voidApp1CFC1T1N(void)为例,将CFC1文件中T1N任务模式中所有功能块的源代码:功能块1源代码、功能块2源代码、……、功能块x源代码;按照功能块的执行顺序内联,生成该任务模式函数,x为正整数。
实施时还生成应用程序库工程对应的应用程序库描述文件。实施例中应用程序库描述文件可以包括如下信息:应用程序库内存地址范围;应用程序库中连续功能图文件的名称;应用程序库中连续功能图文件的任务模式;应用程序库的标识及属性信息。例如,在图4的示例中,还生成相应的应用程序库1描述文件App1Desc。应用程序库1描述文件App1Desc可以包含以下信息:
a)应用程序库1内存地址范围,用于目标工程进行内存地址冲突校验;
b)应用程序库1中的CFC文件名称App1CFC1、App1CFC2、……、App1CFCj,用于目标工程读取到工程交叉引用表中,调整CFC文件在整个工程中的执行顺序;
c)应用程序库1中各CFC文件中的任务模式,用于目标工程C代码文件对各CFC的任务模式函数进行调用。
d)应用程序库的标识及属性信息,例如可以包括名称、版本、硬件平台类型等信息。
再以图4为例,C代码文件App1CFC1.C、App1CFC2.C、……、App1CFCj.C和应用程序库描述文件App1Desc生成后,可以调用硬件平台相关的编译器并设置相应的编译选项,将生成的C代码文件App1CFC1.C、App1CFC2.C、……、App1CFCj.C分别编译为目标文件App1CFC1.OBJ、App1CFC2.OBJ、……、App1CFCj.OBJ。这些目标文件与应用程序库描述文件打包导出为应用程序库1。
与应用程序库1导出过程类似,实施例中还导出应用程序库2、……、应用程序库n。
后续在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件。例如,在目标工程中建立与所有应用程序库工程交互的共享变量:应用程序库1共享变量、应用程序库2共享变量、……、应用程序库n共享变量,导入所有应用程序库:应用程序库1,应用程序库2,……,应用程序库n。
实施例中,在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件,可以包括:分别生成目标工程中各连续功能图文件对应的C代码文件;根据各应用程序库中应用程序库描述文件、目标工程中连续功能图文件的任务模式、和所有连续功能图文件的执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件;将目标工程中各连续功能图文件对应的C代码文件、和目标工程任务模式函数C代码文件,分别编译成目标工程对应的目标文件;将目标工程对应的任务调度目标文件、目标工程对应的目标文件、和各应用程序库中目标文件进行链接,生成目标工程可执行文件。
其中,与生成应用程序库工程中连续功能图文件对应的C代码文件类似的,生成目标工程中连续功能图文件对应的C代码文件,例如可以包括:按连续功能图文件的任务模式,采用功能块代码内联的方式,生成连续功能图文件对应的任务模式函数C代码文件。
实施例中,在分别生成目标工程中各连续功能图文件对应的C代码文件时,可以根据预设的内存空间范围,将各共享变量、目标工程的全局变量和功能块连接器进行内存地址分配。
图6给出了目标工程可执行文件生成的示例图,包括目标工程的C代码生成、目标工程编译及目标工程链接。目标工程C代码生成时,除了生成目标工程自身的全局变量和功能块连接器内存地址外,还生成与所有应用程序库交互的共享变量的内存地址。然后将MainCFC1.CFC、MainCFC2.CFC、……、MainCFCm.CFC连续功能图文件生成MainCFC1.C、MainCFC2.C、……、MainCFCm.C文件,每个C代码文件中包含了该CFC文件的任务模式函数。
实施例中,根据各应用程序库中应用程序库描述文件、目标工程中连续功能图文件的任务模式、和所有连续功能图文件的执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件,可以包括:根据各应用程序库中应用程序库描述文件,提取各应用程序库中连续功能图文件的任务模式;根据各应用程序库中连续功能图文件的任务模式、目标工程中连续功能图文件的任务模式、和所有连续功能图文件的执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件。例如,目标工程校验所有地址范围正确后,根据应用程序库描述文件,提取应用程序库1,应用程序库2,……,应用程序库n的CFC文件任务模式,然后根据提取的应用程序库中CFC文件任务模式、目标工程中CFC文件任务模式、应用程序库和目标工程中所有CFC文件的执行顺序,生成Main.C文件,Main.C文件包含整个工程的任务模式函数,每个工程任务模式函数按照所有CFC文件的执行顺序调用各个CFC的任务模式函数。图7中给出了Main.C文件生成示例图,如图7所示,当所有应用程序库和目标工程中每个CFC中均只含有T1N和T2N任务模式时,Main.C文件生成void MainT1N(void)和voidMainT2N(void)两个工程任务模式函数。以void MainT1N(void)任务模式函数为例,若工程交叉引用中所有CFC文件的执行顺序为App1CFC1、AppnCFC2、AppnCFC1、MainCFCm、……、App1CFCj,则void MainT1N(void)函数先后调用CFC任务模式函数void App1CFC1T1N(void)、void AppnCFC2T1N(void)、void AppnCFC1T1N(void)、void MainCFCmT1N(void)、……、void App1CFCjT1N(void)。Main.c文件中整个工程的任务模式函数被任务调度函数调用,实现多任务调度功能。
实施例中,目标工程C代码文件生成后,调用编译器将Main.C、MainCFC1.C、MainCFC2.C、……、MainCFCm.C文件编译生成Main.OBJ、MainCFC1.OBJ、MainCFC2.OBJ、……、MainCFCm.OBJ文件。
最后将任务调度目标文件和所有目标文件Main.OBJ、MainCFC1.OBJ、MainCFC2.OBJ、……、MainCFCm.OBJ、App1CFC1.OBJ、App1CFC2.OBJ、……、App1CFCj.OBJ、App2CFC1.OBJ、App2CFC2.OBJ、……、App2CFCk.OBJ、……、AppnCFC1.OBJ、AppnCFC2.OBJ、……、AppnCFCl.OBJ进行链接,生成可执行文件Main.EXE。实施例中,可以在目标工程中显示应用程序库1,应用程序库2,……,应用程序库n的CFC文件名称及包含的任务模式,并可调整CFC文件在整个工程中的执行顺序,对目标工程进行编译链接生成可执行文件。
由上述实施例可知,通过上述技术方案,应用程序库i与目标工程中的接口包含应用程序库i共享变量、应用程序库i中CFC的任务模式函数名称和经过优化编译的CFC任务模式函数的二进制形式,不仅保留了连续功能图编程的优点,而且在目标工程中无法查看应用程序库工程CFC文件中全局变量、功能块源代码及连接关系,提高了关键算法的保密性。
基于同一发明构思,本发明实施例中还提供了一种基于连续功能图的应用软件协同编译装置,如下面的实施例所述。由于该装置解决问题的原理与基于连续功能图的应用软件协同编译方法相似,因此该装置的实施可以参见基于连续功能图的应用软件协同编译方法的实施,重复之处不再赘述。
图8为本发明实施例中基于连续功能图的应用软件协同编译装置的示意图,如图8所示,该装置可以包括:
每一应用程序库工程对应的应用程序库导出模块81,以及目标工程处理模块82;其中:
各应用程序库导出模块81均包括:
应用程序库C代码生成器811,用于分别生成应用程序库工程中各连续功能图文件对应的C代码文件;生成应用程序库工程对应的应用程序库描述文件;
应用程序库编译器812,用于将应用程序库工程中各连续功能图文件对应的C代码文件,分别编译成应用程序库工程对应的目标文件;将应用程序库工程对应的应用程序库描述文件和目标文件导出为应用程序库;
目标工程处理模块82用于在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件。
在一个实施例中,应用程序库描述文件可以包括如下信息:
应用程序库内存地址范围;应用程序库中连续功能图文件的名称;应用程序库中连续功能图文件的任务模式;应用程序库的标识及属性信息。
在一个实施例中,应用程序库C代码生成器811可以进一步用于:在分别生成应用程序库工程中各连续功能图文件对应的C代码文件时,根据预设的内存空间范围,将应用程序库工程的全局变量和功能块连接器进行内存地址分配。
如图9所示,在一个实施例中,目标工程处理模块82包括:
目标工程C代码生成器821,用于分别生成目标工程中各连续功能图文件对应的C代码文件;根据各应用程序库中应用程序库描述文件、目标工程中连续功能图文件的任务模式、和所有连续功能图文件的执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件;
目标工程编译器822,用于将目标工程中各连续功能图文件对应的C代码文件、和目标工程任务模式函数C代码文件,分别编译成目标工程对应的目标文件;
目标工程链接器823,用于将目标工程对应的任务调度目标文件、目标工程对应的目标文件、和各应用程序库中目标文件进行链接,生成目标工程可执行文件。
在一个实施例中,应用程序库C代码生成器811、和目标工程C代码生成器821可以进一步用于:
按连续功能图文件的任务模式,采用功能块代码内联的方式,生成连续功能图文件对应的任务模式函数C代码文件。
在一个实施例中,目标工程C代码生成器821可以进一步用于:在分别生成目标工程中各连续功能图文件对应的C代码文件时,根据预设的内存空间范围,将各共享变量、目标工程的全局变量和功能块连接器进行内存地址分配。
在一个实施例中,目标工程C代码生成器821可以进一步用于:
根据各应用程序库中应用程序库描述文件,提取各应用程序库中连续功能图文件的任务模式;
根据各应用程序库中连续功能图文件的任务模式、目标工程中连续功能图文件的任务模式、和所有连续功能图文件的执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述基于连续功能图的应用软件协同编译方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述基于连续功能图的应用软件协同编译方法的计算机程序。
综上所述,本发明实施例中,采用应用程序库工程对应的应用程序库描述文件和目标文件的方式,将应用程序库工程中多个连续功能图文件生成一个应用程序库,在目标工程中导入多个应用程序库,编译生成一个目标工程可执行文件。通过本发明实施例不仅可以实现连续功能图工程的多团队协同开发,而且以目标文件形式导入的连续功能图文件,在目标工程中无法打开和查看连续功能图文件的具体内容,无法查看功能块的源代码,提高了连续功能图文件关键算法的保密性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (16)
1.一种基于连续功能图的应用软件协同编译方法,其特征在于,包括:
对每一应用程序库工程均执行如下操作:分别生成应用程序库工程中各连续功能图文件对应的C代码文件;生成应用程序库工程对应的应用程序库描述文件;将应用程序库工程中各连续功能图文件对应的C代码文件,分别编译成应用程序库工程对应的目标文件;将应用程序库工程对应的应用程序库描述文件和目标文件导出为应用程序库;
在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件。
2.如权利要求1所述的方法,其特征在于,所述应用程序库描述文件包括如下信息:
应用程序库内存地址范围;应用程序库中连续功能图文件的名称;应用程序库中连续功能图文件的任务模式;应用程序库的标识及属性信息。
3.如权利要求1所述的方法,其特征在于,进一步包括:在分别生成应用程序库工程中各连续功能图文件对应的C代码文件时,根据预设的内存空间范围,将应用程序库工程的全局变量和功能块连接器进行内存地址分配。
4.如权利要求1所述的方法,其特征在于,所述在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件,包括:
分别生成目标工程中各连续功能图文件对应的C代码文件;
根据各应用程序库中应用程序库描述文件、目标工程中连续功能图文件的任务模式、和所有连续功能图文件执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件;
将目标工程中各连续功能图文件对应的C代码文件、和目标工程任务模式函数C代码文件,分别编译成目标工程对应的目标文件;
将目标工程对应的任务调度目标文件、目标工程对应的目标文件、和各应用程序库中目标文件进行链接,生成目标工程可执行文件。
5.如权利要求1或4所述的方法,其特征在于,所述生成连续功能图文件对应的C代码文件,包括:
按连续功能图文件的任务模式,采用功能块代码内联的方式,生成连续功能图文件对应的任务模式函数C代码文件。
6.如权利要求4所述的方法,其特征在于,进一步包括:在分别生成目标工程中各连续功能图文件对应的C代码文件时,根据预设的内存空间范围,将各共享变量、目标工程的全局变量和功能块连接器进行内存地址分配。
7.如权利要求4所述的方法,其特征在于,所述根据各应用程序库中应用程序库描述文件、目标工程中连续功能图文件的任务模式、和所有连续功能图文件执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件,包括:
根据各应用程序库中应用程序库描述文件,提取各应用程序库中连续功能图文件的任务模式;
根据各应用程序库中连续功能图文件的任务模式、目标工程中连续功能图文件的任务模式、和所有连续功能图文件的执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件。
8.一种基于连续功能图的应用软件协同编译装置,其特征在于,包括:
每一应用程序库工程对应的应用程序库导出模块,以及目标工程处理模块;其中:
各应用程序库导出模块均包括:
应用程序库C代码生成器,用于分别生成应用程序库工程中各连续功能图文件对应的C代码文件;生成应用程序库工程对应的应用程序库描述文件;
应用程序库编译器,用于将应用程序库工程中各连续功能图文件对应的C代码文件,分别编译成应用程序库工程对应的目标文件;将应用程序库工程对应的应用程序库描述文件和目标文件导出为应用程序库;
目标工程处理模块用于在目标工程中分别建立与各应用程序库工程交互的共享变量,导入对应的应用程序库,生成目标工程可执行文件。
9.如权利要求8所述的装置,其特征在于,所述应用程序库描述文件包括如下信息:
应用程序库内存地址范围;应用程序库中连续功能图文件的名称;应用程序库中连续功能图文件的任务模式;应用程序库的标识及属性信息。
10.如权利要求8所述的装置,其特征在于,所述应用程序库C代码生成器进一步用于:在分别生成应用程序库工程中各连续功能图文件对应的C代码文件时,根据预设的内存空间范围,将应用程序库工程的全局变量和功能块连接器进行内存地址分配。
11.如权利要求8所述的装置,其特征在于,所述目标工程处理模块包括:
目标工程C代码生成器,用于分别生成目标工程中各连续功能图文件对应的C代码文件;根据各应用程序库中应用程序库描述文件、目标工程中连续功能图文件的任务模式、和所有连续功能图文件执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件;
目标工程编译器,用于将目标工程中各连续功能图文件对应的C代码文件、和目标工程任务模式函数C代码文件,分别编译成目标工程对应的目标文件;
目标工程链接器,用于将目标工程对应的任务调度目标文件、目标工程对应的目标文件、和各应用程序库中目标文件进行链接,生成目标工程可执行文件。
12.如权利要求11所述的装置,其特征在于,所述应用程序库C代码生成器、和目标工程C代码生成器进一步用于:
按连续功能图文件的任务模式,采用功能块代码内联的方式,生成连续功能图文件对应的任务模式函数C代码文件。
13.如权利要求11所述的装置,其特征在于,所述目标工程C代码生成器进一步用于:在分别生成目标工程中各连续功能图文件对应的C代码文件时,根据预设的内存空间范围,将各共享变量、目标工程的全局变量和功能块连接器进行内存地址分配。
14.如权利要求11所述的装置,其特征在于,所述目标工程C代码生成器进一步用于:
根据各应用程序库中应用程序库描述文件,提取各应用程序库中连续功能图文件的任务模式;
根据各应用程序库中连续功能图文件的任务模式、目标工程中连续功能图文件的任务模式、和所有连续功能图文件的执行顺序,生成目标工程对应的目标工程任务模式函数C代码文件。
15.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一所述方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至7任一所述方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711381228.XA CN108121285B (zh) | 2017-12-20 | 2017-12-20 | 基于连续功能图的应用软件协同编译方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711381228.XA CN108121285B (zh) | 2017-12-20 | 2017-12-20 | 基于连续功能图的应用软件协同编译方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108121285A true CN108121285A (zh) | 2018-06-05 |
CN108121285B CN108121285B (zh) | 2020-08-25 |
Family
ID=62230316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711381228.XA Active CN108121285B (zh) | 2017-12-20 | 2017-12-20 | 基于连续功能图的应用软件协同编译方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108121285B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741411A (zh) * | 2021-11-08 | 2021-12-03 | 西安热工研究院有限公司 | 一种分散控制系统全局变量点产物文件生成方法和系统 |
CN114397856A (zh) * | 2022-03-25 | 2022-04-26 | 浙江中控研究院有限公司 | 一种将cfc语言程序应用于龙芯平台的转换方法及装置 |
CN114879593A (zh) * | 2022-05-07 | 2022-08-09 | 科东(广州)软件科技有限公司 | 实时系统运行plc控制器的方法、装置、设备及存储介质 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03164835A (ja) * | 1989-11-22 | 1991-07-16 | Hitachi Ltd | インタプリタ型言語処理系における大域変数処理のコンパイル方法 |
JPH08123694A (ja) * | 1994-10-21 | 1996-05-17 | Hudson Soft Co Ltd | Cコンパイラ |
US5586259A (en) * | 1991-01-28 | 1996-12-17 | Mitsubishi Denki Kabushiki Kaisha | Communication network apparatus |
US6401138B1 (en) * | 1996-10-28 | 2002-06-04 | Koninklijke Philips Electronics N.V. | Interface for patient context sharing and application switching |
US20020123978A1 (en) * | 1999-09-22 | 2002-09-05 | Paul Miller Bird | Method and apparatus for cross-node sharing of cached dynamic sql in a multiple relational database management system environment |
CN1794175A (zh) * | 2006-01-06 | 2006-06-28 | 浙江大学 | 编译器和操作系统内核协同的节能方法 |
CN1820252A (zh) * | 2003-01-06 | 2006-08-16 | 松下电器产业株式会社 | 一种编译程序、一种存储编译程序的计算机可读存储媒体、一种编译方法和编译单元 |
CN101650664A (zh) * | 2009-06-30 | 2010-02-17 | 北京飞天诚信科技有限公司 | 链接方法和链接器 |
CN103166943A (zh) * | 2011-12-19 | 2013-06-19 | 北汽福田汽车股份有限公司 | 一种对电子控制单元ecu目标文件加密传输的方法及系统 |
CN104503765A (zh) * | 2014-12-31 | 2015-04-08 | 北京纵横机电技术开发公司 | 一种连续功能图编程方法 |
CN104714829A (zh) * | 2013-12-15 | 2015-06-17 | 中国航空工业集团公司第六三一研究所 | 一种保证目标码和源代码一致性的编译链接方法 |
CN106250124A (zh) * | 2016-07-25 | 2016-12-21 | 百富计算机技术(深圳)有限公司 | 功能模块跨平台运行的实现方法和装置 |
CN106559475A (zh) * | 2016-09-28 | 2017-04-05 | 浙江大学宁波理工学院 | 一种可编程嵌入式web服务器 |
-
2017
- 2017-12-20 CN CN201711381228.XA patent/CN108121285B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03164835A (ja) * | 1989-11-22 | 1991-07-16 | Hitachi Ltd | インタプリタ型言語処理系における大域変数処理のコンパイル方法 |
US5586259A (en) * | 1991-01-28 | 1996-12-17 | Mitsubishi Denki Kabushiki Kaisha | Communication network apparatus |
JPH08123694A (ja) * | 1994-10-21 | 1996-05-17 | Hudson Soft Co Ltd | Cコンパイラ |
US6401138B1 (en) * | 1996-10-28 | 2002-06-04 | Koninklijke Philips Electronics N.V. | Interface for patient context sharing and application switching |
US20020123978A1 (en) * | 1999-09-22 | 2002-09-05 | Paul Miller Bird | Method and apparatus for cross-node sharing of cached dynamic sql in a multiple relational database management system environment |
CN1820252A (zh) * | 2003-01-06 | 2006-08-16 | 松下电器产业株式会社 | 一种编译程序、一种存储编译程序的计算机可读存储媒体、一种编译方法和编译单元 |
CN1794175A (zh) * | 2006-01-06 | 2006-06-28 | 浙江大学 | 编译器和操作系统内核协同的节能方法 |
CN101650664A (zh) * | 2009-06-30 | 2010-02-17 | 北京飞天诚信科技有限公司 | 链接方法和链接器 |
CN103166943A (zh) * | 2011-12-19 | 2013-06-19 | 北汽福田汽车股份有限公司 | 一种对电子控制单元ecu目标文件加密传输的方法及系统 |
CN104714829A (zh) * | 2013-12-15 | 2015-06-17 | 中国航空工业集团公司第六三一研究所 | 一种保证目标码和源代码一致性的编译链接方法 |
CN104503765A (zh) * | 2014-12-31 | 2015-04-08 | 北京纵横机电技术开发公司 | 一种连续功能图编程方法 |
CN106250124A (zh) * | 2016-07-25 | 2016-12-21 | 百富计算机技术(深圳)有限公司 | 功能模块跨平台运行的实现方法和装置 |
CN106559475A (zh) * | 2016-09-28 | 2017-04-05 | 浙江大学宁波理工学院 | 一种可编程嵌入式web服务器 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741411A (zh) * | 2021-11-08 | 2021-12-03 | 西安热工研究院有限公司 | 一种分散控制系统全局变量点产物文件生成方法和系统 |
CN113741411B (zh) * | 2021-11-08 | 2022-02-01 | 西安热工研究院有限公司 | 一种分散控制系统全局变量点产物文件生成方法和系统 |
CN114397856A (zh) * | 2022-03-25 | 2022-04-26 | 浙江中控研究院有限公司 | 一种将cfc语言程序应用于龙芯平台的转换方法及装置 |
CN114879593A (zh) * | 2022-05-07 | 2022-08-09 | 科东(广州)软件科技有限公司 | 实时系统运行plc控制器的方法、装置、设备及存储介质 |
CN114879593B (zh) * | 2022-05-07 | 2023-03-14 | 科东(广州)软件科技有限公司 | 实时系统运行plc控制器的方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108121285B (zh) | 2020-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Bangsow | Tecnomatix plant simulation | |
US9235381B2 (en) | Method and device for the programming and configuration of a programmable logic controller | |
Vogel-Heuser et al. | Model-driven engineering of manufacturing automation software projects–A SysML-based approach | |
WO2019226384A1 (en) | Semantic comparison of computer compiler traces | |
Sekerinski et al. | Program development by refinement: case studies using the B method | |
CN102124445B (zh) | 用于针对自动化过程创建hmi应用的方法和系统 | |
CN102541521B (zh) | 基于结构化查询语言的操作指令自动生成装置及方法 | |
CN108121285A (zh) | 基于连续功能图的应用软件协同编译方法及装置 | |
CN109491658A (zh) | 计算机可执行代码数据的生成方法及装置 | |
CN113826070A (zh) | 工作流引擎工具 | |
EP2799981A1 (en) | Method for providing code, code generator and software development environment | |
Göbel et al. | The Discrete Event Simulation Framework DESMO-J: Review, Comparison To Other Frameworks And Latest Development. | |
CN110264361A (zh) | 一种区块链的数据解析方法及装置 | |
CN105204837B (zh) | 一种逻辑编程的实现方法和装置 | |
CN108654090A (zh) | 操作系统与游戏应用交互的方法及装置 | |
CN110196720A (zh) | 一种Simulink生成动态链接库的优化方法 | |
CN110488738A (zh) | 一种代码生成方法及装置 | |
Petrović et al. | Model-driven smart contract generation leveraging ChatGPT | |
Kwong | Hands-On Design Patterns and Best Practices with Julia: Proven solutions to common problems in software design for Julia 1. x | |
CN103955368B (zh) | 一种软件模糊自适应支撑系统和开发方法 | |
Bagge et al. | Interfacing concepts: Why declaration style shouldn't matter | |
KR101085114B1 (ko) | 피엘씨 소프트웨어 개발환경 제공 시스템 | |
Rädler et al. | Participative Method to identify Data-Driven Design Use Cases | |
Brünninghaus et al. | Low-code development in worker assistance systems: Improving flexibility and adaptability | |
de Mello et al. | A transcription tool from Petri net to CLP programming languages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |