本发明涉及在工业工厂的工程阶段中创建用于工业工厂中的工业资产的控制代码。
背景技术:
1、工业工厂中的工业资产通常不能在工厂的开箱即用中完成其给定的指派任务。相反,这种资产由嵌入式系统或其它计算机控制。这些计算机需要适当的控制代码来使资产执行其给定的任务。
2、如今,在用于工业过程的自动化系统的工程阶段,控制代码主要由控制工程师以手动方式创建。该过程需要对控制理论、生产过程、编程、验证和仿真的充分了解。此外,在可以部署控制代码之前,需要对其进行彻底的验证和测试,并使其适于实现所需的功能。因此,自动化系统的工程阶段需要来自控制工程师的大量人工努力。
技术实现思路
1、因此,本发明的目的是提供一种用于至少部分地自动化控制代码的生成的方法,从而减少工业工厂的工程阶段的时间和努力。
2、该目的通过根据独立权利要求的计算机实现的方法来实现。进一步有利的实施例在从属权利要求中详述。
3、本发明提供了一种用于生成控制代码的计算机实现的方法,控制代码用于致动工业工厂中的资产以执行给定任务。
4、在该方法的过程中,至少部分地基于给定任务从自动代码生成器获得候选控制代码。也就是说,代码生成器可以是任何类型,只要它的输出至少以某种方式由给定任务控制。
5、然后对候选控制代码执行代码验证。该代码验证被配置为确定候选控制代码是否能够被执行,和/或是否能够被编译以供执行。如果不是这种情况(即,代码验证不成功),则可重复代码生成。
6、特别地,代码验证可以验证所生成的控制代码的各个方面,包括编译、静态代码分析和符号执行。该代码验证的可能实现是经由langchain框架及其工具集成能力。
7、如果代码验证成功,则确定候选控制代码的执行是否能够致动资产以执行给定任务。为此,在仿真环境中执行候选控制代码。如果候选控制代码是用解释器语言编写的,则它可以使用适当的解释器来直接执行。如果候选控制代码是用编译语言编写的,则它可以由编译器编译成目标代码,然后可以在硬件平台上执行该目标代码。无论解释器语言和编译器语言之间的区别在哪里都不重要,在下文中,将仅提及执行候选控制代码,而不管它是否需要首先被编译。
8、如果该确定是肯定的(即,代码能够致动资产以执行给定任务),则候选控制代码被确定为所寻找的控制代码。即,确定候选控制代码正常工作并实现给定任务,使得其可在工程阶段之后的工业工厂的正常操作期间用作控制代码。如果确定是否定的(即,代码还不能致动资产以完全执行给定任务),则可重复代码生成。
9、以这种方式,可以仅使用任何形式的自动代码生成器、用于执行代码验证的装置和用于在仿真环境中执行候选控制代码的装置来自动生成控制代码,该控制代码先前主要是手动和繁重的任务。根据自动代码生成器有多复杂,第一生成的候选控制代码可能完全是运行最可行的,只剩下一些小问题要解决。一旦解决了这些问题,候选控制代码的执行就可以揭示出它已经在某种程度上是关于实现预期任务的目标。这可以通过重复代码生成若干次来进一步改进。
10、但是原则上,自动代码生成器的任何智能以及其中的任何现有知识都是可选的。在极限情况下,自动代码生成器可以仅输出所有可能的候选控制代码,并且仿真环境中的代码验证和代码执行的自动流水线然后可以挑选出最佳候选控制代码作为在工业资产的正常操作期间使用的控制代码。
11、这在某种意义上类似于在没有大量人工努力的情况下参与demoscene中的“大小编码”竞争。如果任务是例如写大小仅为16字节(或甚至仅为8字节)的代码,但仍导致一些吸引人的视觉效果输出到屏幕上,则所有一个需要是用于自动执行所有可能的候选并对输出到屏幕上的相应结果进行评级的环境。然后,可以通过确定具有最佳结果的代码的自动流水线来“筛选”(在8字节的情况下)264种可能性的过剩。
12、最终结果是工业工厂中试运行资产的整个过程变得更快和更经济。该整个过程以获得所需资产开始,并以使所有资产完全起作用结束。其间,存在获得所需控制代码的强制操作。因此,根据所提出的方法获得控制代码不被认为仅仅是这样的数据处理或编程。相反,除了工厂内部资产的物理安装和电缆与资产的连接之外,它是整个调试过程的一部分,同样重要。在没有控制代码的情况下,将不具有资产的预期功能。
13、在特别有利的实施例中,如果代码验证确定候选控制代码不能被执行和/或编译,则至少部分地基于作为反馈的代码验证的结果从自动代码生成器获得新的候选控制代码。以这种方式,新的候选控制代码的生成可以以准确地改善当前错误的为目标,并防止先前的候选控制代码被编译。
14、同样地,如果执行候选控制代码揭示出候选控制代码不能致动资产以执行给定任务,则至少部分地基于作为反馈的代码执行的结果从自动代码生成器获得新的候选控制代码。以这种方式,新的候选控制代码的生成的目标可以是改善当前实现给定任务的路上存在的任何问题。
15、如前面所讨论的,如果使用足够复杂的自动代码生成器,则甚至第一生成的候选控制代码也可以预期至少以某种方式趋向于可编译/可执行,并且趋向于能够实现给定任务。即,该第一生成的候选控制代码将已经好于完全随机的控制代码。这是在将来的迭代中可以建立的事情。以简单的类比,当打高尔夫球时,用球杆对球的第一次击打不会将球从球座离点一直带到洞中。但是球已经覆盖了大部分距离并且在途中清除了至少一些障碍物,并且随着将来的击球,球将继续朝向洞行进。
16、特别地,代码验证的结果可以包括来自编译器的错误消息,该编译器用于将候选控制代码编译成可执行目标代码。通常,一个这样的错误消息正好指向需要修改的代码中的一个位置。例如,如果在之前没有声明的情况下使用变量,则需要插入该声明。
17、同样,在仿真环境中执行候选控制代码的结果包括由候选控制代码在执行时产生的输出。如果该执行发生在已知条件下并且具有已知输入,则可以将该输出与预期输出进行比较。然后,该比较揭示的任何差异可以用作针对候选控制代码的下一次迭代的改进的反馈。
18、具体地,在代码验证和代码执行过程中,系统解释在代码验证和代码执行阶段期间生成的来自运行时环境的错误消息和其它消息。如果需要,系统还将咨询并与人类用户交互,以阐明需求。各种类型的信息和反馈将被结合以重新生成代码。修改可以包括功能校正、性能改进、句法改进、重构(refactoring)或备选算法。四个步骤,即生成、验证、执行和修改,可以迭代地进行,直到代码验证和代码执行成功。
19、在整个工作流程中,所生成的代码和任何中间结果(例如,执行结果和修改所生成的代码的尝试)可以以人类友好的方式呈现给用户。以这种方式,可以给予用户(例如控制工程师)机会来发现异常星座并将这种发现反馈给自动代码生成器。
20、在另一特别有利的实施例中,自动代码生成器包括大语言模型llm,其被配置为将文本提示作为输入并重复预测文本的部分。llm是已经在各种文本输入的大集合上训练的机器学习模型。因此,它可以理解许多种类的文本输入。例如,llm可以理解这种类型的初始文本提示,“编写将abc t-25控制器上的温度设定点设定为120℃的iec-61131兼容程序”。但是,它也可以理解,例如,这种类型的反馈“代码的这个版本不能用变量xyz未说明的错误消息进行编译。请编写将编译的代码。”,或“代码的这个版本输出值0,其中值10是预期的。请编写将输出正确结果的代码。”该反馈可以与来自控制工程师的任何种类的人工反馈混合。例如,控制工程师可以观察到由llm产生的候选控制代码逐渐变慢,并且这种行为的一个可能原因是在使用之后未被适当释放的存储器或其它资源的耗尽。
21、在另一有利实施例中,自动代码生成器可被配置为重新组装现有控制代码的片段以形成新的候选控制代码。这样,可以使用现有控制代码形式的现有知识。这在某种意义上类似于人类程序员的行为,人类程序员通过将来自示例程序的字节和片段组装在一起来学习新的编程语言,直到所得到的控制代码完成其应该完成的操作。
22、在另一个特别有利的实施例中,代码生成包括用符号占位符替换候选控制代码中的常数值。以这种方式,控制代码在被执行时编译或传递期望结果的发现对于比仅由常数值表示的情况更多的情况是有效的。也就是说,符号占位符的使用覆盖了任何可能的常数值,而具有一个具体常数值的测试可能例如错过对于不同的常数值,候选控制代码的执行将在具有“除以零”错误的运行时终止。
23、在另一有利实施例中,在仿真环境中执行候选控制代码包括:
24、·向候选控制代码输入一个或多个测试场景,以及
25、·将由候选控制代码产生的一个或多个输出与预期输出进行比较。
26、以这种方式,测试可以集中于在资产的随后正常操作期间可能发生的场景的覆盖。
27、特别地,可以使用根据预定输入循环执行所生成的控制代码的控制运行时环境。如果需要,系统还可以配置适合于执行所生成的控制代码的仿真环境。配置运行时环境可意味着包括用于测试的其它情况、循环或组合,其可通过(1)使用规定的现有技术算法手动或自动地组合创建,或(2)由生成式ai生成来获得。
28、在另一特别有利的实施例中,确定候选控制代码的执行是否能够致动资产包括确定候选控制代码的执行是否能够实现其中涉及资产的给定控制目标,而不触发与控制目标和/或资产有关的警报。例如,这样的控制目标可以包括通过一些动作将诸如资产或整个工业过程的状态变量的某个变量保持在给定的设定点值附近。例如,为了改变反应容器中的温度,可以打开加热器,或者可以允许具有不同温度的材料进入容器。
29、例如,该方法可以以ai授权模块(代码生成)开始,该ai授权模块可以理解来自人类用户以自然语言(例如,“编写用于控制蒸馏塔的控制算法”)提供的输入的意图并相应地生成控制代码。然后可以应用静态分析工具来检查生成的代码的语法和语义错误。另一个ai授权模块(反馈处理)可以处理错误消息(例如,“变量x未被定义”)和其他信息,以确定代码是否以及如何需要被校正。在静态验证步骤之后,可以编译或解释语法上正确的代码,然后在仿真环境中执行,以查看它是否可以实现给定的控制目标(例如,如果可以使用所生成的代码来稳定蒸馏塔而不触发警报)。再次,如果在执行阶段中发生任何错误,代码生成模块则可以尝试自治地适配所生成的代码。这可以通过将错误消息包括到代码生成提示中、或通过查询因特网以获得可能的代码适配来促进。顺便提一下,该方法可以向用户报告来自验证和执行的所有中间结果以及校正、修改和重新生成代码的尝试和对应原因的概要。来自用户的任何反馈(例如,“除了增加塔的产品流量,代码还应当确保杂质率低于1%”)可以由反馈处理模块处理。一旦生成的代码在执行阶段成功并且用户满意,它可以作为自动化系统的一部分被导出用于部署。
30、也就是说,该解决方案可以利用生成式ai,并将其与用于程序分析的代码编译和符号执行工具以及仿真环境相结合,以使整个代码生成工作流自动化。该解决方案可以首先根据来自人类用户的文本指定的要求生成控制代码,然后验证所生成的代码,并且如果适用的话,在(进一步配置的)仿真运行时环境中执行它。在该过程中标识的错误和问题由解决方案解决,并且代码可以适于尝试解决它们。该解决方案可以为用户提供代码验证和执行的中间结果以及修改代码的尝试。在这样的设置中,人力减少到提供自然语言的要求和反馈、检查中间结果、并最终批准生成的代码。通过使工作流自动化,可以减少控制编程的人工努力,同时确保所生成代码的可靠性和功能性。
31、因此,在另一个特别有利的实施例中,自动代码生成器被配置为提示控制工程师关于候选控制代码的创建的至少一个决定、和/或对候选控制代码的至少一个贡献。即使控制工程师不时地以这种方式得到提示,与控制代码的创建是完全手动过程的先前情况相比,当前提出的方法仍然提供了巨大的缓解。在这方面,关于可以自动做出的控制代码的每个决定都进行计数。因此,在有限次数内提示控制工程师比试图用甚至更复杂的自动代码生成器消除对这种提示的需要更经济。
32、在另一特别有利的实施例中,将被认为能够在仿真环境中执行之后致动资产以执行给定任务的候选控制代码的一个或多个实例呈现给控制工程师以供批准。如果给出该批准,则候选控制代码的实例被确定为所寻找的控制代码。如果没有给出批准,则至少部分地基于控制工程师对候选控制代码的反馈,从自动代码生成器获得新的候选控制代码。以这种方式,可以利用来自控制工程师的反馈,针对仍然发现想要的最后问题生成新的控制代码,然后控制代码可以被用于其预期目的。
33、控制工程师不批准的示例性原因可能是,当候选控制代码3a完成使资产2执行给定任务4的主要任务时,它太慢,需要太多的存储器或其它资源,或者由于资源在使用之后没有被适当地释放而具有资源泄漏,使得该候选控制代码3a的重复执行将逐渐地欺骗所有可用资源。
34、特别地,资产的致动可以包括从资产读取表征资产的和/或其中涉及资产的工业过程的操作状态的变量的值。例如,该动作可以由工业工厂的分布式控制系统dcs执行,以便监测工业工厂并根据给定目标控制它。经常需要的另一动作是指示资产改变其操作状态,和/或对其中涉及资产的工业过程施加物理影响。例如,这由dcs来完成,作为一个或多个控制回路的结果,以根据一个或多个控制目标来修改单个资产或整个工业工厂的行为。
35、可以根据所提出的方法产生控制代码的工业资产的示例包括控制器、阀、泵、搅拌器、压力计、温度计、填充液位计或与在工业工厂上执行的与工业过程相互作用的任何其他现场设备。特别地,控制代码可以在现场设备的嵌入式控制器上执行。
36、因此,在另一特别有利的实施例中,在联接到资产的硬件平台上执行所确定的控制代码,以便使得资产执行给定任务。执行给定任务的结果被反馈到工业工厂的操作员和/或分布式控制系统dcs。以这种方式,从给定资产和给定任务开始,该给定任务可以以控制工程师和/或操作员侧所需的最少工作来执行。虽然最终控制代码本身可以是给定任务的永久工作结果,控制工程师随后将其用于工厂的试运行,但是也可能控制工程师或操作员只对被反馈的执行任务的结果感兴趣。也就是说,控制代码的生成可能在后台寂静地发生,并且控制工程师或操作员甚至可能不知道控制代码正在进行中被生成以执行初始分配的任务。因此,控制工程师或操作员可以用自然语言与资产交谈,其中先前必须首先手动编写控制代码。
37、在另一个优选实施例中,该方法还包括:收集来自代码验证和候选控制代码的执行的中间结果,以及可选地还收集在工业工厂的用户的监测概要中的校正、修改和再生成代码的尝试和对应的原因的概要。以此方式,用户可提供可由反馈处理模块处理的反馈,并在下一轮代码生成中进一步改进候选控制代码。例如,来自用户的反馈可以是“除了增加蒸馏塔的产品流量之外,代码还应当确保杂质率低于1%”。
38、因为它是计算机实现的,所以本方法可以以软件的形式实现。因此,本发明还涉及一种具有机器可读指令的计算机程序,指令当由一个或多个计算机和/或计算实例执行时,使得一个或多个计算机和/或计算实例执行上述方法。计算实例的示例包括云中的虚拟机、容器或无服务器执行环境。本发明还涉及具有计算机程序的机器可读数据载体和/或下载产品。下载产品是具有计算机程序的数字产品,其可以例如在在线商店中销售以立即实现并下载到一个或多个计算机。本发明还涉及具有计算机程序和/或具有机器可读数据载体和/或下载产品的一个或多个计算实例。