用于通过控制程序的程序状态的数据迁移对自动化系统的控制程序进行更新的方法与流程

文档序号:30876456发布日期:2022-07-23 15:19阅读:111来源:国知局
用于通过控制程序的程序状态的数据迁移对自动化系统的控制程序进行更新的方法与流程
用于通过控制程序的程序状态的数据迁移对自动化系统的控制程序进行更新的方法
1.交叉引用
2.本专利申请要求保护德国专利申请de102019134373.9的优先权,该文献的公开内容因此通过引用包括在其中。
技术领域
3.本发明涉及一种用于通过同时迁移描述控制程序的程序状态的数据来更新自动化系统的控制程序的方法。


背景技术:

4.在自动化技术中,自动化系统的用户通常通过控制自动化系统借助周期地执行相应的控制程序来操控和读取。对于根据控制程序的相应的控制指令控制相应用户的每个周期,由控制器接收和存储描述自动化系统和控制程序的状态的信息。所谓的全局状态包括再现自动化系统和控制程序的状态所需的完整信息。全局状态例如可以包括在控制程序中使用的变量、函数、数据库或其它对象。全局状态还可以包括关于自动化系统的用户或关于在自动化系统中运行的过程的信息。
5.这种全局状态可以在每个控制周期结束之后重新建立,从而可以在任何情况下再现自动化系统和控制程序的当前状态。全局状态是相应的全局存储区域的内容。在执行控制程序的一个周期期间,存储器可以(必要时多次)改变。因此,随着存储器的每次改变,状态可以改变。在此,可能出现无效的中间状态。在周期的末尾,全局状态是一致的并且保持直到下一个执行周期的开始。
6.在接下来的控制周期中再次执行控制程序时,控制程序能够采用全局状态下存储的数据并且因此基于在先的控制周期的自动化系统状态在接下来的周期中继续控制自动化系统。
7.在自动化系统的连续运行中经常出现如下情况,在所述情况中必须再调节不同的参数或改变或调整流程,以便能够实现或保证自动化系统的运行的优化的流程。就此而言,在连续运行中通常需要用考虑必要调整的更新版本替换当前执行的控制程序。为了能够在替换之后避免自动化系统的重新启动并且取而代之地能够在当前状态中继续运行自动化系统,控制程序的当前版本必须能够访问全局状态的信息,该全局状态信息描述在上次执行的控制周期的时间点控制程序和自动化系统的状态。只有这样才能确保,随着执行控制程序的当前版本,自动化系统接着自动化系统的当前状态继续被控制并且可以避免自动化系统的完全重新启动。
8.现在,如果控制程序的当前版本的改变涉及在全局状态下存储的信息,则是有问题的。例如,在控制程序的当前版本中,变量可以被重命名、删除或添加,或者控制程序的对象的数据类型可以改变。这种改变或修改现在会防止控制程序的当前版本直接访问全局状态的信息,因为被更新的控制程序的变量或对象与在全局状态下存储的对象之间的关联可
能被破坏。
9.换句话说,控制程序的可执行代码可以以全局状态的特定结构为前提,例如变量位于相应的存储器的哪个相对位置处并且如何解释那里的存储器的内容。
10.因此,需要将全局状态的信息匹配于控制程序的当前版本以及其中进行的改变,从而在成功匹配的情况下,当前的控制程序可以访问全局状态的信息并且可以在其当前状态下操控自动化系统。


技术实现要素:

