CN116047989A - 产生程序代码的方法、配置控制装置的方法和计算机系统 - Google Patents
产生程序代码的方法、配置控制装置的方法和计算机系统 Download PDFInfo
- Publication number
- CN116047989A CN116047989A CN202211332431.9A CN202211332431A CN116047989A CN 116047989 A CN116047989 A CN 116047989A CN 202211332431 A CN202211332431 A CN 202211332431A CN 116047989 A CN116047989 A CN 116047989A
- Authority
- CN
- China
- Prior art keywords
- placeholder
- program code
- computer
- implemented method
- variable
- 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.)
- Pending
Links
Images
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
-
- 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/42—Syntactic analysis
- G06F8/423—Preprocessors
-
- 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
-
- 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/30—Creation or generation of source code
- G06F8/36—Software reuse
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Automation & Control Theory (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及用于产生程序代码(1)的计算机实现的方法,所述方法包括如下步骤:产生(S1)代表变量的第一占位符(P1),其用于程序代码(1)的预定区段(10)中;产生(S2)第二占位符(P2),其放置于程序代码(1)的应用第一占位符(P1)的预定区段(10)的开始之前;以及产生(S3)第三占位符(P3),其放置于程序代码(1)的应用第一占位符(P1)的预定区段(10)的结束之后。本发明此外还涉及一种用于配置控制装置的方法。本发明此外还涉及一种计算机程序、一种计算机可读的数据载体以及一种计算机系统。
Description
技术领域
本发明涉及一种用于产生用于对控制系统进行控制的可执行控制程序的程序代码的计算机实现的方法。
本发明此外还涉及一种用于配置控制装置的方法。此外,本发明涉及一种计算机程序、一种计算机可读的数据载体以及一种计算机系统。
背景技术
控制装置用于多种应用中,以便检测过程的物理参量和/或借助于连接的执行器对过程产生作用。例如可以涉及制动过程的防抱死调节。
确定过程的动态行为的时间常数经常以1毫秒或更短的周期时间为先决条件,从而控制装置的实时能力是需要的。
为了加速控制装置的设计,经常借助在计算环境如MATLAB/Simulink中的模型研发控制策略。因此可以首先模拟过程和/或调节器或者控制装置的行为,并且检查期望的特性的存在。
模型特别是可以涉及模块图,所述模块图包括各模块,各模块执行如计算这样的运算处理,其中,一个模块例如可以由多个输入信号计算一个输出信号。通常周期性地执行模块图,其中,将所有模块持久地保持在存储器中,并且在每个时间步骤执行每个模块一次。
特别是一个模块可以在每个时间步骤中将一个或多个运算处理应用于来自之前模块的输入信号上,以便产生当前步骤的输出信号。模块图除了用于描述近似时间连续的行为的、周期性执行的子模型之外也可以包括用于描述离散行为的子模型,在该子模型中定义多个状态和过渡条件。
由模型可以借助于程序代码生成器直接产生用于对控制装置编程的程序代码。例如由H.Hanselmann等人的文献“Production Quality Code Generation from SimulinkBlock Diagrams,Proceedings of the1999International Symposium on ComputerAided Control System Design,Kohala Coast,Hawai'i”已知在产品质量中用于产生程序代码的程序代码生成器。
在此可以通过模块或模块变量的附加的注解来适配所产生的程序代码。特别是,最初对于以高精度的浮点变量的计算创建的模型可以配设有缩放比例,由此控制装置可以以定点数计算,以便在轻微损害精度的情况下实现计算成本的极大降低。
研发伙伴AUTOSAR自从一些年以来已经定义了用于控制装置软件研发的软件架构。
在实现原本的控制策略或期望的行为之前确定软件的结构。例如,软件结构可以相应于30.11.2016的AUTOSAR经典平台标准版本4.3.0。结构包括软件组件、子组件,如软件组件的可运行实体(Runnables)和接口。
在不同的软件组件之间的消息传送通过运行时间环境的虚拟功能总线实现,所述运行时间环境根据对于具体的控制装置适合的限定的结构产生。
在较大的研发项目的情况下,经常由多个人员实施研发的不同范围,这些人员也可能在不同的企业任职。如此,多个功能研发者可以创建和改善模型的各个部分。一次创建的子模型也可能用于不同项目且在功能性方面得以适配。
在此适宜的是,实现增量程序代码生成,亦即对于各个子系统分离地产生程序代码,并且随后将其联合为用于整个模型的程序代码。模型于是被分为多个子模型,这提供的优点在于,在局部变化的情况下仅仅必须重新生成用于相应的子模型的代码。
增量程序代码生成被理解为,检查:是否在最后的程序代码生成之后改变用于程序代码生成器的相应的子模型。出于该目的,例如可以在定义数据集中存储关于程序代码生成器的模块的校验和和/或模型版本计数器,该计数器在每次变化的情况下被增大。
备选或附加地可以在定义数据集中存储关于最后产生的代码的校验和和/或代码版本计数器,该代码版本计数器在对于该代码生成单元每次生成代码时增高。如果特别是关于程序代码生成器的模块的重新计算的校验和与对于该模型存储的校验和不同,于是必须紧接着进行重新的程序代码生成,因为自从最后的程序代码生成在模型上发生了变化。否则,亦即如果存在当前的程序代码,于是可以应用该程序代码。
程序代码生成器因此直接由图形化模型、例如MathWorks、Simulink和/或Stateflow生成基于文本的编程语言的程序代码、例如C代码。这能实现:将用于数据库子系统或参考化的模型的一次生成的程序代码用于不同项目中,而不必须重新生成和测试用于这些项目的程序代码。
文献DE 102020124080 A1公开一种用于由模块图的一个或多个模块产生源代码的方法,其中,所述模块图是等级式的且包括至少一个第一子系统,该第一子系统设置为用于增量代码生成,其中,第一子系统被第二子系统所包括,其中,模块图参考一定义数据库,所述定义数据库包括第一对象,该方法包括如下步骤:在模型编辑器中打开模块图,所述模块图包括第一子系统;产生用于第一子系统的源代码;产生源代码,所述源代码的产生包括求取对于第一子系统的信息;在第一对象中存储对于第一子系统的信息;以及产生用于模块图的源代码,其中,读取第一对象,以便影响代码生成的至少一个参数。
在所述定义数据集或定义数据库中例如可以存储关于如下的信息,即仅仅读取式访问某一变量。这能实现在外部子系统中优化代码生成,而对于内部子模型无需重新进行代码生成。在外部与内部子系统之间的数据交换例如可以借助于输入与输出端口实现。如果内部子模型建模一个函数,于是调用方在此在图形化模型中是外部(子)系统,并且被调用方、亦即内部子模型例如通过一端口接收例如数据且通过另一端口输出数据。在此可以规定,在内部子系统中定义占位符,对于该占位符在对调用的系统进行代码生成的情况下设立全局变量。这能实现在通信中的一定的灵活性,但是这例如不适用于支持所有在AUTOSAR下通常的通信方式。
在该背景下,本发明的目的在于,进一步改进现有技术,并且特别是能实现没有重新生成程序代码的情况下更好地支持不同通信方式。
发明内容
该目的按照本发明通过一种具有权利要求1的特征的用于产生用于对控制系统进行控制的可执行控制程序的程序代码的计算机实现的方法解决。
该目的此外通过一种具有权利要求14的特征的用于配置控制装置的方法、一种具有权利要求15的特征的计算机程序、一种具有权利要求16的特征的计算机可读的数据载体以及一种具有权利要求17的特征的计算机系统解决。
本发明涉及一种用于产生用于对控制系统进行控制的可执行控制程序的程序代码的计算机实现的方法,其中,至少部分地在图形化模型中描述控制程序的功能性,其中,将图形化模型翻译为基于文本的编程语言的程序代码。
该方法包括产生代表变量的第一占位符,将所述第一占位符应用于程序代码的预定区段中。
此外该方法包括产生第二占位符,将所述第二占位符放置于程序代码的应用第一占位符的预定区段的开始之前。
此外该方法包括产生第三占位符,将所述第三占位符放置于程序代码的应用第一占位符的预定区段的结束之后。
本发明此外还涉及用于配置控制装置的方法,其中,所述控制装置包括至少一个计算单元并且优选地具有至少一个传感器和/或至少一个执行器,以便检测物理过程的数据和/或对该物理过程产生作用。
该方法包括读入模块图以及利用按照本发明的方法产生程序代码。
此外该方法包括编译用于计算单元的程序代码,从而产生可执行的程序代码;传输可执行的程序代码到控制装置上;以及在控制装置的非易失性存储器上保存所述可执行的程序代码和/或通过控制装置的计算单元执行所述可执行的程序代码。
本发明此外涉及一种包括程序代码的计算机程序,用以当计算机程序在计算机上执行时实施按照本发明的方法中至少之一。
本发明还涉及一种包括计算机程序的程序代码的计算机可读的数据载体,用以当计算机程序在计算机上执行时实施按照本发明的方法中至少之一。
本发明此外涉及一种计算机系统,所述计算机系统包括人机界面、非易失性存储器和处理器,其中,所述处理器设置为用于执行按照本发明的方法。
本发明的构思在于,通过规定第一、第二和第三占位符已经在相应的函数的增量代码生成的情况下产生更灵活的代码。因此,可以通过应用占位符相应地适配用于相应的应用目的的已经生成的程序代码。
为了实现必要的灵活性,代替按照传统方式应用的单个占位符而应用所述三个占位符。
按照传统方式应用的单个占位符变量在程序代码中变量式地、亦即如全部变量那样使用且因此仅仅能够通过某物来代替,这在程序代码中表现为如变量那样。
按照本发明的各占位符在增量程序代码生成中产生于程序代码中,其中,所述占位符的定义然而在随后的时刻才产生。如果在随后的时刻然后产生包络性(umgebend)的系统,于是可以根据需要生成占位符的定义。
该方法的优点在于,通过规定各占位符、被各占位符所代表的变量的读取和写入的位置是可标记或可定义的。
在此,将第二占位符设置到程序代码中第一占位符的第一应用之前,并且将第三占位符设置到程序代码中第一占位符的最后应用之后。
通过导入占位符因此可以区分被占位符所代表的数据对象的不同阶段,由此可以分别应用适用于阶段的程序代码。在程序的串行运行中,首先历经代表读取所述数据对象的第二占位符,随后历经代表所述数据对象的第一占位符,以及最后历经代表所述写入数据对象的第三占位符。
通过变量式应用第一占位符,不可能的是,对于访问函数定义该第一占位符,该访问函数在程序代码中无法变量式地被应用。
因为第二和第三占位符在程序代码中无法变量式地被应用,所以可能的是,对于这样的访问函数定义这些占位符。通过相对于第一占位符的定位因此可能的是,将这些访问函数在程序代码中放置于第一占位符的应用之前或之后。
备选地,可以将所述占位符中至少之一例如定义为空,亦即在该情况下通过无或空白代替该占位符。由此,如果不需要所述阶段之一,则可以将代码保持紧凑。
在代表数据对象的第二占位符的读取与代表数据对象的第三占位符的写入之间的区分例如在AUTOSAR下对于对运行实体间变量(Interrunnable-Variablen)的访问是有意义的。在AUTOSAR中运行实体间变量是用于详细说明在软件组件中可运行的实体之间的通信的建模元素(Modellierungselement)。
运行实体间变量可以是隐式或显式的。隐式表示:可运行实体运行在运行实体间变量的局部副本(lokalen Kopie)上。局部副本在可运行实体的执行开始时通过运行时间环境创建。如果可运行实体结束,于是回写变化。由此避免在可运行实体的执行期间对运行实体间变量的竞争性访问。显式表示:可运行实体可以直接访问运行实体间变量。变化对于其他可运行实体随着访问相应的运行实体间变量立即可见。
即使在通过端口的AUTOSAR通信中,在代表数据对象的第二占位符的读取与代表数据对象的第三占位符的写入之间的区分页是有帮助的。
隐式AUTOSAR通信是可变量式使用的,然而必须区分读取访问与写入访问。如果一般性地应用第一占位符,于是该隐式AUTOSAR通信不可应用于第一占位符。
显式AUTOSAR通信是不可变量式使用的,并且必须在读取访问与写入访问之间区分。
现在可以解决两者,其方法是将第二占位符分为利用本地缓冲器读取访问和/或将第三占位符分为利用本地缓冲器写入访问,将第一占位符分为直接访问本地缓冲器。
本发明的其他实施形式是其他从属权利要求和参照附图的如下描述。
按照本发明的一个优选的进一步扩展方案设定,所述第一占位符、所述第二占位符和所述第三占位符产生于属于图形化模型、特别是包络性的图形化模型的子系统的程序代码中。由此可以以有利的方式将被第一占位符所代表的变量产生到属于图形化模型的程序代码的预定位置上。
按照本发明的另一优选的进一步扩展方案规定,所述方法包括产生第四占位符,将所述第四占位符放置于程序代码的预定区段的应用区域的开始处,以用于定义被第一占位符所代表的变量。通过规定第四占位符——其是配置占位符——由此可以以有利的方式应用辅助变量,所述辅助变量缓冲数据对象或变量的值。
按照本发明的另一优选的进一步扩展方案规定,在程序代码的预定区段中在使用代表变量的第一占位符的情况下实施计算。通过某一变量代替第一占位符,由此可以相应地影响在代码中实施的计算和/或运算处理。
按照本发明的另一优选的进一步扩展方案规定,所述第二占位符直接放置于程序代码的应用第一占位符的预定区段的开始之前、特别是在第一占位符的应用区域的开始处。由此可以以有利的方式直接在其应用之前求取用于被第一占位符所代表的变量的当前值。
利用第二占位符例如可以定义局部变量,于是通过第一占位符访问该局部变量。备选地也可能的是,通过第一占位符访问全局变量并且不定义局部变量。
本发明的构思在于,可以或多或少任意地适配在产生的程序代码中对外部数据对象的访问,而不必须重新产生生成的程序代码,其方法是相应地代替各占位符。
按照本发明的另一优选的进一步扩展方案规定,所述第三占位符直接放置于程序代码的应用第一占位符的预定区段的结束之后、特别是在第一占位符的应用区域的结束处。由此可以直接在第一占位符的应用区域之后写入新计算的值,其方法是通过写入访问代替所述第三占位符。避免了由于在计算与回写之间的延迟的可能的副作用。
按照本发明的另一优选的进一步扩展方案规定,至少一个占位符、特别是第一占位符、第二占位符、第三占位符和/或第四占位符作为预处理器宏生成在程序代码中。
按照本发明的另一优选的进一步扩展方案规定,所述占位符应用在子系统中并且定义在图形化模型中。图形化模型因此允许定义并在相应的子系统中实现或应用在增量代码生成的范围中应用的变量。
相应的变量在此例如可以定义在数据字典中。在占位符应用在增量代码生成单元的接口上的情况下,TargetLink在代码生成的外部系统的情况下自动根据在图形化模型中存在的连接产生定义。在内部系统中,在此生成相应占位符的应用。在外部系统中,相比之下生成应用在内部中的占位符的定义。
在包括多个等级层的模型中也可以应用多组占位符,其中,适宜地将内部子系统的占位符与外部子系统的相应的占位符同等对待。优选地,仅仅在包括所有子系统的模型中生成用于所应用的占位符的相应的定义。
按照本发明的另一优选的进一步扩展方案规定,在代码生成、特别是增量程序代码生成的情况下通过定义至少一个占位符在已经生成的程序代码中设立至少一个局部变量。
按照本发明的另一优选的进一步扩展方案规定,通过函数调用访问被第一占位符所代表的变量,并且第二占位符、第三占位符和/或第四占位符能定义为空。被第一占位符所代表的变量在此以有利的方式保存在数据库或数据字典中,所述数据字典不是图形化模型的一部分。
按照本发明的另一优选的进一步扩展方案规定,特别是外部变量的读取和写入通过函数调用、特别是在AUTOSAR RTE-API或运行时间环境-API中实施,其中,所述占位符定义如下位置,在程序代码中在该位置上生成占位符。因此可以在代码中期望的位置上准确地生成相应的变量。
按照本发明的另一优选的进一步扩展方案规定,所述占位符如此定义,使得这些占位符在多线程模型中提供阻碍,该阻碍阻止不同线程同时访问同一资源。用户由此可以通过简单的方式以适合的宏定义实现锁机制。
按照本发明的另一优选的进一步扩展方案规定,所述占位符如此定义,使得提供访问函数的错误处理,特别是通过在永久变量中存储最后无错误的值。
如此可以以有利的方式在自身永久变量(其可以定义在相应的配置宏中)中存储最后已知的无错误的值,由此该无错误的值在错误情况下可以被应用,或者可以调用备选的访问函数。
用于产生用于对控制系统进行控制的可执行控制程序的程序代码的方法的在此所述的特征同样可应用于按照本发明的计算机系统上,并且反之亦然。
附图说明
为了更好理解本发明及其优点,现在参照结合所属附图的如下描述。
在下文中,根据示例性的实施形式进一步阐明本发明,这些实施形式在附图的示意图中提出。
图中:
图1示出按照本发明的一个优选实施形式的用于产生用于对控制系统进行控制的可执行控制程序的程序代码的方法的流程图;
图2示出按照本发明的优选实施形式的用于产生用于对控制系统进行控制的可执行控制程序的程序代码的方法的流程图;
图3示出按照本发明的优选实施形式的用于配置控制装置的方法;
图4示出按照本发明的优选实施形式的计算机系统的示意图;以及
图5示出示例性模块图,由所述模块图可以产生程序代码。
具体实施方式
只要没有另外说明,相同的附图标记表示附图的相同元素。
在图1中示出的方法包括产生用于对控制系统进行控制的可执行控制程序的程序代码1。
在此,至少部分地在图形化模型2中描述控制程序的功能性。将图形化模型2翻译为基于文本的编程语言的程序代码1。
该方法此外还包括产生S1代表变量的第一占位符P1,将所述第一占位符应用于程序代码1的预定区段10中。
该方法此外还包括产生S2第二占位符P2,将所述第二占位符放置于程序代码1的应用第一占位符P1的预定区段10的开始之前。
该方法此外还包括产生S3第三占位符P3,将所述第三占位符放置于程序代码1的应用第一占位符P1的预定区段10的结束之后。
第一占位符P1、第二占位符P2和第三占位符P3产生于属于图形化模型2、特别是包络性的图形化模型的子系统12的程序代码1中。
计算机实现的方法此外还包括产生S4第四占位符P4,将所述第四占位符放置于程序代码1的预定区段10的应用区域14的开始处,以用于定义被第一占位符P1所代表的变量。
在程序代码1的预定区段10中在使用代表变量的第一占位符P1的情况下实施计算。
第二占位符P2直接放置于程序代码1的应用第一占位符P1的预定区段10的开始之前、特别是在第一占位符P1的应用区域14的开始处。
第三占位符P3直接放置于程序代码1的应用第一占位符P1的预定区段10的结束之后、特别是在第一占位符P1的应用区域14的结束处。
至少一个占位符、特别是第一占位符P1、第二占位符P2、第三占位符P3和/或第四占位符P4在此作为预处理器宏生成在程序代码1中。
占位符应用在子系统12中且定义在图形化模型2中。
在程序代码生成、特别是增量程序代码生成的情况下通过定义至少一个占位符P1、P2、P3、P4在已经生成的程序代码1中设立至少一个局部变量。
通过函数调用16访问通过被第一占位符P1代表的变量。此外,第二占位符P2、第三占位符P3和/或第四占位符P4在需要时能定义为空。
在传统的变量式的占位符的范围中规定固定的读取-执行-写入-顺序。这例如可以在子系统或由该子系统所包括的程序代码、如在图2中示出的可运行实体R1和R2的并发性的情况下变得有问题。对占位符值的访问例如通过在运行时间环境API中的函数调用在相应的程序代码区段的开始时实现。
传统地,如果已经增量产生的程序代码具有仅仅一个(变量式)占位符,于是事后无法在该程序代码中调用RTE-API函数。因此仅仅能够在外部系统的新生成的程序代码中在调用内部系统之前生成函数。
图2示出在控制装置上可执行的控制程序的两个可运行实体R1和R2的执行的时间过程。
通过按照本发明的方法生成用于可运行实体R1的代码,可以实现在读取与计算过程之间更好的时间一致性。
在x轴上示出执行的时间过程;可见的是,并行执行R1和R2。在此9表示R1的增量生成的区域,以及11表示如下子区域,在该子区域中访问该占位符或利用该占位符计算。根据现有技术,在增量生成的区域之外发生读取访问和写入访问,在此在时刻11a和11b处示出。
特别是外部变量的读取和写入在此分别通过函数调用16、特别是在AUTOSAR RTE-API中实施。
在附图中此外示出,如何并行执行的可运行实体R2在时刻t1访问同样的变量且写入新的值。因为在R2的写入访问实现之后,可运行实体R1实施利用变量的计算,这些计算必须正确地以新的值实现。但是因为读取访问在时刻11a实现,所以计算实际上仍以过去的值实施。
此外,可运行实体R2在时刻t2重新访问变量,以便读取当前值。正确地,最后通过在R1中的计算改变的值必须存在,但是在时刻11b才回写该值。总体上,读取和写入访问的放置导致:不仅R1而且R2处理用于变量的过去的和可能错误的值。
根据本发明的代码生成在子区域11的代码中产生访问,从而该访问更接近计算,如在此通过竖直虚线11a‘和11b‘示出。利用本发明因此在增量代码生成中也可能的是,在计算11中应用在时刻t1由R2写入的值,并且在时刻t2由R2已经读取在11中计算的值。
按照另一优选实施形式规定,对于AUTOSAR软件组件或包括在其中的可运行实体的建模应用TargetLink。可运行实体表示AUTOSAR软件组件的最小的可独立执行的子模块。如果可运行实体具有多个子模块、如子系统、特别是数据库模块,于是出现的错误的配置或调试可能变得困难。
代替直接或明确建模的AUTOSAR通信有意义的是,应用占位符。于是对于各个子模块可以创建适配的模型,该模型包含对于测试适配的可运行实体。
通过应用占位符,用于子模块本身的代码必须仅仅唯一一次地生成。由此可以避免多次测试,这些测试通常在重复的代码生成中是需要的。
相似的测试建模原则上也可用于非AUTOSAR模型,其应用相似的存取或访问函数,如明确的AUTOSAR通信。占位符的优点在于,不仅对于明确的访问函数而且传统的/变量式的访问可以应用该占位符。
按照另一优选实施形式规定,与函数代码分开地存放校准和测量参量。因此可以发生的是,在代码生成的时刻对于某一组件还未准确已知的是,应从何处得到这些参量。此外可能应在另一项目中再应用该组件。
在AUTOSAR下常量的应用通常需要RTE-API函数调用,因为校准和测量参量应存储在RTE或运行时间环境中。在其他情况下,特殊的硬件函数的调用可能是需要的。通过建模用于访问常量的占位符,可以在函数代码上没有变化的情况下事后适配访问细节。
此外可以容易地再应用相应的子系统,该子系统例如提供具有可校准的函数的PID调节器,而无需重新的代码生成。
按照另一优选实施形式规定,占位符P1、P2、P3、P4如此定义,使得这些占位符在多线程模型中提供阻碍,该阻碍阻止不同线程同时访问同一资源。
一旦模型或程序包括多个线程,于是这需要锁或阻碍机制,其阻止不同线程同时访问同一资源、特别是共享存储器、亦即例如全局变量。
在代码中相应的占位符位置上例如可以将一比特设置为“1”,或者可以使预定的计数变量递增。一旦这是可能的且因此等待相应的锁,于是相应的任务随后继续运行。为了释放,于是紧接着又复位相应的比特或计数变量。
用户因此可以通过简单的方式以适合的宏定义实现锁机制。第二占位符P2在此用于阻碍,第三占位符P3用于释放。
按照另一优选实施形式规定,所述占位符此外如此定义,使得提供访问函数的错误处理,特别是通过在永久变量中存储最后无错误的值。
访问函数、例如RTE-API函数可以在错误情况下用信号表示:读取的数据是不正确的,或者无法正确地写入数据。在此可以将这些错误情况的相应的处理加入宏定义中。如此例如可以将最后已知的无错误的值存储在自身的永久的变量中,该变量可以定义在相应的配置宏或占位符中,由此可以在错误情况下应用该值,或者可以调用备选的访问函数。
图3示出按照本发明的优选实施形式的用于配置控制装置的方法,其中控制装置18包括至少一个计算单元20且优选地具有至少一个传感器22和/或至少一个执行器24,以便检测物理过程的数据和/或对该物理过程产生作用。
该方法包括:读入S1’模块图;以及利用按照本发明的方法产生S2’程序代码1。
此外该方法还包括:编译S3’用于计算单元20的程序代码1,从而产生可执行的程序代码1’;并且传输S4’可执行的程序代码1‘到控制装置18上。
此外该方法还包括:在控制装置18的非易失性存储器上保存S5’所述可执行的程序代码1’和/或通过控制装置18的计算单元20执行所述可执行的程序代码1’。
图4示出按照本发明的优选实施形式的计算机系统100的示意图。
计算机系统100包括人机界面101、非易失性存储器102和处理器103。处理器103设置为用于实施按照本发明的方法中至少之一。
图5示出模块图的一个示例,由此可产生程序代码。
在模块图中示出输入端口“In1”和输出端口“Out1”,通过输入端口接收可缩放的输入信号,通过输出端口输出可缩放的输出信号。输入端口“In1”与第一计算模块“乘积”连接,所述第一计算模块将获得的信号与从常数模块“常数”获得的值3.14159相乘。第一计算模块“乘积”与第二计算模块“求和”连接,所述第二计算模块将获得的信号与从常数模块“常数1”获得的值2.71828相加。第二计算模块“求和”与第三计算模块“乘积1”连接,所述第三计算模块将获得的信号与在输入端口“In1”上接收的输入信号相乘且将结果转发给输出端口。
按照本发明的方法的一个优选实施形式,产生用于输入信号的第一组占位符和用于输出信号的第二组占位符。对于输入信号,优选地产生第一占位符“RDI_In”、第二占位符“RDI_In_Start”、第三占位符“RDI_In_Stop”和第四占位符“RDI_In_Setup”。对于输出信号,优选地产生第一占位符“RDI_Out”、第二占位符“RDI_Out_Start”、第三占位符“RDI_Out_Stop”和第四占位符“RDI_Out_Setup”。
为了可以将模块图打包为数据库函数“LibraryFunction”,适宜地产生如下程序代码:
根据数据库函数的期望的应用可以通过不同的程序代码段代替所述占位符。如果例如应该通过一个变量获得输入值且同样通过一个变量将其输出,则可以将第二、第三和第四占位符分别定义为空。产生的程序代码如在不提供附加的占位符那样紧凑。
如果在一个备选实施形式中应通过第一访问函数“RDI_InImpl”接收输入值且通过第二访问函数“RDI_OutImpl”输出输出值,于是可以将占位符特别是如下定义为预处理器宏:
已经生成的代码随后在代替宏之后视为编译器,如下:
在程序代码中,如期望那样在具有局部变量的数据库函数内调用Rte-API函数。通过附加的宏的巧妙的放置,一次生成的代码足够灵活,以便不仅可以用于通过全局变量的通信、而且可以用于通过具有局部缓冲器的访问函数的通信,而不会使得对增量部分重新生成代码变得必要。
按照本发明用于生成程序代码的方法因此能实现:适配生成的程序代码用以支持不同的通信方式,即使实现的是增量代码生成。
Claims (17)
1.用于产生用于对控制系统进行控制的可执行控制程序的程序代码(1)的计算机实现的方法,其中,至少部分地在图形化模型(2)中描述控制程序的功能性,其中,将图形化模型(2)翻译为基于文本的编程语言的程序代码(1),所述方法包括如下步骤:
产生(S1)代表变量的第一占位符(P1),将所述第一占位符应用于程序代码(1)的预定区段(10)中;
产生(S2)第二占位符(P2),将所述第二占位符放置于程序代码(1)的应用第一占位符(P1)的预定区段(10)的开始之前;以及
产生(S3)第三占位符(P3),将所述第三占位符放置于程序代码(1)的应用第一占位符(P1)的预定区段(10)的结束之后。
2.根据权利要求1所述的计算机实现的方法,其中,所述第一占位符(P1)、所述第二占位符(P2)和所述第三占位符(P3)在属于图形化模型(2)、特别是包络性的图形化模型的子系统(12)的程序代码(1)中产生。
3.根据权利要求1或2所述的计算机实现的方法,所述方法还包括:产生(S4)第四占位符(P4),所述第四占位符放置于程序代码(1)的预定区段(10)的应用区域(14)的开始处,以用于定义被第一占位符(P1)所代表的变量。
4.根据上述权利要求之一所述的计算机实现的方法,其中,在程序代码(1)的预定区段(10)中在使用代表变量的第一占位符(P1)的情况下实施计算。
5.根据上述权利要求之一所述的计算机实现的方法,其中,将所述第二占位符(P2)直接放置于程序代码(1)的应用第一占位符(P1)的预定区段(10)的开始之前、特别是在第一占位符(P1)的应用区域(14)的开始处。
6.根据上述权利要求之一所述的计算机实现的方法,其中,将所述第三占位符(P3)直接放置于程序代码(1)的应用第一占位符(P1)的预定区段(10)的结束之后、特别是在第一占位符(P1)的应用区域(14)的结束处。
7.根据上述权利要求之一所述的计算机实现的方法,其中,将至少一个占位符(P1、P2、P3、P4)、特别是第一占位符(P1)、第二占位符(P2)、第三占位符(P3)和/或第四占位符(P4)作为预处理器宏生成到程序代码(1)中。
8.根据上述权利要求之一所述的计算机实现的方法,其中,将所述占位符应用在子系统(12)中且定义在图形化模型(2)中。
9.根据上述权利要求之一所述的计算机实现的方法,其中,在程序代码生成、特别是增量程序代码生成的情况下通过定义至少一个占位符(P1、P2、P3、P4)在已经生成的程序代码(1)中设立至少一个局部变量。
10.根据上述权利要求之一所述的计算机实现的方法,其中,通过函数调用(16)访问由第一占位符(P1)所代表的变量,并且第二占位符(P2)、第三占位符(P3)和/或第四占位符(P4)能定义为空。
11.根据上述权利要求之一所述的计算机实现的方法,其中,变量的读取和写入、特别是外部的变量的读取和写入通过函数调用(16)、特别是在AUTOSAR RTE-API中实施,其中,第二占位符(P2)和第三占位符(P3)在此定义如下位置,在该位置上分别在程序代码(1)中生成函数调用(16)。
12.根据上述权利要求之一所述的计算机实现的方法,其中,所述占位符(P1、P2、P3、P4)如此定义,使得这些占位符在多线程模型中提供阻碍,该阻碍阻止不同线程同时访问同一资源。
13.根据上述权利要求之一所述的计算机实现的方法,其中,所述占位符如此定义,使得提供访问函数的错误处理,特别是通过在永久变量中存储最后无错误的值。
14.用于配置控制装置(18)的方法,其中,所述控制装置(18)包括至少一个计算单元(20)且优选地具有至少一个传感器(22)和/或至少一个执行器(24),以便检测物理过程的数据和/或对该物理过程产生作用,该方法包括如下步骤:
读入(S1’)模块图;
利用根据上述权利要求之一所述的方法产生(S2’)程序代码(1);
编译(S3’)用于计算单元(20)的程序代码(1),从而产生可执行的程序代码(1’);
传输(S4’)可执行的程序代码(1)到控制装置(18)上;以及
在控制装置(18)的非易失性存储器上保存(S5’)所述可执行的程序代码(1’)和/或通过控制装置(18)的计算单元(20)执行所述可执行的程序代码(1’)。
15.包括程序代码(1)的计算机程序,用以当计算机程序在计算机上执行时实施根据权利要求1至13和14中之一所述的方法中至少之一。
16.包括计算机程序的程序代码(1)的计算机可读的数据载体,用以当计算机程序在计算机上执行时实施根据权利要求1至13和14中之一的方法中至少之一。
17.计算机系统(100),包括人机界面(101)、非易失性存储器(102)和处理器(103),其中,所述处理器(103)设置为用于实施根据权利要求1至13和14中之一的方法中至少之一。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102021128101.6 | 2021-10-28 | ||
DE102021128101.6A DE102021128101A1 (de) | 2021-10-28 | 2021-10-28 | Verfahren zum Erzeugen von Programmcode, Verfahren zum Konfigurieren eines Steuergeräts und Computersystem |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116047989A true CN116047989A (zh) | 2023-05-02 |
Family
ID=83898125
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211332431.9A Pending CN116047989A (zh) | 2021-10-28 | 2022-10-28 | 产生程序代码的方法、配置控制装置的方法和计算机系统 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20230176821A1 (zh) |
EP (1) | EP4174641A1 (zh) |
JP (1) | JP2023066414A (zh) |
CN (1) | CN116047989A (zh) |
DE (1) | DE102021128101A1 (zh) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8839187B1 (en) * | 2009-02-17 | 2014-09-16 | The Mathworks, Inc. | Automatic generation of hardware simulation interface code using pre-processor macros |
DE102020124080A1 (de) | 2019-09-17 | 2021-03-18 | Dspace Digital Signal Processing And Control Engineering Gmbh | Verfahren zur inkrementellen Codegenerierung |
-
2021
- 2021-10-28 DE DE102021128101.6A patent/DE102021128101A1/de active Pending
-
2022
- 2022-10-13 EP EP22201338.5A patent/EP4174641A1/de active Pending
- 2022-10-21 US US18/048,452 patent/US20230176821A1/en active Pending
- 2022-10-27 JP JP2022172372A patent/JP2023066414A/ja active Pending
- 2022-10-28 CN CN202211332431.9A patent/CN116047989A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
DE102021128101A1 (de) | 2023-05-04 |
EP4174641A1 (de) | 2023-05-03 |
US20230176821A1 (en) | 2023-06-08 |
JP2023066414A (ja) | 2023-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11074049B2 (en) | Method and system for generating program code modified by rule sets | |
Traulsen et al. | A SystemC/TLM semantics in Promela and its possible applications | |
US10705800B2 (en) | Systems and methods for evaluating compliance of implementation code with a software architecture specification | |
Sifakis et al. | Building models of real-time systems from application software | |
US7146605B2 (en) | Automatic abstraction of software source | |
US20190258460A1 (en) | Method and system for generating a software component | |
US10078500B2 (en) | Method and system for automatic code generation | |
Goli et al. | Automated nonintrusive analysis of electronic system level designs | |
Brandt et al. | Representation of synchronous, asynchronous, and polychronous components by clocked guarded actions | |
US10884714B2 (en) | Method for modifying models for generating source code | |
US11126408B2 (en) | Incremental code generation method | |
US11593076B2 (en) | Method for merging architecture data | |
US20070271080A1 (en) | Model generation method for software/hardware collaboration design | |
US7110934B2 (en) | Analysis of the performance of a portion of a data processing system | |
CN116047989A (zh) | 产生程序代码的方法、配置控制装置的方法和计算机系统 | |
Bradatsch et al. | Data age diminution in the logical execution time model | |
Biallas et al. | {Counterexample-Guided} Abstraction Refinement for {PLCs} | |
US9841954B1 (en) | Method and system for automatic code generation | |
Erkkinen | Embedded control system implementation and modeling issues | |
Herber | A Framework for Automated HW/SW Co-Verification of SystemC Designs using Timed Automata | |
Besnard et al. | Automatic translation of C/C++ parallel code into synchronous formalism using an SSA intermediate form | |
JP2005174045A (ja) | ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体 | |
US20230342115A1 (en) | Method for generating source code | |
Colnaric | State of the art review paper: advances in embedded hard real-time systems design | |
CN116362060B (zh) | 一种系统仿真模型自动生成方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |