专利名称:用于工业自动化的cil代码程序的在线修改的制作方法
技术领域:
一般而言,本发明涉及工业自动化系统,尤其是用于修改运行中的面向对象的程序,特别是用于控制自动化设备的程序,的过程,本发明还涉及用于执行自动化设备的控制单元中的控制程序的运行时(run-time)系统。
背景技术:
控制系统正得到越来越经常的使用,尤其是用于控制或管制大规模工业进程或操作序列,例如,在工业制造或最终装配中。控制系统被类似地用于监控以最大可能程度自动运行的这样的进程,以及被用于示意当前的进程状态。
这样的自动化设备或自动化设施,由于促进了高度的生产力,在工业制造中已取得突出的重要性。
为了避免生产中断,必须能够修改自动化设备的控制程序而不必停止自动化设备或使其处于某种状态。
否则,比如在包装机的情况下,如果由于程序修改丢失了控制程序与包含在其中的变量的当前内容之间的关系,并且因此关于当前进程状态的信息不再能获得,将必须移走全部包装材料和要包装的货物。
为了能使修改程序得到使用而不论自动化设备的各个当前状态,需要满足一定的要求。一方面,程序转换必须实时发生。这意味着控制程序所设定的响应时间或执行间隔一定不能被超出。另外,至关重要的是当前程序状态,尤其是数据,比如,包含关于自动化设备的当前进程状态的信息,应被保留并继续由修改程序使用。
在SPS控制系统的情况下,由于它们被用于工业自动化中,目前各种不同的程序设计系统已经能够实现程序修改,而不必中断程序的执行。这种特征常被称作“在线程序设计”。然而,这些系统使用的进程需要控制系统的程序设计系统和运行时系统之间的紧密协调。为此,程序设计系统在修改之前管理关于程序状态的信息,由此从中推导出实现程序修改所需要的必要措施。
然而,现代的程序设计系统常常具有在功能方面的局限性的特征。因此,比如,实时方面通常只有很少被考虑到。宁可假定程序执行的中断的持续时间是非关键性的。这实际上是程序设计系统中的情况,程序设计系统仅允许修改程序命令,但是,不支持对变量对象或对象结构(举例)的改变。其它系统利用全局数据对象,其中用户手动对程序变量设定地址。这里,用户负责在完成程序修改之后保证变量保持它们的原来内容。这样的简单程序设计模型的主要缺点是它们不是面向对象的,并且不允许数据封装。
对于所用的程序设计系统的需要导致仅可能使用已经专门为在工业控制工程领域中使用而开发的程序设计工具。
发明内容
因此,假定迄今强加于所使用的程序设计系统的功能性上的限制被大范围的或者甚至基本上完全减小,本发明的目的在于确定关于解决怎样在自动化设备的控制程序运行时完成修改的问题的建设性方法。本发明的目的尤其在于使用一种尚未专门为此目的改写的程序设计工具来修改程序。
本发明的另一任务是一种用于在修改运行中的控制程序时遵循自动化设备的实时需要的方法的指示。
使用基于后附的独立权利要求书之一的对象可以轻而易举地完成该任务。有用的实施例和进一步发展在从属权利要求书中进行概述。
然而,首先,将定义或阐明几个总的来说可应用到说明书或权利要求书的术语。
在面向对象的程序设计中,一个类描述一个复制对象的抽象实体。对象组成类的一个实例,即,基于类模板产生的在计算机系统存储器中的一个图像。
类可以有不同的所谓的成员。除了别的以外,这些成员还包括该类的程序(method)和字段。子类也可以是类的一个成员。
堆栈是指专用的存储区,程序在该存储区中缓存状态数据。堆(heap)是存储器的一部分,数据结构被临时存储于其中,堆的存在和大小在运行程序之前不能确定。
根据本发明的用于修改运行中的面向对象的程序,尤其是以中间代码形式被存储在存储器中且能够在运行时被转换为可执行的机器代码的用于控制自动化设备的程序,的方法,包括提供形式上也为中间代码的修改程序或修改程序模块,将修改程序的中间代码和运行程序的中间代码进行比较以确定所述修改,以及在运行程序上完成所述修改。
这种过程的最大好处在于从源代码产生中间代码的程序设计工具不必产生关于所完成的程序修改的任何附加信息的事实。因此,程序设计工具不需要用以在运行进程中完成程序修改的任何附加功能。这种任务由运行时系统,尤其是eCLR运行时系统(嵌入式通用语言运行时)承担。这使得在该进程使用尚未专门开发用于工业控制工程领域的程序设计工具运行时能支持程序修改。
这里,优选使用CIL(通用中间语言)或MSIL(微软中间语言)中间代码作为中间代码。CIL和MSIL是用于相同中间代码的不同术语。CIL中间代码是微软的NET平台的一个组成部分。使用CIL中间代码的好处在于它包含对于类的构造的完整描述的事实。
优选的是使用也作为.NET平台的一部分的JIT(必要时“Just-in-time”)编译器将中间代码转换为可执行的机器代码。
优选的是对运行程序完成修改包括产生一个或多个第一程序对象;将包含在一个或多个第二程序对象中的数据复制到上述的一个或多个第一程序对象,第二程序对象是部分运行程序;以及从一个或多个第二程序对象切换到一个或多个第一程序对象,同时第二程序对象是部分运行程序。
这样做的好处是通过在幕后执行某些步骤,有可能准备程序修改。
另外,生成一个对于完成修改很有用的修改程序。通常,这由运行时系统来完成,并用于提供完成程序修改所需要的步骤的一个组织的自动顺序。为此,比如,运行时系统产生中间代码,中间代码由JIT编译器转换成可执行的机器代码,并被自动执行。
优选地,在完成修改之后,被分配给不再被使用的程序对象的存储器被解除分配。CLR运行时系统的所谓的“垃圾收集”功能可用于此目的。
在自动化设备上运行的进程通常受一定的实时需求的支配。基于必须遵守的实时准则,受由程序所控制的自动化系统的至少一个响应时间和/或程序的至少一个执行间隔的支配,当完成修改时,设置一定不能被超出的最大时间是可能的。
为此,该过程包括能够借助于仿真确定完成修改所需的时间的有用功能。
还有一个特别好处在于所述修改在至少两个子阶段完成的事实。这里,在第一子阶段期间完成准备措施,比如,产生程序对象和复制数据,并在第二子阶段中,比如,系统被切换到新近产生的程序对象。如果在第一子阶段期间,比如可能导致已被复制的数据被修改的事件以运行程序的操作序列发生,在较近的时间点处重复第一子阶段是可能的。
如果运行程序在激活和空闲状态之间循环切换,在控制程序的情况下这是经常发生的,当程序切换到它的激活状态时,除了其他事情外,该过程可方便地计算一个或多个时间点。
如果要完成的修改所需的时间也为已知,则可能对于一个特定时间点确定所述修改是否能完成,同时遵守自动化设备的实时条件。
另外,本发明还包括一种用于在自动化设备的控制单元中执行控制程序,尤其是用于完成上述过程的运行时系统,该系统包括用于读写存储器内容的装置,其中控制单元具有可设定地址的存储器,控制程序被以第一中间代码的形式可恢复地保存在第一存储区中;当该进程在自动化设备中运行时,至少部分第一中间代码可被转换为可执行控制命令保存在第二存储区中;运行时系统响应于在第三存储区分配的第二中间代码的提供,由此修改自动化设备中的进程顺序。
自动化设备中的操作序列可以通过以下步骤进行方便的修改选择第三存储区中的至少一个分区,和第二存储区中的至少一个存储单元,其中存储第二存储区的一个分区的起始地址;比较在第一存储区中存储的第一中间代码和在第三存储区中存储的第二中间代码;将在第三存储区的分区中存储的中间代码转换为可执行的控制命令,接着将可执行的控制命令存储到第四存储区中;将来自第二存储区的分区的数据复制到第三存储区的分区中;以及将第四存储区的起始地址存储到第二存储区的存储单元中。
运行时系统优选为CLR运行时系统,尤其是eCLR运行时系统,因为这类运行时系统的特征在于尤其适合于达到上述效果的功能。
如同在根据本发明的过程的描述中已经提到的,优选使用CIL中间代码作为中间代码。而且,用于将中间代码转换为可执行的控制命令的运行时系统也应优选包括JIT编译器。
为了以有组织的方式执行程序修改,运行时系统的特征在于用于产生、存储和执行控制命令的有用装置。
当在实时环境中使用运行时系统时,可能在给定的时段内实现以进程顺序进行修改。为达到此目的,运行时系统包括,用于计算以自动化设备的进程顺序进行修改所需的时段的有用装置。
为了遵守实时条件,运行目的是实现以自动化设备的进程顺序进行修改的例程可以完全地或部分地进行重复。
本发明的范围还包括确定一种结合了上述的运行时系统,并且适合于完成上述过程的自动化设备。
下面将基于优选实施例并参照附图更为详细地描述本发明。附图中的相同附图标记指示相同或类似的组成部分。
图1示出了元数据的原理表示和组件的代码表示,图2示出了对类的字段的修改,以及图3示出了优先级/时间表,详述运行程序的几个任务和用于完成对这个程序的修改的任务。
具体实施例方式
在下面根据本发明的程序的实施例中,使用eCLR运行时系统,该系统用于基于在ECMA标准(欧洲计算机制造商协会)中规定的CIL中间代码执行程序。eCLR运行时系统使用微软的。NET平台的通用语言基础结构(CLI)的规范。
所考虑的eCLR运行时系统允许在自动化设备运行时对它的控制程序进行修改。控制程序,这里形式上为CIL中间代码,通常由独立的模块(组件)组成,每个模块又包括CIL中间代码。因此,控制程序实质上是通过采纳并激活一个或多个修改组件来修改的。
首先,对程序的源代码或要进行修改的组件进行修改。源代码可以用各种不同的程序设计语言编程,比如,C#,或以对应于IEC61131规范的程序设计语言编程。利用程序设计工具从修改的源代码中产生CIL中间代码。任何能产生CIL中间代码的程序设计工具适于此目的。
所有修改组件的CIL中间代码现在被加载到eCLR运行时系统中。
在接下来的步骤中,eCLR运行时系统分析新加载的CIL中间代码模块,并将这些模块与当前正在运行的程序进行比较。为此,检测所有存在的不同之处。由于事实上CIL中间代码包含对于类结构的完整描述,不仅包括程序还包括类的字段,因此可能完成这些检测。
接下来,准备进行程序更新。这里,eCLR运行时系统产生程序代码,程序代码组织所要采纳的各个措施。这尤其包括采用所有存在的数据,这些数据也将在修改程序中被使用。另外,初始化新数据。部分所产生的程序代码包括所谓的复制构造符和增量构造符。
对于每个修改的类产生一个复制构造符和一个增量构造符。在接下来的步骤中,借助于新的运算符产生修改类的对象,接着,执行增量构造符。
在这一步骤中,所有附加的新的类成员被产生和/或初始化。在接下来的步骤中,复制构造符将该对象的当前值复制到老类中。最后,老对象的所有引用(reference)被切换到新对象。对于这一执行步骤,控制程序被阻塞一个短的时段。
eCLR运行时系统控制任何给定程序的引用,这些引用也被称作管制数据。引用被存储到堆中。堆栈包括对该堆中的存储器地址的引用。存储器空间的产生和释放、分配以及对类成员的访问利用指针进行组织。
每个组件包括所谓的元数据,在运行时可以存取元数据。
图1示出了元数据(21至24、31和32)和组件的代码表示11至14之间的相互影响41。每个组件包括关于类的信息,比如在图1所示的X和Y,它们的字段31、32,以及程序21至24。这个信息被包含在组件的元数据中。类的程序和字段也示出关联性42。无论何时组件被加载到eCLR运行时系统,对应的中间代码由JIT编译器转换为可执行的机器代码。一个类的每个程序由在存储器的管制代码堆中的连续代码块11至14表示。所有涉及类和程序的必要信息,比如哪个程序属于哪个类或程序标记,被存储在静态数据区,该元数据工作区中。当表示类X的程序22的代码块12被执行时,比如也可能对类Y的程序24进行访问43。每个组件包括一个或多个类。如果有必要修改或交换组件,运行组件的对应类与修改组件之间的区别首先被评估。这里考虑各种不同情况。
在第一种情况下,两类都包含相同的程序和字段。同样,中间代码也相同。比如,这可以借助于该代码的CRC验证来验证。既然中间代码之间不存在差异,在这种情况下不必进行另外的步骤。
在第二种情况下,两类包含相同的程序和字段。然而,与运行组件的对应类相比,修改组件的类的一个或多个程序揭示修改中间代码。在这种情况下,完成对于修改程序的编译,而且以这种方式产生的代码的指针被分配给原程序的描述符。在这种情况下,由于仅分配一个指针元,转换非常迅速。
在第三种情况下,两类不再包括相同程序。如果修改类揭示一种另外的程序,如果原始类不再包括先前存在的程序或两类包括具有不同标记的程序,就属于这种情况。在这种情况下,有必要删除其中一个程序。如果正是这种情况,一旦完成所有的修改,则进行验证以便确定将要被删除的程序是否包含对活动代码的引用。这将在下面的例子中进行说明。在这个例子中,我们将考虑两个组件A和B,这里,组件A包括类X,而组件B包括类Y。程序X∷进程()调用程序Y∷进程()。如果类Y的程序进程()现在被删除,另外的对应修改将在程序X∷进程()中进行。在这种关系下,同时修改不止一个组件也可能是必要的。
在第四种情况下,两类中的至少一个字段是不同的。在这种情况下,将必须对对象进行修改。这里,首先根据删除的字段进行验证,按照与在情况3中所描述的验证相同的路线进行该验证。如果所有的修改是允许的,将产生一个复制构造符。
下面给出关于修改类如何采用原始类类型的成员的基本解释。通常,这是借助于复制构造符完成的。复制构造符是复制所有包含在老的和新的类类型中的类成员的特殊函数。
为了确定一个类成员是否包含于两类中,有必要在三种情况之间进行区分。
如果类成员的名称和数据类型相同,该类成员也将是相同的。这个第一种情况描述了类成员之间的强有力的关系。这种情况所应用到的所有类成员由复制构造符进行1∶1复制。
如果仅类成员的名称相同,且数据类型是基本的数据类型,则类成员之间存在弱的关系。这种情况所应用到的所有类成员被复制和转换,比如,从“字节”数据类型转换到“整数”数据类型。
如果即不是第一种情况又不是第二种情况,类成员被认为不同,并因此是不相干的。这些类成员不由复制构造符进行处理。
借助于图2中的实例再次描述。初始类51的类成员a、b和d,与修改类52的类成员a、b和d相同,并由图2中箭头方向的附图标记61到63表示的复制构造符进行复制。类51中的类成员c与类52中的类成员c具有相同名称,但是具有不同的数据类型。在具有名称c的两个类成员之间存在弱关系。因此,当复制类成员c时,也发生转换64。类成员e、f和g是不相干的,因此,不由复制构造符进行处理。
复制构造符仅考虑非静态类成员,因为静态类成员仅被表示每一类类型而不是每一实例。
通过存取原始的和修改的类类型的元数据,eCLR运行时系统能够分析类类型之间的差异,并产生对应于各自的类类型的复制构造符。
下面示出形式上为中间代码的复制构造符的例子。
.method public hidebysig instance void copyctor(...)ldarg,0ldarg,1ldfld int32 Application.Test2/*02000005*/∷x1/*04000022*/stfld int32 Application.Test1/*02000006*/∷x1/*04000025*/ldarg,0ldarg,1ldfld char Application.Test2/*02000005*/∷x2/*04000023*/stfld int32 Application.Test1/*02000006*/∷x2/*04000026*/ldarg,0ldarg,1ldfld int32 Application.Test2/*02000005*/∷x3/*04000024*/stfld int32 Application.Test1/*02000006*/∷x3/*04000027*/ret复制构造符基本上包括两种中间代码命令ldfld(加载字段)和stfld(存储字段)。这对命令被用于在它们的数据类型方面没有不同的字段。如果数据类型不一致,但是属于以下的基本数据类型bool、int8、unit8、int16、unit16、int32、unit32、int64、unit64、real132、real164,则假定字段之间是弱关系。在这些情况下,可能有必要使用诸如conv.i4(int32)或conv.r4(real32)的运算符,以便将显示弱关系的类成员相互转换。
下面的所引用的形式上为中间代码的实例将数据类型int的一个类的字段X1转换为数据类型realldfld X∷X1//int datatypeconv.r4stfid X*∷X1//real datatypeeCLR运行时系统借助于JIT编译器将复制构造符转换为可执行的机器代码。比如,下面所示的基于Intel的汇编程序代码可能是复制构造符的转换结果。
mov esi dword ptr[ebp+8];sonrce objectmov edi dword ptr[ebp+12];destination objectmov eax dword ptr[esi+4];x1(old class)mov dword ptr[di+8],eax;x1(new class)如果发生显示修改数据类型的字段不能被分配给基本数据类型,有必要在两种不同情况之间进行区分。
如果基本类型是“系统.对象”,该对象由eCLR运行时系统自身进行更新。如果基本类型是“系统.值类型”,复制构造符包含用以运行这种修改类的复制构造符的代码。
如果发生一个类的子类被修改,下面的实例示范复制构造符的分级结构。
C#-----
structs S{int x1;int x2;}class X{int x1;S s1;)}IL code copy constructor X∷copyctor-------------------------------------ldfld X∷X1//int datatypestfld X*∷X1ldflda X∷s1ldflda X*∷s1call S∷copyctor在这种情况下,中间代码命令ldflda(加载字段地址)被用于加载子类的地址,以便调用这种类类型的对应复制构造符。
在将所有的复制构造符转换为可执行的机器代码之后,eCLR运行时系统收集对为之产生复制构造符的所有修改类的引用。比如,这样的引用被本地化,用于全局数据区中的统计引用,或者用于局部调用堆栈中或其它对象中的子类。如果已产生关于所有对象引用的列表,修改对象由eCLR运行时系统利用新的运算符重新产生。对象在被产生和初始化之后被复制。现在,复制构造符将老对象的当前内容分配给所有的新对象。
至此,万一eCLR运行时系统检测到分配给将要被修改的程序的线程在进程中已被激活,引用的收集以及对象的产生和复制可以被重复进行。
接下来到了极为关键的阶段,该阶段不能被中断,所有引用在该阶段中被修改。在这个阶段中,阻塞要被修改的程序。指针分配和为此目的所需的时间取决于对象实例和它们的引用的数目以及修改的范围。
在通过修改对象引用发生切换之后,可继续执行其间已被修改的程序。线程的阻塞被撤消。另一个eCLR运行时系统的函数将对不再需要的存储器保留解除分配。
本发明的另一方面是无论何时进行程序修改确保遵守对于控制进程所规定的实时准则。控制程序通常是循环运行。实时准则由程序的执行间隔所决定,在执行间隔内读出输入,运行控制程序并写入输出。
通过将程序修改的完成细分为准备阶段和上述的关键阶段实现遵守实时准则。为了成功地进行程序修改,控制程序的程序命令在任一阶段都不可执行。
准备阶段,实际上需要用于完成程序修改的所有必要措施(约为99%),可以中断和重复任意次数。
如果发生准备阶段被程序命令的执行中断,可以随时再次启动。
关键阶段包括新程序的激活。出于一致性的原因,对于所有程序对象的激活必须同时发生。这就解释了为什么这个进程不能被中断。
利用本发明,可精确确定两个阶段所需的时间。用于完成程序修改的执行时间必须在任何情况下都小于应用程序的最短执行间隔。典型的实时要求需要循环时间在约为10ms的范围内。
到下一次的程序循环激活的时间可以提前计算。在程序循环运行的情况下,因此,当发生下一次执行时,也可能进行预测。
对于事件受控的程序不能进行预测。这里,关键阶段的持续时间影响所谓的抖动。因此,如果事件发生在关键阶段内,在关键阶段被最早完成之后仅可能由相应的程序处理。如果最大的抖动容忍度小于执行程序的关键阶段所需的时间,通过遵照由此而定义的实时准则,任何时候都不可能完成程序修改。
图3中经由一个示例性的优先级/时间表示出了操作序列,该表描绘了关于时间具有不同优先级的不同任务的活动情况。如果任务切换到激活状态,具有较低优先级的所有其他任务将被中断。
任务73是具有分配的程序模块P3的运行程序的主任务。以10ms的时间间隔周期性地执行这个任务。在这个实例中所述的运行程序的另外任务包括具有10ms的时间间隔的周期性任务71和分配的程序模块P1以及具有分配的程序模块P2的面向事件的任务72。由于实时要求,分配给运行程序的任务具有最高优先级。
在图3中被称作修改管理器的eCLR运行时系统组织程序修改。被分配给修改管理器的任务81和82完成修改。在这个实例中,在主任务73已切换到空闲状态时,启动任务81。然而,任务81在被执行时被任务71打断,因为它切换到它的活动状态。之后,量启用于完成修改的任务82,在这个实例中,在下一个可能的时间点,主任务73在该点处切换回空闲状态。任务82没有被任何其他的任务中断,这意味着成功地完成了修改。在这个实例中,程序模块P3被改变。成功地完成修改后,执行修改程序模块P3*。任务74是eCLR运行时系统的另一任务,比如,被用于通信或调试。
权利要求
1.一种用于修改当前正在执行的面向对象的程序,尤其是用于控制自动化设备的程序的方法,其中在运行时能被转换成可执行的机器代码的中间代码的形式的所述程序被临时存储在存储器中,该方法包括提供也呈中间代码形式的修改程序或修改程序模块;分别比较所述修改程序、所述修改程序模块的所述中间代码和所述运行程序的所述中间代码,以确定所述修改;在所述运行程序中完成所述修改。
2.根据权利要求1的方法,其中CIL或MSIL中间代码被用作所述中间代码,所述中间代码包括基本上对类结构的完整描述。
3.根据前述权利要求任何一项的方法,其中借助于JIT编译器发生所述中间代码到可执行的机器代码的转换。
4.根据前述权利要求任何一项的方法,其中完成所述修改包括以下步骤产生一个或多个第一程序对象,将包含在一个或多个第二程序对象中的数据复制到所述一个或多个第一程序对象中,其中所述第二程序对象是部分所述运行程序,以及从所述一个或多个第二程序对象切换到所述一个或多个第一程序对象,使之成为部分所述运行程序。
5.根据前述权利要求任何一项的方法,其中为完成所述修改自动产生修改程序。
6.根据前述权利要求任何一项的方法,其中在完成所述修改之后,再对被分配给不再被使用的所述程序对象的存储器解除分配。
7.根据前述权利要求任何一项的方法,其中所述修改在给定周期内完成,其中所述周期的设置特别受由所述程序控制的自动化系统的至少一个反应时间,和/或至少一个执行间隔的支配。
8.根据前述权利要求任何一项的方法,其中借助于仿真,确定完成所述修改所需的时间。
9.根据前述权利要求任何一项的方法,其中所述修改在至少两个子阶段中完成,其中一个或多个子阶段可被重复至少一次。
10.根据权利要求9的方法,其中重复所述一个或多个子阶段取决于以所述程序序列发生的预定事件。
11.根据前述权利要求任何一项的方法,其中所述运行程序在激活和空闲状态之间周期性地切换,并且,当所述程序切换到其激活状态时,除了别的事情以外,所述过程还能方便地计算一个或多个时间点。
12.一种用于执行自动化设备的控制单元中的控制程序,尤其是用于完成根据前述权利要求任何一项的方法的运行时系统,包括用于读写存储器内容的装置,其中所述控制单元具有可定址的存储器,并且,控制程序被以第一中间代码的形式可恢复地保存于第一存储区中;当在所述自动化设备中运行所述进程时,至少部分所述第一中间代码可以被转换为可执行的控制命令保存于第二存储区中;所述运行时系统响应于被分配在第三存储区中的第二中间代码的提供,从而修改所述自动化设备中的所述进程顺序。
13.根据权利要求12的运行时系统,其特征另外在于所述自动化设备中的操作序列通过以下方式被修改的事实通过选择所述第三存储区中的至少一个分区,和所述第二存储区中的至少一个存储单元,其中存储了所述第二存储区的一个分区的起始地址,通过对存储在所述第一存储区中的所述第一中间代码和存储在所述第三存储区中的所述第二中间代码进行比较;通过将存储在所述第三存储区的所述分区中的所述中间代码转换为可执行的控制命令,这些可执行控制命令又被存储在第四存储区中;通过将来自所述第二存储区的所述分区的数据复制到所述第三存储区的所述分区中;以及通过将所述第四存储区的所述起始地址存储在所述第二存储区的所述存储单元中。
14.根据权利要求12的运行时系统,其中所述运行时系统是CLR系统,更明确讲是eCLR系统。
15.根据前述权利要求任何一项的运行时系统,其中所述中间代码是包含对类结构的完整描述的CIL或MSIL中间代码。
16.根据前述权利要求任何一项的运行时系统,其中所述运行时系统借助于JIT编译器将中间代码转换为可执行的控制命令。
17.根据前述权利要求任何一项的运行时系统,包括一种用于产生、存储和执行控制命令的装置。
18.根据前述权利要求任何一项的运行时系统,其在给定时段内以自动化设备的进程顺序进行修改。
19.根据前述权利要求任何一项的运行时系统,包括一种用于计算以自动化设备的进程顺序进行修改所需的周期的装置。
20.根据前述权利要求任何一项的运行时系统,其中运行目的是实现以自动化设备的进程顺序进行修改的所述例程可以被全部或部分地重复。
21.一种包括根据前述权利要求任何一项的运行时系统的自动化系统,其适合于执行前述过程之一。
全文摘要
为完成对运行中的面向对象的程序,尤其是用于控制自动化设备的程序的修改,本发明提供一种过程,其中该程序被以中间代码的形式临时存储于存储器中,中间代码在运行时可以被转换为可执行的机器代码,该过程包括提供形式也为中间代码的修改程序或修改程序模块;对该修改程序的中间代码或修改程序模块的中间代码和运行程序的中间代码进行比较,以确定所述修改;以及对运行程序完成所述修改。另外,本发明提供相应改编的运行时系统,该系统适于完成该过程,以及将这个运行时系统合并到自动化设备中。
文档编号G05B19/05GK1580994SQ20041005882
公开日2005年2月16日 申请日期2004年7月30日 优先权日2003年8月1日
发明者迈克尔·皮蒂格, 斯蒂芬·施莱特, 汉诺·利万多韦斯基 申请人:Kw-软件有限公司