11.因此,本发明的任务是,提供一种用于通过同时传递当前程序状态来更新自动化系统的控制程序的改进的方法。
12.该任务通过一种根据独立权利要求的方法来解决。在从属权利要求中给出优选的实施方式。
13.根据本发明的第一方面提供一种用于通过控制程序的程序状态的数据迁移对自动化系统的控制程序进行更新的方法,其中,自动化系统的控制器包括第一控制程序和第二控制程序,其中,用于控制自动化系统的所述第一控制程序周期地执行,其中,所述第二控制程序是所述第一控制程序的更新,其中,所述第一控制程序包括描述第一控制程序的程序状态并且存储在所述控制器的第一存储区域中的第一数据类型的第一数据元素,并且其中,所述第二控制程序包括描述第二控制程序的程序状态且存储在第二存储区域中的第二数据类型的第二数据元素,该方法包括:在第一生成步骤中生成用于将所述第一数据元素映射到所述第二数据元素上的第一迁移函数,在中断步骤中中断第一控制程序的周期执行,在第一确定步骤中确定第一数据元素的值,其中,第一数据元素的确定的值描述在所述中断时刻控制程序的程序状态,并且在迁移步骤中通过执行第一迁移函数将第一数据元素的值映射到第二数据元素上。
14.由此实现的技术优点是,可以提供一种用于更新自动化系统的控制程序的改进的方法,利用该方法可以同时实现控制程序的程序状态的数据迁移。该方法能够在自动化系统的连续运行中实现用控制程序的更新版本替换用于周期地操控自动化系统的控制程序。
15.为此,在自动化系统的控制器的存储器中存储有第一控制程序和第二控制程序,所述第一控制程序在执行用于控制自动化系统的方法的时刻被周期地调用并且执行,所述第二控制程序可以是第一控制程序的更新版本并且应当替换第一控制程序。第一控制程序还包括第一数据元素,该第一数据元素存储在存储器的第一存储区域中并且描述自动化系统和第一控制程序的状态。
16.第二控制程序可以是第一控制程序的更新版本并且包括以更新的形式改变第一控制程序。替代地,第二控制程序可以是第一控制程序的较旧的版本,该版本不同于第一控制程序的当前版本。替代地,第二控制程序可以是独立编程的控制程序,该控制程序不是必须基于第一控制程序。
17.所述第一数据元素可以构造为复杂的数据结构并且包括多个对象并且描述第一控制程序和自动化系统的全局状态。
18.对象是接下来的数据对象或控制程序的对象并且可以同样具有复杂的数据结构并且包括复杂的信息内容。所述全局状态通过由第一数据元素包括的对象形成并且包括用
于控制自动化系统所需的全部信息。
19.在第二存储区域中存储有第二控制程序,该第二控制程序可以是第一控制程序的更新版本并且用作第一控制程序的替代品。第二控制程序包括第二数据元素,在该第二数据元素中可以存储有关于第二控制程序的全局状态的信息。而第二数据元素可以具有复杂的数据结构并且包括多个在第二控制程序中定义的对象。由所述对象或第二数据元素包括的信息描述第二控制程序的全局状态。
20.为了通过第二控制程序替换第一控制程序并且为了将第一控制程序的全局状态转移到第二控制程序中,在第一生成步骤中生成第一迁移函数。所述第一迁移函数用于将第一数据元素映射到第二数据元素上并且因此将关于第一控制程序的全局状态的信息转化成第二控制程序的命名,或者说将第一控制程序的全局状态的信息这样表述为第二控制程序的在第二数据元素中存储的对象,使得第二状态的解释或意义在很大程度上对应于第一状态。
21.在中断步骤中中断第一控制程序的周期执行,并且在第一确定步骤中接着确定第一数据元素的值。在中断第一控制程序的周期执行时,将在中断第一控制程序的周期执行的时刻的关于第一控制程序和自动化系统的全局状态的信息存储在第一数据元素中。因此,第一数据元素的值描述在中断第一控制程序的周期执行的时刻或者说在最近执行的控制周期结束的时刻或之后的自动化系统的全局状态。
22.周期地执行第一控制程序的中断可以在一个控制周期期间、两个控制周期之间、在一个控制周期开始之前或在一个控制周期结束之后实施。
23.在迁移步骤中,接着通过执行第一迁移函数将第一数据元素的值映射到第二数据元素上。所述第一迁移函数为此读取第一数据元素的值并且将所读取的值写入第二数据元素。所述第一迁移函数因此将第一数据元素的值映射到第二控制程序的值上并且将所读取的值写入第二数据元素。
24.通过将第一数据元素的描述在最近执行的控制周期的时刻第一控制程序和自动化系统的全局状态的值映射到第二数据元素上,实现了可以将第一控制程序的全局状态转移到第二控制程序中。如果在接着的步骤中自动化系统通过执行第二控制程序被操控,则第二控制程序可以访问在最近执行的控制周期的时刻自动化系统的全局状态的信息,该信息通过迁移步骤被映射到第二数据元素上,并且自动化系统可以基于第二控制程序在最近执行的控制周期的状态下无缝地被控制。
25.通过将全局状态转移到第二控制程序中,可以基于第二控制程序在最近执行的控制周期的状态下继续对自动化系统的控制,并且避免使得第一控制程序的全局状态的信息丢失并且自动化系统的每个过程必须重新启动并且所述控制以起始状态开始的对自动化系统的重新启动。
26.因此,能够实现自动化系统的基于第一控制程序的控制与基于第二控制程序的控制之间的流畅过渡,而不会出现自动化系统的实质的停止运转。优选地,可以在两个依次相继的控制周期之间的中断之内进行用第二控制程序替换第一控制程序,从而可以完全避免自动化系统的停止运转。
27.通过在基于第一控制程序最近执行的控制周期的时刻在数据迁移之后将第一控制程序a和自动化系统的全局状态映射到第二存储区域中的第二数据元素上,全局状态存
储在第二数据元素中,没有不可用的存储器间隙。第二数据元素在第二存储区域中形成连续的区域,在该区域中第二数据元素的所有对象紧密地打包并且没有设置不可用的存储器间隙。通过在迁移步骤中在基于第一控制程序a最近执行的控制周期的时刻将第一控制程序a和自动化系统的全局状态逐个对象地映射到第二数据元素的相应的对象上,全局状态在成功数据迁移之后作为连续的单元存储在第二数据元素中。因为全局状态通过数据迁移在新的存储区域中完全地重新建立,而不是一方面附带第一数据元素的对象并且另一方面调节在第一数据元素当中的对象的使用,所以可以防止存储区域的碎片化。
28.第一数据元素和第二数据元素可以在下文中具有复杂的数据结构,该数据结构分别包括多个分量或对象,它们又可以是复杂的数据类型。第一数据元素描述第一控制程序和自动化系统的全局状态并且因此包括用于描述自动化系统或第一控制程序所处的相应的状态所需的信息。第二数据元素设计成描述第二控制程序和自动化系统的全局状态。在实施该方法的时刻,第二数据元素可以已经包括在第二控制程序中定义的所有对象。
29.全局状态可以包括控制程序所需的所有变量或以不同的方式构造的对象,以便操控自动化系统。在全局状态下,控制程序的各个对象可以包括相应的值或测量值,这些值或测量值通过自动化系统的运行产生并且描述自动化系统的各个状态。
30.数据迁移在下文中是从第一存储区域向第二存储区域传输数据。除了读取第一存储区域中的数据和将数据写入第二存储区域之外,数据迁移可以包括对相应数据类型的转换。因此,在数据迁移的过程中,第一存储区域中的第一数据类型的数据可以被转换成第二数据类型的数据并且存储在第二存储区域中。
31.根据一个实施方式,该方法还包括:
32.在第一检查步骤中检查第一数据元素的值是否能够足够精确地映射到第二数据元素上,其中,如果第一数据元素的值能够在第二数据类型中描述,则第一数据元素的值能够足够精确地映射到第二数据元素上,如果第一数据元素的值不能映射到第二数据元素上,则在第一控制步骤中在考虑第二数据元素的情况下继续周期地调用第二控制程序并且基于第二控制程序控制自动化系统,并且如果第一数据元素的值不能映射到第二数据元素上,则在第二控制步骤中在考虑第一数据元素的情况下继续周期地调用第一控制程序并且基于第一控制程序控制自动化系统。
33.由此实现的技术优点是,可以提供一种用于通过对控制程序的程序状态的同时数据迁移来更新控制程序的方法,在该方法中如果不能得到令人满意的结果,可以中断程序状态的数据迁移,并且在该方法中在中断数据迁移之后可以基于原始的控制程序和与之相关的程序状态继续对自动化系统的控制。
34.在第一检查步骤中检查第一数据元素的值是否能够足够精确地映射到第二数据元素上。如果第一数据元素的数据类型和第二数据元素的数据类型在通过转换实质上没有改变第一数据元素的值的信息内容的情况下不能彼此转换,则可能妨碍将第一数据元素足够精确地映射到第二数据元素上。
35.在检查步骤中的检查可以根据第一数据元素和第二数据元素的数据类型变化。如果第一数据元素和第二数据元素例如是标量的数据类型,则实施明确的检查。如果第一数据元素和第二数据元素是复合类型或字段类型,则间接实施检查,其方式为检查复合类型的分量或字段类型的元素是否能足够精确地彼此映射,只要它们是标量的数据类型。如果
它们不能足够精确地彼此映射,则第一数据元素和第二数据元素也不能足够精确地彼此映射。如果复合类型的分量或字段类型的元素又是复合类型或字段类型,则对于检查考虑其分量或元素。因此,在检查时移动直到复合类型的分量或字段类型的元素具有标量的数据类型为止。
36.在下文中,如果原始数据元素的信息内容通过映射而改变,则数据元素被视为不能足够精确地彼此映射。替代地,如果通过所述映射使原始数据元素的信息内容严重改变,使得改变后的信息内容不能用于进一步考虑,则数据元素也可以视为不能足够精确地彼此映射。这必要时可以在个别情况下决定。
37.在下文中,具有复合类型的数据类型的数据元素和具有字段类型的数据类型的数据元素被认为不能足够精确地彼此映射。此外,具有复合类型的数据类型的数据元素和具有标量类型的数据类型的数据元素被认为不能足够精确地彼此映射。此外,字段类型的数据类型的数据元素和标量类型的数据类型的数据元素被认为不能足够精确地彼此映射。此外,标量类型的数据类型的两个数据元素同样不能足够精确地彼此映射。
38.此外,除了由于不同类型的数据类型而使得第一数据元素不能足够精确地映射到第二数据元素上的情况之外,如果尽管是原则上兼容的数据类型,但是第二数据元素的数据类型不适于完全表达第一数据元素的值,则足够精确的映射可能失败。例如,如果第一数据元素的数据类型是16位无符号整数并且第二数据元素的数据类型是8位无符号整数,并且第一数据元素中存储有例如1000的值,则该1000的值可能不能由最大数值为255的第二数据元素的8位无符号整数完全表示。除了第一数据元素和第二数据元素的数据类型以及两种数据类型的相应的兼容性之外,在第一检查步骤中附加地检查第一数据元素的值是否能够通过第二数据元素的数据类型描述。如果第一数据元素的实际值不能完全地或者不能以所要求的精度在第二数据元素的数据类型中描述,则第一数据元素和第二数据元素不能足够精确地彼此映射。
39.如果在检验步骤中识别出,可以将第一数据元素的值足够精确地映射到第二数据元素上,则在第一控制步骤中在考虑迁移步骤中第一数据元素的值所映射的第二数据元素的情况下周期地调用第二控制程序,以便控制自动化系统。由此,成功地用第二控制程序替换第一控制程序,并且通过描述第一控制程序以及与之相关联的自动化系统的程序状态或全局状态的第一数据元素的成功数据迁移,在用第二控制程序替换第一控制程序之后,能够使自动化系统基于第二控制程序在当前状态下继续运行。
40.通过成功地数据迁移并且将第一数据元素的值足够精确地映射到第二数据元素上,第二控制程序可以访问存储在第二数据元素中的、与第一控制程序的全局状态相关的信息并且从该状态出发操控自动化系统。因此,可以避免在更新控制程序之后重新启动自动化系统,因为关于自动化系统的全局状态的信息可以通过成功的数据迁移转化成第二控制程序的命名并且因此第二控制程序可以访问自动化系统的全局状态的信息。
41.而如果在检查步骤中确定,第一数据元素的值不能足够精确地映射到第二数据元素上,则在第二控制步骤中在考虑第一数据元素的情况下继续周期地调用第一控制程序。如果全局状态数据迁移失败并且无法将第一数据元素的值足够精确地映射到第二数据元素上,则舍弃第一控制程序的更新并且在考虑到原始的全局状态的情况下基于未改变的第一控制程序来操控自动化系统。由此可以避免由于全局状态的错误的数据迁移或第一数据
元素的值到第二数据元素的错误映射而必须中断自动化系统的运行。
42.由于第一控制程序和第一数据元素存储在第一存储区域中并且第二控制程序和第二数据元素存储在第二存储区域中,第一控制程序和第一数据元素都不受数据迁移以及将第一数据元素的值映射到第二数据元素的影响并且在成功数据迁移之后和数据迁移失败之后都继续可供使用。因此实现了在全局状态的数据迁移失败的情况下或第一数据元素的值到第二数据元素的错误映射的情况下,随时可以调用原始的第一控制程序和存储在第一数据元素中的第一控制程序和自动化系统的全局状态并且由此可以继续对自动化系统的控制。因此,可以避免自动化系统的停止运转或自动化系统的重新启动。可以在稍后的时刻利用第一控制程序的全局状态的数据迁移来重新更新第一控制程序。
43.根据一个实施方式,如果在迁移步骤中第一数据元素的值到第二数据元素上的映射超过预定的时间区段,则第一数据元素的值还不能足够精确地映射到第二数据元素上。
44.由此实现这样的技术优点,即可以避免自动化系统的较长的停止运转。如果迁移步骤超过预定的时间区段,则在第二控制步骤中在考虑第一数据元素的情况下继续周期地调用第一控制程序,以便控制自动化系统。如果存储在第一数据元素中的全局状态的数据迁移在预定的时间窗内不能成功进行,则舍弃通过第二控制程序对第一控制程序的更新并且舍弃第一控制程序的全局状态的与之相关的数据迁移并且基于第一控制程序和存储在第一数据元素中的全局状态继续对自动化系统的控制。因此,可以确保自动化系统的连续运行。
45.根据一个实施方式,该方法还包括:
46.在第二检查步骤中检查是否能够在第一生成步骤中生成第一迁移函数,并且如果在第一生成步骤中不能生成第一迁移函数,则在第二控制步骤中在考虑第一数据元素的情况下继续周期地调用第一控制程序并且基于第一控制程序控制自动化系统。
47.由此实现这样的技术优点,即在存储在第一数据元素中的全局状态的数据迁移有错误或不完全的情况下,可以基于第一控制程序和存储在第一数据元素中的全局状态继续对自动化系统的控制。如果检查步骤得出不能生成用于将第一数据元素映射到第二数据元素上的第一迁移函数,则在第二控制步骤中在考虑第一数据元素的情况下基于第一控制程序继续对自动化系统的控制。
48.如果第一数据元素不能足够精确地映射到第二数据元素上,则在第一生成步骤中生成第一迁移函数可能尤其是失败的,因为第一数据元素和第二数据元素分别具有不同的数据类型,这些数据类型不能足够精确地相互转换,而不会引起对由第一数据元素所包括的信息内容的实质修改。
49.因此,如果第一数据元素和第二数据元素具有两种由于相应数据类型的性质而不能足够精确地相互映射的数据类型,则在第二检查步骤之后中止数据迁移并且在第二控制步骤中基于第一控制程序和第一数据元素继续对自动化系统的控制。由此又可以避免由于自动化系统的存储在第一数据元素中的全局状态的数据迁移失败而必须中断自动化系统的运行。
50.根据一个实施方式,所述第一迁移函数设计成读取第一存储区域中的第一数据类型的数据,将读取的第一数据类型的数据转换成第二数据类型的数据,并且将转换成第二数据类型的数据存储在所述第二存储区域中,并且其中,所述迁移步骤包括:在第一读取步
骤中通过第一迁移函数读取在第一存储区域中的第一数据元素的位置处的第一数据元素的值,在第一转换步骤中通过第一迁移函数将第一数据元素的值转换成第二数据类型,并且在第一写入步骤中通过第一迁移函数将第一数据元素的转换成第二数据类型的值写入第二存储区域中的第二数据元素的位置。
51.由此实现这样的技术优点,即可以在迁移步骤中确保将第一数据元素可靠地映射到第二数据元素上。第一迁移函数构造成将第一数据元素的第一数据类型的数据映射到第二数据元素的第二数据类型的数据上。在此,第一迁移函数读取第一存储区域中的存储有第一数据元素的位置处的第一数据元素的值,必要时将所读取的第一数据元素的值转换为第二数据元素的第二数据类型,并且将转换后的值写入第二存储区域中的存储有第二数据元素的位置。如果第一数据元素和第二数据元素具有相同的数据类型,则取消对第一数据元素的所读取的值的转换,并且第一迁移函数将所读取的值直接存储在第二存储器区域中的相应位置处。在第一和第二数据元素的数据类型相同时,第一数据元素的值可以逐块地在第二存储区域中的第二数据元素的位置处复制。这可以加速迁移过程。尤其是,逐块复制在具有大的存储空间需求的字段类型和/或复合类型中是有利的。
52.第一迁移函数的特征在于,只要第一数据类型的数据足够在第二数据类型中表示,则第一数据元素的第一数据类型的任意数据可以映射到第二数据元素的第二数据类型的允许的数据上。因此,第一迁移函数不限于将第一数据元素映射到第二数据元素上,而是可以用于第一数据类型的任何不同数据元素和第二数据类型的数据元素。对于将第一数据类型的多个数据元素映射到第二数据类型的多个数据元素上的情况,可以将第一迁移函数再次用于第一数据类型的数据元素到第二数据类型的数据元素的每个映射。
53.第一迁移函数不需要总是满射的。例如,如果变量的类型从8位整数改变为16位整数,则数据迁移可能不会产生数据,尽管这是第二类型的有效值。
54.然而,第一迁移函数始终提供图像区域的值,即目标类型的有效值。对于n位整数类型,虽然每个n位的序列都是有效整数,但是对于浮点类型可能存在与浮点数无关联的无效位序列。相同的内容可以适用于子域类型,即具有有意限制的值域的整数类型。
55.如果目标类型不能足够精确地描述源类型的所有值,则迁移函数的定义域可能是有限的。因此,迁移函数不能应用于第一数据类型的所有数据。替代地,迁移函数可以应用于所有源类型的数据,但在运行时必要时可能拒绝数据的彼此映射。
56.由此实现的优点是,在第一生成步骤中仅须生成第一迁移函数。由此,即使对于在将多个第一数据元素映射到多个第二数据元素上的情况仍可以实质上加速该方法,其方式为对于将各个第一数据元素映射到相应的第二数据元素上仅分别重新调用并且执行设计成这种映射的第一迁移函数。
57.尤其是,可以节省用于记录迁移函数的程序存储器。结果是可以减少生成时间、翻译时间和充电时间。此外,通过高速缓存(cache-effekte),在典型的处理器中的较小代码大小可以对迁移时间产生有利影响。
58.因此,可以省去生成用于映射多个第一和第二数据元素的多个第一迁移函数。
59.根据一个实施方式,所述第一生成步骤还包括:在第一识别步骤中将第一数据元素的数据类型识别为第一数据类型并且将第二数据元素的数据类型识别为第二数据类型,其中,第一迁移函数基于所识别的第一数据类型和所识别的第二数据类型生成。
60.由此实现这样的技术优点,即可以生成单独匹配于第一和第二数据元素的第一和第二数据类型的第一迁移函数。通过在第一生成步骤中识别第一数据元素的第一数据类型和第二数据元素的第二数据类型,可以将第一迁移函数设置成,将第一数据类型的数据映射到第二数据类型的数据上。
61.此外,通过在第一识别步骤中识别第一和第二数据元素的第一和第二数据类型,可以确保在第二检查步骤中可以检查是否能够生成将第一数据类型的数据映射到第二数据类型的数据上的第一迁移函数。在识别第一数据类型和第二数据类型期间可以分析第一数据类型是否能够足够精确地映射到第二数据类型上或者说第一数据类型是否能够足够精确度地转换成第二数据类型。
62.此外实现了,对于任意第一数据类型的任意数据元素和任意第二数据类型的任意第二数据元素,通过在第一标识步骤中对每个第一数据元素和每个第二数据元素识别相应的第一数据类型和第二数据类型,可以生成第一数据类型的数据到第二数据类型的数据上的相应的第一迁移函数。这样生成的第一迁移函数不限于第一和第二数据元素二者,而是一般可应用于第一和第二数据类型的数据元素。由此限制了所需迁移函数的数量并且实现了所生成的迁移函数的可再利用性。
63.根据一个实施方式,所述第一生成步骤还包括:如果第一数据元素的第一数据类型和第二数据元素的第二数据类型分别是复合类型,并且如果第一数据元素包括第三数据类型的至少一个第一数据子元素并且第二数据元素包括第四数据类型的至少一个第二数据子元素,则在第二识别步骤中将第一数据子元素的数据类型识别为第三数据子类型并且将第二数据子元素的数据类型识别为第四数据类型,在第二生成步骤中生成用于基于所识别的第三数据类型和所识别的第四数据类型将第一数据子元素映射到第二数据子元素上的第二迁移函数,其中,该第二迁移函数设计成读取第一存储区域中的第三数据类型的数据元素,将所读取的第三数据类型的数据转换成第四数据类型并且将转换成第四数据类型的数据存储在第二存储区域中。
64.由此实现这样的技术优点,即对于分别是复合类型的第一和第二数据元素能够实现存储在第一数据元素中的全局状态的足够精确的数据迁移。
65.在实践中,通常分别描述第一控制程序和第二控制程序的全局状态的第一数据元素和第二数据元素是复合类型的数据类型并且包括多个对象或下级的数据元素或数据子元素。在此,相应第一和第二数据元素的各个数据子元素可以分别是各个变量、复杂的数据对象或相应的第一和第二控制程序的其它对象。
66.如果第一数据元素和第二数据元素分别是复合类型并且第一数据元素包括至少一个第一数据子元素并且第二数据元素包括至少一个第二数据子元素,则在第二识别步骤中识别第一数据子元素的数据类型和第二数据子元素的数据类型。
67.在识别第一数据子元素和第二数据子元素的数据类型之后,在第二生成步骤中生成第二迁移函数,以用于将第一数据子元素映射到第二数据子元素上。第二迁移函数设计成将第一数据子元素的数据类型的任意数据映射到第二数据子元素的数据类型的任意数据上。在此,第二迁移函数设计成读取第一存储区域中的第一数据子元素的数据类型的相应数据元素,将所读取的数据转换为第二数据子元素的数据类型,并且将转换后的数据存储在第二存储区域中。在第一数据元素和第二数据子元素是相同数据类型的情况下,取消
转换,并且第二迁移函数读取第一存储区域中的第一数据子元素的数据类型的数据并且将其存储在第二存储区域中。在第一和第二数据子元素的数据类型相同时,第一数据子元素的值可以逐块地在第二存储区域中的第二数据子元素的位置处复制。这可以加速迁移过程。
68.类似于第一迁移函数,第二迁移函数也不限制于将第一数据子元素映射到第二数据子元素上。相反地,第二迁移函数设计成将第三数据类型的任意数据元素映射到第四数据类型的任意数据元素上。这具有如下优点,在将分别是相同数据类型的多个第一数据子元素映射到同样彼此具有相同数据类型的多个第二数据子元素上时,仅需要生成第二迁移函数。然后可以通过重复调用并且将第二迁移函数应用在第一数据子元素和第二数据子元素上来实现多个第一数据子元素到多个第二数据子元素的映射。
69.由此,通过仅需要生成少量的第一和第二迁移函数又能够实现全局状态的迁移的时间加速,多个第一和第二数据元素或第一和第二数据子元素可以借助所述迁移函数分别彼此映射。尤其是,例如当两对第一和第二数据子元素中两个第一数据元素具有相同的数据类型并且两个第二数据元素分别具有相同的数据类型时,可以实现节省迁移代码。在这种情况下,为了数据迁移,所述两对仅需要生成第二迁移函数。此外,可以节省用于记录迁移函数的程序存储器。结果是可以减少生成时间、翻译时间和充电时间。此外,通过高速缓存(cache-effekte),在典型的处理器中的较小代码大小可以对迁移时间产生有利影响。
70.根据一个实施方式,所述第一生成步骤还包括:
71.在第三识别步骤中识别第一数据子元素与第二数据子元素之间的第一关系,该第一关系能够实现第一数据子元素与第二数据子元素之间的对应关联。
72.由此实现了精确且快速的迁移的技术优点。通过所述关系陈述哪个第一数据子元素将被映射到哪个第二数据子元素上,所识别的关系可以被考虑用于将第一数据子元素映射到第二数据子元素上。此外,数据子元素与数据子元素在存储区域中的位置信息之间的关系可被用于确定第二数据子元素位于第二存储区域中的哪个相对位置处。
73.在第三识别步骤中,还确定第一数据子元素与第二数据子元素之间的第一关系。所述第一关系能够实现第一数据子元素与第二数据子元素之间的足够精确的对应关联并且至少在第一数据子元素和第二数据子元素相同地命名时存在。
74.第一数据子元素与第二数据子元素之间的所识别的关系能够实现相应的元素之间的对应关联,由此可以确定哪些第一数据子元素需要被映射到哪些第二数据子元素上,以用于全局状态的数据迁移。为了在数据迁移时能够确保第一数据元素中的全局状态的信息内容通过映射到第二数据元素上而保持不变,仅将第一数据元素映射到第二数据元素上,对于所述第二数据元素而言,第一数据元素与第二数据元素之间存在关系。第一数据元素与第二数据元素之间的所识别的关系确保分别相关的第一数据元素和第二数据元素根据第一控制程序和第二控制程序具有相同的功能和意义。通过关系彼此关联的数据子元素仅彼此映射。由此可以实现足够精确的数据迁移。
75.在数学意义上,对于分别是复合类型的一对数据元素,可以存在将其中一个数据元素的分量与相应另一个数据元素的分量相关的两位数的关系。
76.在此,在两个数据元素中可以给定不与相应另一个数据元素的分量不相关的分量。其中一个数据元素的分量可以仅最多与相应另一个数据元素的分量相关。在形式上,所
述关系可以是将其中一个数据元素的分量与相应另一个数据元素的分量相关联的部分函数。
77.根据一个实施方式,所述迁移步骤包括:在第一部分迁移步骤中,通过第一迁移函数调用第二迁移函数并且执行第二迁移函数,用于将第一数据子元素的值映射到第二数据子元素上,其中,所述第一部分迁移步骤包括:在第二读取步骤中通过第二迁移函数读取在第一存储区域中的第一数据元素的位置处的第一数据元素的值,在第二转换步骤中通过第二迁移函数将第一数据元素的值转换成第四数据类型,并且在第二写入步骤中通过第二迁移函数将第一数据元素的转换成第四数据类型的值写入第二存储区域中的第二数据元素的位置。
78.由此实现这样的技术优点,即通过将第一数据元素的第一数据子元素足够精确地映射到第二数据元素的对应的第二数据子元素上,实现了全局状态的足够精确的迁移。
79.为此,在部分迁移步骤中,通过第一迁移函数调用第二迁移函数,用于将第一数据子元素的值映射到第二数据子元素上。在调用了用于将第一数据元素映射到第二数据元素上的第一迁移函数并且识别出第一数据元素包括至少一个第一数据子元素并且第二数据元素包括与第一数据子元素相关的至少一个第二数据子元素之后,为了将第一数据子元素映射到第二数据子元素上,通过第一迁移函数调用并且执行第二迁移函数。
80.为此,可以首先确定第一数据子元素的存储地址和第二数据子元素的存储地址。这可以通过第一迁移函数来实施。在调用第二迁移函数时,第一数据子元素的存储地址和第二数据子元素的存储地址可以从第一迁移函数被传递给第二迁移函数。
81.为了将第一数据子元素映射到第二数据子元素上,第二迁移函数从第一存储区域起读取第一数据子元素的值,将该值必要时转换为第二数据子元素的数据类型,并且将所读取的值以及必要时转换后的值写入第二存储区域中的第二数据子元素的位置。如果第一数据子元素和第二数据子元素分别具有相同的数据类型,取消所读取值的转换,并且第二迁移函数将所读取的第一数据子元素的值直接写入第二存储区域中的第二数据子元素的位置。
82.如果第一数据元素包括多个第一数据子元素并且第二数据元素包括多个第二数据子元素,其中,第一数据子元素分别是相同的第三数据类型,并且第二数据子元素分别是相同的第四数据类型,其中,存在多对第一数据子元素和第二数据子元素,在其之间存在关系,则通过第一迁移函数多次调用第二迁移函数,以便将所述第一数据子元素和第二数据子元素的对中的每对彼此映射。
83.如果第一数据元素包括不同数据类型的多个第一数据子元素并且第二数据元素包括不同数据类型的多个第二数据子元素,则对于其之间存在关系的所述第一数据子元素和第二数据子元素的对中的每对生成第二迁移函数,。为了迁移全局状态并且将第一数据子元素映射到与之相关的第二数据子元素上,通过第一迁移函数依次调用并且执行分别相关的第二迁移函数,以便将第一数据子元素成对地映射到与之分别相关的第二数据子元素上。
84.通过利用第一迁移函数依次调用并且执行第二迁移函数,能够又在时间上加速用于全局状态的数据迁移的方法。尤其是,例如当两对第一和第二数据子元素具有相同的数据类型并且两个第二数据元素分别具有相同的数据类型时,可以实现节省迁移代码。在这
种情况下,为了数据迁移所述两对,仅需要生成一个第二迁移函数,该第二迁移函数然而执行了两次。此外,可以节省用于记录迁移函数的程序存储器。结果是可以减少生成时间、翻译时间和充电时间。此外,通过高速缓存(cache-effekte),在典型的处理器中的较小代码大小可以对迁移时间产生有利影响。
85.通过在第一部分迁移步骤中通过第一迁移函数调用第二迁移函数又可以降低全局状态的数据迁移的复杂度。
86.根据一个实施方式,所述第一部分迁移步骤包括:如果第一数据元素的第一数据类型和第二数据元素的第二数据类型分别是复合类型,并且如果第一数据子元素的第三数据类型和第二数据子元素的第四数据类型是相同的标量类型,在第二读取步骤中通过第二迁移函数读取在第一存储区域中的第一数据元素的位置处的第一数据子元素的值,并且在第二写入步骤中通过第二迁移函数将所读取的值写入第二存储区域中的第二数据元素的位置。
87.由此实现这样的技术优点,即可以实现全局状态的数据迁移的加速。在第一和第二数据元素分别是复合类型并且包括至少一个第一数据子元素和第二数据子元素的情况下,以及在第一和第二数据子元素是相同的标量类型的情况下,第一数据子元素到第二数据子元素的映射限制为通过第二迁移函数读取第一存储区域中的第一数据子元素的值并且通过第二迁移函数将所读取的值写入第二存储区域中的第二数据子元素的位置。
88.由此实现这样的技术优点,即在数据类型相同的情况下、尤其是在标量类型相同的情况下,通过将存储在第一存储区域中的第一数据子元素的值逐块地复制到第二存储区域的分别相应的位置中来实现第一和第二数据子元素的映射。由此可以实现全局状态的迁移过程的显著加速。对于将第一存储区中的第一数据子元素的值逐块地复制到第二存储区中的相应位置上,一个第二迁移函数或多个第二迁移函数读取第一存储区中的第一数据子元素的值并且将所读入的值直接写入第二存储区中的相应位置。不需要附加的转换步骤。
89.根据一个实施方式,所述第一生成步骤还包括:如果第一数据子元素的第三数据类型和第二数据子元素的第四数据类型是复合类型,并且如果第一数据子元素包括第五数据类型的至少一个第一分量并且第二数据子元素包括第六数据类型的至少一个第二分量,则在第四识别步骤中将所述第一分量的数据类型识别为第五数据类型并且将所述第二分量的数据类型识别为第六数据类型,并且在第三生成步骤中生成用于基于所识别的第五数据类型和第六数据类型将第一分量映射到第二分量上的第三迁移函数,其中,该第三迁移函数设计成读取第一存储区域中的第五数据类型的数据,将所读取的数据转换成第六数据类型并且将转换成第六数据类型的数据存储在第二存储区域中。
90.由此实现这样的技术优点,即能够实现复杂的全局状态的灵活且可靠的数据迁移。在第一数据元素和第二数据元素分别是复合类型并且第一数据元素包括至少一个第一数据子元素并且第二数据元素包括至少一个第二数据子元素的情况下,以及在第一数据子元素和第二数据子元素同样分别是复合类型并且第一数据子元素包括至少一个第一分量并且第二数据子元素包括至少一个第二分量的情况下,在第四识别步骤中识别出第一分量的数据类型和第二分量的数据类型。
91.基于所识别的第一分量和第二分量的数据类型,在第三生成步骤中生成用于将第一分量映射到第二分量上的第三迁移函数。在此,第三迁移函数设计成读取第一存储区域
中的第一分量的第五数据类型的任意数据,将所读取的数据转换为第二分量的第六数据类型,并且将转换后的数据存储在第二存储区域中。
92.类似于第一迁移函数和第二迁移函数,第三迁移函数也不限制于将第一分量映射到第二分量上。相反地,第三迁移函数也设计成将第一分量的第五数据类型的任意数据一般映射到第二分量的第六数据类型的任意数据上。由此实现这样的技术优点,即在第一数据子元素包括多个第一分量并且第二数据子元素包括多个第二分量的情况下,并且在第一分量中的每一个具有相同的数据类型并且第二分量中的每一个具有相同的数据类型的情况下,为了将多个第一分量映射到多个第二分量上,仅需要生成第三迁移函数,该第三迁移函数构造成将第一分量的第五数据类型的数据映射到第二分量的第六数据类型的数据上。由此又实现这样的优点,即简化并且由此可在时间上缩短地实施全局状态的迁移过程。
93.尤其是,可以节省用于记录迁移函数的程序存储器。结果是可以减少生成时间、翻译时间和充电时间。此外,通过高速缓存(cache-effekte),在典型的处理器中的较小代码大小可以对迁移时间产生有利影响。
94.由于基于第一分量和第二分量的所识别的数据类型生成第三迁移函数,确保了第三迁移函数设计将第一分量的数据类型的数据映射到第二分量的数据类型的数据上。
95.第一和第二分量在下文中是数据元素或数据对象并且可以具有复杂的数据结构。
96.根据一个实施方式,所述第一生成步骤包括:
97.在第五识别步骤中识别第一分量与第二分量之间的第二关系,该第二关系能够实现第一分量与第二分量之间的足够精确的对应关联。
98.由此实现这样的技术优点,即能够实现精确的迁移。通过所述关系陈述哪个第一分量将被映射到哪个第二分量上,所识别的关系可以被考虑用于将第一分量映射到第二分量上。此外,所述分量与分量在存储区域中的位置信息之间的关系可被用于确定第二分量位于第二存储区域中的哪个相对位置处。
99.通过识别第一分量和第二分量之间的关系,又可以确保第一分量的值被唯一地映射到第二数据子元素的与第一分量相关的第二分量上。当两个分量分别相同地命名时,在此给定第一分量与第二分量之间的关系。第一数据子元素的第一分量与第二数据子元素的第二分量之间的现有关系意味着第一控制程序中的第一数据子元素的第一分量与第二控制程序中的第二数据子元素的与第一分量相关的第二分量在意义和功能上是相同的。
100.如果第一数据子元素包括多个第一分量并且第二数据子元素包括多个第二分量,则可以通过识别第一分量与第二分量之间的关系来确定要借助第三迁移函数的应用将哪些第一分量映射到哪些第二分量上。替代地,第一分量和第二分量可以通过唯一的关系彼此关联。对于识别出与第二分量之一的没有关系的第一分量不通过第三迁移函数被映射到第二数据子元素的第二分量上。同样的情况适用于对于同样识别出与第一分量之一没有关系的第二分量。没有第一数据子元素的第一分量的值被映射到这些第二分量上。如在第一和第二数据子元素的情况中,仅可识别出关系的第一分量和第二分量彼此映射。在这种情况下可以舍弃第一分量的信息。而第二分量可以被设定为初始值。
101.替代地,第一数据子元素的第一分量与第二数据子元素的第二分量之间的关系可以被相应的第一数据子元素与相应的第二数据子元素之间的第一关系所包括,从而第一数据子元素的第一分量也通过第一数据子元素与第二数据子元素之间的第一关系与第二数
据子元素的第二分量相关联。
102.替代地,第一数据子元素的多个第一分量可以通过第二关系与第二数据子元素的多个第二分量相关联。
103.根据一个实施方式,所述迁移步骤包括:
104.在第二部分迁移步骤中通过第二迁移函数调用第三迁移函数并且执行第三迁移函数,并且其中,该第二部分迁移步骤包括:在第三读取步骤中通过第三迁移函数读取在第一存储区域中的第一分量的位置处的第一分量的值,在第三转换步骤中通过所述第三迁移函数将第一分量的值转换成第六数据类型,并且
105.在第三写入步骤中通过所述第三迁移函数将第一分量的转换成第六数据类型的值写入第二存储区域中的第二分量的位置。
106.由此实现这样的技术优点,即可以提供全局状态的数据迁移的灵活且精确的迁移过程。在生成第三迁移函数之后,并且在识别第一数据子元素的第三数据类型和第二数据子元素的第四数据类型之后,并且在识别第一分量和第二分量之后,在第二部分迁移步骤中由第二迁移函数调用并且执行第三迁移函数,以便将第一数据子元素的第一分量映射到第二数据子元素的与第一分量相关的第二分量上。
107.为此,可以首先确定第一分量的存储地址和第二分量的存储地址。这可以通过第二迁移函数来实施。在调用第三迁移函数时,第一分量的存储地址和第二分量的存储地址可以从第二迁移函数被传递给第三迁移函数。
108.为了映射,第三迁移函数读取第一存储区域中的第一分量的值,将该值必要时转换为第二分量的第六数据类型,并且将转换后的值存储在第二分量在第二存储区域中的位置处。如果第一分量和第二分量具有相同的数据类型,则取消将所读取的值转换为第二分量的数据类型,并且第一分量的所读取的值被直接存储在第二存储区域中的对应的位置处。在第一和第二分量的数据类型相同时,第一分量的值可以逐块地被复制到第二存储区域中的第二分量的位置。由此可以加速迁移过程。
109.在第一数据子元素包括多个第一分量并且第二数据子元素包括多个第二分量的情况下,并且在多个第一分量与多个第二分量之间存在能够将第一分量足够精确地关联到第二分量的关系的情况下,并且在相关的第一分量和第二分量中的至少一些具有不同数据类型的情况下,为了将多个第一分量映射到多个第二分量上,调用并且执行多个第三迁移函数,其中,多个迁移函数中的每一个分别设计成将第一分量中的至少一个的第五数据类型的数据映射到第二分量中的至少一个的第六数据类型的数据上。
110.多个第三迁移函数分别由第二迁移函数依次调用并且执行,使得分别依次将第一分量映射到与第一分量相关的第二分量上。由此,可以通过将所需的迁移函数降低到最小值来实现第一控制程序的全局状态的降低复杂性并且时间上加快的迁移过程。
111.根据一个实施方式,所述第一生成步骤还包括:如果第三数据类型和第四数据类型是字段类型,如果第一数据子元素和第二数据子元素包括相同数量的维度,其中,第一数据子元素在至少一个维度上包括根据第一索引范围[u0、...、um]索引的第七数据类型的第一元素并且第二数据子元素在至少一个维度上包括根据第二索引范围[x0、...、xn]索引的第八数据类型的第二元素,并且如果第一索引范围[u0、...、um]和第二索引范围[x0、...、xn]相同,在第六识别步骤中将每个根据所述第一索引范围[u0、...、um]索引的第一元素的
数据类型识别为第七数据类型并且将每个根据所述第二索引范围[x0、...、xn]索引的第二元素的数据类型识别为第八数据类型,在第四生成步骤中生成用于基于所识别的第七数据类型和第八数据类型将第一元素映射到第二元素上的第四迁移函数,其中,该第四迁移函数设计成读取第一存储区域中的第七数据类型的数据,将所读取的数据转换成第八数据类型的值并且将转换后的数据存储在第二存储区域中。
[0112]
由此实现的技术优势是,可以提供一种灵活且精确的用于通过程序状态的数据迁移来更新控制程序的方法。在第一数据子元素和第二数据子元素分别是字段类型的情况下,其中,所述字段类型分别包括相同数量的维度,并且在第一数据子元素在至少一个维度上包括根据第一索引范围索引的相同第七数据类型的第一元素的情况下,并且在第二数据子元素在至少一个维度上包括根据第二索引范围索引的相同第八数据类型的第二元素的情况下,在第六识别步骤中识别出第一索引范围的第一元素的第七数据类型和第二索引范围的第二元素的第八数据类型。此外,在第三识别步骤中识别出第一元素与第二元素之间的关系,其中,当第一元素和第二元素分别相同地索引时,第一元素与第二元素相关。
[0113]
在识别第一元素的第七数据类型、第二元素的第八数据类型以及第一和第二元素之间的关系之后,在第四生成步骤中,基于所识别的数据类型和所识别的关系生成用于将第一元素映射到第二元素上的第四迁移函数。
[0114]
类似于第一迁移函数、第二迁移函数和第三迁移函数,第四迁移函数不限制于将第一元素映射到第二元素上。相反地,第四迁移函数设计成将第七数据类型的任意数据映射到第八数据类型的任意数据上。为此,第四迁移函数设计成读入第一存储区域中的第七数据类型的数据,将所读入的数据必要时转换为第八数据类型,并且将读出的和必要时转换后的数据存储在第二存储区域中。
[0115]
因此,为了将第一数据子元素映射到第二数据子元素上,仅生成第四迁移函数,该第四迁移函数构造成将第七数据类型的数据映射到第八数据类型的数据上。为了将多个第一元素映射到多个第二元素上,多次依次调用相应的第四迁移函数并且在彼此相关的第一和第二元素的对上执行。因此,可以避免被限制为将第一数据子元素的第一元素映射到第二数据子元素的第二元素上的多个第四迁移函数。由此可以简化并且因此在时间上加速第一控制程序的全局状态的迁移过程。
[0116]
替代地,第一数据子元素包括以多个维度根据多个第一索引范围索引的第一元素。类似地,第二数据子元素包括以多个维度根据多个第二索引范围索引的第二元素。第一索引范围可以是相同的并且具有相同数量的第一元素。类似地,第二索引范围可以是相同的并且具有相同数量的第二元素。替代地,第一索引范围可以是不同的并且具有不同数量的第一元素。类似地,第二索引范围可以是不同的并且具有不同数量的第二元素。
[0117]
根据一个实施方式,所述第一生成步骤包括:
[0118]
在第七识别步骤中识别第一元素与第二元素之间的第三关系,该第三关系能够实现第一元素与第二元素之间的足够精确的对应关联。
[0119]
由此实现这样的技术优点,即能够实现精确的迁移。通过所述关系陈述哪个第一元素将被映射到哪个第二元素上,所识别的关系可以被考虑用于将第一元素映射到第二元素上。此外,所述元素与元素在存储区域中的位置信息之间的关系可被用于确定第二元素位于第二存储区域中的哪个相对位置处。
[0120]
替代地,第一数据子元素的第一元素与第二数据子元素的第二元素之间的第三关系可以被相应的第一数据子元素与相应的第二数据子元素之间的第一关系所包括,从而第一数据子元素的第一元素也通过第一数据子元素与第二数据子元素之间的第一关系与第二数据子元素的第二元素相关联。替代地,多个第一元素可以通过第一数据子元素与第二数据子元素之间的第一关系与多个第二元素相关联。
[0121]
替代地,第一数据子元素的多个第一分量可以通过第三关系与第二数据子元素的多个第二分量相关联。替代地,第一元素和第二元素的对可以通过多个第三关系来关联。
[0122]
根据一个实施方式,所述第一生成步骤还包括:如果第一索引范围[u0、...、um]和第二索引范围[x0、...、xn]不相同,在索引确定步骤中确定在第一数据子元素和第二数据子元素的索引范围中的间隔[r,s],其中r=max(x0,u0)并且s=min(xn,um),其中,r对应于所述两个下限x0和u0中的最大值并且s对应于所述两个上限xn和um中的最小值,在第六识别步骤中将每个根据所述间隔[r,s]索引的第一元素的数据类型识别为第七数据类型并且将每个根据所述间隔[r,s]索引的第二元素的数据类型识别为第八数据类型,并且在第四生成步骤中生成用于基于所识别的第七数据类型和第八数据类型将第一元素映射到第二元素上的第四迁移函数,其中,该第四迁移函数设计成读取第一存储区域中的第七数据类型的数据,将所读取的数据转换成第八数据类型并且将转换成第八数据类型的数据存储在第二存储区域中。
[0123]
由此实现这样的技术优点,即可以提供第一控制程序的全局状态的灵活且精确的迁移过程。对于第一数据子元素的第一索引范围和第二数据子元素的第二索引范围不相同的情况,也就是说第一索引范围和第二索引范围的索引不完全一致并且至少在一个值上有区别,在第六识别步骤中确定两个索引范围的相交区域。对于所确定的相交区域,在第一索引范围和第二索引范围中的索引是相同的。
[0124]
对于相交区域的第一和第二元素,生成第四迁移函数,用于将第一元素映射到第二元素上。仅将相交区域的第一元素映射到相交区域的第二元素上。在相交区域之外具有指数的第一和第二元素保持不受数据迁移的影响。
[0125]
根据一个实施方式,所述第一部分迁移步骤包括:在第三部分迁移步骤中,通过所述第二迁移函数调用第四迁移函数并且执行第四迁移函数,用于将第一元素映射到第二元素上,并且其中,所述第三部分迁移步骤包括:在第四读取步骤中通过第四迁移函数读取在第一存储区域中的第一元素的位置处的第一元素的值,在第四转换步骤中通过第四迁移函数将第一元素的值转换成第八数据类型,并且在第四写入步骤中通过第四迁移函数将第一元素的转换成第八数据类型的值写入第二元素在第二存储区域中的位置。
[0126]
由此实现这样的技术优点,即可以提供第一控制程序的全局状态的灵活且精确的迁移。对于分别是字段类型并且具有相同数量的维度的第一数据子元素和第二数据子元素并且对于它们在第四生成步骤中生成第四迁移函数,在第三部分迁移步骤中通过第二迁移函数调用并且执行第四迁移函数。
[0127]
为此,可以首先确定第一元素的存储地址和第二元素的存储地址。这可以通过第二迁移函数来实施。在调用第四迁移函数时,第一元素的存储地址和第二元素的存储地址可以从第二迁移函数被传递给第四迁移函数。
[0128]
为此,第三部分迁移步骤包括通过第四迁移函数读取第一数据区域中的第一元素
的位置处的第一元素的值,将所读取的值转换为第二数据子元素的第二元素的数据类型,以及将所读取的值和必要时转换后的值写入第二数据区域中的第二元素的位置。在第一元素的数据类型和第二元素的数据类型相同的情况下,取消通过第四迁移函数的转换。在第一和第二元素的数据类型相同时,第一元素的值可以逐块地被复制到第二存储区域中的第二元素的位置。由此可以加速迁移过程。尤其是,在第一和第二数据子元素的字段类型相同时,可以逐块地复制第一数据子元素。在具有相同的第七和第八数据类型的第一和第二元素中,每个元素可以逐块地被复制。必要时,也可以(根据索引关系)在一个块中复制多个相邻的元素。
[0129]
第四迁移函数分别仅将第一元素的值映射到第二元素上。在多个第一元素和第二元素中,第四迁移函数依次经过第一元素和第二元素并且分别依次将第一元素映射到第二元素上。为此,迁移函数可以依次对于每个待映射的第一元素被第二迁移函数调用并且执行。
[0130]
为了将多个第一元素映射到多个第二元素上,分别仅需要一个迁移函数,该迁移函数构造成将第七数据类型的数据映射到第八数据类型的数据上,其中,所述数据可以包括值、数据和数据元素。类似于第一迁移函数、第二迁移函数和第三迁移函数,第四迁移函数也不限制于将第一数据子元素的第一元素映射到第二数据子元素的第二元素上。第四迁移函数也设计成将第七数据类型的任意数据映射到第八数据类型的数据上。由此降低了迁移过程的复杂性并且因此在时间上加快了迁移过程。
[0131]
根据一个实施方式,如果第一数据子元素的值不能足够精确地映射到第二数据子元素上,和/或如果第一分量的值不能足够精确地映射到第二分量上,和/或如果第一元素的值不能足够精确地映射到第二元素上,则第一数据元素的值还不能足够精确地映射到第二数据类型的值上,并且其中,所述第一检查步骤还包括:检查第一数据子元素的值是否能够足够精确地映射到第二数据子元素上,检查第一分量的值是否能够足够精确地映射到第二分量上,并且检查第一元素的值是否能够足够精确地映射到第二元素上。
[0132]
由此实现这样的技术优点,即如果不能无误差地实施迁移,则可以中断迁移过程。由此实现这样的优点,即如果第一控制程序的全局状态不能足够精确或无误差地映射到第二数据元素上,则可以舍弃第一控制程序的全局状态的迁移或舍弃将第一数据元素映射到第二数据元素上,并且在第二控制步骤中在考虑第一数据元素和存储在其中的全局状态的情况下通过周期地调用第一控制程序来继续对自动化系统的控制。
[0133]
如果第一数据子元素不能足够精确地被映射到第二数据子元素上,例如因为第一数据子元素的数据类型和第二数据子元素的数据类型是不兼容的,或者因为第一数据子元素的值不能完全在第二数据子元素的数据类型中表示,则第一数据元素不能足够精确地被映射到第二数据元素上并且因此第一控制程序的全局状态不能足够精确地集成到第二控制程序的全局状态中。在这种情况下,中断迁移并且基于第一控制程序和相应的全局状态继续操控自动化系统。
[0134]
例如,如果第一数据子元素的第一分量不能足够精确地映射到第二数据子元素的第二分量上,或者如果第一数据子元素的第一元素不能足够精确地映射到第二数据子元素的第二元素上,则第一数据子元素不能足够精确地映射到第二数据子元素上。在两种情况下可以中断第一数据元素到第二数据元素的迁移。
[0135]
如果第一分量和第二分量具有不兼容的数据类型,或者如果第一分量的值在第二分量的数据类型中不能完全表示,则第一分量又不能足够精确地映射到第二分量上。如果第一数据元素的数据类型不与第二数据元素的数据类型兼容,则第一数据子元素的第一元素可能又不能足够精确地映射到第二数据子元素的第二元素上。此外,如果第一元素的值不能完全在第二元素的数据类型中表示,则第一元素不能足够精确地映射到第二元素上。
[0136]
根据一个实施方式,当第一数据子元素和第二数据子元素相同地命名、第一分量和第二分量相同地命名以及当第一元素和第二元素相同地索引时,对于第一数据子元素和第二数据子元素、对于第一分量和第二分量以及对于第一元素和第二元素,关系是可被识别的。
[0137]
由此实现了自动产生关系的技术优点。在相同的命名中,对象自动地彼此相关并且在第一数据子元素与第二数据子元素之间、在第一分量与第二分量之间以及在第一元素与第二元素之间的足够准确的关联是可被识别的。由此确保了精确且可靠的迁移过程。
[0138]
当第一数据子元素和第二数据子元素相同地命名时,第一数据子元素和第二数据子元素彼此相关。当第一分量和第二分量相同地命名时,第一数据子元素的第一分量和第二数据子元素的第二分量彼此相关。当第一元素和第二元素相同地索引时,第一数据子元素的第一元素和第二数据子元素的第二元素彼此相关。
[0139]
替代于所述关系,如果在第二控制程序或与控制程序相关联的程序库中命名这种关系,则第一数据子元素和第二数据子元素可以彼此相关。例如,对于控制程序中的未相同命名的第一数据子元素和第二数据子元素可以定义第一数据子元素和第二数据子元素彼此相关。同样的情况适用于第一分量和第二分量以及第一元素和第二元素,对此如果第一分量和第二分量没有相同命名或者第一元素和第二元素没有相同索引,则也可以在第二控制程序中定义关系。
[0140]
此外,如果对于第一数据子元素重命名为第二数据子元素或者将第一分量重命名为第二分量或将第一元素的索引范围调整到第二元素中使用重构工具(refaktorisierungswerkzeug)或索引匹配工具(indexanpassungswerkzeug),则在第一数据子元素与第二数据子元素之间、在第一分量与第二分量之间以及在第一元素与第二元素之间可能存在关系。通过使用这样的匹配工具可以识别出相应的第一数据子元素与第二数据子元素之间的关系、第一分量与第二分量之间的关系、以及第一元素与第二元素之间的关系。
[0141]
由于在迁移过程中仅将第一数据子元素的值映射到与第一数据子元素相关的第二数据子元素上,或者仅将第一分量的值映射到与第一分量相关的第二分量上,并且仅将第一元素的值映射到与第一元素相关的第二元素上,可以通过可附加识别的关系来确保第一数据元素的尽可能全面的值可以被映射到第二数据元素上。由此可以实现,可以将第一控制程序的全局状态的尽可能全面的值传输到第二控制程序的全局状态上。
[0142]
根据一个实施方式,所述控制器还包括翻译模块,以用于翻译或解释控制程序,其中,第一生成步骤由该翻译模块执行。
[0143]
由此实现这样的技术优点,即可以提供一种用于生成迁移函数的便捷解决方案。该翻译模块用于将例如第二控制程序的所创建的源代码翻译成可执行代码,该可执行代码可以由控制器执行以控制自动化系统。同时,该翻译模块设计成执行用于生成第一迁移函
数、第二迁移函数、第三迁移函数和第四迁移函数的第一生成步骤、第二生成步骤、第三生成步骤和第四生成步骤。此外,该翻译模块设计成,实施用于识别第一数据元素的第一数据类型和第二数据元素的第二数据类型的第一识别步骤、用于识别第一数据子元素的第三数据类型和第二数据子元素的第四数据类型的第二识别步骤、用于识别第一子元素与第二数据子元素之间的第一关系的第三识别步骤、用于识别第一分量的第五数据类型和第二分量的第六数据类型的第四识别步骤、用于识别第一分量与第二分量之间的关系的第五识别步骤、用于识别第一元素的第七数据类型和第二元素的第八数据类型的第六识别步骤以及用于识别第一元素与第二元素之间的关系的第七识别步骤。
[0144]
此外,该翻译模块设计成执行第二检查步骤,以用于检查在第一生成步骤中是否能够生成第一迁移函数、用于检查在第二生成步骤中是否能够生成第二迁移函数、用于检查在第三生成步骤中是否能够生成第三迁移函数、以及用于检查在第四生成步骤中是否能够生成第四迁移函数。
[0145]
通过这样设计的、设计成生成所有迁移函数或识别数据元素和数据子元素以及数据子元素的分量和元素的所有数据类型和所有关系的翻译模块,提供了一种用于生成迁移函数的简单的可行方案。该翻译模块设计成在更新的第二控制程序的修改的或重新创建的源代码的编译过程中识别第一数据元素的对象和/或第一数据子元素与第二数据元素的对象和/或第二数据子元素的所述数据类型和关系并且同时生成对应的第一到第四迁移函数。在下文中,第一数据元素的对象可以由第一数据子元素给出,而第二数据元素的对象可以由第二数据子元素给出。如果在编译过程中执行所有这些步骤,则在编译过程结束之后可以执行第一控制程序的全局状态的迁移。由此进一步降低了编译过程的复杂性。通过协同效应可以减小用于翻译、关系确定、类型确定和迁移函数生成的各个费用的总和。
[0146]
根据一个实施方式,该方法还包括:
[0147]
在初始化步骤中初始化第二数据元素,其中,所述初始化包括将第二数据元素的值设定为预定的初始值,其中,初始化第二数据元素包括初始化第二数据子元素、第二分量和第二元素。
[0148]
由此实现这样的技术优点,即在考虑第二数据元素的情况下并且基于第二控制程序可以执行对自动化系统的控制。通过初始化第二数据元素,使第二数据元素的所有值都被设定为初始值,由此能够使第二控制程序考虑第二数据元素的值直接用于控制自动化系统。这对应于从启动状态启动第二控制程序。在此,初始化第二数据元素包括初始化第二数据元素的所有第二数据子元素。在此,初始化所有第二数据子元素包括在初始化所有第二数据子元素的所有第二分量或第二元素。
[0149]
在迁移步骤和第一至第三部分迁移步骤中,第一数据子元素或第一分量的值以及第一数据子元素的第一元素仅映射到第二数据子元素或第二分量或第二数据子元素的第二元素上,对于它们存在与相应的第一数据子元素或第一分量和第一元素的关系。在数据迁移时,不考虑识别出与对应的第一数据子元素、第一分量或第一元素的没有关系的第二数据子元素、第二分量或第二元素。这些第二数据子元素、第二分量或第二元素在初始化中被设定为预定的初始值。由此,第二数据元素的所有对象都可以设有有效的数值,该数值相应于第一数据元素的相应对象的值或者是初始值。因此,可以基于第二数据元素执行第二控制程序。
[0150]
由此实现这样的技术优点,即通过在一个步骤中将第二数据元素的所有对象设定为初始值,实现了简化的数据迁移。
[0151]
替代地,在初始化步骤中可以仅初始化所选择的第二数据子元素和/或第二分量和/或第二元素。
[0152]
替代地,初始化步骤可以在时间上在迁移步骤之前实施。尤其是,在仍执行第一控制程序期间就可执行初始化步骤。由此能够缩短迁移过程,并且因此能够缩短第一控制程序以及二控制程序的执行被中断并且使自动化系统不运行的时间。
[0153]
在这种情况下,在开始将第一数据元素数据迁移到第二数据元素之前,可以将所有第二数据子元素以及所有第二分量和/或所有第二元素设定为初始值。在第二数据子元素和/或第二分量和/或第二元素中,对于它们根据本发明的方法可以实施数据迁移,在迁移步骤中随后以第一数据元素的相应的第一数据子元素、第一分量和/或第一元素的值覆盖相应的初始值。
[0154]
尤其是,通过初始化实现了如下优点,即对于选择性的初始化不消耗进一步的计算或存储资源,因为可以调用已经存在的初始化函数,以便在常规启动的情况下构建启动状态。此外,实现了如下优点,即在仍执行第一控制程序期间已经能够执行初始化函数。因此,初始化不落入对时间要求严格的时间间隔内,在该时间间隔内停止周期地执行第一和第二控制程序。
[0155]
根据一个实施方式,第一数据元素包括多个第三数据类型的第一数据子元素,并且第二数据元素包括多个第四数据类型的第二数据子元素,其中,对于每个第一数据子元素,第三数据类型是复合类型、字段类型、标量类型或指针类型,并且其中,对于每个第二数据子元素,第四数据类型是复合类型、字段类型、标量类型或指针类型。
[0156]
由此实现的技术优势是,可以提供一种灵活且广泛适用的用于通过程序状态的同时数据迁移来更新控制程序的方法。第一数据元素和第二数据元素可以分别包括多个第一数据子元素和第二数据子元素。第一数据子元素和第二数据子元素中的每一个可以分别是复合类型、字段类型、标量类型或指针类型。如果第一数据子元素或第二数据子元素是复合类型,则第一数据子元素或第二数据子元素可以分别包括多个第一分量或第二分量。第一分量或第二分量中的每一个又可以是复合类型、字段类型、标量类型或指针类型。如果第一数据子元素或第二数据子元素是字段类型,则第一数据子元素的第一元素或第二数据子元素的第二元素可以分别是标量类型或指针类型。由此实现了可以针对具有不同数据类型的多个不同数据结构实施将第一控制程序的全局状态迁移到第二控制程序的全局状态的过程。由此实现了根据本发明的用于通过程序状态的数据迁移来更新控制程序的方法的高灵活性和适用性。
附图说明
[0157]
借助附图详细阐述本发明。在附图中:
[0158]
图1示出根据一个实施方式的自动化系统的示意图;
[0159]
图2示出根据一个实施方式的自动化系统的控制程序的更新过程的示意图;
[0160]
图3示出根据一个实施方式的用于通过数据迁移对自动化系统的控制程序进行更新的方法的流程图;
[0161]
图4示出根据另一个实施方式的用于通过数据迁移对自动化系统的控制程序进行更新的方法的流程图;
[0162]
图5示出根据另一个实施方式的用于通过数据迁移对自动化系统的控制程序进行更新的方法的流程图;
[0163]
图6示出根据一个实施方式的自动化系统的控制程序的更新版本的生成过程的示意图;以及
[0164]
图7示出根据一个实施方式的自动化系统的控制程序的数据元素的迁移过程的示意图;以及
[0165]
图8示出根据另一个实施方式的自动化系统的控制程序的数据元素的迁移过程的示意图。
具体实施方式
[0166]
图1示出根据一个实施方式的自动化系统100的示意图。
[0167]
图1中的自动化系统100包括一个控制器101、一个主用户103和四个从用户105,它们分别相互连接并且通过总线系统107与控制器101连接。替代地,控制器101本身也可以形成主用户。在控制器101的存储器sp中,第一控制程序a存储在第一存储区域spa中,并且第二控制程序b存储在第二存储区域spb中。第一控制程序a用于周期地操控主用户103和从用户105。第二控制程序b可以是第一控制程序a的更新版本并且同样用于周期地操控自动化系统100的用户。更新版本例如可以是第一控制程序a的更新和第一控制程序a的修改版本。替代地,更新版本也可以是完全重新编程的控制程序,其中,有利地存在将第一控制程序的更新版本与原始版本关联。因此,第二控制程序b基于第一控制程序a并且可以在控制程序的不同区域中与第一控制程序a不同。
[0168]
在图1中所示的自动化系统100仅用作自动化系统的示例性说明。根据本发明的方法不应限于在图1中所示的自动化系统。
[0169]
图2示出根据一个实施方式的自动化系统100的控制程序a的更新过程的示意图。
[0170]
在图2中示出图1中的自动化系统100的控制器101的存储器sp。存储器sp被划分为第一存储区域spa和第二存储区域spb。在第一存储区域spa中存储有第一控制程序a,并且在第二存储区域spb中存储有第二控制程序b。第一控制程序a包括可执行代码pa和第一数据元素ga,并且第二控制程序b包括第二可执行代码pb和第二数据元素gb。
[0171]
第一控制程序a的第一可执行代码pa用于执行控制程序a并且可以由控制器101执行。第二控制程序b的第二可执行代码pb用于执行第二控制程序b并且可以由控制器101执行。第一数据元素ga描述第一控制程序a的程序状态。第一控制程序a的程序状态对应于第一控制程序a的全局状态并且包括用于执行第一控制程序a所需的信息。此外,第一控制程序a的全局状态包括关于自动化程序100的全部信息并且描述由第一控制程序a周期地操控的自动化系统100所处的状态。
[0172]
在第一读取/写入步骤204中,第一可执行代码pa可以分别从第一数据元素ga读取信息和将信息写入第一数据元素ga。第二控制程序b的第二可执行代码pb用于执行控制程序b并且可以由自动化系统100的控制器101执行。第二数据元素gb描述第二控制程序b的程序状态并且包括用于执行第二控制程序b所需的信息。
[0173]
在数据迁移的时刻,不执行第二控制程序b,并且因此第二数据元素gb不包含关于自动化系统100的状态的信息。在数据迁移的时刻,在第二数据元素gb中存储有用于执行第二控制程序b、用于控制自动化系统100所需的所有对象。但各个对象仅以初始值来初始化。数据元素gb包括其与启动状态相对应的初始值。因此,所述两个数据元素的所有对象设有数值并且因此初始化。
[0174]
在成功将存储在第一数据元素ga中的第一控制程序a的全局状态数据迁移到第二数据元素gb之后,第二数据元素包括用于执行第二控制程序b所需的全部信息。此外,在完成第一控制程序a的全局状态的数据迁移之后,第二数据元素gb包括与自动化系统100在实施数据迁移之前的时刻、尤其是在最近执行的控制周期之后的时刻所处的状态有关的信息。在第二读取/写入步骤206中,第二控制程序b的第二可执行代码pb可以将数据写入第二数据元素gb或从第二数据元素gb读取数据。必要时,在实施数据迁移之后不能将第一数据元素ga的信息完全映射到第二数据元素gb上。不能设有第一数据元素ga的相应的第一数据子元素的值的对象或第二数据子元素保持初始值。
[0175]
在第一替换步骤202中,为了根据本发明的用于通过控制程序的程序状态的数据迁移来更新自动化系统的控制程序的方法借助第一控制程序a的程序状态的同时数据迁移通过第二控制程序b更新第一控制程序a,由第二控制程序b的第二可执行代码pb代替第一控制程序a的第一可执行代码pa。在图2中所示的第一可执行代码pa与第二可执行代码pb之间的箭头暗示第一可执行代码pa被第二可执行代码pb替换,并且第二可执行代码pb至少部分地被构建到第一可执行代码pa或者从第一可执行代码pa导出,并且至少具有如下共同点,即两个代码用于控制相同的自动化系统100。这不排除完全与第一可执行代码pa无关地生成第二可执行代码pb。此外,在迁移步骤207中,将描述第一控制程序a的程序状态、尤其是第一控制程序a和自动化系统100的全局状态的第一数据元素ga的值映射到第二数据元素gb上。
[0176]
在迁移步骤207中,通过将第一数据元素ga的值映射到第二数据元素gb上,将第一控制程序a的程序状态或者说由第一数据元素ga的值所描述的第一控制程序a和自动化系统100的全局状态存储在第二数据元素gb中。在迁移步骤207中成功迁移数据之后,第二数据元素gb因此描述第一控制程序a的程序状态并且因此描述第一控制程序a和自动化系统100的全局状态。因此,第二数据元素gb包括ga的信息的至少一部分,其中,所述信息以用于执行第二可执行代码pb所需的形式表示。
[0177]
在第一替换步骤202中通过第二可执行代码pb成功替换第一可执行代码pa并且在迁移步骤207中将第一控制程序a或自动化系统100的全局状态成功数据迁移到第二控制程序b的第二数据元素gb之后,第二控制程序b可以由自动化系统100的控制器101执行并且可以在最近执行的控制周期之后的时刻访问第一控制程序a或自动化系统100的全局状态,使得自动化系统100可以在最近执行的控制周期的时刻在该状态中被第二控制程序b操控。因此,第一控制程序a的全局状态可以被解释为第一控制程序a的上一次执行之后的全局状态,而通过数据迁移生成并且通过第二数据元素gb示出的状态可以被解释为第二控制程序b的第一执行之前的另一个全局状态,其中,两个状态在很大程度上与通过第一可执行代码pa和第二可执行代码pb的解释等同。
[0178]
图3示出根据一个实施方式的用于通过数据迁移对自动化系统100的控制程序a进
行更新的方法200的流程图。
[0179]
根据在图3中所示的实施方式,用于通过控制程序的程序状态的数据迁移进行更新自动化系统100的控制程序的方法200涉及根据图1和图2的自动化系统100。在此,自动化系统100的控制器101包括第一控制程序a和第二控制程序b,其中,用于控制自动化系统的所述第一控制程序a周期地执行,其中,所述第二控制程序b是所述第一控制程序a的更新,其中,所述第一控制程序a包括描述第一控制程序a的程序状态并且存储在所述控制器101的第一存储区域spa中的第一数据类型的第一数据元素ga,并且其中,所述第二控制程序b包括描述第二控制程序b的程序状态且存储在第二存储区域spb中的第二数据类型的第二数据元素gb。
[0180]
根据图3中的实施方式,该方法200包括以下方法步骤:在第一生成步骤201中生成用于将所述第一数据元素ga映射到所述第二数据元素gb上的第一迁移函数mig1,在中断步骤203中中断第一控制程序a的周期执行,在第一确定步骤205中确定第一数据元素ga的值,其中,第一数据元素ga的确定的值描述在所述中断时刻的控制程序a的程序状态,并且在迁移步骤207中通过执行第一迁移函数mig1将第一数据元素ga的值映射到第二数据元素gb上。
[0181]
自动化系统100经由控制器101通过周期地执行第一控制程序a来操控。在第一数据元素ga中存储有用于执行第一控制程序a所需的与第一控制程序a相关的信息。所述信息可以包括变量、函数或程序库或以不同的方式设计的对象,第一控制程序必须访问这些对象以控制自动化系统100。
[0182]
在周期地执行第一控制程序a期间,第一控制程序a访问第一数据元素ga并且在此能够从第一数据元素ga读出数据或者将数据写入第一数据元素ga。因此,第一数据元素ga中的信息描述第一控制程序a的程序状态,该程序状态描述第一控制程序a所处的状态。此外,在第一数据元素ga中存储有与自动化系统100相关的信息,该信息定义自动化系统100所处的状态。接下来,存储在第一数据元素ga中的信息被解释为第一控制程序a以及自动化系统100的全局状态。全局状态描述第一控制程序a的程序状态并且同时描述自动化系统100的状态。
[0183]
第二控制程序b是第一控制程序a的更新版本并且用于代替第一控制程序a。在第二数据元素gb中存储有描述第二控制程序b的程序状态的信息。在执行方法200期间不执行第二控制程序b,并且在第二数据元素gb中不存在与自动化系统100的状态相关的信息。替代地,第二数据元素gb可以利用初始值来初始化。在方法200的执行期间并且因此在根据迁移步骤207的数据迁移完成之前的时间,在第二数据元素gb中存储有用于执行第二控制程序b所需的所有变量、函数、数据库、参数或者其它对象。然而,存储在第二数据元素gb中的对象不具有适合于描述自动化系统100的当前状态的值。
[0184]
用于通过控制程序的程序状态的数据迁移来更新自动化系统的控制程序的方法200的目的在于,将第一控制程序a替换为第二控制程序b,并且将存储在第一数据元素ga中的关于自动化系统100的状态的信息转化成第二数据元素gb,由此在通过第二控制程序b成功地替换第一控制程序a之后,能够通过读入第二数据元素gb中的信息来访问自动化系统100的状态,从而在通过第二控制程序b替换第一控制程序a之后能够无缝地继续对自动化系统100的控制。
[0185]
为此,需要将第一数据元素ga的值转换为第二数据元素gb,所述第一数据元素包括关于第一控制程序a的程序状态或关于自动化系统100的状态的信息。
[0186]
为此,在第一生成步骤201中生成第一迁移函数mig1,用于将第一数据元素ga映射到第二数据元素gb上。第一迁移函数mig1用于将存储在第一数据元素ga中的信息传输到第二数据元素gb上。在下文中,存储在第一数据元素ga中的信息作为第一数据元素ga的值进行解释,并且存储在第二数据元素gb中的信息作为第二数据元素gb的值进行解释。
[0187]
在第一生成步骤201中生成第一迁移函数mig1之后,在中断步骤203中中断第一控制程序a的周期执行。通过中断第一控制程序a的周期执行来中断自动化系统100的运行。在第一数据元素ga中描述最近执行的控制周期之后自动化系统100的状态。通过在中断步骤203中中断第一控制程序a的周期执行确保不进一步改变第一数据元素ga的值,从而能够实现将第一数据元素ga的值连贯地传输到第二数据元素gb上。在中断步骤203中断第一控制程序a的周期调用之后,在最近执行的控制周期结束时第一数据元素ga的值对应于第一控制程序a的程序状态。类似地,第一数据元素ga的值描述自动化系统100在最近执行的控制周期结束时的状态。
[0188]
优选地,在之前执行的控制周期结束之后并且因此在完全执行控制程序a之后,进行在中断步骤203中的第一控制程序a的周期执行的中断。然而替代地,中断步骤203也可以在所执行的控制周期内的任意时刻被实施。
[0189]
在中断步骤203中中断第一控制程序a的周期执行之后,在第一确定步骤205中确定第一数据元素ga的值。如已经提到的,第一数据元素ga的值描述在最近执行的控制周期的时刻或在第一控制程序a的执行中断的时刻自动化系统100的状态或第一控制程序a的程序状态。在中断步骤203中中断第一控制程序a的周期执行之后,第一数据元素ga的值不再改变,因为不进一步执行第一控制程序a并且因此不能从第一数据元素ga中读出或写入任何值。
[0190]
在第一确定步骤205中确定第一数据元素ga的值之后,在迁移步骤207中实施第一迁移函数mig1并且将第一数据元素ga的值映射到第二数据元素gb上,其方式为将第一数据元素ga的值传输到第二数据元素gb中。在此,在第二数据元素gb中包含的对象的值被第一数据元素ga的相应对象的值覆盖。通过将第一数据元素ga的值映射到第二数据元素gb上,将第一控制程序a或自动化系统100在最近执行的控制周期的时刻的全局状态传输到第二数据元素gb上。在通过读入存储在第二数据元素gb中的值来执行第二控制程序b时,可以访问自动化系统100在最近执行的控制周期的时刻的全局状态,从而通过执行第二控制程序b可以将对自动化系统100的控制无缝地连接到最近执行的控制周期上。
[0191]
图4示出根据另一个实施方式的用于通过数据迁移对自动化系统100的控制程序a进行更新的方法200的流程图。
[0192]
该方法200的在图4中所示的实施方式基于图3中的方法200的实施方式并且包括在图3中所示的实施方式的所有方法步骤。
[0193]
与在图3中所示的实施方式不同,在图4中的方法200的实施方式中,在第一生成步骤201结束之后在第二检查步骤215中检查在第一生成步骤201中是否能够生成第一迁移函数mig1。如果第一数据元素ga和第二数据元素gb具有不兼容的数据类型,则在第一生成步骤201中第一迁移函数mig1的生成例如可能失败,对于这些不兼容的数据类型不能足够精
确地实施将第一数据元素ga的值转换成第二数据元素gb的数据类型。
[0194]
如果在第二检验步骤215中识别出不能生成迁移函数mig1,则在第二控制步骤213中在考虑第一数据元素ga的情况下继续周期地调用第一控制程序a并且基于第一控制程序a继续对自动化系统100的控制。如果在第一生成步骤201中不能生成第一迁移函数mig1,则中断迁移过程并且第一控制程序a不被第二控制程序b替换。取而代之地,在考虑存储在第一数据元素ga中的全局状态的情况下基于第一控制程序a继续对自动化系统100的控制。
[0195]
而如果在第二检查步骤215中识别出在第一生成步骤201中能够生成第一迁移函数mig1,则随着在中断步骤203中中断第一控制程序a的周期执行,继续该方法200。
[0196]
同样不同于在图3中所示的实施方式,在根据图4的实施方式中在执行迁移步骤207之后在第一检查步骤209中检查在迁移步骤207中通过执行第一迁移函数mig1第一数据元素ga的值是否能够足够精确地映射到第二数据元素gb上。在此,如果第一数据元素ga的值能够在第二数据元素gb的第二数据类型中表示,则第一数据元素ga的值能够足够精确地映射到第二数据元素gb上。如果第一数据元素ga的值的数值超过能够在第二数据元素gb的第二数据类型中表示的最大数值,则第一数据元素ga的值例如不能足够精确地在第二数据元素ga的第二数据类型中表示。
[0197]
如果在第一检查步骤209中确定,在迁移步骤207中第一数据元素ga的值不能足够精确地映射到第二数据元素gb上,则在第二控制步骤213中在考虑存储在第一数据元素ga中的全局状态的情况下基于第一控制程序a继续对第一控制程序a的周期调用和对自动化系统100的控制。在该点上,全局状态的迁移被中断并且基于第一控制程序a继续控制。通过将第一控制程序a和第一数据元素ga存储在第一存储区域spa中并且将第二控制程序b和第二数据元素gb存储在第二存储区域spb中,第一数据元素ga不会受到数据迁移的影响。如果处于上述或其它原因导致这样的数据迁移失败,可以基于第一控制程序a和第一数据元素ga在最近执行的控制周期的状态下顺利地继续对自动化系统100的控制。而舍弃迁移。
[0198]
而如果在第一检查步骤209中确定,通过在迁移步骤207中执行第一迁移函数mig1能够足够精确地将第一数据元素ga的值映射到第二数据元素gb上,则在替换步骤202中利用第二控制程序b替换第一控制程序a。
[0199]
在替换步骤202中利用第二控制程序b替换第一控制程序a之后,在第一控制步骤211中在考虑第二数据元素gb的情况下通过周期地调用第二控制程序b来控制自动化系统100。在迁移步骤207中成功迁移后,第二数据元素gb的值描述第一控制程序a和自动化系统100在基于第一控制程序a最近执行的控制周期的时刻的全局状态。在迁移步骤207中在成功将第一数据元素ga的值迁移到第二数据元素gb上之后,可以基于第二控制程序b在基于第一控制程序a最近执行的控制周期的状态下操控自动化系统100。由此,能够利用更新的控制程序实现对自动化系统100的无缝控制。
[0200]
在替换步骤202中,利用第一控制程序a替换第二控制程序b涉及基于第二控制程序b而不是基于第一控制程序a来执行并且控制自动化系统100。利用第二控制程序b替换第一控制程序a并不排除第一控制程序a可以继续存储在第一存储区域spa中。
[0201]
通过在数据迁移之后将第一控制程序a和自动化系统100在基于第一控制程序a最近执行的控制周期的时刻的全局状态映射到第二存储区域spb中的第二数据元素gb上,全局状态在没有不可用的存储器间隙的情况下存储在第二数据元素gb中。第二数据元素gb在
第二存储区域spb中形成连续的区域,在该区域中第二数据元素gb的所有对象紧密地打包并且没有不可用的存储器间隙地布置。通过在迁移步骤207中将第一控制程序a和自动化系统100在基于第一控制程序a最近执行的控制周期的时刻的全局状态逐个对象地映射到第二数据元素gb的相应的对象上,全局状态在成功数据迁移之后作为连续的单元存储在第二数据元素spb中。
[0202]
图5示出根据另一个实施方式的用于通过数据迁移对自动化系统100的控制程序a进行更新的方法200的流程图。该方法200的在图5中所示的实施方式基于在图3和图4中所示的实施方式并且包括在所述附图中所示的全部方法步骤。
[0203]
不同于在图3和图4中所示的实施方式,第一生成步骤201在图5中所示的实施例中包括在第一识别步骤223中将第一数据元素ga的数据类型识别为第一数据类型并且将第二数据元素gb的数据类型识别为第二数据类型。在识别第一数据元素ga的第一数据类型和第二数据元素gb的第二数据类型之后,在第一生成步骤201中基于识别出的第一数据类型和识别出的第二数据类型生成第一迁移函数mig1。
[0204]
第一数据元素ga的第一数据类型和第二数据元素gb的第二数据类型例如可以是复合类型、字段类型或其他通常的数据类型。在应用中,第一数据元素ga的第一数据类型和第二数据元素gb的第二数据类型通常是复合类型,并且第一数据元素ga和第二数据元素gb分别包括多个对象,这些对象在下文中被定义为第一数据子元素ga1和第二数据子元素gb1。
[0205]
如果在第一识别步骤223中所识别的第一数据元素ga的第一数据类型是复合体类型并且第一数据元素ga包括至少一个数据子元素ga1,并且所识别的第二数据元素gb的第二数据类型同样是复合体类型并且第二数据元素gb包括至少一个第二数据子元素gb1,则在第二识别步骤225中将第一数据子元素ga1的数据类型识别为第三数据类型并且将第二数据子元素gb1的数据类型识别为第四数据类型。第一数据子元素ga1的第三数据类型和第二数据子元素gb1的第四数据类型又可以是复合类型、字段类型、标量类型或指针类型。
[0206]
接着,在第三识别步骤227中识别出第一数据子元素ga1与第二数据子元素gb1之间的第一关系r1。第一关系r1能够实现第一数据子元素ga1与第二数据子元素gb1之间的足够精确的对应关联。
[0207]
在第一数据元素ga的对象或第一数据子元素ga1与第二数据元素gb的对象或第二数据子元素gb1之间的所识别的关系说明第一数据元素ga的哪些对象或第一数据子元素ga1在迁移步骤207中应被映射到第二数据元素gb的哪些对象或第二数据子元素gb1上。
[0208]
如果第一数据子元素ga1和第二数据子元素gb1相同地命名,则第一数据子元素ga1与第二数据子元素gb1之间至少存在第一关系r1。第一数据子元素ga1及第二数据子元素gb1分别描述第一控制程序a及第二控制程序b的对象。根据第一数据子元素ga1和数据子元素gb1的数据类型,这些对象可以描述复杂对象,或者表示标量值、指针、数值、字符串或非结构化值。变量也可以包括复杂的数据类型。通过第一数据子元素ga1与第二数据子元素gb1之间的第一关系r1示出,第一控制程序a中的第一数据子元素ga1和第二控制程序b中的第二数据子元素gb1具有相同的意义和作用。第一控制程序a中的对象和第二控制程序b中的对象的相同含义要求,在将第一数据元素ga的值数据迁移到第二数据元素gb上时,第一数据元素ga中的对象的值必须被映射到第二数据元素gb中的对象上,使得通过pb解释ga和
通过pb解释gb是同义的。因此,在第一数据子元素ga1与第二数据子元素gb1之间的所识别的第一关系r1索引,在迁移步骤207中在将第一数据元素ga数据迁移到第二数据元素gb上时必须将第一数据子元素ga1的值映射到第二数据子元素gb1上。
[0209]
在第二识别步骤225中识别第三数据类型和第四数据类型并且在第三识别步骤227中识别第一关系r1之后,在第二生成步骤229中基于所识别的第三数据类型、所识别的第四数据类型和所识别的第一关系r1生成用于将第一数据子元素ga1映射到第二数据子元素gb1上的第二迁移函数mig2。在此,第二迁移函数mig2设计成将第三数据类型的数据映射到第四数据类型的数据上,其方式为第二迁移函数mig2读取第一存储区域spa中的第三数据类型的数据,将第三数据类型的所读取的数据转换为第四数据类型,并且将转换为第四数据类型的数据存储在第二存储区域spb中。在第一数据子元素ga1的第三数据类型和第二数据子元素gb1的第四数据类型相同的情况下,取消所读取的数据的转换。在第三数据类型和第四数据类型相同时,第一数据子元素ga1的值可以逐块地被复制到第二存储区域spb中的第二数据子元素gb1的位置pgb1上。
[0210]
在第一数据子元素ga1的第三数据类型和第二数据子元素gb1的第四数据类型是复合类型的情况下,并且在第一数据子元素ga1包括至少一个第一分量ma并且第二数据子元素gb1包括至少一个第二分量mb的情况下,在第四识别步骤239中将第一分量ma的数据类型识别为第五数据类型并且将第二分量mb的数据类型识别为第六数据类型。第一分量ma的第五数据类型和第二分量mb的第六数据类型可以分别是复合类型、字段类型、标量类型或指针类型。此外,第一数据子元素ga1可以包括多个第一分量ma,其中,每个第一分量ma可以包括相同的第五数据类型。替代地,第一分量ma的一部分可以具有相同的第五数据类型。替代地,多个第一组分ma中的每一个可以具有不同的数据类型。第二数据子元素gb1可以包括多个第二分量mb,其中,第二分量mb中的每一个可以是第六数据类型。替代地,第二分量mb中的每一个可以具有不同的数据类型。
[0211]
在第四确定步骤239中确定第一分量ma的第五数据类型和第二分量mb的第六数据类型之后,在第五确定步骤241中确定第一分量ma与第二分量mb的第二关系r2。第二关系r2能够实现第一分量ma与第二分量mb之间的足够精确的对应关联。如果第一分量ma和第二分量mb相同地命名,则第一分量ma和第二分量mb至少通过第二关系r2相关联。如果第一数据子元素ga1包括多个第一分量ma并且第二数据子元素gb1包括多个第二分量mb,则识别出在分别第一分量ma和第二分量mb的对之间的多个第二关系r2。替代地,多个第一分量ma和多个第二分量mb可以通过唯一的第二关系r2相互关联。
[0212]
在第四识别步骤239中识别出第五数据类型和第六数据类型并且在第五识别步骤241中识别出第二关系r2之后,在第三生成步骤243中,基于所识别的第五数据类型、所识别的第六数据类型生成第三迁移函数mig3,其中,该第三迁移函数mig3设计成将第五数据类型的数据映射到第六数据类型的数据上,其方式为第三迁移函数mig3读取第一存储区域中的第五数据类型的数据、将所读取的数据转换为第六数据类型并且将转换后的数据存储在第二存储区域spb中。在第五和第六数据类型相同时,取消所读取的数据的转换并且第一分量ma的值可以逐块地被复制到第二分量mb的位置pmb上。替代地,为了生成第三迁移函数mig3可以考虑所识别的第二关系r2。
[0213]
生成的第三迁移函数mig3不限制于将第一分量ma映射到第二分量mb上,而是用于
将第五数据类型的任意数据映射到第六数据类型的任意数据上。在第一数据子元素ga1包括多个分别是第五数据类型的第一分量ma并且第二数据子元素gb1包括多个分别是第六数据类型的第二分量mb的情况下,仅生成一个第三迁移函数mig3就足够,该第三迁移函数设计成将第五数据类型的数据映射到第六数据类型的数据上。
[0214]
为了将多个第一分量ma映射到第二分量mb上,可以多次执行所述一个第三迁移函数mig3并且将每个单个的第一分量ma映射到第二分量mb上。在第一数据子元素ga1具有多个分别包括不同的数据类型的第一分量ma并且第二数据子元素gb1具有多个分别包括不同的数据类型的第二分量mb的情况下,必须在第三生成步骤243中生成多个第三迁移函数mig3,尤其是必须针对尚未生成迁移函数的多个第一分量ma和第二分量mb的每对数据类型生成第三迁移函数mig3,其中,每个第三迁移函数mig3分别设计成将多个第一分量ma的一种数据类型的数据映射到多个第二分量mb的一种数据类型的数据上。
[0215]
如果在第二识别步骤225中识别出第一数据子元素ga1的第三数据类型是字段类型并且第一数据子元素gb1的第四数据类型同样是字段类型并且第一数据子元素ga1和第二数据子元素gb1具有相同数量的维度,其中,对于至少一个维度,第一数据子元素ga1具有根据第一索引范围[u0、...、um]索引的第一元素,并且对于至少一个维度,第二数据子元素gb1具有根据第二索引范围[x0、...、xn]索引的第二元素,其中,第一索引范围[u0、...、um]和第二索引范围[x0、...、xn]是相同的,在第六识别步骤253中将每个根据第一索引范围[u0、...、um]索引的第一元素的数据类型识别为第七数据类型并且将每个根据第二索引范围[x0、...、xn]索引的第二元素的数据类型识别为第八数据类型。第七数据类型和第八数据类型可以分别是任意的数据类型,包括字段类型、复合类型和标量,诸如数字、指针或字符串。
[0216]
在其之后,在第七识别步骤255中,在分别根据第一索引范围[u0、...、um]索引的第一元素和根据第二索引范围[x0、...、xn]索引的第二元素之间识别出第三关系,该第三关系能够实现第一元素与第二元素之间的足够精确的关联。当第一元素和第二元素相同地索引时,第一索引范围[u0、...、um]的第一元素和第二索引范围[x0、...、xn]的第二元素彼此相关。在第一索引范围[u0、...、um]的第一元素和第二索引范围[x0、...、xn]的第二元素之间的第三关系暗示在将第一数据子元素ga1的值迁移到第二数据子元素gb1上时第一元素的值也必须被映射到通过第三关系与第一元素相关联的第二元素上。
[0217]
接着,在第四生成步骤257中,基于所述所识别的第七数据类型、所识别的第八数据类型和所识别的第三关系生成第四迁移函数mig4,该第四迁移函数设计成将第七数据类型的数据映射到第八数据类型的数据上,其方式为第四迁移函数mig4读取第一存储区域spa中的第七数据类型的数据,将所读出的数据转换成第八数据类型,并且将转换后的数据存储在第二存储区域spb中。当第七数据类型和第八数据类型相同时,省略了所读取的数据的转换。在第七数据类型和第八数据类型相同时,第一元素的值可以逐块被复制到第二元素的位置。
[0218]
如果第一索引范围[u0、...、um]和第二索引范围[x0、...、xn]不相同,则在索引确定步骤259中在第一数据子元素ga1和第二数据子元素gb1的索引范围中产生间隔[r,s],对此适用的是,r=max[x0,u0]并且s=min[xn,um]。在此,r为所述两个下限x0和u0中较大的那个,而s为所述两个上限xn和um中较小的那个。在确定间隔[r,s]之后,对于根据所述间隔
索引的分别相同地索引的第一元素和第二元素实施第六识别步骤253、第七识别步骤255以及第四生成步骤257。如果间隔[r,s]不包含具有相同索引的第一元素和第二元素,则在第四生成步骤257中不生成第四迁移函数mig4,不执行将第一数据子元素ga1的值数据迁移到第二数据子元素gb1上。替代地,生成第四迁移函数,但不执行该第四迁移函数,使得在这种情况下也不发生迁移。
[0219]
在第一生成步骤201和/或第二生成步骤229和/或第三生成步骤243和/或第四生成步骤257结束之后,在第二检查步骤215中检查是否在第一生成步骤201中能够生成第一迁移函数mig1和/或是否在第二生成步骤229中能够生成第二迁移函数mig2和/或是否在第三生成步骤243中能够生成第三迁移函数mig3和/或是否在第四生成步骤257中能够生成第四迁移函数mig4。
[0220]
根据本发明的方法200可以递归地执行,其方式为第一迁移函数mig1、第二迁移函数mig2、第三迁移函数mig3和第四迁移函数mig4可递归地执行,并且分级层次的迁移函数可以分别调用下一个较低分级层次的迁移函数,其中,第一迁移函数是最高分级层次的迁移函数。
[0221]
迁移函数基于要迁移的数据元素的数据类型生成,并且迁移函数设计成将特定数据类型的数据元素映射到特定数据类型的数据元素上。
[0222]
例如,如果第一数据元素ga和第二数据元素gb分别是复合类型,则生成第一迁移函数mig1,该第一迁移函数mig1设计成将具有至少一个数据子元素的复合类型的数据对象映射到另一个数据对象上,所述另一数据对象同样是复合类型的并且同样具有数据子元素作为复合类型的分量。如果第一数据元素ga和/或第二数据元素gb具有不同数量的分量,则第一数据元素ga和/或第二数据元素gb的数据类型发生变化并且所生成的第一迁移函数mig1具有不同的特性。
[0223]
此外,根据第一数据子元素ga1和第二数据子元素gb1的数据类型,为了将第一数据子元素ga1映射到第二数据子元素gb1上,生成第二迁移函数mig2,该第二迁移函数用于将第一数据子元素ga1的数据类型的数据元素映射到第二数据子元素gb1的数据类型的数据元素上。如果第一数据元素ga和第二数据元素gb分别具有多个第一数据子元素ga1和第二数据子元素gb1,那么当第一数据子元素ga1具有相同的数据类型并且第二数据子元素gb1具有相同的数据类型时,可以多次执行用于映射数据子元素的第二迁移函数mig2。如果第一数据子元素ga1具有不同的数据类型和/或第二数据子元素gb1具有不同的数据类型,则需要多个第二迁移函数来映射数据子元素。
[0224]
如果第一数据子元素ga1和第二数据子元素gb1分别是复合类型并且第一数据子元素ga1例如具有三个第一分量ma并且第二数据子元素gb1例如同样具有三个第二分量mb,则第二迁移函数设计成将具有三个分量的复合类型的一个数据元素映射到具有三个分量的复合类型的另一个数据元素上。在其它数量的分量中,情形是类似的。
[0225]
为了将三个第一分量ma映射到三个第二分量mb上,生成至少一个第三迁移函数mig3,所述至少一个第三迁移函数mig3设计成将第一分量ma的数据类型的数据元素映射到第二分量mb的数据类型的数据元素上。如果三个第一分量ma具有不同的数据类型和/或三个第二分量mb具有不同的数据类型,则必须生成至少两个和最多三个第三迁移函数mig3。如果所有三个第一分量ma分别具有相同的数据类型并且所有三个第二分量mb分别具有相
同的数据类型,则为了将三个第一分量ma映射到三个第二分量mb上而多次执行的第三迁移函数mig3就足够了。
[0226]
在上述的示例中,第一迁移函数mig1设计成将具有同样构造为复合类型的数据元素并且又具有三个分量的分量的复合类型的数据元素映射到同样是复合类型并且具有又构造为复合类型的数据元素并且又具有三个分量的分量的数据元素上。
[0227]
为了将第一数据元素ga映射到第二数据元素gb上,然后根据本发明执行第一迁移函数mig1,该第一迁移函数设计成将第一数据元素ga的复合类型的数据元素映射到第二数据元素gb的复合类型的数据元素上。
[0228]
为了将第一数据子元素ga1映射到第二数据子元素gb1上,第一迁移函数mig1调用第二迁移函数mig2,该第二迁移函数设计成将第一数据子元素ga1的复合类型的数据元素映射到第二数据子元素gb1的复合类型的数据元素上。
[0229]
为了将三个第一分量ma映射到三个第二分量mb上,第二迁移函数mig2又调用第三迁移函数mig3或者第三迁移函数mig3,它们设计成将第一分量ma的数据类型的数据元素映射到第二分量mb的数据类型的数据元素上。
[0230]
如果第一分量ma和第二分量mb分别是标量类型,则以第三迁移函数mig3终止递归地执行迁移函数。在执行第三迁移函数mig3并且将第一分量ma映射到第二分量mb上之后,第三迁移函数mig3结束。由此,第二迁移mig2也将第一数据子元素ga1映射到第二数据子元素gb1上并且同样结束该第二迁移。由此,同样第一迁移函数mig1将第一数据元素ga映射到第二数据元素gb上并且同样结束该第一迁移函数。因此,数据迁移完成。
[0231]
如果第一分量ma和第二分量mb不是标量类型,而是例如是复合类型并且刚好又包括另外的第一分量和另外的第二分量,则上面描述的根据本发明的方法可以任意递归地继续。在这种情况下,需要至少一个另外的第五迁移函数,该第五迁移函数构造为将构造为复合类型的第一分量ma的另外的第一分量映射到第二分量mb的另外的第二分量上。
[0232]
所述第五迁移函数由第三迁移函数mig3调用并且执行,以用于将第一分量ma映射到第二分量mb上。
[0233]
在这种情况下,第五迁移函数根据另外的第一分量和另外的第二分量的数据类型设计成将另外的第一分量的数据类型的数据元素映射到另外的第二分量的数据类型的数据元素上。
[0234]
为了将每个第一分量ma映射到相应的第二分量mb上,第三迁移函数mig3调用相应设计的第五迁移函数,据此所述至少一个另外的第一分量映射到一个另外的第二分量上。在具有不同数据类型的多个另外的第一分量和/或具有不同数据类型的多个另外的第二分量的情况下,必须生成相应数量的第五迁移函数,该第五迁移函数又依次被第三迁移函数调用并且执行。
[0235]
根据单个数据元素的嵌套,其中数据元素布置为复合类型的其它数据元素的分量,所述分量又是复合类型的另一个数据元素的分量等等,可以生成对应数量的迁移函数,这些迁移函数被递归地执行以映射彼此嵌套的数据元素。
[0236]
可以由根据本发明的方法200涵盖的递归的程度不受方法200限制。限制可以仅通过执行方法200的数据处理单元的可供使用的计算能力得出。
[0237]
上述示例可参考数据元素的嵌套程度任意扩展。此外,第一和第二数据子元素以
及第一和第二分量的数量可以任意扩展。在多个第一和第二数据子元素的情况下,必要时必须生成多个第二迁移函数mig2。
[0238]
在第一和第二数据子元素或是第一和第二分量不是复合类型而是字段类型情况下,可以类似地实施上述方法。
[0239]
分别为字段类型的数据元素的彼此嵌套可以通过本发明的方法200来类似地处理,其方式为递归地调用并且执行相应的迁移函数。
[0240]
然而,在映射字段类型的数据元素时的特点与用于映射复合类型的数据元素的迁移函数相比具有在此生成的根据本发明的迁移函数。
[0241]
例如,如果第一数据子元素ga1和第二数据子元素gb1是具有相同维数的字段类型,在这些维数中相应地布置有第一和第二数据元素,则生成第二迁移函数mig2,该第二迁移函数设计成将具有多个维数和第一数据子元素的第一数据元素的数据类型的多个元素的字段类型的数据元素映射到具有多个维数和第二数据子元素的第二数据元素的数据类型的多个元素的字段类型的数据元素上。
[0242]
此外,生成第四迁移函数,该第四迁移函数设计成将第一元素的数据类型的数据元素映射到第二元素的数据类型的数据元素上。第四迁移函数构造为单独将第一数据子元素ga1的第一元素映射到第二数据子元素gb1的相应的第二元素上,并且由第二迁移函数mig2调用并且执行。
[0243]
不同于上述的示例,在字段类型的情况下,第二迁移函数mig2设计成调用在嵌套循环中的第四迁移函数,其中,嵌套循环的数量与字段类型的数据类型的第一和第二数据子元素的维度数量相关。
[0244]
通过由在嵌套循环中的第二迁移函数mig2调用第四迁移函数,第四迁移函数被调用用于将第一元素映射到第二元素上并且映射该第二元素且使其结束,然后在执行循环中第四迁移函数被调用并且执行用于将下一个第一元素映射到下一个第二元素上。通过执行在嵌套循环中的第四迁移函数,可以通过单独地执行第四迁移函数将所有待映射的第一元素映射到第二数据子元素的对应的第二元素上。
[0245]
类似于上面实施的示例,根据本发明的方法200也可应用于任意嵌套数据元素的字段类型的数据类型的数据元素,在所述嵌套中数据元素设置为字段类型的数据类型的其它数据元素的元素。为了执行数据迁移,根据本发明的方法200必要时必须生成另外的第五、第六或另外的迁移函数,这些迁移函数可以递归地执行。
[0246]
在此,根据本发明的方法200能够考虑数据元素的任意程度的嵌套。相反地,通过执行方法200的数据处理单元的计算功率确定可处理的嵌套的边界。
[0247]
上述示例仅用于阐述,并且根据本发明的方法200不应限制于这里示例性描述的实施方式。通过根据本发明的方法200涵盖了关于数据元素、数据子元素、分量、元素的数量、关于所描述的数据元素、数据子元素、分量、元素的相应数据类型、以及关于数据元素、数据子元素、分量和元素的嵌套程度的偏差。
[0248]
如果第一数据元素ga的第一数据类型不能转换为第二数据元素gb的第二数据类型,则第一迁移函数mig1的生成可能失败。例如,当第一数据类型和第二数据类型不兼容时,就是这种情况。如果第一数据子元素ga1的第三数据类型和第二数据子元素gb1的第四数据类型不能彼此转换,则第二迁移函数mig2的生成可能失败。如果第一分量ma的第五数
据类型不能转换为第二分量mb的第六数据类型,则第三迁移函数的生成可能失败。如果第一元素的第七数据类型不能转换为第二元素的第八数据类型,则第四迁移函数mig4的生成可能失败。
[0249]
替代地,在上面提到的情况下可以产生第一迁移函数mig1、第二迁移函数mig2、第三迁移函数mig3或者第四迁移函数mig4,但是这些迁移函数不被执行,因为相应的数据类型不能彼此转换。
[0250]
例如,如果第一数据元素ga的第一数据类型是复合类型并且第二数据元素gb的第二数据类型不是复合类型,则第一数据元素ga不能转换为第二数据元素gb。
[0251]
类似地,如果例如第三数据类型是复合类型并且第四数据类型不是复合类型,则第一数据子元素ga1的第三数据类型不能转换为第二数据子元素gb1的第四数据类型。此外,如果第四数据类型是字段类型并且第三数据类型不是字段类型或者同样是字段类型但是具有不同数量的维度,则第三数据类型不能转换为第四数据类型。
[0252]
此外,当第三数据类型和第四数据类型分别是复合类型,但是第二数据子元素gb1的第四数据类型不包括与第一数据子元素ga1的第一分量ma相关的第二分量mb,第三数据类型的第一数据子元素ga1的值不能转换为第四数据类型的第二数据子元素gb1。
[0253]
此外,如果两个数据类型是字段类型,则第三数据类型不能转换为第四数据类型,但第四数据类型不具有与第三数据类型的第一元素相关的第二元素。
[0254]
类似地,如果第五数据类型和/或第六数据类型是复合类型和/或字段类型,则第一分量ma的第五数据类型不能转换为第二分量mb的第六数据类型。
[0255]
如果第一分量ma的第五数据类型和第二分量mb的第六数据类型或第一元素的第七数据类型或第二元素的第八数据类型是标量类型时,当第六数据类型可以代表所有第五数据类型的值或第八数据类型可以代表所有第七数据类型的值时,则第五数据类型可被转换为第六数据类型或第七数据类型可被转换为第八数据类型。例如,整数int可转换为长整数lint。带符号的16位整数数据类型的值始终可以转换为带符号的64位整数数据类型的值而没有信息损失。必要时,当长整数lint的值的至少一部分可以用整数int代表时,长整数lint也可被转换为整数int。如果在整数int中至少一个与在实际中类似的或相似的值可以被表达,则实际也可被转换为整数int。相反地,例如带符号的64位整数数据类型的值在其能由带符号的16位整数数据类型的值代表时仅可被转换为带符号的16位整数数据类型的值而没有信息损失。
[0256]
尤其是,在iec61131-3标准中被定义为复合类型的struct、class和function_block的数据类型可以相互转换。例如,struct的值可被转换为function_block的值。
[0257]
尤其是,可以将标量类型的待映射的数据元素足够精确地映射到更大标量类型的另一个数据元素上,诸如可以将16位整数映射到64位整数上。
[0258]
此外,如果具有较大标量类型的待映射的数据元素的值可以用所述另一个数据元素的较小标量类型代表,则标量类型的待映射的数据元素能够足够精确地映射到较小标量类型的另一个数据元素上。这在待映射的数据元素的值在以所述另一个数据元素的较小标量类型提供的比特数中表示为二进制数时是这种情况。
[0259]
此外,如果具有较大标量类型的待映射的数据元素的值虽然不可用所述另一个数据元素的较小标量类型代表,但是可以用所述另一个数据元素的较小标量类型表示的最大
值以足够的精度再现待映射的数据元素的值,则标量类型的待映射的数据元素可以足够精确地映射到较小标量类型的另一个数据元素上。为此,可以在迁移待映射的数据元素之前确定极限值,该极限值说明从待映射的数据元素的值的何种大小起不再能以足够的精度由所述另一个数据元素代表该值。这里所描述的内容适用于标量类型的所有第一数据元素ga、第二数据元素gb、数据子元素ga1、第二数据子元素gb1、第一分量ma、第二分量mb、第一元素和第二元素。
[0260]
此外,如果在第一数据元素ga与第二数据元素gb之间或在第一数据子元素ga1与第二数据子元素gb1之间或在第一分量ma与第二分量mb之间或者在第一元素与第二元素之间识别出没有关系,则第一迁移函数mig1、第二迁移函数mig2、第三迁移函数mig3或第四迁移函数mig4的生成可能失败。替代地,可以生成第三迁移函数mig3,但该第三迁移函数mig3随后不被执行,这是因为识别出没有关系。
[0261]
如果能够生成第一迁移函数mig1和/或第二迁移函数mig2和/或第三迁移函数mig3和/或第四迁移函数mig4,则根据针对图3和图4所描述的中断步骤203和第一确定步骤205以及迁移步骤207继续该方法200。
[0262]
该方法继续,直到所有第一数据子元素ga1映射到所有第二数据子元素gb1上,或者所有第一分量ma映射到第二分量mb上,或者所有第一元素映射到第二元素上,其可以根据相应的数据类型彼此映射。为此,由第一迁移函数mig1依次调用第二迁移函数mig2,所述第二迁移函数mig2又依次调用(如果必要)相应的第三迁移函数mig3和/或第四迁移函数mig4。
[0263]
不同于在图3和图4中所示的实施方式,图5中的实施方式的迁移步骤207包括调用并且执行第一数据元素ga和第二数据元素gb的第一迁移函数mig1。在第一数据元素ga和第二数据元素gb上执行第一迁移函数mig1包括:在第一读取步骤217中读取第一存储区域spa中的第一数据元素ga的位置pga处的第一数据元素ga的值,在第一转换步骤219中将所述值转换为第二数据类型,以及在第一写入步骤221中将转换为第二数据类型的值写入第二存储区域spb中的第二数据元素gb的位置pgb。
[0264]
如果第一数据元素ga和第二数据元素gb是复合类型并且第一数据元素ga包括至少一个第一数据子元素ga1并且第二数据元素gb包括至少一个第二数据子元素gb1,则迁移步骤207还包括第一部分迁移步骤231。在第一部分迁移步骤231中,通过第一迁移函数mig1调用第二迁移函数mig2,以用于将第一数据子元素gb1映射到第二数据子元素gb2上。在调用第二迁移函数mig2时,第一迁移函数mig1转移存储位置,在该存储位置上第一数据子元素ga1存储在第一存储器区域spa中并且第二数据子元素gb1存储在第二存储器区域spb中。
[0265]
在调用第二迁移函数mig2之后,第一部分迁移步骤231包括在第二读取步骤233中读取第一存储区域spa中的第一数据子元素ga1的位置pga1处的第一数据子元素ga1的值,在第二转换步骤235中将读取的值转换为第四数据类型的值,以及在第二写入步骤237中将转换为第四数据类型的值写入第二存储区域spb中的第二数据子元素gb的位置pgb1。
[0266]
如果第一数据子元素ga1和第二数据子元素gb1分别是复合类型的并且第一数据子元素ga1包括至少一个第一分量ma并且第二数据子元素gb1包括至少一个第二分量mb,则迁移步骤207还包括第二部分迁移步骤245,在该第二部分迁移步骤中第二迁移函数mig2调用第三迁移函数mig3,以用于将第一分量ma映射到第二分量mb上。在调用第三迁移函数
mig3时,第二迁移函数mig2转移第一存储区域spa中的第一分量ma和第二存储区域spb中的第二分量mb的地址。
[0267]
在调用第三迁移函数mig3之后,第二部分迁移步骤245包括:在第三读取步骤247读取第一存储区域spa中的第一分量ma的位置pma处的第一分量ma的值,在第三转换步骤249中将所读取的值转换为第二分量mb的第六数据类型的值,以及在第三写入步骤251中将转换为第六数据类型的第一分量ma的值写入第二存储区域spb中的第二分量mb的位置pmb。
[0268]
如果第一数据子元素ga1和第二数据子元素gb1分别是具有相同维数的字段类型,并且第一数据子元素ga1包括在至少一个维数中在第一索引范围[u0、...、um]中索引的第一元素,并且第二数据子元素gb1包括在至少一个维数中在第二索引范围[x0、...、xn]中索引的第二元素,则迁移步骤207包括第三部分迁移步骤261,在该第三部分迁移步骤中第二迁移函数mig2调用第四迁移函数mig4,以用于将第一元素映射到第二元素上。在调用第四迁移函数mig4时,第二迁移函数mig2转移第一存储区域spa中的第一元素的存储位置和第二存储区域spb中的相关的第二元素的存储位置。
[0269]
如果第四迁移函数mig4被第二迁移函数mig2调用,则第三部分迁移步骤261包括在第四读取步骤263中读取第一存储区域spa中的第一元素的位置处的第一元素的值,在第四转换步骤265中将所读取的值转换为第二元素的第八数据类型的值,以及在第四写入步骤267中将转换为第八数据类型的值写入第二存储区域spb中的第二元素的位置。
[0270]
如果第一数据元素ga和第二数据元素gb分别包括多个第一数据子元素ga1和多个第二数据子元素gb1,对于它们分别识别出第一关系r1并且其第一数据类型和第二数据类型可相互转换,并且多个第一数据子元素ga1具有不同的第二数据类型,并且多个第二数据子元素gb1具有多个不同的第四数据类型,则第一迁移函数mig1在第一部分迁移步骤231中调用多个不同的第二迁移函数mig2,以用于将多个第一数据子元素ga1映射到多个第二数据子元素gb1上。多个第二迁移函数mig2分别关于不同的第三数据类型和不同的第四数据类型彼此区分。为了将第一数据子元素ga1映射到第二数据子元素gb1上,每个第二迁移函数mig2分别经过第二读取步骤233、第二转换步骤235和第二写入步骤237。
[0271]
如果第一数据子元素ga1分别包括多个第一分量ma,并且第二数据子元素gb1分别包括多个第二分量mb,并且多个第一分量ma具有多个不同的第五数据类型,并且多个第二分量mb具有多个不同的第六数据类型,则在第二部分迁移步骤245中第二迁移函数mig2调用多个第三迁移函数mig3,以用于将多个第一分量ma映射到多个第二分量mb上,其中,第三迁移函数mig3中的每个关于分别待映射的第五数据类型和第六数据类型进行区分。在第二部分迁移步骤245中,每个第三迁移函数mig3执行第三读取步骤247、第三转换步骤249以及第三写入步骤251,以用于将第一分量ma映射到第二分量mb上。
[0272]
如果第一数据子元素ga1包括多个第一元素并且第二数据子元素gb1包括多个第二元素,则为了将多个第一元素映射到第二元素上,在第三部分迁移步骤261中由第二迁移函数mig2多次相继调用第四迁移函数mig4,以便将每个第一元素映射为根据第三关系相关联的第二元素。对于每个映射,第四迁移函数mig4在第三部分迁移步骤261中执行第四读取步骤263、第四转换步骤265和第四写入步骤267。替代地,可以通过第三关系有关联的第一索引范围与有关联的第二索引范围相关联。
[0273]
在一个实施方式中,mig2包括彼此嵌套的循环(每个维数一个),其中,在最里面的
循环中调用mig4。由此的优点是,第二迁移函数mig2的代码大小在字段类型的维数上是线性的并且随着字段类型的大小非线性地增长。如果在没有一个循环或多个循环的情况下对于字段类型的每个元素产生对第四迁移函数mig4的调用,则第二迁移函数mig2的代码将在大字段类型的情况下快速地达到有问题的大小并且不再被执行或者很难被执行。
[0274]
替代地,为了将多个第一元素映射到多个第二元素上,可以生成多个第四迁移函数mig4,从而为了将多个第一元素映射到多个第二元素上,依次由第二迁移函数mig2调用多个第四迁移函数mig4,从而根据单独的第四迁移函数mig4将每个第一元素映射到根据第三关系相关联的第二元素上。每个单独的第四迁移函数mig4经历第四读取步骤263、第四转换步骤265和第四写入步骤267,以便在第三部分迁移步骤261中将相应的第一元素映射到相应的第二元素上。
[0275]
在迁移步骤207结束之后,根据图4中的实施方式的方法200以第一检查步骤209、替换步骤202和第一控制步骤211或第二控制步骤213继续。
[0276]
根据一个实施方式,自动化系统100包括翻译模块109,该翻译模块设计成解释自动化系统100的控制程序。此外,翻译模块109设计成执行第一生成步骤201、第一识别步骤223、第二识别步骤225、第三识别步骤227、第二生成步骤229、第四识别步骤239、第五识别步骤241、第三生成步骤243、第六识别步骤253、第七识别步骤255、第四生成步骤257以及索引确定步骤259。
[0277]
根据另一个实施方式,可以在执行迁移步骤207之前初始化第二数据元素gb。通过初始化第二数据元素gb,将包括所有第二数据子元素gb1的值或者说所有第二分量mb的值或者所有第二元素的值的第二数据元素gb的值确定为初始值。
[0278]
在实施包括第一部分迁移步骤231、第二部分迁移步骤245和第三部分迁移步骤261的迁移步骤207时,对于已经识别出与相应的第一数据子元素ga1、相应的第一分量ma和/或相应的第一元素的第一关系r1、第二关系r2和/或第三关系并且能够生成第二迁移函数mig2、第三迁移函数mig3和/或第四迁移函数mig4的第二数据子元素gb1、第二分量mb和/或第二元素,相应的初始值被通过识别出的关系相关联的第一数据子元素ga1、第一分量ma和/或第一元素的相应的迁移后的值覆盖。对于识别出与第一数据子元素ga1、第一分量ma和/或第一元素之一没有关系的第二数据子元素gb1、第二分量mb和/或第二元素,在迁移步骤207结束之后保留相应的初始值。
[0279]
在周期地执行第二控制程序b时在第一控制步骤211中基于第二数据元素gb在考虑对于相应的对象相应地关联的初始值的情况下使用第二数据元素gb的对象,对于所述对象在第一数据元素ga中不能以第一关系r1、第二关系r2和/或第三关系的形式识别出对应情况。
[0280]
图6示出根据一个实施方式的自动化系统100的作为第一控制程序a的更新版本的第二控制程序b的生成过程的示意图。
[0281]
根据在图6中所示的实施方式,用于生成第二控制程序b的翻译模块109将第二控制程序b的源文本qb考虑作为第一控制程序a的更新版本。为此,翻译模块109在输入步骤309中读入第二控制程序b的源文本qb。在编译过程301的翻译步骤303中,翻译模块109将第二控制程序b的源文本qb翻译成第二控制程序b的可执行代码pb,该可执行代码pb可由自动化系统100的控制器101执行,以用于基于第二控制程序b控制自动化系统100。第二控制程
序b的可执行代码pb在输出步骤311中输出翻译模块109。
[0282]
在编译过程301中,翻译模块109进一步考虑在输入步骤309中翻译模块读入的第一数据类型tgad的定义。在第一数据元素ga的第一数据类型tgad的定义中,定义了第一数据元素ga的第一数据类型以及所有第一数据子元素ga1的所有第三数据类型、所有第一数据子元素ga1的所有第一分量ma的所有第五数据类型和第一数据元素ga的所有第一数据子元素ga1的所有第一元素的所有第七数据类型。因此,第一数据类型tgad的定义包括第一数据元素ga的所有对象的所有第一数据类型、所有第三数据类型、所有第五数据类型tma和所有第七数据类型。
[0283]
此外,翻译模块109在编译过程301中从第二控制程序b的源文件qb在第二产生步骤307中产生第二数据类型tgbd的定义,该定义在输出步骤311中被输出。类似于第一数据类型tgad的定义,第二数据类型tgbd的定义包括第二数据元素gb的第二数据类型以及所有第二数据子元素gb1的所有第四数据类型以及所有第二数据子元素gb1的所有第二分量mb的所有第六数据类型以及第二数据元素gb的所有第二数据子元素gb1的所有第二元素的所有第八数据类型。类似于第一数据类型tgad的定义,第二数据类型tgbd的定义包括第二数据类型gb的所有对象的所有第二数据类型、所有第四数据类型、所有第六数据类型和所有第八数据类型。
[0284]
此外,翻译模块109在编译过程301中在第一产生步骤305中产生迁移代码mab,该迁移代码在输出步骤311中被输出。迁移代码mab包括分别在第一生成步骤201中、在第二生成步骤229中、在第三生成步骤243中以及在第四生成步骤257中生成的所有第一迁移函数mig1、所有第二迁移函数mig2、所有第三迁移函数mig3和所有第四迁移函数mig4。为了实施第一产生步骤305和与此相关的第一生成步骤201、第二生成步骤229、第三生成步骤243和第四生成步骤257,翻译模块109考虑第一数据类型tgad的定义以及第二数据类型tgbd的在第二产生步骤307中产生的定义。
[0285]
基于包含第一数据元素ga的所有对象的所有第一数据类型、所有第三数据类型、所有第五数据类型tgma和所有第七数据类型的第一数据类型tgad的定义,并且考虑到包含第二数据元素gb的所有对象的所有第二数据类型、所有第四数据类型、所有第六数据类型tgmb和所有第八数据类型的第二数据类型tgbd的定义,通过翻译模块109在第一生成步骤201中生成第一迁移函数mig1、在第二生成步骤229中生成第二迁移函数mig2、在第三生成步骤243中生成第三迁移函数mig3以及在第四生成步骤257中生成第四迁移函数mig4。替代地,翻译模块109可以从第二控制程序b的源文本qb直接推断出用于生成迁移函数的信息。除了所有第一迁移函数mig1、所有第二迁移函数mig2、所有第三迁移函数mig3以及所有第四迁移函数mig4之外,在第一产生步骤305中由翻译模块109产生的迁移代码mab包括多个执行规定,如调用和实施各个第一迁移函数mig1、第二迁移函数mig2、第三迁移函数mig3以及第四迁移函数mig4用于将第一数据元素ga的相应对象迁移到第二数据元素gb的相应对象上。
[0286]
图7示出根据一个实施方式的自动化系统100的控制程序a的数据元素的迁移过程的示意图。
[0287]
在图7中示出第一数据元素ga到第二数据元素gb的迁移过程,其中,第一数据元素ga包括第一数据子元素ga1,并且第二数据元素gb包括第二数据子元素gb1。所示的迁移过
程包括在上述的生成步骤中产生迁移函数并且通过使用相应的迁移函数实施待迁移的对象的映射。
[0288]
首先,翻译模块109在第一生成步骤201中生成第一迁移函数mig1,在第二生成步骤229中生成第二迁移函数mig2,在第三生成步骤243中生成第三迁移函数mig3并且在第四生成步骤257中生成第四迁移函数mig4。迁移函数是迁移代码mab的组成部分。
[0289]
第一迁移函数mig1用于将第一数据元素ga映射到第二数据元素gb上。第二迁移函数mig2用于将第一数据子元素ga1映射到第二数据子元素gb1上。所示的实施方式限制于将第一数据元素ga映射到第二数据元素gb上并且将第一数据子元素ga1映射到第二数据子元素gb1上。未示出其它第一分量ma、第二分量mb、第一元素以及第二元素。如果第一数据子元素ga1不具有第一分量ma或第一元素,或者第二数据子元素gb1不具有第二分量mb或第二元素,则不生成第三迁移函数mig3和第四迁移函数mig4。
[0290]
为了执行迁移,被调用的第一迁移函数mig1在第一读取步骤217中读取第一存储器区域spa中的第一数据元素ga的值。在此,已知第一数据元素ga的第一数据类型的第一迁移函数mig1识别第一数据元素ga的第一数据子元素ga1。所述识别可以包括第一迁移函数mig1从给定ga的地址推导出ga1的地址。此外,第一迁移函数mig1知道第二数据元素gb的第二数据类型并且识别第二数据元素gb的第二数据子元素gb1。此外,第一迁移函数mig1知道第一存储区域spa中的第一数据元素ga的存储位置pga和第一数据子元素ga1的存储位置pga1。替代地,在调用第一迁移函数mig1时,第一数据元素ga的存储位置pga和第一数据子元素ga1的存储位置pga1在第一存储区域spa中和/或第二数据元素gb的存储位置pgb和第二数据子元素gb1的存储位置pgb1在第二存储区域spb上被传输给第一迁移函数mig1。替代地,第一迁移函数mig1可以基于第一数据元素ga的存储位置pga和第二数据元素gb的存储位置pgb推导出第一数据子元素ga1的存储位置pga1和第二数据子元素gb1的存储位置pgb1。此外,第一迁移函数mig1知道第二数据元素gb的存储位置pgb和第二存储区域spb中的第二数据子元素gb1的存储位置pgb1。
[0291]
接着,第一迁移函数mig1在第一部分迁移步骤231中调用第二迁移函数mig2,以用于将第一数据子元素ga1映射到第二数据子元素gb1上。此外,第一迁移函数mig1将第一存储区域spa中的第一数据子元素ga1的存储位置pga1和第二存储区域spb中的第一数据子元素gb1的存储位置pgb1转移给第二迁移函数mig2。
[0292]
接着,第二迁移函数mig2在第二读取步骤233中读取第一存储区域spa中的第一数据子元素ga1的位置pga1处的第一数据子元素ga1的值。接着,第二迁移函数mig2在第二转换步骤235(在图7中未示出)中将第一数据子元素ga1的第三数据类型的所读取的值转换为第二数据子元素gb1的第四数据类型的值。
[0293]
接下来,第二迁移函数mig2在第二写入步骤237中将第一数据子元素ga1的转换后的值写入第二存储区域spb中的第二数据子元素gb1的存储位置pgb1。因此,将第一数据子元素ga1的值映射到第二数据子元素gb1上。
[0294]
在下文中,在第一结束步骤238中结束第二迁移函数mig2并且进一步执行第一迁移函数mig1。
[0295]
在下文中,第一迁移函数mig1在第一写入步骤221中将第一数据元素ga的值写入第二存储区域spb中的第二数据元素gb的存储位置pgb。因此,第一数据元素ga的值映射到
第二数据元素gb上并且迁移过程结束。在本实施方式中,第一数据元素ga仅包括第一数据子元素ga1并且第二数据元素gb仅包括第二数据子元素gb1。根据本发明的方法200不应受限于此,并且不仅第一数据元素ga而且第二数据元素gb都能够具有更复杂的数据结构并且分别包括多个第一数据子元素ga1和第二数据子元素gb1,所述第一数据子元素和第二数据子元素又能够具有复杂的数据结构并且一方面包括多个第一分量ma和/或第一元素或者多个第二分量mb和/或多个第二元素。
[0296]
方法200递归地继续,出于清楚的原因,这在图7中未示出。在多个第一数据子元素ga1和第二数据子元素gb1中,通过第一迁移函数mig1依次多次调用第二迁移函数mig1。替代地,第二迁移函数mig2被多次依次调用。第二迁移函数可以接着在必要时多次调用第三迁移函数mig3和/或第四迁移函数mig4。第二迁移函数mig2被执行,直到所有的第三迁移函数mig3和/或第四迁移函数mig4结束为止。第一迁移函数mig1执行,直至所有的第二迁移函数mig2结束。
[0297]
图8示出根据另一个实施方式的自动化系统100的控制程序a的数据元素的迁移过程的示意图。
[0298]
在图8中示出所述迁移过程的另一个实施方式。不同于图7中的实施方式,图8中的第一数据元素ga包括第一数据子元素ga1和另外的第一数据子元素ga11,其中第一数据子元素ga1是复合类型并且包括三个第一分量ma。所述另外的第一数据子元素ga11是不同的第三数据类型,该第三数据类型在下面的阐述中不重要并且因此不予考虑。
[0299]
第二数据子元素gb同样包括第二数据子元素gb1和另外的第二数据子元素gb11,其中第二数据子元素gb1同样是复合类型并且包括三个第二分量mb。所述另外的第二数据子元素gb11又是不同的第四数据类型,其在进一步解释中不重要并且因此保持不予考虑。
[0300]
第一数据子元素ga1和第二数据子元素gb1分别通过第一关系r1彼此关联。所述另外的第一数据子元素ga11既不与第二数据子元素gb1也不与所述另外的第二数据子元素gb11通过关系相关联。同样的内容适用于所述另外的第二数据子元素gb11,其同样既不与第一数据子元素ga1也不与所述另外的第一数据子元素ga11相关联。
[0301]
第一数据子元素ga1的两个第一分量ma通过第二关系r2与第二数据子元素gb1的两个第二分量mb相关联。第一数据子元素ga1的第一分量ma不与第二数据子元素gb1的第二分量mb相关联。同样的内容适用于第二数据子元素gb1的第二分量mb,该第二分量又与第一数据子元素ga1的第一分量ma不相关联。
[0302]
为了将第一数据子元素ga1映射到与该第一数据子元素ga1通过第一关系r1相关联的第二数据子元素gb1上,第二迁移函数mig2对于每个通过r2相关联的第一分量ma和第二分量mb的对分别调用第三迁移函数mig3,其中,在此传递相应的第一分量ma和第二分量mb的存储地址。之前,第二迁移函数mig2如针对图7所阐述的由第一迁移函数mig1调用,其中,在此第一数据子元素ga1和第二数据子元素gb1的相应的存储位置被传输给第二迁移函数mig2,这在图8中为了清楚起见未示出。
[0303]
第二迁移函数mig2在了解第一数据子元素ga1的第一分量ma和第二数据子元素gb1的第二分量mb的数据类型的情况下生成,并且因此在了解第一数据子元素ga1的第一分量ma的数据类型和第二数据子元素gb1的第二分量mb的数据类型的情况下,在第二部分迁移步骤245中调用相应的第三迁移函数mig3,以用于将第一数据子元素ga1的第一分量ma映
射到第二数据子元素gb1的第一分量mb上。第三迁移函数mig3首先将第一分量ma映射到第二分量mb上,例如左边的第一分量ma映射到左边的第二分量mb上,并且然后结束下一个。如果第一分量ma和第二分量mb分别具有相同的数据类型,则重新调用第三迁移函数mig2并且将右边的第一分量ma映射到中间的第二分量mb上。接着,在第二结束步骤252中结束第三迁移函数mig3并且继续执行第二迁移函数mig2。如果第一分量ma和第二分量mb的数据类型各不相同,为了将第一分量ma映射到第二分量mb上而调用两个不同的第三迁移函数。
[0304]
第三迁移函数mig3从第二迁移函数mig2获得第一存储区域spa中的左侧的第一分量ma的存储位置以及第二存储区域spb中的左侧的第二分量mb的存储位置。由第三迁移函数mig3仅映射左边的第一分量ma,该第一分量通过第二关系r2与第二数据子元素gb1的左边的两个第二分量mb相关。接着,第三迁移函数mig3结束并且由第二迁移函数mig2重新调用,以便将右边的第一分量ma映射到中间的第二分量mb上。为此,第三迁移函数mig3从第二迁移函数mig2获得第一存储区域spa中的右边的第一分量ma的存储位置以及第二存储区域spb中的中间的第二分量mb的存储位置。在该实施方式中,第三迁移函数mig3仅映射右边的第一分量ma。
[0305]
为了映射,第三迁移函数mig3在两种情况下在第三读取步骤247中分别读取第一数据子元素ga1的第一分量ma的值。在第三转换步骤249(在图8中未示出)中,第三迁移函数将第一分量ma的所读出的值转换为第二数据子元素gb1的第二分量mb的第六数据类型。在第三写入步骤251中,第三迁移函数mig3将转换后的值写入第二存储区域spb中的第二分量mb的位置。由此,将第一分量ma的值映射到第二分量mb上。
[0306]
不通过第二关系r2与第二数据子元素gb1的第二分量mb相关联的中间的第一分量ma不通过第三迁移函数mig3被映射到第二数据子元素gb1上。因此,中间的第一分量ma的信息不能被传输到第二数据元素gb中。
[0307]
在将所述两个第一分量ma映射到所述两个第二分量mb上之后,第三迁移函数mig3在第二结束步骤252中结束并且第二迁移函数mig2进一步被执行。如果另外的第一分量ma映射到另外的第二分量mb上或另外的第一元素映射到另外的第二元素上,则第二迁移函数mig2执行这些并且调用另外的第三迁移函数mig3和/或第四迁移函数mig4。如果没有另外的分量或元素要迁移,则第二迁移函数mig2在第一结束步骤238中结束。由此,将第一数据子元素ga1的值映射到第二数据子元素gb1上。
[0308]
在数据迁移中,通过第一关系r1与两个第二数据子元素gb1、gb11中的任何一个不关联的所述另外的第一数据子元素ga11没有映射到第二数据子元素gb1、gb11上。因此,所述另外的第一数据子元素ga11的信息不能被传输到第二数据元素gb中。
[0309]
在初始化步骤269中初始化与第一数据子元素ga1不相关的另外的第二数据子元素gb11和与第一分量ma不相关的右边的第二分量mb,并且将所述另外的第二数据子元素gb11的值和第二分量mb的值设定为初始值。替代地,可以在执行迁移函数之前初始化第二数据元素gb的所有第二数据子元素gb1、第二分量mb和/或第二元素。通过迁移或者执行迁移函数,利用相应的第一数据子元素ga1、第一分量ma和/或第一数据元素ga的第一元素的值覆盖第二数据元素gb的第二数据子元素gb1、第二分量mb和/或第二元素的初始值。
[0310]
就此,第一数据子元素ga1到第二数据子元素gb1的迁移结束。通过将第二迁移函数和第三迁移函数应用到复合类型的第一数据子元素ga1上,由第一数据元素ga的值表示
的第一控制程序a的全局状态的一部分能够被映射到第二数据元素gb上。在迁移过程中,不能映射在第二数据元素gb中不存在对应关系的第一数据元素ga的对象,尤其是不能通过第一关系r1与第二数据元素gb1相关联的所示的另外的第一数据子元素ga11,以及不能通过第二关系r2与第二分量mb相关联的所示的中间的第一分量ma。
[0311]
第二数据元素gb包括在迁移过程结束之后能够通过应用相应的迁移函数映射的第一元素的对象的值以及其值包含初始值的对象、尤其是通过第一关系r1与第一数据子元素ga1不相关联的另外的第二数据子元素gb11和通过第二关系r2与第一分量ma不相关联的右边的第二分量mb。
[0312]
在图8中没有描述其它步骤,这些步骤必要时用于完全迁移第一控制程序a和自动化系统100在基于第一控制程序a最近执行的控制周期的时刻的通过第一数据元素ga的值表示的全局状态。字段类型的第一数据子元素ga1到同样字段类型的第二数据子元素gb1的数据迁移类似于图8中所描述的迁移过程那样实施。与上述的复合类型的迁移的区别通过如下方式得出,即字段类型的数据子元素ga1的第一元素全部具有相同的数据类型,这同样适用于字段类型的数据子元素ga1的第一元素,从而仅需要第四迁移函数mig4,该第四迁移函数在一个循环中或在嵌套的循环中被执行并且依次单个地将第一元素映射到第二元素上。
[0313]
附图标记列表
[0314]
100
ꢀꢀꢀꢀꢀꢀ
自动化系统
[0315]
101
ꢀꢀꢀꢀꢀꢀ
控制器
[0316]
103
ꢀꢀꢀꢀꢀꢀ
主用户
[0317]
105
ꢀꢀꢀꢀꢀꢀ
从用户
[0318]
107
ꢀꢀꢀꢀꢀꢀ
总线系统
[0319]
109
ꢀꢀꢀꢀꢀꢀ
编译模块
[0320]aꢀꢀꢀꢀꢀꢀꢀꢀ
第一控制程序
[0321]
pa
ꢀꢀꢀ
第一可执行代码
[0322]
mab
ꢀꢀꢀꢀꢀ
迁移代码
[0323]
sp
ꢀꢀꢀ
存储器
[0324]
spa
ꢀꢀꢀꢀꢀ
第一存储区域
[0325]
ga
ꢀꢀꢀ
第一数据元素
[0326]
pga
ꢀꢀꢀ
第一数据元素的存储位置
[0327]
tgad
ꢀꢀ
第一数据类型的定义
[0328]
ga1
ꢀꢀꢀꢀꢀ
第一数据子元素
[0329]
ga11
ꢀꢀꢀꢀꢀ
另外的第一数据子元素
[0330]
pga1
ꢀꢀ
第一数据子元素的存储位置
[0331]
ma
ꢀꢀꢀꢀꢀꢀ
第一分量
[0332]
pma
ꢀꢀꢀꢀꢀ
第一分量的存储位置
[0333]bꢀꢀꢀꢀꢀꢀꢀ
第二控制程序
[0334]
qb
ꢀꢀꢀ
第二控制程序的源文本
[0335]
pb
ꢀꢀ
第二可执行代码
[0336]
spb
ꢀꢀꢀꢀꢀ
第一存储区域
[0337]
gb
ꢀꢀꢀ
第二数据元素
[0338]
pgb
ꢀꢀꢀꢀ
第二数据元素的存储位置
[0339]
tgbd第二数据类型的定义
[0340]
gb1
ꢀꢀꢀꢀꢀ
第二数据子元素
[0341]
gb11
ꢀꢀꢀꢀꢀ
另外的第二数据子元素
[0342]
pgb1
ꢀꢀꢀꢀ
第二数据子元素的存储位置
[0343]
mb
ꢀꢀꢀꢀꢀꢀ
第二分量
[0344]
pmb
ꢀꢀꢀꢀꢀ
第二分量的存储位置
[0345]
r1
ꢀꢀꢀꢀ
第一关系
[0346]
r2
ꢀꢀꢀ
第二关系
[0347]
mig1
ꢀꢀꢀꢀ
第一迁移函数
[0348]
mig2
ꢀꢀꢀꢀ
第二迁移函数
[0349]
mig3
ꢀꢀꢀꢀ
第三迁移函数
[0350]
mig4
ꢀꢀꢀꢀ
第四迁移函数
[0351]
200
ꢀꢀꢀꢀꢀꢀ
用于更新控制程序的方法
[0352]
201
ꢀꢀꢀꢀꢀꢀ
第一生成步骤
[0353]
202
ꢀꢀꢀꢀꢀꢀ
替换步骤
[0354]
203
ꢀꢀꢀꢀꢀꢀ
中断步骤
[0355]
204
ꢀꢀꢀꢀꢀꢀ
第一读取/写入步骤
[0356]
205
ꢀꢀꢀꢀꢀꢀ
第一确定步骤
[0357]
206
ꢀꢀꢀꢀꢀꢀ
第二读取/写入步骤
[0358]
207
ꢀꢀꢀꢀꢀꢀ
迁移步骤
[0359]
209
ꢀꢀꢀꢀꢀꢀ
第一检查步骤
[0360]
211
ꢀꢀꢀ
第一控制步骤
[0361]
213
ꢀꢀꢀꢀꢀꢀ
第二控制步骤
[0362]
215
ꢀꢀꢀꢀꢀꢀ
第二检查步骤
[0363]
217
ꢀꢀꢀꢀꢀꢀ
第一读取步骤
[0364]
219
ꢀꢀꢀꢀꢀꢀ
第一转换步骤
[0365]
221
ꢀꢀꢀꢀꢀꢀ
第一写入步骤
[0366]
223
ꢀꢀꢀꢀꢀꢀ
第一识别步骤
[0367]
225
ꢀꢀꢀꢀꢀꢀ
第二识别步骤
[0368]
227
ꢀꢀꢀꢀꢀꢀ
第三识别步骤
[0369]
229
ꢀꢀꢀꢀꢀꢀ
第二生成步骤
[0370]
231
ꢀꢀꢀꢀꢀꢀ
第一部分迁移步骤
[0371]
233
ꢀꢀꢀꢀꢀꢀ
第二读取步骤
[0372]
235
ꢀꢀꢀꢀꢀꢀ
第二转换步骤
[0373]
237
ꢀꢀꢀꢀꢀꢀ
第二写入步骤
[0374]
238
ꢀꢀꢀꢀꢀꢀ
第一结束步骤
[0375]
239
ꢀꢀꢀꢀꢀꢀ
第四识别步骤
[0376]
241
ꢀꢀꢀꢀꢀꢀ
第五识别步骤
[0377]
243
ꢀꢀꢀꢀꢀꢀ
第三生成步骤
[0378]
245
ꢀꢀꢀꢀꢀꢀ
第二部分迁移步骤
[0379]
247
ꢀꢀꢀꢀꢀꢀ
第三读取步骤
[0380]
249
ꢀꢀꢀꢀꢀꢀ
第三转换步骤
[0381]
251
ꢀꢀꢀꢀꢀꢀ
第三写入步骤
[0382]
252
ꢀꢀꢀꢀꢀꢀ
第二结束步骤
[0383]
253
ꢀꢀꢀꢀꢀꢀ
第六识别步骤
[0384]
255
ꢀꢀꢀꢀꢀꢀ
第七识别步骤
[0385]
257
ꢀꢀꢀꢀꢀꢀ
第四生成步骤
[0386]
259
ꢀꢀꢀꢀꢀꢀ
索引确定步骤
[0387]
261
ꢀꢀꢀꢀꢀꢀ
第三部分迁移步骤
[0388]
263
ꢀꢀꢀꢀꢀꢀ
第四读取步骤
[0389]
265
ꢀꢀꢀꢀꢀꢀ
第四转换步骤
[0390]
267
ꢀꢀꢀꢀꢀꢀ
第四写入步骤
[0391]
268
ꢀꢀꢀꢀꢀꢀ
第三返回步骤
[0392]
269
ꢀꢀꢀꢀꢀꢀ
初始化步骤
[0393]
301
ꢀꢀꢀꢀꢀꢀ
编译过程
[0394]
303
ꢀꢀꢀꢀꢀꢀ
翻译步骤
[0395]
305
ꢀꢀꢀꢀꢀꢀ
第一产生步骤
[0396]
307
ꢀꢀꢀꢀꢀꢀ
第二产生步骤
[0397]
309
ꢀꢀꢀꢀꢀꢀ
输入步骤
[0398]
311
ꢀꢀꢀ
输出步骤
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1