用于实时系统控制的组件模型的制作方法

文档序号:6579890阅读:201来源:国知局

专利名称::用于实时系统控制的组件模型的制作方法用于实时系统控制的组件模型本专利申请是优先权日为2002年2月15日、国际申请日为2003年2月18日、国际申请号为PCT/US03/04803、国家申请号为03803852.8、发明名称为"用于实时系统控制的组件模型"的发明专利申请的分案申请,其在此全部引入作为参考。根据35U.S.C.119(e),本专利申请要求序列号为60/357329,申请日为2002年2月15日,标题为"用于实时系统控制的组件模型"的美国临时专利申请的优先权,其全部内容在此引入作为参考。
背景技术
:许多不同的努力需要客户软件来解决他们的问题。通常各领域专家非常了解这些问题,诸如建筑自动化专家、工厂自动化专家和交通管制专家。然而很少有领域专家具有普通程序设计技术所需要的技能,诸如面向对象的程序设计。如今,各领域专家必须试图将他们的要求详细说明给程序员,然后由程序员来构建所需要的系统。该过程容易出现错误、费时并且伴随着错误传达。所需要的是理解问题空间的领域专家具有能够自己构建软件系统的能力。期望领域专家有时间或倾向能够变成专业程序员是不可行的。因此有必要提供一种工具,其使得外行也能够创建客户软件。理想的这些工具会让软件系统的配置参数、执行逻辑和数据是图形可视化的。图形工具会让领域专家能够创建、监控和改变软件系统,而不需要理解神秘的程序设计语言语法。面向组件的系统是一种新概念,其通过将软件功能封装在组件中,可以连接组件来构建应对现实世界需要的应用,从而提供某些特征。然而为了实现实际的系统,已知的现有技术仍然需要程序设计语言的知识。软件组件,到现在为止,仍然需要程序设计技巧将组件连接在一起创建功能性系统。而且,现有的组件技术并不允许领域专家将整个系统图形可视化,和在运行时作出改变。例如,领域专家可能会希望在运行时改变执行流程、或添加新的行为,并且希望能够立即看到这对软件系统有什么影响。这种探索性的程序设计方式与当前方案不一致,当前方案需要软件停止、重新编译、然后重新启动。而且,为了改善性能添加特征等,可能会需要添加修改或更新该软件。对于任何更新、添加或修改,当前方案再次需要软件停止、重新编译并重启。在正在控制关键过程的某些环境中,停止软件可能会特别困难。提供这种方案所存在的另一个具体困难是,需要允许领域专家能够增强或扩展软件组件,使它们适应特定应用领域的独特需要。从历史来看,这些添加或扩展需要常规的程序设计技巧和知识。本发明意欲解决这些问题和其它需要。
发明内容本发明的一个方面是软件程序,其代码包括用于在机器上执行的相同组件类型的一个或多个组件。该软件程序的组件通过特定方法产生。在该方法中,将包括一个或多个插槽定义(slotdefinition)的基本类(baseclass)提供给一个框架(framework),其中最少有一个插槽定义是属性插槽定义。基本类中的所有属性插槽定义都被标识。对于每一属性插槽定义,都定位获取(getter)和设置(setter)过程。生成一个组件类型对象,其被配置用来存储插槽定义。被标识的属性插槽定义然后就被存储于该组件类型对象中。生成一个或多个组件。这些组件中每一个都有槽映象(slotm即)对象,它是从槽映象类中被实例化的。每一槽映象对象也包括存储于组件类型对象中的每一属性插槽定义的值,每一值与单个组件关联,因而提供了存储每一组件所独有的数据的能力。在该方面的进一步发展中,组件被设计为允许通过动态插槽来扩充它们的属性和数据字段。另一个方面提供有一种用于为基于组件的软件系统的扩充自动指定名称的方法。在该方法中,创建了一个根组件。该根组件没有父组件。一个或多个非根组件被置于该根组件内,并且一个或多个其它非根组件则被置于非根组件内,这样所有的非根组件都有父组件,并且整个结构形成了树型。在该点上,组件分配有唯一标识串,其包含该组件的所有前辈组件和该组件的名称的顺序列表。在该方面的进一步发展中,扩充命名方法来标识组件的各个插槽。通过对附图和优选实施例的描述,可以进一步的理解本发明的这些和那些方面以及特征和优势。图1所示为创建组件类型和该组件类型的多个组件实例的流程图;图2所示为从相同的组件类型中生成的两个组件的框图;图3所示为包括动态插槽的组件系统的框图;图4所示为包括链接的组件系统的框图;图5A所示为包括链接的组件系统的组件级抽象概念的框图,其中执行细节被隐藏;图5B所示为图5A中所示组件系统的框图;其中链接已经被删除;图6所示为已经重新编译以提高效率的组件系统的框图;禾口图7所示为树型结构中组件系统的框图;图8所示为是可视化界面的操作流程图。具体实施例方式本发明的组件模型提供一种软件组件的独特组件设计,其允许应用开发者在适合于非程序员的图形环境下扩展和修改软件组件。该组件模型设计允许将新的插槽,诸如属性、动作或主题,加入标准组件,而不需要通常所需要的软件编码步骤。对于软件开发的组件模型方式允许创建与最终使用应用具有直接关系的软件组件,同时仍然利用了面向对象的软件设计的优点。同样的,组件比在纯面向对象的方式中提供更高层次的抽象概念。在对象封装了可以应用于软件功能(诸如串操作、提供缓冲管理等)的行为的地方,组件可组装对象以满足最终应用目标(诸如提供用户界面展示以改变时间表、检查警报和将确认命令传递回到发出警报的装置等)的需要。这里有两个层次的抽象概念一个是面向对象的层次,其处理组件的实现;另一个是组件的层次,其隐藏面向对象的层次,并通过使用组件进行与特定现实应用有关的应用创建。至少也有两类人可以运行和修改本发明的软件开发者和用户。开发者使用面向对象的概念实现本发明的组件模型。可选的,开发者也创建在组件层次所定义的功能。用户通常不会看到面向对象的实现。相反,用户几乎专门处理组件和监控器,在组件层次创建和修改系统。当然,用户和开发者可以是同一个人。根据组件类型创建软件程序内的组件。组件类型类似于面向对象的程序设计中的类的概念,也就是,它是描述所有属于该类型的组件实例的共同特征的抽象概念。在优选实施例中,组件类型的创建以及大多数其它有关组件的功能由构架来完成,有时候我们称其为NiagaraFramework。该构架是基于组件的软件中的软件模块,其完成一些与实现组件模型相关的若干有用功能,诸如创建组件类型和组件、提供组件与外部软件模块之间的接口,和提供通过向他们添加插槽来扩展组件的能力,等等。包括在初始化(引导装入)阶段和在组件运行时,该构架也提供用于软件的执行流。面向对象程序由类组成,其定义用来分配属于该类的实例的模板。每一类由称为成员的子部件组成。成员可以是用来存储数据的字段,或可以是用来存储可执行行为的方法。本发明描述了使用面向对象的原型构建的组件模型。该组件模型然后可以被非程序员使用来构建面向组件的程序。该组件模型由组件类型组成,其定义了用来分配属于该类型(类似于面向对象的类)的实例的模板。每一组件类型由称为插槽(类似于面向对象的成员)的子部件组成。插槽与成员之间的区别在于插槽存在于更高层次的抽象概念,从而它们可以被非程序员或面向组件程序的终端用户直接使用。在组件模型中有三种类型的插槽。属性是存储数据值的插槽。属性可以用来存储配置数据,提供实时状态信息或存储任何其它数据。动作类似于方法,它们是存储执行行为的插槽。例如,终端用户可能会调用的一个动作可能是"打开电扇"。动作也可以实现纯软件功能。主题是第三插槽类。主题用来表示事件。主题用于表示事件已经发生。链接是特定类的属性插槽。链接用来指定基于组件的软件中的执行流。更具体的,链接用来创建两个不同插槽之间的因果关系。这种关系表示,例如一个函数响应于另一个函数的调用而被调用。在对象模型中,这些关系通常用静态码(例如条件过程调用)定义,并且没有重编译就不能改变。在组件模型中链接通常是动态插槽,于是它们在运行时可以被创建和删除,不需要重编译软件就可以改变软件的执行流。因为组件模型是按照面向对象的程序构建的,必须使用面向对象的成员来实现组件模型。术语类、成员、字段和过程(method)指的是常规面向对象的概念。术语组件类型、插槽、属性、动作和主题指的是面向组件的概念,它们与本发明相关。对象与组件之间的一个大的区别是组件在运行时可以改变。例如,添加一个新的过程到对象典型的需要重编译该对象的类。组件模型允许我们在运行时在组件中定义插槽和添加新插槽。在编译的代码中所定义的插槽被冻结。冻结的插槽是不可变的,但是得到了编译代码的处理效率。运行时定义的插槽是动态的。在面向对象的程序设计中,运行程序中的类定义的存储由编译器处理,在很大程度上对开发者是不可见的。因此,在面向对象的程序设计中,类通常作为抽象概念而不是作为实际的数据结构引用。于是,在大多数面向对象的环境中开发者可以安全的作为实际对象的抽象定义来引用类,而不会被类定义需要物理地存在于计算机存储器中的某个地方这样的事实混淆。在本发明的组件模型中,组件类型必须在计算机存储器中存储和处理。优选的由构架通过在对象中存储组件类型,即组件类型对象,来完成组件类型的存储。于是,组件类型对象是组件类型的物理表示。从组件到组件类型对象的引用用来表示给定对象属于组件类型的事实。图1的流程图描述了如何通过创建组件类型对象来创建组件类型,和如何产生基于该组件类型的多个组件实例。为了创建新的组件类型,开发者需要提供类定义给构架_基本类(步骤100)。在优选实施例中,开发者通过将基本类添加到基于组件的软件来提供基本类。有一组预定的规则集,用来将基本类的成员映射到组件模型中不同类型的插槽。这些规则例如可以是基于基本类的成员的类型或名称。开发者通过添加成员根据该规则集到对应于这些冻结插槽的基本类定义,指示组件类型应该具有哪些冻结插槽。在优选的实施例中,开发者也添加将基本类向构架登记的声明。添加基本类之后,编译并执行该基于组件的软件。一旦软件开始运行,作为初始化程序的一部分,该构架检测基本类并通过图1中的过程的其余部分,以创建一个或多个组件类型以及基于它们的一个或多个组件。在步骤101中,构架检查该基本类,并发现所有相关成员。该步骤可以通过基本类的自检来完成。所有类型的插槽(属性、动作、主题)都包括定义。属性插槽的定义指定属性插槽所保存的数据类型和属性插槽的名称。动作插槽的定义包括动作插槽的名称和执行该动作的实现方法的代码。相似的,主题插槽的定义包括主题的名称和实现该主题的代码。属性插槽也包括数值,动作插槽和主题插槽不具有数值(但实现它们的方法可以有任意数目的隐藏在组件级的变量)。属性插槽需要获取和设置过程来获得和设置数值。这些获取和设置过程是属性插槽定义的一部分,并且最初就定义在基本类中。在步骤102,获取和设置过程检查对应于属性插槽的基本类的每一成员。按照惯例,获取和设置过程通过将前缀"获取"和"设置"加在属性插槽的名称的前头,连同分别实现这些功能的标准编码来命名。然后构架创建组件类型对象(步骤103)。组件类型对象的目的是指示组件类型。组件类型对象包括能够存储和检索一个或多个插槽定义的数据结构。这种数据结构例如可以是数组或哈希表。组件类型对象也包括名称,其是组件类型的名称。该名称或者从基本类的名称拷贝,或者由开发者以其他方式标识,例如通过使用基本类中的指定字段。在步骤104,基本类的所有插槽定义被存储在组件类型对象中。这些被称作为冻结插槽定义。在步骤105,构架生成槽映象类,其与在步骤103中所创建的组件类型对象相关联。槽映象类定义了对应于组件类型对象的每一属性插槽的成员。槽映象类也包括用于创建附加动态插槽的方法。于是在步骤107,对于每个现有的基本类,至此重复该过程。—个或多个反复之后,在步骤106中创建了必要数目的组件类型对象。对于每一组件类型对象都有各自的槽映象类、其实例可以存储冻结属性插槽以及可以添加的任意动态插槽的唯一值。于是创建了一个或多个组件类型,但该软件仍然缺少基于组件的功能,因为不存在这些组件类型的实例。在步骤106中从现有的组件类型对象生成一个或多个组件。该构架创建多个组件实例,以提供组件级功能。例如,基于数据文件或用户输入来创建这些组件实例。例如,数据文件可以有效的包含一个早已被开发者或用户设计好的组件系统,数据文件包括组件实例、他们的组织、他们的结构属性和通过链接指示的系统中的执行流。而且,通过实例化组件和通过前端浏览器等在它们中间创建链接,用户可以使用图形界面从零做起创建这种系统。在优选实施例中,该构架最终负责创建组件。当需要创建某种组件类型的组件时,该构架从现有的组件一般类中创建一个组件实例。该一般类包括一个或多个用于与其他组件通信(或用于管理组件)的实用成员,和适合用于插入槽映象或到槽映象的引用的字段。构架标识与所要创建组件的组件类型相关联的组件类型对象以及与该组件类型相关联的槽映象类。它然后从槽映象类创建槽映象实例。该构架将槽映象实例附加到组件实例中,使得该槽映象被有效的包括在该组件中。它然后创建从组件实例到组件类型对象的引用。该引用,通常是指针,指定一个实例-类型关系,即指定该特殊组件实例属于该组件类型对象所描述的组件类型。如果组件类型对象包括属性插槽的定义,那么构架可选的为它们分配值。这些值例如可以从数据文件或用户输入获得。如果构架有一个值要分配给属性插槽,则构架通过在槽映象对象的适当字段中设置该值来完成。这可以通过访问在属性插槽定义中的设置过程来完成,或通过访问组件或槽映象的设置过程来完成,或通过直接访问插槽值来完成。如果没有提供插槽值,那么该构架或者分配默认值或者什么也不做。在一个可选实施例中,并不为每一组件类型对象创建槽映象类,而是每一组件包括一个一般槽映象,其是或其包含在组件对象中所定义的一种数据结构,为属性插槽的属性插槽值提供存储位置,并也可以存储动态字段定义和值。用于此目的的数据结构是本领域所熟知的,并可以为数组、哈希表等。该构架分配名称到每一组件,该名称或者通过构架生成或者以与属性插槽值同样的方式获得。通过这种方式,构架创建属于一个或多个组件类型的多个组件。图2描述了两个这种组件211和212,其都属于组件类型对象200所定义的单个组件类型。该组件类型对象包括名称202和冻结插槽204的定义。在所描述的范例中,有一个冻结动作插槽起始206、一个冻结主题插槽警报208和一个冻结属性插槽hrs_running210。插槽hrs_running210包含一个整数,但是在其他范例中,该属性插槽可以包含更多复数数据或数据结构或其他数据类型。插槽206和208分别包括执行该过程和主题所需的编码。组件211和212,名称为FirstFan和SecondFan,分别包括槽映象215和216。每一组件槽映象包括组件的冻结属性插槽217和218的值。根据该优选实施例的突出方面,当该软件执行时可以添加动态插槽到组件。动态插槽与冻结插槽的类型相同。运行时动态插槽的添加通过用户或者通过软件自身完成。根据实施方式的不同,或者通过向构架发出请求或者通过调用组件的实用程序来加入动态插槽。不论采用什么方式,动态插槽通过存储在槽映象中来添加。动态插槽通常具有定义,如果它是属性插槽它还有值。该定义存储在槽映象中,并且该值如果可以应用,也存储在那里。图3所示为在两个动态插槽已经被添加到组件211后图2中的组件系统。通过将定义添加到槽映象215,称为"停止(stop)"的动态动作插槽301已经被添加。同样,通过将定义303和值304添加到槽映象,称为power_usage的动态属性插槽302也被添加。注意到组件211仍然引用相同的组件类型对象200。该组件类型对象并没有被改变以记录动态插槽的添加。因此,即使在添加了两个动态插槽之后,组件FirstFan211仍然是相同的组件类型。并且相应的,组件211和212仍然是相同的组件类型,而与组件211多出两个插槽无关。这种从"纯"类型-实例模型的分离是由于性能原因为每一改变的组件创建新的组件类型会降低系统性能并需要过多的附加存储器。组件具备实用过程,允许它们为动态插槽检查它们的槽映象,并将它们的定义提供到外部组件、构架或该软件的其它模块。这些实用过程是必须的,因为组件类型对象并不具有动态插槽的定义。动态插槽可以被其它组件、构架或该软件的另一模块以与槽映象对象的冻结插槽非常相同的方式访问。动态插槽一旦被创建,以后可以通过从槽映象中去除它们的定义(和任何值)而将其删除。例如,这种情况可以作为新提出特征或功能的测试结果出现,它的引入是由于不需要重新编译软件,也就是不用中断服务。不需要重新编译引入动态插槽的能力也允许用户添加影响程序流的新的关系和连接。这通过"链接"实现,其是保存有两个组件之间关系的插槽。更具体的,一个链接保存两个不同组件的两个插槽(这两个插槽都不是该链接)之间的因果关系。为了简化引用,这两个插槽被称作为源插槽和目标插槽。保存这些插槽的组件分别称作为目标组件和源组件。也有多个可能的因果关系可以由链接表示。在表l列出了在优选实施例中所使用的链接类型以及它们所链接的插槽类型。注意到由于在组件级,执行流概念包括属性字段的变化,在表1中列出的所有链接控制组件系统的执行流。<table>tableseeoriginaldocumentpage10</column></row><table>表l用户可以通过链接各种组件的各种插槽来创建执行流。链接是冻结的或者动态的。动态链接允许在软件运行时改变组件系统的执行流。要改变执行流所要做的就是创建或删除链接。为了避免创建和删除相同的链接,优选实施例允许激活和去活链接。这提供了另外的优势,即,通过适当制定的动态链接,不能被删除的冻结链接仍然可以被去活。被去活的链接并不用作链接,但仍然存在于目标组件中,并且随后可以被激活。链接作为一种类型的插槽实现。在优选实施例中,链接包括在目标组件中,也就是保存该目标插槽的组件。链接优选的包括下列插槽源组件字段,保存到源组件的引用或源组件的名称;源字段,保存源插槽的名称;目标字段,保存目标插槽的名称;以及"激活"标志,表示它是被激活还是被去活。链接也包括对于处理它们有用的过程(method),诸如激活和去活过程,或者改变源字段、源组件、和/或目标字段的过程。注意到由于链接已经包括在目标组件中,在该设置中避免了到目标组件的引用;目标组件直接被链接的布局引用。在优选实施例中,当链接被激活时,它们在源组件创建一个调节器(knob)。调节器是与链接相似的数据结构,其存储在源组件的槽映象中。调节器向源组件指示,它必须将事件从它的插槽传播到目标组件的插槽。调节器包括类似于链接的数据字段的数据字段,但它包括目标组件的,而不是源组件的引用或名称。调节器并不包括激活标志。相反,当链接被去活时,旋钮简单地被删除。图4所示为已经添加动态链接401的图3的组件。该链接被激活,从而它使得对应的调节器402被创建。由于源插槽和目标插槽是属性,在FisrtFan的hrs_runnig的值改变的事件中,该链接的效果是将SecondFan的hrs_runnig的值改变到FisrtFan的brs_r皿nig的新值。换言之,一旦值217变化,该链接将使值218跟随值217。链接运行的方式相同,而与它链接的是冻结插槽或动态插槽无关(尽管如果包括有动态插槽会有一些性能损失)。图5A是图4的组件系统的抽象图,其中省去了实现细节。它示出了从组件级别看到的链接功能。这里链接401用从源插槽到目标插槽,而不是到组件211中的插槽的箭头表示。尽管该链接存在于组件211中。图5A展示了该组件模型的一个优点。该组件模型允许抽象化并以相对简单的方式显示复杂的动态系统。提供用户可视界面,其中组件系统的一个或多个组件被可视地表示为窗口小部件(widget)或图表。实际上,可以类似于图5A中所示的实现可视表示。组件在属性插槽中可以存储它们自己的表示,或者这些表示可以被图形模块处理。有关可以结合在此所描述的组件模型一起工作的优选可视界面的进一步细节,参见同一天申请的,标题为"Real-TimeDataInterfaceAndMethodForBrowserAndTheLike,,的美国专利申请(尚未给予流水号)代理人案巻号3929/lk294US2,其全部内容在此引入作为参考。—旦组件通过图形界面表示给用户,也显示各种相关的插槽和这些组件的值。通过这种界面,点击选择各种插槽和拖动组件之间的链接以添加链接,允许用户改变值或执行组件的过程。而且,通过操作屏幕上的链接、插槽和组件的可视表示,允许用户添加新的组件、添加或去除动态属性、添加和删除动态链接、或激活和去活链接。这样用户可视地再编程了一个基于组件的系统。图5B是去除链接401之后图5A中组件系统的抽象图。链接的去除用虚线401'表示。通过从组件211中去除动态链接插槽411来完成去除。任何其他动态插槽可以类似的被去除。该优选实施例的一个优点是它同时具有冻结插槽的效率和速度以及动态插槽的灵活性。有些时候动态插槽被证明是太低效了。尽管该优选实施例被用来通过使用动态插槽快速改变和检测该组件系统,以找到最优配置。一旦找到最优配置,执行重新编译以将所有的动态插槽转换为冻结插槽。在重新编译之后,该系统会保留它的最优配置,但具有更好的性能。图6描述了如何优化图3中所示系统的组件211。将动态插槽编译成冻结插槽可以导致原始组件类型的改变或导致新的组件类型,如果原始组件类型的所有组件并不具有相同的动态插槽。通过从槽映象215中去除它们的定义并增加组件类型基本类200的冻结插槽定义,动态插槽301、302被转换成冻结插槽。属性插槽302的值304保留在槽映象215中,但是现在与相同组件类型的所有组件所共同的冻结插槽定义相关联。通过在这些定义中所列或从这些定义导出的偏移量(offset),两个值217和304与它们各自的定义210和303成对。图7描述了将组件分级组织成组件系统的优选方法。如前所述,组件可以包括其他组件作为属性插槽。这通过包括到另一组件的引用作为属性插槽来实现。在可选实施例中,使用指定所有权的链接,而非引用。优选的利用组件的能力来包括其他组件并组织系统组件为树结构,如图7所示。这些组件类型对象706、707、708和709分别描述组件类型A、B、C和D。组件701是组件类型A,组件702和703是组件类型B,组件704是组件类型C,而组件705是组件类型D。组件702、703和704作为插槽全部包括在组件701中,这种包括关系通过组件701的插槽710中的引用定义。组件704进一步包括组件705。还有一个执行流链接713,以粗箭头表示,其以组件705的插槽711作为源并以组件703的插槽712作为目标。包括其他组件的组件称为父组件。包括在其他组件中的组件称为子组件。可以以相似的结构组织更复杂的系统。在优选实施例中,系统的所有组件以单树组织。这就意味着有一个父组件,称为根组件,它不包括在其他任何组件中,以及一个或多个非根组件按照它们到根组件的继承关系布置。在图7中根组件是组件701。该组织产生一个附加优点就是每一组件通过一个字符串被唯一的标识,该字符串由它的前辈名称的顺序列表组成,始于根组件,终止于该组件的名称。该特征可以用来保证复杂的组件系统中组件的唯一标识,其中来自不同厂家的新组件被不断添加到该系统。标识可以用字段名称扩展,以便类似地为组件的字段提供唯一标识。由于可视界面是组件模型的一个重要优点,本发明还包括一种用于提供可视界面的系统。该系统特别用于为组件模型提供界面,因为它是基于可视对象或窗口小部件,并且每个这样的窗口小部件可以可视化一个组件。另一个有用特征是该系统同时具有很大的灵活性和较低的资源使用。该可视化系统被设计成与用于以标准化文件格式显示第三方内容的流行软件,如HTML浏览器,兼容。在一个优选实施例中,本发明作为HTML文件中的Java小程序实现。Java程序被称作引擎。图8所示为可视化系统的操作流程图。在步骤801用户将带有引擎的HTML页面装载到HTML浏览器上。在步骤802,HTML浏览器执行该引擎。在步骤803,该引擎请求配置文件。通过计算机网络或者从用户的计算机请求该配置文件。在一个优选实施例中,配置文件是XML文件。该配置文件包括可视显示的布局,并且它还包括到一个或多个窗口小部件的引用,以及用于这些窗口小部件的位置和/或大小信息。窗口小部件是可视对象。窗口小部件的范例是组件、物理装置、图形、饼分图和表格的表示。窗口小部件可以做成动画或以多种不同的方式提供信息。窗口小部件也任选的具有与用户交互的能力。有一些可执行代码与在配置文件中引用的每一窗口小部件相关联。该代码称为扩展。扩展位于用户计算机上或通过计算机网络与用户计算机相连的其他计算机上。扩展可以通过包括在配置文件中的引用来定位。引擎对配置文件进行语法分析和定位扩展。引擎然后装载扩展,如果需要,从计算机网络上下载它们(步骤804)。引擎然后并行执行所有扩展。一旦执行扩展,它们在用户界面上显示引擎帮助。每一扩展显示它所关联的窗口小部件。引擎显示在配置文件中描述的整体布局,并且操作所显示的窗口小部件,以根据配置文件改变它们的大小和位置。扩展任选的与其它软件模块通信,并根据这些通信改变/更新与它们相关联的窗口小部件。在示范实施例中,窗口小部件是组件的图形表示,并且与该窗口小部件相关联的扩展通过计算机网络与组件通信。扩展还任选的通过接受和响应用户所发出的指令与用户交互。扩展也可以从其它软件组件接收信息或向其发送信息,如基于与用户交互的组件。于是根据扩展的软件代码、与其它软件模块的通信、和/或与用户的交互,窗口小部件连续更新。扩展可以进一步向其它软件模块发送从用户接收到的控制信号。例如,窗口小部件表示温度调节装置,其由温度调节组件来控制。对应于温度调节窗口小部件的扩展通过网络发送更新温度读数请求。该温度调节组件响应。然后该扩展更新温度。用户与窗口小部件进行交互。例如,用户通过点击窗口小部件来表达想要以摄氏度而不是以华氏度来察看温度。扩展接收请求并更新该窗口小部件。用户也可以通过窗口小部件发送命令到实际的温度调节装置。例如,如果用户想要关闭温度调节装置,或让其进入省电模式,该窗口小部件会向温度调节组件转发该命令。当扩展经常使用网络通信时,可视界面系统的可选实施例具有更高的效率。因为并行处理的多个扩展的多个网络通信通常会引发性能问题,在可选实施例中,扩展并不启动网络通信,而是发送请求到引擎。引擎在预定的时间期间收集网络通信请求,并试图将它们合并成更大的捆,然后通过网络发送它们,于是提高了网络效率。只有发送到相同计算机的通信可以被捆绑。在接收端也必须有软件模块以能够将该通信解开捆绑。引擎也从某些软件模块接收捆绑,该捆绑包含发送到一个或多个扩展的通信,将它们解开捆绑成单个的通信并将这些单个的通信发送到它们所要到达的扩展。当多个扩展与相同的软件模块通信时该实施例是最有效的。为了具体和清楚的说明,已经使用语言、格式和协议描述了可视界面系统,诸如HTML、Java、XML。该可视界面并不限于这些语言、格式和协议。该可视界面系统可以配置成使用任何允许嵌入应用的语言运行。任何数据文件格式,包括属性数据格式可以代替XML使用。关于可以连同在此所描述的组件模型一起运行的优选可视界面的更具体的细节,可以再次参见前述美国专利申请"Real-TimeDatalnterfaceAndMethodForBrowserAndTheLike,,。并不是所有的软件程序需要以组件模型实现。基于组件的功能比常规的面向对象的代码会更慢并且更大。于是在优选实施例中,只有可能需要被动态修改的代码部分,或使用组件模型的其它特征的代码部分会以组件模型实现。但是技术上不以组件模型实现的代码仍然可以封装成组件,从而它对其它组件是以组件出现的。在本文档中所描述的计算机可以是任何计算装置。计算机网络包括无线网络。虽然已经连同特定实施例描述了本发明,但是本发明由所附权利要求无限制地定义,并且本发明包括单元和方法步骤的非实质变化。权利要求一种用于对在自动化和控制系统的机器上的软件程序的执行流进行控制的方法,部分地通过具有组件类型的组件来定义软件程序的执行流,该组件类型由基本类来定义,在软件程序的运行期间产生所述组件,所述方法包括在软件程序的运行期间标识所述基本类中的一个或多个静态插槽定义;在软件程序的运行期间产生组件类型对象,该组件类型对象被配置用来存储静态插槽;在组件类型对象中存储所述一个或多个静态插槽定义;在软件程序的运行期间产生一个或多个组件,每一组件具有一个槽映象和对该组件类型对象的引用,其中每个槽映象包括用于存储在该组件类型对象中的每一插槽定义的值的存储位置;在所述一个或多个组件中,在软件程序的运行期间将第一动态插槽添加到第一组件的槽映象,以及将第二动态插槽添加到第二组件的槽映象,同时保持第一组件的组件类型对象和第二组件的组件类型对象不改变,第一和第二动态插槽的添加与任何编译步骤无关;在软件程序的运行期间将源链接存储在第一动态插槽中以及将目标链接存储在第二动态插槽中,源链接和目标链接表示第一组件和第二组件之间的链接;以及在软件程序的运行期间根据源链接和目标链接改变软件程序的执行流。2.根据权利要求1的方法,其中,源链接是指第一属性插槽以及目标链接是指第二属性插槽,以及其中,改变软件程序的执行流包括在检测到第一属性插槽<>的值的改变时以第一属性插槽的值来更新第二属性插槽的值。3.根据权利要求l的方法,其中,源链接是指属性插槽以及目标链接是指引用动作的可执行代码的动作插槽,以及其中,改变软件程序的执行流包括在检测到属性插槽的值的改变时执行所述动作的可执行代码。4.根据权利要求3的方法,其中,动作的可执行代码使得耦合到自动化和控制系统的设备的操作发生改变。5.根据权利要求l的方法,其中,源链接是指属性插槽以及目标链接是指引用表示启动事件的可执行代码的主题插槽,以及其中,改变软件程序的执行流包括在检测到属性插槽的值的改变时执行表述启动事件的可执行代码。6.根据权利要求l的方法,其中,源链接是指引用第一动作的可执行代码的第一动作插槽以及目标链接是指引用第二动作的可执行代码的第二动作插槽,以及其中,改变软件程序的执行流包括在执行第一动作的可执行代码时执行第二动作的可执行代码。7.根据权利要求1的方法,其中,源链接是指引用动作的可执行代码的动作插槽以及目标链接是指引用表示启动事件的可执行代码的主题插槽,以及其中,改变软件程序的执行流包括在执行动作的可执行代码时执行表示启动事件的可执行代码。8.根据权利要求l的方法,其中,源链接是指引用表示启动事件的可执行代码的主题插槽以及目标链接是指引用动作的可执行代码的动作插槽,以及其中,改变软件程序的执行流包括在执行表示启动事件的可执行代码时执行动作的可执行代码。9.根据权利要求l的方法,其中,源链接是指引用表示启动第一事件的可执行代码的第一主题插槽以及目标链接是指引用表示启动第二事件的可执行代码的第二主题插槽,以及其中,改变软件程序的执行流包括在执行表示启动第一事件的可执行代码时执行表示启动第二事件的可执行代码。10.根据权利要求1的方法,其中,目标链接包括对第一组件的引用;第一组件的源插槽的插槽名称;以及第二组件的目标插槽的插槽名称。11.根据权利要求1的方法,还包括在软件程序的运行期间显示软件程序的组件的图形表示,该图形表示包括第一组件和第二组件之间的链接的表示;提供用户接口以操作该链接的表示;响应于对链接的表示的操作,在软件程序的运行期间将改变存储到第一组件和第二组件的动态插槽。12.根据权利要求1的方法,其中,所述组件具有名称,以及其中,所述组件包括根组件,该根组件没有父组件,以及所述方法还包括将对一个或多个非根组件的引用置于根组件内;将对一个或多个非根组件的引用置于其它非根组件内,以使得这些组件形成一种树结构,并且每一非根组件有一个父组件;以及给每个非根组件指定一个唯一标识串,该标识串包括该组件的前辈组件的组件名称和该组件的名称的顺序列表。13.—种自动化和控制系统,包括一个或多个处理器和存储器;由所述一个或多个处理器从所述存储器执行的软件程序;以及所述软件程序内的框架模块,用于控制软件程序的执行流,部分地通过所述存储器中的组件来定义软件程序的执行流,所述组件具有组件类型,该组件类型由基本类来定义,在软件程序的运行期间产生所述组件,其中,所述框架用于在软件程序的运行期间标识所述基本类中的一个或多个静态插槽定义;在软件程序的运行期间产生组件类型对象,该组件类型对象被配置用来存储静态插槽;在组件类型对象中存储所述一个或多个静态插槽定义;在软件程序的运行期间产生一个或多个组件,每一组件具有一个槽映象和对该组件类型对象的引用,其中每个槽映象包括用于存储在该组件类型对象中的每一插槽定义的值的存储位置;在所述一个或多个组件中,在软件程序的运行期间将第一动态插槽添加到第一组件的槽映象,以及将第二动态插槽添加到第二组件的槽映象,同时保持第一组件的组件类型对象和第二组件的组件类型对象不改变,第一和第二动态插槽的添加与任何编译步骤无关;在软件程序的运行期间将源链接存储在第一动态插槽中以及将目标链接存储在第二动态插槽中,源链接和目标链接表示第一组件和第二组件之间的链接;以及在软件程序的运行期间根据源链接和目标链接改变软件程序的执行流。14.根据权利要求13的自动化和控制系统,其中,源链接是指第一属性插槽以及目标链接是指第二属性插槽,以及其中,所述框架通过在检测到第一属性插槽的值的改变时以第一属性插槽的值来更新第二属性插槽的值而改变软件程序的执行流。15.根据权利要求13的自动化和控制系统,其中,源链接是指属性插槽以及目标链接是指引用动作的可执行代码的动作插槽,以及其中,所述框架通过在检测到属性插槽的值的改变时执行所述动作的可执行代码而改变软件程序的执行流。16.根据权利要求15的自动化和控制系统,还包括耦合到自动化和控制系统的设备,其中,动作的可执行代码使得所述设备的操作发生改变。17.根据权利要求13的自动化和控制系统,其中,源链接是指属性插槽以及目标链接是指引用表示启动事件的可执行代码的主题插槽,以及其中,改变软件程序的执行流包括在检测到属性插槽的值的改变时执行表示启动事件的可执行代码。18.根据权利要求13的自动化和控制系统,其中,源链接是指引用第一动作的可执行代码的第一动作插槽以及目标链接是指引用第二动作的可执行代码的第二动作插槽,以及其中,所述框架通过在执行第一动作的可执行代码时执行第二动作的可执行代码而改变软件程序的执行流。19.根据权利要求13的自动化和控制系统,其中,源链接是指引用动作的可执行代码的动作插槽以及目标链接是指引用表示启动事件的可执行代码的主题插槽,以及其中,所述框架通过在执行动作的可执行代码时执行表示启动事件的可执行代码而改变软件程序的执行流。20.根据权利要求13的自动化和控制系统,其中,源链接是指引用表示启动事件的可执行代码的主题插槽以及目标链接是指引用动作的可执行代码的动作插槽,以及其中,所述框架通过在执行表示启动事件的可执行代码时执行动作的可执行代码而改变软件程序的执行流。21.根据权利要求13的自动化和控制系统,其中,源链接是指引用表示启动第一事件的可执行代码的第一主题插槽以及目标链接是指引用表示启动第二事件的可执行代码的第二主题插槽,以及其中,所述框架通过在执行表示启动第一事件的可执行代码时执行表示启动第二事件的可执行代码而改变软件程序的执行流。22.根据权利要求13的自动化和控制系统,其中,目标链接包括对第一组件的引用;第一组件的源插槽的插槽名称;以及第二组件的目标插槽的插槽名称。23.根据权利要求13的自动化和控制系统,还包括图形用户接口,用于在软件程序的运行期间呈现软件程序的组件的图形表示,该图形表示包括第一组件和第二组件之间的链接的表示;其中响应于对链接的表示的操作,所述框架在软件程序的运行期间将改变存储到第一组件和第二组件的动态插槽。全文摘要本发明公开了用于实时系统控制的组件模型。一种基于组件的软件程序,其中每一组件基于一种组件类型。从包括插槽定义的基本类创建组件类型。标识该插槽定义并将其存储在组件类型对象中。创建相同组件类型的一个或多个组件,每一组件包括到组件类型对象的引用,和包括与组件类型对象中属性插槽定义相关联的值的存储位置的槽映象。属性插槽值通过被放置到存储位置中而进入组件。也公开了一种自动指定唯一名称给组件的方法。创建一个根组件。进一步将非根组件放置到根组件中或其它非根组件中,从而所有组件形成一个树结构。分配一个唯一标识串给组件,其包括所有该组件的前辈组件的名称和该组件名称的顺序列表。文档编号G06F15/16GK101719056SQ20091016639公开日2010年6月2日申请日期2003年2月18日优先权日2002年2月15日发明者布赖恩·S·弗兰克,约翰·W·萨布利特申请人:特里迪姆公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1