专利名称:控制装置以及控制方法
专利类型:发明专利
专利申请号:CN201980038865.8
专利申请(专利权)人:欧姆龙株式会社
权利人地址:日本京都府京都市下京区盐小路通堀川东入南不动堂町801番地
专利发明(设计)人:荒井航
专利摘要:本发明涉及一种控制装置以及控制方法。在存在多个对共享变量进行定义的程序时,防止变量名发生冲突而意外覆盖数据。控制装置(1)包括程序管理部(11)、数据存储部(13a)及共享变量符号表与(13b),程序管理部(11)获取第一用户程序的标识符,生成包含在所述第一用户程序中经定义的共享变量的变量名与所述标识符的共享变量名,将所述共享变量名与所述共享变量的地址相关联地记录到共享变量符号表(13b)中。
主权利要求:
1.一种控制装置,其特征在于,包括:
程序管理部,执行第一用户程序及第二用户程序;
数据存储部,存储从所述第一用户程序及所述第二用户程序这两者能够参照的共享变量的数据,其中所述第一用户程序中经定义的所述共享变量的变量名与所述第二用户程序中经定义的所述共享变量的变量名相同;以及共享变量符号表,存储所述共享变量在所述数据存储部中的地址,所述程序管理部获取所述第一用户程序的标识符,生成共享变量名,所述共享变量名包含在所述第一用户程序中经定义的所述共享变量的变量名与所述标识符,将所述共享变量名与所述共享变量的所述地址相关联地记录到所述共享变量符号表中。
2.根据权利要求1所述的控制装置,其特征在于,所述程序管理部在从所述第二用户程序接受将所述共享变量名作为关键字来读取或写入所述共享变量的命令时,从所述共享变量符号表中获取与所述共享变量名对应的所述地址,使用所述地址来读取或写入所述数据存储部的所述共享变量。
3.根据权利要求1或2所述的控制装置,其特征在于,所述第一用户程序已被编译成机器语言,
所述第一用户程序包含所述共享变量的所述变量名的信息与所述地址的信息,所述程序管理部从所述第一用户程序中获取所述共享变量的所述变量名与所述地址。
4.根据权利要求1或2所述的控制装置,其特征在于,所述第一用户程序为解释器型程序,
所述第一用户程序包含所述共享变量的所述变量名的信息,所述程序管理部作为所述第一用户程序的解释器发挥功能,所述程序管理部在从所述第一用户程序获取所述共享变量的所述变量名时,生成所述共享变量名,若在所述共享变量符号表中记录有所述共享变量名,则获取所述共享变量的所述地址,若在所述共享变量符号表中未记录有所述共享变量名,则决定分配给所述共享变量的所述地址。
5.根据权利要求3所述的控制装置,其特征在于,所述第一用户程序包含所述标识符的信息,所述程序管理部从所述第一用户程序获取所述标识符。
6.根据权利要求3所述的控制装置,其特征在于,所述程序管理部从设定文件获取所述标识符。
7.根据权利要求1或2所述的控制装置,其特征在于,所述程序管理部在执行所述第二用户程序时,制作非共享符号表,所述非共享符号表记录有非共享变量与所述非共享变量的地址,若在所述非共享符号表中记录有在所述第二用户程序中所参照的变量的变量名,则判断所述变量为非共享变量,若在所述非共享符号表中未记录有在所述第二用户程序中所参照的所述变量的变量名,则判断所述变量为共享变量。
8.根据权利要求1或2所述的控制装置,其特征在于,所述第一用户程序与所述第二用户程序包含互不相同的编程语言。
9.根据权利要求1或2所述的控制装置,其特征在于,所述标识符包含所述第一用户程序的路径。
10.根据权利要求1或2所述的控制装置,其特征在于,所述标识符包含所述第一用户程序的文件名。
11.一种控制方法,是执行第一用户程序及第二用户程序的方法,所述控制方法的特征在于:获取所述第一用户程序的标识符,
生成共享变量名,所述共享变量名包含从所述第二用户程序能够参照且在所述第一用户程序中经定义的共享变量的变量名与所述标识符,其中所述第一用户程序中经定义的所述共享变量的变量名与所述第二用户程序中经定义的所述共享变量的变量名相同,将所述共享变量名与所述共享变量的地址相关联地记录到共享变量符号表中,使所述共享变量的数据存储在数据存储部中的与所述地址对应的区域中。 说明书 : 控制装置以及控制方法技术领域[0001] 本发明涉及一种用于防止在用户程序间共享的数据被意外覆盖的控制装置以及所述控制装置的控制方法。背景技术[0002] 以往,已知有如下所述的控制装置(参照专利文献1)。即,当存在多个用户程序时,经由数据存储部来进行这些用户程序之间的数据交换。当在程序间进行数据交换时,对数据给予变量名,各用户程序将此变量名设为关键字(key)来从数据存储部进行数据的写入或读取。[0003] 而且,以往,已知有用于不同的应用架构(applicationframework)间的数据服务(dataservice)的平台(参照专利文献2)。[0004] 而且,以往,已知有一种语言管理系统的标识管理方式,对处理规范描述或语言描述的语言处理系统中的输入/输出规范描述中的标识、或者输入源程序/输出对象程序中的标识进行管理(参照专利文献3)。[0005] 现有技术文献[0006] 专利文献[0007] 专利文献1:日本公开专利公报“特开2000‑132208号公报”[0008] 专利文献2:日本公开专利公报“特开2006‑244488号公报”[0009] 专利文献3:日本公开专利公报“特开平4‑260134号公报”发明内容[0010] 发明所要解决的问题[0011] 但是,所述的任何技术均不是在存在多个程序时,防止变量名发生冲突而意外覆盖数据的技术。[0012] 本发明的一实施例的目的在于,在存在多个对共享变量进行定义的程序时,防止变量名发生冲突而意外覆盖数据。[0013] 解决问题的技术手段[0014] 为了解决所述问题,本发明的一方案的控制装置包括:程序管理部,执行第一用户程序及第二用户程序;数据存储部,存储从所述第一用户程序及所述第二用户程序这两者能够参照的共享变量的数据;以及共享变量符号表,存储所述共享变量在所述数据存储部中的地址,所述程序管理部获取所述第一用户程序的标识符,生成包含在所述第一用户程序中经定义的所述共享变量的变量名与所述标识符的共享变量名,将所述共享变量名与所述共享变量的所述地址相关联地记录到所述共享变量符号表中。[0015] 为了解决所述问题,本发明的一方案的控制方法,其是执行第一用户程序及第二用户程序的方法,所述控制方法是:获取所述第一用户程序的标识符,生成包含从所述第二用户程序能够参照且在所述第一用户程序中经定义的共享变量的变量名与所述标识符的共享变量名,将所述共享变量名与所述共享变量的地址相关联地记录到共享变量符号表中,使所述共享变量的数据存储在数据存储部中的与所述地址对应的区域中。[0016] 发明的效果[0017] 根据本发明的一方案,在存在多个对共享变量进行定义的程序时,能够防止变量名发生冲突而意外覆盖数据。附图说明[0018] 图1是示意性地表示本发明的控制装置的结构的一例的框图。[0019] 图2是例示图1的共享变量符号表的详细的图。[0020] 图3是程序管理部的结构例2的程序管理部所执行的工序的流程图。[0021] 图4是程序A的结构例2的程序管理部所执行的工序的流程图。[0022] 图5是程序管理部的结构例3的程序管理部所执行的工序的流程图。[0023] 图6是表示本发明的实施方式1的控制方法中的各工序的流程图。[0024] 符号的说明[0025] 1:控制装置[0026] 11:程序管理部[0027] 11a:程序A管理部[0028] 11b:程序B管理部[0029] 12:辅助存储装置[0030] 13:存储器[0031] 13a:数据存储部[0032] 13b:共享变量符号表具体实施方式[0033] §1适用例[0034] 使用图1来说明本实施方式的控制装置的适用场景的一例。图1是示意性表示本实施方式的控制装置的结构的一例的框图。本实施方式的控制装置1是如下所述的装置,即,用于在存在多个对共享变量进行定义的用户程序时,防止变量名发生冲突而意外覆盖数据。[0035] 如图1所示,控制装置1包括程序管理部11、辅助存储装置12及存储器13。[0036] 程序管理部11包含程序A管理部11a与程序B管理部11b。本实施方式中,由程序管理部11执行第一用户程序(以下称作程序A)及第二用户程序(以下称作程序B)。[0037] 辅助存储装置12保存程序A及程序B。存储器13暂时存储程序A及程序B。存储器13包括数据存储部13a与共享变量符号表13b。数据存储部13a存储有从程序A及程序B这两者能够参照的共享变量的数据。共享变量符号表13b存储有所述共享变量在数据存储部13a中的地址。[0038] 程序A管理部11a针对在程序A中经定义的共享变量,生成包含所述共享变量的变量名与程序A的标识符的共享变量名。程序A管理部11a将共享变量名与地址相关联而利用共享变量符号表来进行管理。在从程序B访问(读取/写入)所述共享变量时,使用所述共享变量名来进行访问。[0039] 根据本实施方式的控制装置,在存在多个对共享变量进行定义的程序时,能够防止变量名发生冲突而意外覆盖数据。[0040] §2结构例[0041] (控制装置1的概略结构)[0042] 使用图1~图2来说明控制装置1的概略结构的一例。图1是示意性地表示本实施方式的控制装置的结构的一例的框图。如图1所示,控制装置1包括程序管理部11、辅助存储装置12及存储器13。控制装置1例如可列举可编程逻辑控制器(ProgrammableLogicController,PLC)等对各种设备的动作进行控制的装置。[0043] 如图1所例示的那样,程序管理部11包含程序A管理部11a与程序B管理部11b。本实施方式中,由程序管理部11来执行程序A及程序B。具体而言,例示由程序A管理部11a执行程序A,由程序B管理部11b执行程序B的结构,但其并不限定本实施方式。[0044] 而且,程序A及程序B的详细将后述。[0045] 辅助存储装置12用于保存程序A及程序B。通常,程序A及程序B被保存在辅助存储装置12中。辅助存储装置12例如为非易失性的存储器或硬盘等,但并不限于此。通过包括辅助存储装置12,能够切实地防止数据消失。[0046] 存储器13暂时存储程序A及程序B。存储器13例如为易失性的存储器等,但并不限于此。存储器13包括数据存储部13a与共享变量符号表13b。数据存储部13a存储有从程序A及程序B这两者能够参照的共享变量的数据。共享变量符号表13b存储有所述共享变量在数据存储部13a中的地址。[0047] 此处所说的共享变量是指从多个用户程序能够参照的变量。共享变量符号表13b存储有存储在所述数据存储部13a中的所述共享变量的存储场所(地址)。[0048] (程序管理部的结构例1)[0049] 图2是例示图1的共享变量符号表13b的详细的图。作为程序管理部的结构例1,本实施方式中,程序管理部11在从用户接受执行程序A的指示时,从辅助存储装置12加载程序A,使程序A存储在存储器13中。此处,例如设程序A是编译器(compiler)型的程序。保存在辅助存储装置12中的程序A是被编译成机器语言的程序。经编译的程序A包含符号表,所述符号表表示共享变量与所述共享变量的地址的对应关系。非共享变量是仅在程序A中使用,仅程序A能够参照的变量。在经编译的程序A中,规定了非共享变量的地址。在经编译的程序A中,也可不保留非共享变量的变量名的信息。但是,程序A在经编译后,仍包含共享变量的变量名的信息与地址的信息。[0050] 程序管理部11获取共享变量的变量名的信息、地址的信息以及程序A的标识符。程序管理部11生成共享变量名,所述共享变量名包含在程序A中经定义的所述共享变量的变量名与所述标识符。程序管理部11将所述共享变量名与所述共享变量的所述地址相关联地记录到共享变量符号表13b中。而且,程序管理部11将所述共享变量的数据写入数据存储部13a的所述地址。[0051] 换言之,由程序管理部11所生成的共享变量名包含所述共享变量的变量名与所述标识符。程序管理部11将所述共享变量名与所述共享变量的所述地址相关联地记录到共享变量符号表13b中。[0052] 用户程序的标识符是所述用户程序固有的字符串或数值。多个用户程序的标识符被设定为互不重复。例如,也可将用户程序的程序名、用户程序的配置目标目录(directory)的路径(path)、用户任意设定的字符串、全局唯一标识符(universallyuniqueidentifier,UUID)或域名作为所述用户程序的标识符。[0053] 图2的例示中,程序A的标识符为“Press”。在程序A中经定义的共享变量的变量名为“status”。变量名“status”是在程序A的源代码(sourcecode)中经定义的变量名。程序管理部11通过将标识符“Press”与原本的变量名“status”加以组合,从而生成所述共享变量的共享变量名“Press.status”。共享变量名“Press.status”是在从其他程序B参照所述共享变量时作为关键字而使用的变量名。此处,在标识符与变量名之间添加了“.”,但也可取而代之而使用任意文字或字符串。而且,也可无标识符与变量名之间的文字。标识符与变量名的次序也为任意。例如,图2所例示的“Cutter.status”是在程序B中经定义的共享变量的共享变量名。程序B的标识符为“Cutter”。在程序B中经定义的共享变量的变量名为“status”。程序管理部11按照规定的规则而生成包含标识符与变量名的共享变量名。由此,在多个用户程序中,即使变量名“status”定义了相同的多个共享变量,也能够避免共享变量名的冲突。共享变量名例如列举了Press.status、Cutter.status,与这些共享变量名对应的地址分别列举了0X00000000、0X00000001,但其并不限定本实施方式。[0054] 根据所述实施例,在存在多个对共享变量进行定义的用户程序时,能够防止变量名发生冲突而意外覆盖数据。[0055] (程序管理部的结构例2)[0056] 图3是程序管理部的结构例2的程序管理部所执行的工序的流程图。如图3所示,程序B管理部11b在从程序B接受将所述共享变量名作为关键字而读取或写入所述共享变量的命令时,从共享变量符号表13b获取与所述共享变量名对应的所述地址。程序B管理部11b使用所述地址来读取或写入数据存储部13a的所述共享变量。[0057] 详细而言,在步骤S1中,程序B管理部11b从所述程序B接受将所述共享变量名作为关键字而读取或写入所述共享变量的命令。继而,在步骤S2中,程序B管理部11b从共享变量符号表13b获取与所述共享变量名对应的所述地址。最后,在步骤S3中,程序B管理部11b使用所述地址来读取或写入所述数据存储部13a的所述共享变量。[0058] 根据所述实施例,程序B管理部11b能够读取或写入已由程序A生成的数据存储部13a的所述共享变量。[0059] (程序A的结构例1)[0060] 详细说明所述程序A的结构例1。程序A例如已被编译成机器语言。程序A即使在编译成机器语言后,仍包含所述共享变量的所述变量名的信息与所述地址的信息。程序A管理部11a从所述程序A获取所述共享变量的所述变量名与所述地址。执行程序A的程序A管理部11a能够使用所获取的所述地址,来读取或写入数据存储部13a的所述共享变量。[0061] 此处,程序A可列举使用梯形语言或C语言等的程序,但其并不限定本实施方式。梯形语言是适合于控制装置1进行机床或生产装置等的动作控制的情况的编程语言。[0062] 具体而言,程序A管理部11a从程序A获取符号表与程序A的标识符。程序A管理部11a对共享变量的变量名赋予所述标识符而生成共享变量名。并且,程序A管理部11a将共享变量名与地址相关联地记录到共享变量符号表13b中。继而,程序A管理部11a执行程序A。并且,程序A管理部11a从所述程序A接受将所述地址作为关键字而进行数据写入的指示。最后,程序A管理部11a将所述地址作为关键字来对存储器13进行数据写入。此处,共享变量名的生成是在所述程序A的加载时进行。[0063] 根据所述实施例,程序A管理部11a能够从程序A获取所述共享变量的所述变量名与所述地址。[0064] 例如,对下述情况进行说明,即,利用作为梯形语言的程序A来控制生产装置,利用作为Java语言的程序B来进行数据处理。程序A从生产装置或传感器获得与生产线相关的数据(感知信息等)。程序A将所获得的数据作为共享变量而记录到数据存储部13a中。程序B读出程序A所记录的共享变量,例如使用感知信息等进行统计处理。梯形语言是适合于控制的编程语言,Java等通用编程语言是适合于信息处理的编程语言。这样,能够使用不同的编程语言来对共同的数据分别进行适合的处理。[0065] 而且,也可在继续执行现有的程序A的状态下(使生产装置继续运转的状态下),将现有的程序管理部及程序B调换为本实施方式的程序管理部11及程序B。由此,能够将现有的控制装置设为可避免共享变量名的冲突的本实施方式的控制装置。[0066] (程序A的结构例2)[0067] 图4是程序A的结构例2的程序A管理部11a所执行的工序的流程图。例如,程序A例如为解释器型程序。程序A包含所述共享变量的所述变量名的信息。程序A管理部11a作为所述程序A的解释器发挥功能。[0068] 在图4中的步骤S4中,程序A管理部11a在从所述程序A获取所述共享变量的所述变量名与标识符时,生成所述共享变量名。继而,在步骤S5中,程序A管理部11a判定是否记录有共享变量名。若在共享变量符号表13b中已记录有所述共享变量名(S5中为是),则程序A管理部11a获取所述共享变量的所述地址(步骤S6)。另一方面,若在共享变量符号表13b中未记录有所述共享变量名(S5中为否),则程序A管理部11a决定分配给所述共享变量的所述地址(步骤S7)。程序A管理部11a将所决定的所述地址与所述共享变量名相关联地记录到共享变量符号表13b中。[0069] 而且,作为解释器型的程序,例如可列举Java(注册商标)、JavaScript(注册商标)、Python等使用编程语言的程序。例如,在用户程序为Java程序的情况下,保存在辅助存储装置12中的用户程序是被编译成中间代码的程序,程序A管理部11a作为Java虚拟机发挥功能,所述Java虚拟机对作为中间代码的用户程序进行解释并执行。[0070] 具体而言,程序A管理部11a从程序A获取所述程序A的标识符。而且,程序A管理部11a执行所述程序A。并且,程序A管理部11a接受将变量名作为关键字进行数据写入的指示。继而,程序A管理部11a对共享变量的变量名附加所述程序A的所述标识符而生成共享变量名。并且,程序A管理部11a参照共享变量符号表13b来判定所述共享变量是否已定义。若所述共享变量为未定义,则决定地址,并对共享变量分配所述地址。程序A管理部11a将所决定的所述地址与所述共享变量名相关联地记录到共享变量符号表13b中。另一方面,若所述共享变量为已定义,则从共享变量符号表13b获取已分配的所述地址。最后,程序A管理部11a将所述地址作为关键字来对数据存储部13a进行数据写入。此处,程序A管理部11a在执行时进行是否为共享变量的判断。在程序A中使用的变量是共享变量还是非共享变量,在程序A中已经定义。例如,在程序A中,通过对变量指定共享或非共享,从而定义变量是共享变量还是非共享变量。而且,程序A管理部11a在程序A的执行时生成共享变量名。[0071] 根据所述实施例,程序管理部11能够防止共享变量的重复,从而适当地管理共享变量。[0072] 例如,在程序A的源代码中,对共享变量“status”的写入也可利用一般的方法而记述为“status="OK"”。这意味着对共享变量“status”写入值“OK”。此处“=”是表示值的代入的运算符。或者,程序A管理部11a也可提供用于写入至共享变量的应用程序接口(applicationprograminterface,API)函数。例如,在程序A的源代码中,对共享变量“status”的写入也可使用API函数“write”而记述为“write("status"、"OK")”。无论哪种情况下,程序A均是将共享变量的变量名“status”作为关键字而提供给程序A管理部11a。[0073] (标识符的获取例1)[0074] 所述程序A包含所述标识符的信息,程序A管理部11a从所述程序A获取所述标识符。[0075] (标识符的获取例2)[0076] 例如,程序A管理部11a也可从设定文件获取所述标识符。也可将对程序A的标识符进行规定的设定文件保存到规定的目录中。[0077] (程序管理部的结构例3)[0078] 图5是程序管理部的结构例3的程序管理部所执行的工序的流程图。此处,程序B为解释器型的程序。程序A先执行,在程序A中经定义的共享变量的共享变量名及地址被记录在共享变量符号表13b中。如图5所示,在步骤S8中,程序B管理部11b执行程序B。继而,在步骤S9中,程序B管理部11b制作非共享符号表,所述非共享符号表记录有在程序B中经定义的非共享变量与所述非共享变量的地址。非共享符号表是针对所执行的每个用户程序而分开制作。例如,在程序B中变量被定义为非共享变量时,将所述变量名及所分配的地址记录到非共享符号表中。程序B管理部11b存储有非共享符号表。继而,在步骤S10中,程序B管理部11b判定是否记录有变量名。若在所述非共享符号表中记录有在程序B中被参照(读取)的变量的变量名(S10中为是),则程序B管理部11b判断所述变量为非共享变量(步骤S11)。另一方面,若在所述非共享符号表中未记录有在程序B中被参照(读取)的所述变量的变量名(S10中为否),则程序B管理部11b判断所述变量为共享变量(步骤S12)。[0079] 根据所述实施例,程序B管理部11b能够根据在所述非共享符号表中是否记录有在程序B中被参照的变量的变量名,来适宜地判断所述变量是非共享变量还是共享变量。例如,即使在程序A中经定义的共享变量的共享变量名“Press.status”与在程序B中被参照的非共享变量的变量名偶然一致的情况下,也能够防止误将程序B的非共享变量判断为所述共享变量。[0080] (程序管理部的结构例4)[0081] 详细说明程序管理部11的结构例4。此处,程序B为编译器型的程序。程序A先执行,在程序A中经定义的共享变量的共享变量名及地址被记录在共享变量符号表13b中。执行程序B的程序B管理部11b提供用于读取共享变量的API函数。例如,在程序B的源代码中,共享变量“Press.status”的参照(读取)也可使用API函数“read”而记述为“read("Press.status")”。程序B将共享变量的共享变量名“Press.status”作为关键字,经由API函数而提供给程序B管理部11b。程序B管理部11b从共享变量符号表获取对应的地址。程序B管理部11b将地址作为关键字而从数据存储部13a获取共享变量的数据。程序B管理部11b将共享变量的数据返回给程序B。[0082] 通常,编译器型的用户程序被转换为机器语言。因此,在源文件(sourcefile)中所规定的变量名被转换为地址而未保留。根据所述实施例,通过使用参照共享变量的API,经编译的程序B中的共享变量名作为关键字而保留。[0083] 控制装置1中,所述程序A与所述程序B也可包含互不相同的编程语言。根据所述实施例,在包含互不相同的编程语言的程序A与程序B之间,能够共享变量。[0084] 例如,程序A与程序B也可包含相同的编程语言。[0085] (标识符的结构例1)[0086] 所述标识符也可包含所述程序A的路径。例如,用户在制作程序A时,在程序A内预先规定好预定要配置程序A的目录的路径。或者,也可由程序A管理部11a所执行的程序A自身获取程序A的路径。[0087] (标识符的结构例2)[0088] 所述标识符也可包含所述程序A的文件名。与路径同样,文件名既可在程序A内规定,也可由程序A管理部11a所执行的程序A自身获取程序A的文件名。[0089] 所述标识符也可包含所述程序A的路径及文件名。如上所述,所述标识符也可包含用户任意设定的字符串、全局唯一标识符(universallyuniqueidentifier,UUID)和/或域名。此处的域名是指用户程序的提供者(提供公司)所拥有的域名(例如omron.co.jp或jp.co.omron)。[0090] (控制方法)[0091] 图6是表示本实施方式的控制方法中的各工序的流程图。如图6所示,在步骤S13中,程序A管理部11a获取所述程序A的标识符。继而,在步骤S14中,程序A管理部11a生成共享变量名,所述共享变量名包含从所述程序B能够参照且在所述程序A中经定义的共享变量的变量名与所述标识符。继而,在步骤S15中,程序A管理部11a将所述共享变量名与所述共享变量的地址相关联地记录到共享变量符号表13b中。继而,在步骤S16中,程序A管理部11a将所述共享变量的数据存储到数据存储部13a中的与所述地址对应的区域中。[0092] 根据所述实施例,在存在多个对共享变量进行定义的程序时,能够防止变量名发生冲突而意外覆盖数据。[0093] 〔借助软件的实现例〕[0094] 控制装置1的控制块(尤其是程序管理部11)既可通过形成于集成电路(IntegratedCircuit,IC)芯片等上的逻辑电路(硬件)而实现,也可通过软件来实现。[0095] 在后者的情况下,控制装置1包括执行实现各功能的软件即程序的命令的计算机。所述计算机例如包括一个以上的处理器(processor),并且包括存储有所述程序的、计算机可读取的记录介质。并且,在所述计算机中,通过所述处理器从所述记录介质读取并执行所述程序,从而达成本发明的目的。作为所述处理器,例如可使用中央处理器(CentralProcessingUnit,CPU)。作为所述记录介质,可使用“并非临时的有形介质”,例如除了只读存储器(ReadOnlyMemory,ROM)等以外,还可使用带(tape)、盘(disk)、卡(card)、半导体存储器、可编程的逻辑电路等。而且,还可更包括展开所述程序的随机存取存储器(RandomAccessMemory,RAM)等。而且,所述程序也可经由可传输此程序的任意传输介质(通信网络或广播波等)而提供给所述计算机。另外,本发明的一实施例也能以通过电子传输来将所述程序具现化的、被嵌入载波中的数据信号的形态来实现。[0096] 〔总结〕[0097] 本发明的一方案的控制装置包括:程序管理部,执行第一用户程序及第二用户程序;数据存储部,存储从所述第一用户程序及所述第二用户程序这两者能够参照的共享变量的数据;以及共享变量符号表,存储所述共享变量在所述数据存储部中的地址,所述程序管理部获取所述第一用户程序的标识符,生成共享变量名,所述共享变量名包含在所述第一用户程序中经定义的所述共享变量的变量名与所述标识符,将所述共享变量名与所述共享变量的所述地址相关联地记录到所述共享变量符号表中。[0098] 根据所述实施例,在存在多个对共享变量进行定义的程序时,能够防止变量名发生冲突而意外覆盖数据。[0099] 控制装置的特征在于,所述程序管理部在从所述第二用户程序接受将所述共享变量名作为关键字来读取或写入所述共享变量的命令时,从所述共享变量符号表中获取与所述共享变量名对应的所述地址,使用所述地址来读取或写入所述数据存储部的所述共享变量。[0100] 根据所述实施例,所述程序管理部能够读取或写入由程序A已生成的所述数据存储部的所述共享变量。[0101] 控制装置的特征在于,所述第一用户程序已被编译成机器语言,所述第一用户程序包含所述共享变量的所述变量名的信息与所述地址的信息,所述程序管理部从所述第一用户程序中获取所述共享变量的所述变量名与所述地址。[0102] 根据所述实施例,所述程序管理部能够从所述第一用户程序获取所述共享变量的所述变量名与所述地址。[0103] 控制装置的特征在于,所述第一用户程序为解释器型程序,所述第一用户程序包含所述共享变量的所述变量名的信息,所述程序管理部作为所述第一用户程序的解释器发挥功能,所述程序管理部在从所述第一用户程序获取所述共享变量的所述变量名时,生成所述共享变量名,若在所述共享变量符号表中记录有所述共享变量名,则获取所述共享变量的所述地址,若在所述共享变量符号表中未记录有所述共享变量名,则决定分配给所述共享变量的所述地址。[0104] 根据所述实施例,所述程序管理部能够防止共享变量的重复,从而适当地管理共享变量。[0105] 控制装置的特征在于,所述第一用户程序包含所述标识符的信息,所述程序管理部从所述第一用户程序获取所述标识符。[0106] 控制装置的特征在于,所述程序管理部从设定文件获取所述标识符。[0107] 控制装置的特征在于,所述程序管理部在执行所述第二用户程序时,制作非共享符号表,所述非共享符号表记录有非共享变量与所述非共享变量的地址,若在所述非共享符号表中记录有在所述第二用户程序中所参照的变量的变量名,则判断所述变量为非共享变量,若在所述非共享符号表中未记录有在所述第二用户程序中所参照的所述变量的变量名,则判断所述变量为共享变量。[0108] 根据所述实施例,所述程序管理部能够根据在所述非共享符号表中是否记录有在所述第二用户程序中被参照的变量的变量名,来适宜地判断所述变量是非共享变量还是共享变量。[0109] 控制装置的特征在于,所述第一用户程序与所述第二用户程序包含互不相同的编程语言。[0110] 根据所述实施例,在包含互不相同的编程语言的第一用户程序与第二用户程序之间,能够共享变量。[0111] 控制装置的特征在于,所述标识符包含所述第一用户程序的路径。[0112] 控制装置的特征在于,所述标识符包含所述第一用户程序的文件名。[0113] 本发明的一方案的控制方法,其是执行第一用户程序及第二用户程序的方法,所述控制方法是:获取所述第一用户程序的标识符,生成共享变量名,所述共享变量名包含从所述第二用户程序能够参照且在所述第一用户程序中经定义的共享变量的变量名与所述标识符,将所述共享变量名与所述共享变量的地址相关联地记录到共享变量符号表中,使所述共享变量的数据存储在数据存储部中的与所述地址对应的区域中。[0114] 根据所述实施例,在存在多个对共享变量进行定义的程序时,能够防止变量名发生冲突而意外覆盖数据。[0115] 本发明并不限定于所述的各实施方式,可在权利要求所示的范围内进行各种变更,将不同的实施方式中分别揭示的技术部件适当组合而获得的实施方式也包含在本发明的技术范围内。
专利地区:日本
专利申请日期:2019-06-18
专利公开日期:2024-07-26
专利公告号:CN112272821B