首页> 中国专利> 用于过程控制系统中的有保证批量事件交付的设备和方法

用于过程控制系统中的有保证批量事件交付的设备和方法

摘要

控制器(104a-104b)控制过程控制系统(100)中的一个或多个过程单元(102a-102b)。控制器(104a-104b)还生成并缓存与控制器(104a-104b)关联的多个事件。每个事件与例如数字标识符的唯一标识符相关联。监控装置(106a-106b,216)从控制器(104a-104b)接收所述事件中的至少某些事件。监控装置(106a-106b,216)根据所述唯一标识符确定是否未从控制器(104a-104b)接收到所述事件中的任意事件。此外,监控装置(106a-106b,216)如果没有从控制器(104a-104b)接收到所述事件中的至少一个事件,则发起事件恢复。在事件恢复期间,控制器(104a-104b)恢复至少一个事件、例如具有比由监控装置(106a-106b,216)所识别的数字标识符大的数字标识符的任意事件。在事件恢复期间,控制器(104a-104b)将所述至少一个所恢复事件通信到监控装置(106a-106b,216)。

著录项

  • 公开/公告号CN101512454A

    专利类型发明专利

  • 公开/公告日2009-08-19

    原文格式PDF

  • 申请/专利权人 霍尼韦尔国际公司;

    申请/专利号CN200780032583.4

  • 发明设计人 J·赵;D·格拉纳特利;M·G·坎吉;

    申请日2007-07-02

  • 分类号G05B19/41;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人柯广华

  • 地址 美国新泽西州

  • 入库时间 2023-12-17 22:31:46

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-08-03

    授权

    授权

  • 2009-10-14

    实质审查的生效

    实质审查的生效

  • 2009-08-19

    公开

    公开

说明书

相关申请交叉引用

[0001]本申请根据35 U.S.C.§119(e)要求在2006年7月6日提交的美国临时专利申请号60/818763的优先权,通过引用将其合并于此。

[0002]该申请与2006年6月14日提交的美国专利申请号11/453119有关,通过引用将其合并于此。

技术领域

[0003]本公开通常涉及控制系统,更具体而言,涉及用于过程(process)控制系统中的有保证批量事件交付的设备和方法。

背景技术

[0004]通常使用过程控制系统来管理处理设施。示例处理设施包括化学、制药、纸和石化生产车间(plant)。其中,过程控制系统一般与处理设施交互中的工业设备并对其进行控制,例如用于生产化学、制药、纸和石化产品的设备。通常,批量制造或者处理这些或其它类型的产品。

[0005]管制行业一般要求与批量产品的制造有关的所有方面的完整记录。实际上,批量执行的数据记录与产品本身一样重要。非管制行业尽管没有对批量记录完整性的相同要求,但是也通常使用批量记录来支持诸如质量保证分析的功能。因此,在过程控制系统中完整的或接近完整的批量记录通常是合乎需要的。

发明内容

[0006]该公开提供用于过程控制系统中的有保证批量事件交付的设备和方法。

[0007]在第一实施例中,一种方法包括:生成与过程控制系统中的控制器的操作相关联的多个事件。该方法也包括将所述事件存储在缓冲器中,并将所述事件通信到与所述控制器相关联的监控装置。该方法还包括接收对恢复所述事件中一个或多个事件的请求。另外,该方法包括从所述缓冲器恢复所述事件中至少一个事件,并将所述至少一个所恢复事件通信到所述监控装置。

[0008]在特定实施例中,每个事件与唯一标识符相关联,且所述请求识别与所述事件之一相关联的所述唯一标识符。

[0009]在其它特定实施例中,在所述请求中所识别的所述唯一标识符包括数字标识符。此外,从所述缓冲器恢复所述至少一个事件包括恢复与比在所述请求中所识别的所述数字标识符大的数字标识符相关联的任意事件。

[0010]在其它实施例中,所述方法还包括响应于从所述缓冲器恢复少于全部所需事件生成警报。

[0011]在第二实施例中,一种设备包括:至少一个存储器,配置成存储与从过程控制系统中的控制器所接收到的第一事件相关联的唯一标识符。该设备还包括至少一个处理器,配置成:从所述控制器接收第二事件,并使用所述唯一标识符确定所述第一事件和所述第二事件之间的任意事件是否未被从所述控制器接收到。所述至少一个处理器还配置成如果所述第一事件和所述第二事件之间的至少一个事件未被从所述控制器接收到,则发起事件恢复。

[0012]在第三实施例中,一种计算机程序被包含在计算机可读媒介上。所述计算机程序包括用于生成与过程控制系统中的控制器的操作相关联的多个事件的计算机可读程序代码。所述计算机程序也包括用于将所述事件存储在缓冲器中的计算机可读程序代码以及用于将所述事件通信到与所述控制器关联的监控装置的计算机可读程序代码。所述计算机程序还包括用于接收对恢复一个或多个事件的请求的计算机可读程序代码。另外,所述计算机程序包括用于从所述缓冲器恢复所述事件中的至少一个事件的计算机可读程序代码以及用于将所述至少一个所恢复事件通信到所述监控装置的计算机可读程序代码。

[0013]在第四实施例中,一种系统包括配置成对过程控制系统中的过程单元进行控制的控制器。所述控制器还配置成生成并缓存与所述控制器的操作相关联的多个事件。每个事件与唯一标识符相关联。所述系统还包括:监控装置,配置成从所述控制器接收所述事件中的至少某些事件,并根据所述唯一标识符确定所述事件中的任意事件是否未被从所述控制器接收到。所述监控装置也配置成如果所述事件的至少一个事件未被从所述控制器接收到则通过所述控制器发起事件恢复。所述控制器还配置成在所述事件恢复期间恢复至少一个事件并将所述至少一个所恢复事件通信到所述监控装置。

[0014]根据下文的附图、说明书和权利要求书,其它技术特征对本领域技术人员而言就可显而易见了。

附图说明

[0015]为了该公开的更完整理解,结合附图进行以下描述,其中:

[0016]图1示出支持有保证批量事件交付的示例过程控制系统;

[0017]图2示出支持有保证批量事件交付的示例过程控制系统的附加细节;

[0018]图3A到3D示出在支持有保证批量事件交付的过程控制系统中的示例数据流;

[0019]图4示出在支持有保证批量事件交付的过程控制系统中的示例并行数据流;

[0020]图5和6示出支持有保证批量事件交付的过程控制系统的部分的特定示例;

[0021]图7示出在过程控制系统中支持有保证批量事件交付的示例用户界面;

[0022]图8示出在过程控制系统中支持有保证批量事件交付的示例方法。

具体实施方式

[0023]图1示出支持有保证批量事件交付的示例过程控制系统100。图1中示出的过程控制系统100的实施例仅是示例性的。在没有脱离本公开的范围的情况下,可以使用过程控制系统100的其它实施例。

[0024]在该实施例中,过程控制系统100包括一个或多个过程单元102a-102b。过程单元102a-102b表示可执行多种功能中任意功能的过程或生产系统中的组件。例如,过程单元102a-102b可表示制造化学、制药、纸或石化产品所用的设备。过程单元102a-102b中每个过程单元包括用于在过程或生产系统中执行一个或多个功能的任意硬件、软件、固件或其组合。

[0025]两个控制器104a-104b耦合到过程单元102a-102b。控制器104a-104b控制过程单元102a-102b的运作。例如,控制器104a-104b能够向过程单元102a-102b提供控制信号,用于控制化学、制药、纸或石化产品的生产。控制器104a-104b中每个控制器包括用于控制过程单元102a-102b中一个或多个过程单元的任意硬件、软件、固件或其组合。例如,控制器104a-104b可包括一个或多个处理器105以及存储由处理器105所使用、生成或收集的指令和数据的一个或多个存储器107。作为特定实施例,处理器105可包括运行GREEN HILLSINTERGRITY操作系统的POWERPC处理器系列的处理器或者运行MICROSOFT WINDOWS操作系统的X86处理器系列的处理器。

[0026]两个服务器106a-106b耦合到控制器104a-104b。服务器106a-106b执行支持控制器104a-104b和过程单元102a-102b的操作和控制的各种功能。例如,服务器106a-106b可将由控制器104a-104b所收集或生成的信息、例如与过程单元102a-102b的操作有关的状态信息记入日志(1og)。服务器106a-106b也可以执行对控制器104a-104b的操作进行控制的应用程序,从而对过程单元102a-102b的操作进行控制。此外,服务器106a-106b可提供对控制器104a-104b的安全访问。服务器106a-106b中的每个服务器包括用于提供对控制器104a-104b的访问或对控制器104a-104b的控制的任意硬件、软件、固件或其组合。例如,服务器106a-106b中的每个服务器可包括一个或多个处理器109和存储由处理器109所使用、生成或收集的指令和数据的一个或多个存储器111(例如,由服务器106a-106b所运行的软件)。作为特定示例,处理器109可包括运行GREEN HILLSINTERGRITY操作系统的POWERPC处理器系列的处理器或者运行MICROSOFT WINDOWS操作系统的X86处理器系列的处理器。

[0027]一个或多个操作员台108a-108b耦合到服务器106a-106b,一个或多个操作员台108c耦合到控制器104a-104b。操作员台108a-108b表示提供对服务器106a-106b的用户访问并可因此提供对控制器104a-104b和过程单元102a-102b的用户访问的计算或通信装置。操作员台108c表示提供对控制器104a-104b的直接用户访问的计算或通信装置。作为特定实施例,操作员台108a-108c可允许用户使用由控制器104a-104b和/或服务器106a-106b所收集的信息来回顾过程单元102a-102b的操作历史记录。操作员台108a-108c也可允许用户调整过程单元102a-102b、控制器104a-104b或服务器106a-106b的操作。操作员台108a-108c的每个操作员台可包括用于支持系统100的用户访问和控制的任意硬件、软件、固件或其组合。例如,操作员台108a-108c的每个操作员台可包括一个或多个处理器113和由处理器113所使用、生成或收集的指令和数据的一个或多个存储器115(例如,由操作员台108a-108c所运行的软件)。在特定示例中,操作员台108a-108c可表示运行MICROSOFT WINDOWS操作系统的个人计算机。

[0028]在本实施例中,操作员台108b中至少一个操作员台远离服务器106a-106b。该远程台经网络110耦合到服务器106a-106b。网络110在系统100中促进各个组件之间的通信。例如,网络110可在网络地址之间通信因特网协议(IP)分组、帧中继帧、异步传输模式(ATM)单元或其它信息。网络110可包括一个或多个局域网(LAN)、城域网(MAN)、广域网(WAN)、诸如因特网的全球网的部分或全部,或在一个或多个地方的任意其它通信系统或系统。

[0029]在该示例实施例中,系统100包括两个附加服务器112a-112b。服务器112a-112b执行控制系统100的整体操作的各种功能。例如,系统100可用于处理或生产车间或其它设施,服务器112a-112b可执行控制所述车间或其它设施所用的应用。作为特定实施例,服务器112a-112b可执行例如企业资源计划(ERP)、制造运行系统(MES)的应用或者其它任意或附加车间或过程控制应用。服务器112a-112b中每个服务器包括用于控制系统100的整体操作的任意硬件、软件、固件或其组合。

[0030]如图1所示,系统100包括各种冗余网络114a-114b和在系统100中支持组件间通信的单一网络116a-116c。这些网络114a-114b和116a-116c中每个网络表示在系统100内促进组件间通信的任意网络或网络组合。例如,网络114a-114b和116a-116c可表示以太网。

[0031]在操作的一个方面中,控制器104a-104b中的一个或多个控制器可生成表示在过程控制系统100中在控制器操作期间出现的事件的批量执行事件。一般把控制器104a-104b所生成的批量执行事件通信到监控服务器(例如,一个或多个服务器106a-106b),以供例如在事件日志(journal)或者其它数据库中的更持久存储。控制器104a-104b所生成的批量执行事件还被缓冲或暂存在控制器的存储器内。这支持监控服务器的这种功能,以便恢复控制器所生成的事件中的某些或全部事件、例如在该控制器和监控服务器间的通信已被中断时的时段期间所生成的事件。为了支持该事件恢复,系统100提供用于追踪事件以及在清除不正常情形且系统100回到正常操作之后向监控服务器重新发送“丢失(lost)”或“遗漏(missed)”事件的机制。

[0032]在某些实施例中,当在控制器104a-104b内生成批量执行事件时,对事件编号或否则用唯一标识符对其按序进行标识。例如,当事件被生成或保存在控制器的事件缓冲器中时,事件中的每个事件可与8字节数值关联。将这些唯一标识符与事件一起发送到监控服务器。接收时,监控服务器检查与所接收批量事件关联的唯一标识符的序列以便识别可能的间隔(gap)。如果在唯一标识符的序列中检测到间隔,那么这指示至少一个事件没被监控服务器接收到。监控服务器则请求控制器重新发送遗漏或丢失事件(例如指定事件、在唯一标识符范围内的事件或者在特定唯一标识符开始的所有事件)。这有助于支持遗漏或丢失批量事件的恢复,因此有助于确保由监控服务器收集所有或基本上所有事件以供在事件日志(event journal)或其它适当目的地的存储。此外,如果事件永久丢失(因控制器中的事件缓冲器过载或其它原因而不能将其恢复),则系统100可生成警报以通报用户。

[0033]在特定实施例中,当使用控制器104a-104b中的事件缓冲器时,用户可配置事件缓冲器的大小。作为特定实施例,小型、中型和大型事件缓冲器可分别容纳120、240和740个事件。用户可基于任意合适标准、例如在其中使用控制器的应用来选择适当的缓冲器大小。一旦选择了缓冲器的大小,则控制器104a-104b可在其存储器中预留适量空间用于所述缓冲器。

[0034]尽管图1示出支持有保证批量事件交付的过程控制系统100的一种示例,但是可对图1进行各种改变。例如,过程控制系统可包括任意数量的过程单元、控制器、服务器、操作员台和网络。此外,过程控制系统100的结构和配置仅是示例性的。根据具体需要,组件可被添加、省略、合并或置于任意其它配置中。此外,虽然被描述为用于生产某些类型的产品,但是过程控制系统100可按任意其它方式使用。此外,图1示出一种在其中可使用有保证批量事件交付的操作环境。可在任意其它装置或系统中使用有保证批量事件交付。

[0035]图2示出支持有保证批量事件交付的示例过程控制系统的附加细节。特别地,图2示出与图1的过程控制系统100中的控制器104a-104b和服务器106a-106b的特定实现有关的附加细节。图2中示出的过程控制系统的附加细节仅是示例性的。在没有脱离本公开的范围的情况下,可使用过程控制系统100的其它实施例。

[0036]在该实施例中,过程控制系统100包括一个或多个控制执行环境202a-202n。在过程控制系统100中,控制执行环境202a-202n表示由控制器104a-104b所使用或所支持的执行环境。控制执行环境202a-202n可支持多种功能,例如各种控制和后台任务的调度和执行。在美国专利申请号11/175848中提供了控制执行环境的一种示例,通过引用将其合并于此。

[0037]控制执行环境202a-202n生成批量事件,例如与批量产品的处理或生产有关的事件。管制行业通常要求与批量执行有关的所有方面的完整批量记录。批量记录可包括捕获为批量产品的制造的部分的批量事件。非管制行业可不需要对完整批量记录的同样要求,但是可因其它原因而捕获批量执行结果(例如,质量保证、继续改进和过程制造优化)。因此,捕获由控制执行环境202a-202n中的批量引擎所生成的所有批量事件并将其存储在事件日志或其它存储位置通常是较为重要或必需的。在该实施例中,控制执行环境202a-202n中的每个控制执行环境包括或支持用于暂存由控制执行环境202a-202n所生成的事件缓冲器203。如下所述,这有助于促进丢失或遗漏事件的检索(retrieval)或恢复,有助于确保过程控制系统100中的批量记录完全或基本完整。每个缓冲器203表示用于存储和促进批量事件的检索的任意合适结构。

[0038]由于控制器产品内的存储器限制(例如,为特定目的建立的固化控制器平台),批量执行事件一般被及时传送到监控服务器。此外,由于控制器/服务器通信的本质,存在链路或者这些平台中一个或多个平台不可用的时候。例如,这可出现在冗余服务器故障(failover)、冗余控制器故障或者控制器与服务器之间的通信链路中断期间。在批量执行环境中生成的批量事件被保留在控制器的批量缓冲器203内,并在所定义的中断不再存在时被发送到监控服务器。例如,监控服务器可请求监控服务器确定丢失或遗漏的事件的重传。下文描述怎样进行从控制执行环境202a-202n的事件恢复。

[0039]控制执行环境202a-202n与控制数据访问(control dataaccess:CDA)服务器204通信。CDA服务器204提供来往于控制执行环境202a-202n的安全数据访问。例如,CDA服务器204可确保只有所授权资源(例如监控服务器)能够访问控制执行环境202a-202n并与其交互。CDA服务器204包括用于控制数据访问的任意硬件、软件、固件或其组合。

[0040]通知客户机206促进控制执行环境202a-202n(经CDA服务器204)与通知队列208之间的通信。例如,通知客户机206可接收来自控制执行环境202a-202n的批量事件,并向通知队列208提供所述事件以供存储。通知客户机206包括用于提供对通知队列208的访问的任意硬件、软件、固件或其组合。通知队列208包括用于存储多个事件或其它通知的任意合适结构。

[0041]通知管理器210检索来自通知队列208的通知。例如,通知管理器210可从通知队列208检索与控制执行环境202a-202n关联的批量事件。然后,通知管理器210可向一个或多个合适目的地提供所述通知。例如,如果通知表示警报,则可将该通知提供给警报列表212以供存储。如果通知表示事件,则可将该通知存储在事件列表214中。通知管理器210可包括用于从通知队列208检索信息的任意硬件、软件、固件及其组合。警报列表212和事件列表214表示用于存储多个通知或其它信息的任意合适结构。

[0042]由事件系统数据组件(event system data component:事件SDC)216从事件列表214检索事件,并将所述事件存储在事件日志218中。事件SDC 216还使用与事件关联的唯一标识符确定是否遗漏或已丢失任意事件。例如,唯一标识符可表示数字序列,事件SDC 216可通过识别在与所接收事件关联的唯一标识符中的间隔来识别遗漏事件。在事件SDC 216需要从控制执行环境202a-202n恢复一个或多个丢失或者遗漏事件时,事件SDC 216可与通知客户机206或者通用数据访问(generic data access:GDA)管理器220(取决于具体情况)进行通信。这些组件中的任一组件可请求控制执行环境202a-202n进行一个或多个缓存数据的传输或重传。事件SDC 216包括用于将事件记入日志和识别遗漏事件的任意硬件、软件、固件及其组合。事件日志218可包括用于存储事件或将其记入日志的任意合适结构、例如SQL数据库。GDA管理器220包括用于提供对控制执行环境202a-202n的访问的任意硬件、软件、固件及其组合。

[0043]在特定实施例中,图2示出的各种组件可在一个或多个控制器104a-104b与一个或多个服务器106a-106b之间进行划分。例如,控制执行环境202a-202n可驻留在多个控制器或与其关联,而其余组件可驻留在监控服务器或由其支持。

[0044]在操作的一种方面中,可将事件缓存在控制执行环境202a-202n中,且所述事件可与唯一标识符关联。监控服务器可基于与所述事件关联的唯一标识符(经事件SDC 216)识别遗漏或丢失事件。如果需要,可从控制执行环境202a-202n向监控服务器重传遗漏或丢失事件。

[0045]尽管图2示出了支持有保证批量事件交付的过程控制系统的一种示例的附加细节,但是可对图2进行各种改变。例如,图2中组件的结构和配置仅是示例性的。根据特定需要可按任意其它配置添加、省略、合并或设置组件。

[0046]图3A到3D示出在支持有保证批量事件交付的过程控制系统中的示例数据流。尤其是,图3A到3D示出了在图2中示出的过程控制系统100的组件之间的示例数据流。图3A到3D示出的数据流的实施例仅是示例性的。在没有脱离本公开的范围的情况下,可使用其它数据流。

[0047]可在监控服务器首次启动时、即在监控服务器成为活动时使用图3中的数据流。这种情况下,监控服务器可能已经遗漏了先前在服务器的启动期间由一个或多个控制器所通信的事件。这种情况下,可出现下面的事件序列。

(1)在服务器启动时,通知客户机206从CDA服务器204预订并接收通知。

(2)CDA服务器204例如通过使用来自系统知识库(repository)的信息来获得能够生成事件的控制执行环境(CEE)202a-202n的列表。CDA服务器204例如通过使用回叫(callback)功能向通知客户机206返回控制执行环境的列表。

(3)通知客户机206查询事件SDC 216,查找由事件SDC 216从所识别的控制执行环境接收到的最后事件的序列标识符。

(4)如果事件SDC 216不能用其内部列表解析(resolve)通知客户机的查询,则事件SDC 216查询事件日志218。

(5)如果必要,事件日志218向事件SDC 216返回从所识别的控制执行环境最后接收到的序列标识符的列表。

(6)事件SDC 216向通知客户机206传递该信息。

(7)通知客户机206向CDA服务器204传递该信息。

(8)CDA服务器204通过对每个控制执行环境指定从事件SDC216所接收到的适当序列标识符,从每个控制执行环境请求事件恢复。

(9)每个控制执行环境公布其始于由CDA服务器204所请求的序列标识符的事件。

(10)对于每个控制执行环境,CDA服务器204生成该控制执行环境的事件恢复开始括弧,并向通知客户机206发送该开始括弧。该开始括弧包含对事件恢复的对应请求的序列标识符和第一所恢复事件的序列标识符。该恢复括弧后面是一系列的一个或多个所恢复事件。

(11)对于每个控制执行环境,向事件SDC 216提供所恢复事件,事件SDC 216用恢复开始括弧更新其内部列表。

(12)将所恢复事件记入或者登记到事件日志218。

[0048]可在控制器重启动并重新连接到监控服务器时或者在进行控制器的冷再载入(cold reload)时使用图3B中的数据流。在此期间,控制器可不与其监控服务器联系,并可生成某些事件。在这种情况下,可出现以下事件序列。

(1)控制执行环境202a-202n通知CDA服务器204控制器已重启动。

(2)CDA服务器204例如通过使用回叫功能,向通知客户机206返回其具有执行环境的载入时间的控制执行环境的代码。

(3)通知客户机206查询事件SDC 216,查找由事件SDC 216从控制执行环境接收到的最后事件的序列标识符。

(4)如果事件SDC 216不能用其内部列表解析通知客户机的查询,则事件SDC 216查询事件日志218。

(5)如果必要,事件日志218向事件SDC 216返回从控制执行环境接收到的最后所接收序列标识符。

(6)事件SDC 216向通知客户机206传递该信息。

(7)通知客户机206向CDA服务器204传递该信息。

(8)CDA服务器204通过指定从事件SDC 216所接收到的序列标识符,从控制执行环境请求事件恢复。

(9)控制执行环境公布其始于由CDA服务器204所请求的序列标识符的事件。

(10)CDA服务器204生成控制执行环境的事件恢复开始括弧,并将其发送到通知客户机206。该恢复括弧后面是一系列的一个或多个所恢复事件。

(11)向事件SDC 216提供所恢复事件,事件SDC 216用该恢复开始括弧更新其内部列表。

(12)将所恢复事件记入或者登记到事件日志218。

[0049]可在丢失一个或多个事件时使用图3C中的数据流。这可由多种原因造成,例如服务器故障、控制器故障、网络中断或者过量的服务器负载。在这种情况下,可出现以下事件序列。

(1)丢失一个或多个事件(无论什么原因),即从控制执行环境传送的一个或多个事件没被事件SDC 216接收到或正确记入日志。

(2)具有非预期序列标识符的事件到达事件SDC 216。例如,该事件可具有不直接遵循先前所接收事件的数字标识符的数字标识符。

(3)当事件SDC 216检测到这种情况出现时,通过GDA管理器220命令事件恢复。

(4)CDA服务器204接收该恢复命令。

(5)控制执行环境继续发送事件SDC 216不预期的事件(不具有由事件SDC 216所识别的一个或多个遗漏数字标识符的事件)。

(6)CDA服务器204从控制执行环境请求事件恢复,并指定所述恢复应在其开始的序列标识符。

(7)非预期事件传播到通知客户机206。

(8)非预期事件到达事件SDC 216。事件SDC 216在接收到这些非预期事件后可不更新其内部列表,且它可不重新命令其它恢复(在这个时候)。

(9)非预期事件被记入或者登记到事件日志218。

(10)控制执行环境公布其始于由CDA服务器204所请求的序列标识符的事件。

(11)CDA服务器204生成通知客户机206的事件恢复开始括弧,其后是一系列的一个或多个所恢复事件。

(12)所恢复事件到达事件SDC 216,事件SDC 216用恢复开始括弧的序列标识符更新其内部列表。

(13)将所述事件记入或者登记到事件日志218。

[0050]可在控制执行环境完成控制方法(control recipe)的执行时使用图3D中的数据流,控制方法(如下文所述)定义具体产品的生产要求并用于生产单批量的产品。在这种情况下,可出现以下事件序列。

(1)在完成控制方法的执行时,控制方法向CDA服务器204报告方法完成事件。

(2)向通知客户机206发送该方法完成事件。

(3)该方法完成事件到达事件SDC 216。

(4)将该方法完成事件记入或者登记到事件日志218。

(5)如果所有方法事件被记入日志(方法完成事件是按顺序的且没有接收到具有非预期序列标识符的事件),则事件SDC 216经GDA管理器220通知CDA服务器204控制方法的所有方法事件已被记入日志。

(6)CDA服务器204接收该信号。此时,可安全去除控制方法。

[0051]尽管图3A-3D示出了在支持有保证批量事件交付的过程控制系统中的数据流的示例,但是可对图3A-3D进行各种改变。例如,在过程控制系统中事件或其它信息可按任意其它合适方式流动。此外,在过程控制系统中其它数据流可用于其它或附加情形,以便支持有保证批量事件交付。

[0052]图4示出在支持有保证批量事件交付的过程控制系统中的示例并行数据流。尤其是,图4示出了图2中示出的过程控制系统100的组件之间的示例数据流。图4中示出的数据流的实施例仅是示例性的。在没有脱离本公开的范围的情况下,可使用其它数据流。

[0053]在该示例中,实线表示用于例如警报、事件的序列(SOE)、实时(live)事件和消息的通知的正常数据流。这些通知一般从控制执行环境202a-202n流出,并流经通知CDA服务器204、通知客户机206和通知管理器210。实时事件存档在事件列表214中,并被事件SDC 216记入日志。但是,某些类型的事件、例如来自控制方法的事件的数量根据应用可很大。因此,事件的数量可压制(overwhelm)过程控制系统中现有的警报和系统事件生成机制。

[0054]为了支持有保证批量事件交付的使用,过程控制系统可包括批量事件的独立数据通路(由虚线表示)。这种独立数据通路包含批量事件处理器402,批量事件处理器402操作批量事件的处理以及将批量事件插入事件列表214。在该示例中,将批量事件从通知客户机206发送到批量事件处理器402以供操作,而不是发送到通知管理器210。这使得某些批量事件绕过通知管理器210并被直接发送到事件列表214,允许事件SDC 216检索事件并将其记入日志而不要求使用通知管理器210。

[0055]尽管图4示出了在支持有保证批量事件交付的过程控制系统中的并行数据流的一种示例,但是可对图4进行各种改变。例如,虽然被示出为包括批量事件的通路和所有其它通知的通路,但是过程控制系统可支持用于通知的任意数量的数据通路。此外,在过程控制系统中可不需要并行数据流,并可省略批量事件处理器402。

[0056]图5和6示出支持有保证批量事件交付的过程控制系统的部分的特定示例。尤其是,图5示出示例过程控制系统500,图6示出了在过程控制系统500中支持有保证批量事件交付的示例机制。图5和6中示出的支持有保证批量事件交付的过程控制系统的实施例仅是示例性的。在没有脱离本公开的范围的情况下,可使用过程控制系统的其它实施例。

[0057]可例如通过使用图1和2中示出的各种组件在任意合适系统中实现图5中示出的过程控制系统500。如图5中所示,过程控制系统500包括一个或多个单元控制模块(unit control module:UCM)502、方法控制模块(recipe control module:RCM)504、连续控制模块(sequential control module:SCM)506和控制模块(control module:CM)508。在某些实施例中,单元控制模块502、方法控制模块504、连续控制模块506和控制模块508在过程控制系统100中被分配到多个控制执行环境、例如控制器104a-104b。

[0058]单元控制模块502一般表示过程单元510或者与其关联,过程单元510包含一件或多件处理设备,其中在单元控制模块502的获得之后使用过程单元510。如在美国专利申请号11/453119中所述,请求程序(requester)函数块和资源函数块可通过被合并到各个控制模块502-508或者否则被其使用而被调用。资源函数块表示可由请求程序函数块获得并释放的对象,其中请求程序函数块使用仲裁请求来尝试获得资源函数块。在这些实施例中,单元控制模块502可由方法控制模块504获得,方法控制模块504允许过程单元510在方法控制模块504的执行期间被使用。

[0059]方法控制模块504一般表示定义一种或多种具体产品(或其部分)的生产要求的信息,其中方法控制模块504的执行可导致单批量的所述一种或多种产品(或其部分)的生产。方法控制模块504可包括头标(header)、流程、公式和任意设备要求。在方法控制模块504中的流程由阶段(phase)函数块512所表示的阶段集合定义。方法控制模块504的每个阶段与连续控制模块506关联,连续控制模块506与一个或多个控制模块508交互以实现方法控制模块504的阶段之一。控制模块508提供对实际过程单元510的访问并提供对其的控制。方法控制模块504中的流程也可包括步骤、转换和同步块的集合。步骤块提供对控制模块508的读/写访问,同步块允许阶段函数块512或步骤块的并行执行。

[0060]方法控制模块504通过其阶段对连续控制模块506进行操作,其中所述阶段控制连续控制模块506、监视连续控制模块506的执行状态且可选择地向方法控制模块504传播执行状态。阶段函数块512也可监视其父代方法控制模块的状态,并在其父代方法控制模块504进入不正常状态时向其下面的连续控制模块506传播状态。在特定实施例中,各个控制模块504-508可如由国际电工技术委员会(IEC)61131和61512(包括61512-1)标准或者美国专利号6317638所定义那样工作(所述标准和专利通过引用合并于此)。

[0061]当创建方法控制模块504时,它可有选择地与特定单元控制模块502关联。单元控制模块502可在执行方法控制模块504时获得,并可有选择地由方法控制模块504在任意时刻释放,例如在方法控制模块504到达终止状态时或者在任意其它先前时刻释放。各个参数可在阶段函数块512内定义。这些参数可包括:为执行控制而对连续控制模块506的引用;在阶段启动时分配的资源名称;以及标记,指示是否要在结束连续控制模块506的执行时释放获得的资源。默认地,资源名称可基于所选连续或方法控制模块的名称。如果不存在所选连续控制模块506,为了资源管理目的可使用阶段。一旦处于终止状态,可根据配置标记释放或不释放方法控制模块504所获得的所有资源。

[0062]在某些实施例中,单元控制模块502、连续控制模块506和控制模块508可表示可在多个方法控制模块504之间共享的公共资源。作为特定示例,方法控制模块504可一般需要获得单元控制模块502以执行其流程。因此,需要时,方法控制模块504可获得和释放单元控制模块502。作为另一特定示例,方法控制模块504可获得它们需要的连续控制模块506和控制模块508,以实现产品的生产。

[0063]在单元控制模块502中的所有者指针(owner pointer)514识别相对单元控制模块502当前正在执行的方法控制模块504(当前拥有或已获得单元控制模块502的方法控制模块504)。仲裁队列516识别等待获得单元控制模块502来执行的指定数量的方法控制模块504。在当前方法控制模块504(由所有者指针514所识别)释放单元控制模块502时,单元控制模块502可使用单元控制模块502所支持的或者用户所定义的任意仲裁技术(例如先入先出或其它技术)从队列516中选择下一方法控制模块504。同样,连续控制模块506可包含仲裁队列518。在连续控制模块506的仲裁队列518中识别正等待获得代表其阶段块的连续控制模块506的一个或多个方法控制模块504。可按任意顺序从队列518中选择方法控制模块。

[0064]一般而言,方法控制模块504中的阶段函数块512表示用于获得连续控制模块506或者另一方法控制模块504、发起并监视其执行的函数块。例如,如果阶段函数块512配置成执行连续控制模块506,则阶段函数块512可获得连续控制模块506、把公式参数载入到连续控制模块506并启动连续控制模块506。公式参数表示被阶段用来将适当方法数据、例如控制在阶段执行期间如何使用过程单元510的数据通信到连续控制模块506的参数集合。

[0065]在执行连续控制模块506时,阶段函数块512可监视连续控制模块506的状态。阶段函数块512还可从连续控制模块506投射出数据,使得可由方法控制模块504经阶段函数块512监视SCM执行。此外,例如在完成连续控制模块506的执行或者到达另一终止状态时,阶段函数块512可命令连续控制模块506向阶段函数块512上载各种报告参数。根据该配置,阶段函数块512可在该阶段完成之前等待或不等待连续控制模块506到完成,它允许方法控制模块504行进到下一阶段或步骤。此外,根据该配置,阶段函数块512可在该阶段的完成时释放或不释放任意所获资源(例如连续控制模块506)。另外,方法控制模块504、阶段函数块512或者其它模块可生成并报告批量事件。

[0066]过程控制系统500可与上述有保证批量事件交付机制配合使用。例如,可在过程控制系统500中生成以下类型的事件。在某些实施例中,事件可在控制执行环境级、连续控制模块/方法控制模块(SCM/RCM)级以及SCM/RCM步骤和阶段级生成。在各级能够进行或不能进行事件的日志记录,且能够进行事件日志记录允许向事件SDC 216报告指定事件。

[0067]在控制执行环境级,用户可定义分配多少存储器用于缓存事件(事件缓冲器203的大小)。用户也能或者不能把所有批量事件或所选类型的批量事件记入日志。事件的类型可包括RCM/SCM执行、执行细节、公式/方法参数、方法头标、方法资源分配以及报告/历史记录参数。可添加到日志的SCM事件可包括SCM/RCM执行开始、SCM/RCM终止状态、SCM/RCM步骤开始、SCM/RCM步骤完成、RCM阶段开始、RCM阶段完成、SCM方法参数下载(例如每参数一事件)、SCM历史记录参数上载(例如每参数一事件)、RCM公式参数下载(例如每参数一事件)以及RCM报告参数上载(例如每参数一事件)。总SCM/RCM事件使能参数能够打开或关闭整个SCM/RCM事件报告(默认地,可对RCM设置“开”而对SCM设置“关”)。

[0068]过程控制系统500可使用图6中示出的机制提供有保证批量事件交付。尤其是,图6中示出的机制可在控制器104a-104b中控制执行环境之内实现。该机制允许批量事件被缓存在控制执行环境中。它还可阻止某些用户动作或其它动作,例如在与方法控制模块504关联的所有事件被记入日志且从事件SDC 216接收到应答之前阻止该方法控制模块504的释放或删除(如上文参考图3D所述)。

[0069]如在图6中所示,在控制执行环境中执行函数块(例如连续控制模块506或方法控制模块504)。在其执行期间,函数块生成由表示为clsBatchEvent的类所定义的新事件。函数块使用ReportNotice()函数向告警块报告该新事件,告警块导致ReportBlockNotice()被执行。然后给该块做标记,即事件使用ReportNotification()作了报告。块管理器针对该事件是否表示批量事件做判决。如果否,则通过使用类clsCiNotification向通知客户机206提供通知。否则,向事件管理器通报该批量事件。事件管理器与类clsBatchEventManger关联,所述类可表示处理批量事件和管理事件恢复所用的基数(cardinality)1类。这种类的功能性可包括存储事件信息的缓冲器(例如缓冲器203)的创建和维持、批量事件的生成以及丢失或遗漏事件的重新生成或恢复。这种类还可支持用于增加事件信息的接口,并维持事件的序列标识符。事件管理器向通知客户机206提供具有关联序列标识符的批量事件。

[0070]在该实施例中,clsBatchEventManger对象可在控制执行环境启动期间创建。在clsBatchEventManger对象的创建时,可把控制执行环境中的批量事件的序列标识符设置到一个或某个其它初值。

[0071]在某些实施例中,可不在clsBatchEventManger对象的创建期间分配用于缓冲器203的存储器,因为缓冲器203的大小可不固定。而是可由用户配置缓冲器大小,且在创建clsBatchEventManger对象时缓冲器203的配置数据可能是不可用的。例如,可向用户提供缓冲器大小的多个选项,例如无、小型、中型和大型。可按控制执行环境配置的形式或者以任意其它合适方式提供这些选项。一旦选择并存储了该参数,可调用clsBatchEventManger对象中的函数以创建缓冲器203所需的存储器。如果选择“无”的选项,则不给缓冲器203分配存储器。同样,如果存储器对缓冲器203不可用,则返回异常(exception)。

[0072]在特定实施例中,可在控制执行环境的每个基本周期执行clsBatchEventManger对象。例如,该对象的执行可为控制执行环境的预算任务的部分。clsBatchEventManger对象在其执行时间内可执行的唯一处理可为添加那些先前没被添加到CDA服务器204中的缓冲器的批量事件。可限制每个周期向CDA服务器204所报告的事件的数量(例如限制到5)。clsBatchEventManger对象可提供用于向CDA缓冲器添加事件信息的接口,以便支持这种功能性。

[0073]当监控服务器发起事件恢复时,它可用事件的序列标识符向控制执行环境发送请求,指示该事件是依次接收到的最后事件。由块管理器处理该命令,其在控制执行环境可表示非预算任务。可使用方法(method)标识符来区别事件恢复请求与其它请求(例如参数存储)。在处理事件恢复请求时,块管理器可调用clsBatchEventManger对象以将其索引重置到包含具有监控服务器所请求的序列标识符的事件的新索引。如果要恢复的事件信息在控制执行环境的缓冲器203中已被改写(overwrite),则可生成“事件丢失”警报。

[0074]如果用户选择“无”的缓冲器大小,则这表示有保证批量事件交付不与控制执行环境配合使用。当缓冲器的大小为无时,可不给缓冲器203分配存储器,从方法控制模块504或连续控制模块506所接收到的批量事件被直接发送到CDA服务器204。为了指示批量事件没有保证,可在CDA事件结构中将标记设置为适当值(例如“错误(false)”)。当事件遗漏时,监控服务器在知晓设为“错误”的标记时可不命令事件的重新生成。

[0075]下文给出有保证批量事件交付机制的特定实施例的具体细节。这些细节仅是示例性的。可使用支持有保证批量事件的过程控制系统的其它实施例。

[0076]在特定实施例中,表示批量事件的类(clsBatchEvent)可包括适当值的定义。这些值可包括序列标识符(用于识别遗漏或丢失事件)、批量标识符(用于识别正在生产或处理的批量产品)以及子条件域。例如,事件通知的结构可具有以下参数:

UINT64SeqId;      //序列号

clsCID SubCondCID;//子条件的CID

//包含文本的数据容器

//与通知关联的字符串

DataContainerCreate<MAX_NOTIF_DC_BUFFER>StrValue;clsBatchEventManger对象可包括对其它类公开的函数。例如,对块管理器公开的函数可包括:

BOOLEAN IF_AddEvent(eventstructure);//添加事件

Void IF_GenerateEvent( )            //生成事件

Void IF_Event RegenRequest(UINT64SeqID)

                             //重新发送丢失或遗漏事件

Void IF_AllocationBufferMemory(enumsize size)

                            //创建缓冲器

重新生成批量事件所要求的基本信息可作为结构存储在事件缓冲器203中,例如如下定义的结构:

Struct EventStructure

(

DATETIME timestamp;

IEEE_FLOAT64 Value;

IEEE_FLOAT64 InfoField1;

  IEEE_FLOAT64 infoField2;

  UINT64 SequenceID;

  UINT64 ExecutionId;

  clsIOID BlockIOID;

  NM_SUBTYPE EventType;

  INT16 infoField3;

)

该结构的大小可为60字节。为了节省存储器,可根据存储在缓冲器203中的事件的类型有区别地使用上述结构的每个域。

[0077]对于事件缓冲器203也可存在多个可能位置。例如,可在控制执行环境中维持单循环缓冲器,给控制执行环境分配的方法控制模块504和连续控制模块506可共享同一缓冲器。clsBatchEventManger对象可负责管理缓冲器203并在响应恢复请求时重新生成事件。由于缓冲器203被控制执行环境中所有方法控制模块504和连续控制模块506共享,因此它可被更有效地利用。例如,如果某些方法控制模块504或连续控制模块506没有较多事件,则缓冲器203中的空间可由具有更多事件的其它方法控制模块504和连续控制模块506使用。

[0078]在别的实施例中,各个方法控制模块504和各个连续控制模块506维持其自身的循环缓冲器。在这些实施例中,控制执行环境可只对事件生成唯一标识符。

[0079]事件缓冲器203还可用各种方法创建。例如,可在作为阵列的类之内或在辅助存储器中创建事件缓冲器203。如果创建为类的成员,则控制器104a-104b中的未使用或空闲的存储器可用于缓冲器203,例如350KB的存储器。如果在辅助存储器中创建,则用户可具有决定给事件缓冲器203所分配的存储器的大小的选项。

[0080]在某些实施例中,批量创建事件可包含可能表示字符串的批量标识符。为与缓冲器203的所有单元相关联的字符串分配存储空间可能是困难的。因为批量创建事件可不如其它事件那样频繁地被生成,所以可只在被称为BatchIdBuffer的独立阵列中分配少量字符串对象。对于批量创建事件,事件的结构中的参数可具有对BatchIdBuffer阵列中的批量标识符的索引。该缓冲器的大小可固定,例如为事件缓冲器203的大小的1/10。表1示出事件缓冲器203与关联BatchIdBuffer阵列的各种可能大小。

 

事件缓存类型容量(事件数)大小(KB)BatchId缓冲器的容量大小(KB)缓冲器总大小(KB)小型1207.03120.57.53中型24014.06524115.06大型72042.18723.345.48

表1

可将列举类型的参数添加到控制执行环境的、用于定义事件缓冲器203的大小的定义文件。对该参数的访问可仅限于例如开发者。该参数可具有无、小型、中型或者大型的值(其中任一个可作为默认值)。SetEventBfferSize()函数可存储该参数的值。在存储控制执行环境的该参数时,可对clsBatchEventManger对象、如对AllocationBufferMemory()函数进行调用,以便给缓冲器203分配所需存储器。

[0081]事件信息一旦被创建,就可通过对AddEvent()函数的调用将其添加到缓冲器203。该调用在块管理器中作为ReportNotification()函数的部分而进行。在不创建缓冲器203的情况下(例如,因为用户的选择),可不报告事件。AddEvent()函数可定义如下:

clsCiNotifClient::pInstance′s AddNotification function:

Void clsBatchEventManager::AddEvent

(strCkNotification*eventInfo)

{

If Buffer Allocated

    {

    if(LastElementIndex!=MaxBufferSize)

     {

       LastElementIndex++;

    }

     else

     {

        //指示该缓冲器已满,且必须改写添加的第一单元

         LastElementIndex=0

      }

      struct EventStructure*BufferPtr=(struct

      EventStructure*)BufferAuxMem.GetPointer()

      //从strCkNotification结构提取信息

     //并在BufferPtr[LastElementlndex]存储该值

   }

}

[0082]批量事件可被clsBatchEventManger对象添加到CDA缓冲器。clsBatchEventManger对象可作为控制执行环境的预算任务的部分而被执行。在其执行期间,事件管理器对象可使用驻留在缓冲器203中的信息生成批量事件。由于这是控制执行环境的预算任务的部分,因此可将事件管理器对象的处理时间保持到最短以避免周期超时运行(overrun),但周期同时足够长以便按可接受速率生成事件,使得缓冲器不溢出(overflow)。基于这种考虑,可限制事件管理器对象的一个执行周期中生成的事件的数量(例如限制到5)。由于可定期(例如每50ms)执行事件管理器对象,因此以这种节制它仍可每秒生成100个事件。这个数量可满足过程处理系统的需要的另一原因在于过程处理系统中的其它组件可处理较少量的事件、例如每秒40个事件的最大值。鉴于此,clsBatchEventManger对象还可定义如下:

Void clsBatchEventManager::EventGeneration()

{

    MaxEvenstPerExecut±on=5

    counter=0

    clsCiBatchEvent tempClsCiBatchEvt;

    if Event Buffer Allocated

    {

      struct EventStructure*BufferPtr=

      (struct EventStructure*)BufferAuxMem.GetPointer()

      while(counter<MaxEvenstPerExecution And(there are

      events to be generated))

      {

        //根据事件类型从BufferPtr[CurrentEventIndex]把信息

       //复制到tempClsCiBatchEvt。

     if(clsCiNotifClient::pInstance->

     AddNotification(tempClsCiBatchEvt))!=FALSE)

         {

           If(CurrentEventIndex<MaxSize)

             CurrentEventlndex++;

           Else

             CurrentEventlndex=0;}

         else

         {

           //CDA缓冲器可已充满,在下一循环时重试

           break;

         }

        counter++

        }

     }

}

[0083]可用指示将重新生成具有序列标识符大于给定序列标识符的所有事件的序列标识符命令事件恢复。为了处理事件恢复请求,可使用方法(method)标识符,且事件恢复可作为显示请求处理的部分而被处理。在事件恢复的情况下,中断屏蔽寄存器(interrupt maskregister:IMR)可容纳该序列标识符。当该序列标识符为0时,这指示监控服务器正在请求缓冲器203中所有事件的重新生成。可用该序列标识符调用clsBatchEventManger对象的RegenEvent()函数。RegenEvent()函数可重新设置CurrentEventIndex参数以指向容纳比所接收序列标识符大1的序列标识符的事件结构。然后可在事件缓冲器的执行的下一周期期间重新生成事件。鉴于此,clsBatchEventManger对象还可定义如下:

Void clsBatchEventManager::RegenEvents(UINT64RecoverSeqID)

     {

        if Buffer created

        {

         struct EventStructure*BufferPtr=(struct EventStructure*)

         BufferAuxMem.GetPointer()

                 if(RecoverSeqID>0)

                 {

                    RecoverEventldex=GetIndex(SeqId);

                    //该函数返回该结构的索引

                    //谁的sequenceld=RecoverSeqId

                  }

                  else

                  {

                    Recover EventIndex=First element in the buffer

                  }

            if(Recover EventIndex==-1)

            {

            //这表示该事件在缓冲器中不可用

            //生成指示事件丢失的警报。

            RecoverEventIdex=GetNExtIndex(SeqID)

            //该函数返回具有其大于RecoverSeqID的sequenceId

            //第一结构的索引。

           }

           CurentEventIdex=RecoverEventIdex;

        }

     }

在clsBatchEventManger对象的下一执行中,可从所请求序列标识符重新生成事件。

[0084]与函数块(例如,方法控制模块504和连续控制模块506)关联的静态信息可不存储在事件缓冲器203中。这种信息、例如块名称可存储在别的位置,例如存储在系统知识库中。当块被删除时,这种信息可丢失,但是在所述块已被删除之后由被删除块所生成的事件仍可以存在于事件缓冲器203中。如果重新生成这些事件,则静态信息域可容纳默认值或错误值。对用户而言,这些可能是不可接受的。为了避免这种情况,可直到由方法控制模块504或连续控制模块506所生成的所有事件被记入日志才将该模块删除。例如参数AllowBlockDelete可被添加到方法控制模块504或连续控制模块506。如果该模块没被配置成生成事件,则可把该参数的值设为“真(true)”。如果该模块被配置成生成事件,则可把该参数设为“假(false)”。该模块在完成其执行之后,生成完成事件。监控服务器在接收到完成事件时可发起驻留在完成事件中的ExecutionID的AllowBlockDelete参数的存储。如果ExecutionID与该模块的最后运行ExecutionID匹配,则参数AllowBlockDelete可设为“真(true)”。为了删除模块,可先使其不活动(例如在该模块的状态为空闲时)。当模块处于空闲状态时,命令它不活动时,检查值AllowBlockDelete。如果AllowBlockDelete为“真(true)”,则允许参数中的ExecutionID的存储。如果AllowBlockDelete为“假(false)”,则不允许完成所述存储,该模块的状态不改变,且直到由该模块所生成的所有事件已被记入日志才允许用户改变该模块的状态(除非生成“丢失事件”错误)。如果监控服务器离线(offline),则可始终不进行AllowBlockDelete参数的存储,且该模块可始终不被删除。为了克服这种情形,参数AllowForceDelete(其可能为布尔参数)可被添加到所述模块。当命令模块不活动时,检查AllowForceDelete参数的值。如果该值为“真(true)”,则允许改变状态而不管AllowBlockDelete参数的值。

[0085]当监控服务器命令未驻留在缓冲器203中的序列标识符的事件恢复时,clsBatchEventManger对象可生成指示事件丢失的警报,并可以具有比所请求序列标识符大的序列标识符的第一事件开始启动重新生成事件。警报可包含丢失事件的序列标识符。

[0086]用于存储批量标识符的BatchID缓冲器也可极为受限。BatchID缓冲器可按与主事件缓冲器203类似的方式工作。在添加新批量标识符期间,当BatchID缓冲器已满时该新标识符可改写最旧的标识符。改写BatchID缓冲器但对应的事件条目(entry)仍驻留在事件缓冲器203中是可能的。这种情况下,当接收到对该事件的RegenEvent()函数调用时,该事件可用容纳空字符串的BatchID域来生成。

[0087]由于事件缓冲器203可在辅助存储器中创建,因此它可在控制执行环境的存在期间存在。在控制器重新载入或删除的情况下,可重新创建包括clsBatchEventManger对象的所有基数(cardinality)1对象。因此,对于控制器重新载入或控制执行环境删除不需要特别处理。同样,在RAM保持重新启动的情况下,如果已给事件缓冲器203分配了存储器则可重新确认辅助存储器操作。此外,如果将数据移到辅助存储器中则辅助存储器可能承受压紧(compaction)。当该情形发生时,没必要修改事件缓冲器203的内容,因为clsBatchEventManger对象可不存储与缓冲器203关联的存储器指针(因此在缓冲器203中没有指针需要被更新)。另外,可不需要用于从缓冲器203去除事件信息的机制。当实现为循环缓冲器时,旧的事件信息最终由新的事件信息改写。另外,clsBatchEventManger对象可不进行抽点检查(checkpoint)(意味着存储在缓冲器203中的批量事件可在检查点恢复期间丢失),且在某个控制器中的事件缓冲器203的内容可由从属或备份控制器追踪。

[0088]图6中的块管理器可包含用于操作批量事件处理的函数。由于批量事件处理可对所有平台公用,因此可用公共文件对块管理器进行改变。块管理器中的函数可包括用于定期执行的函数,例如以下函数:

  PeriodicExecution(void)

  {

   …

   if(isPrimary()!=FALSE) //如果控制器是主控制器且

                           //没有第二控制器

   {

    …

    clsBatchEventManager::pInstance->

    GenerateEvents()

   }

}

该块管理器还可包括ReportNotification()函数,该函数负责填充CDA通知结构并调用AddNotification()函数。当它收到批量事件时,该函数可填充所述事件结构并调用clsBatchEventManger中的AddEvent()函数。这可使用以下指令来完成。

const BOOLEAN

  clsCkBlockManagerCommon::ReportNotification(strCkNotification*

  const CkNotif,const UINT32TaggedBlockAlarmState)

  {

       NM_TYPE NotificationType=((strCkNotice*)

       (CkNotif->BlockNotice->Notice))->NotifClass;

       if(NotificationType!=NM_TYPE_BATCH_EVENT&&

           NotificationType!=NM_TYPE_PROCES S_ALERT)

       {

           …

       }

       else if(NotificationType==NM_TYPE_BATCH_EVENT)

       {

           clsBatchEventManager::plnstance->AddEvent(Event

           tructure)

       }

}

[0089]此外,为了支持事件恢复请求,方法(method)标识符kBatchEvtRegen可被添加到在控制执行环境中所列举的方法标识符。在事件恢复请求的情况下,clsBatchEventManger对象的RegenEvents()函数可用驻留在该请求中的序列标识符来调用。这可引起以下指令。

BOOLEAN clsCkBlockManagerCommon::CkExecute(const enmDataAccess

  ListID,UINT32NumIMRs)

{

  …

  while(pRequest!=NULL)

  {

     …

     switch(MethodId)

     {

       …

       case kBatchEvtRegen:

            get the requested Sequenceldfrom CDA packet.

            clsBatchEventManager::pInstance->

            RegenEvents(RequestedSequenceID)

      }

    }

}

[0090]如果图5中示出的各种组件(例如方法控制模块504和连续控制模块506)被用于如图2中所示的过程控制系统100,则图2中的组件可如下实现。这些细节表示图2所示的过程控制系统100的一种特定实现,且不限制该公开的范围。

[0091]CDA服务器204和通知客户机206之间的接口可支持以下特定事件以助于支持有保证事件交付:方法事件恢复开始括弧和控制方法完成事件。这些事件可由控制执行环境中所列举的事件子类型唯一标识。

[0092]为了支持有保证事件交付,每个方法事件可具有按照生成事件的顺序所分配的唯一8字节增加型序列标识符。这些事件在被记入日志之前可从控制执行环境流到事件SDC 216。在该数据流动时,事件可遭受丢失,而序列标识符被用于追踪任何丢失事件。各方法事件还可携带其控制执行环境的载入时间,其可被用于记录方法事件生成时的执行环境周期。载入时间可记录执行环境的最新控制器重新载入的时间。序列标识符与执行环境代码和执行环境的载入时间一起可构成方法事件在整个过程控制系统中的唯一标识符。这三个组合域可因此用于命令关于特定控制执行环境的方法事件恢复。序列标识符域可表示UINT64值,而载入时间域可表示FILETIME值。

[0093]由于CDA服务器204可从控制执行环境请求始于比从事件SDC 216所接收到的所请求序列标识符大1的序列标识符的方法事件恢复,所以可不给方法事件的序列标识符分配零值。根据方法事件恢复,对零序列标识符进行请求可能表示对恢复在控制执行环境中始于最旧的方法事件的所有事件的请求。同样,当控制执行环境重新载入时,其载入时间可重新设置到当前时间,且其序列标识符可开始于1值。对控制执行环境的载入时间重新设置可确保序列标识符的当前周期被唯一标识。随后的方法事件则可具有相同执行环境载入时间的增加型序列标识符。

[0094]可用以下函数来构成CDA服务器204和通知客户机206之间的接口的至少一部分。可在通知客户机206从CDA服务器204预订与服务器启动有关的通知时调用GNotificationSubscribe()函数。该函数可具有回叫(callback)函数,其充当通知客户机206的入口点(entry point)以使CDA通知被传递到CDA服务器204。该函数还可包括到CDA服务器204的另一回叫函数,使得CDA服务器204可从各控制执行环境获得最后被记入日志的方法事件的序列标识符。GNotificationSubscribe()函数可如下实现。

//对通知回叫函数的类型定义

typedef int(*FPNotification)(NM_NOTIFICATION*);

//对GetSeqIDs回叫函数的类型定义

typedefint(*FPGetSeqIDs)(WORD*,FILETIME*,UINT64**);

//预订通知的函数

CDAFUNC G_Status APIENTRY GNotificationSubscribe

(

  //通过回叫通知被传递到

  //客户机

   FPNotification pfnNotifCallback

  //通过回叫CDA服务器获得SeqIDs列表

   FPGetSeqIDs pfnGetSeqIDsCallback

)

[0095]GRecipeEventRecovery()函数可用于CDA服务器/通知客户机接口,因此可在检测到方法事件丢失时发起从控制执行环境的方法事件恢复。例如,事件SDC 216可检测到无序的方法事件,例如具有比执行环境的预期序列标识符高的序列标识符的事件。在这种情况下,事件SDC 216确定已丢失一个或多个方法事件,并通过GDA管理器220调用该函数以命令该执行环境的方法事件恢复。给该函数提供执行环境的代码、执行环境的载入时间以及恢复在其开始的方法事件的序列标识符。这三个域可唯一标识恢复过程的起始点。接收到该命令时,CDA服务器204从执行环境请求始于比来自事件SDC 216的所请求序列标识符大1的序列标识符的方法事件恢复。通知客户机206可通过同一通知回叫函数接收所恢复的方法事件。恢复过程的第一事件可为方法事件开始括弧,在它之后可为已恢复的一个或多个后续方法事件。GRecipeEventRecovery( )函数定义如下。

//从始于所请求序列ID的执行环境触发方法事件恢复的函数

CDAFUNC G_Status APIENTRY GRecipeEventRecovery

(

   const WORD NmEECode,

   const UINT64 NmSeqID,

   const FILETIME NmLoadTime

)

[0096]GControlRecipeComplete( )函数给监控服务器提供通知CDA服务器204它已把特定控制方法的执行的所有方法事件记入日志的功能。事件SDC 216可在它接收到控制方法完成事件且事件SDC 216已把控制方法的所有方法事件记入日志时通过GDA管理器220调用该函数。该函数可具有将所完成控制方法的批量标识符传递到CDA服务器204的参数。事件SDC 216可从控制方法完成事件中的适当域获得所完成控制方法的批量标识符。CDA服务器204可需要或不需要识别控制方法的更多信息(例如执行环境代码或载入时间或控制模块名称)。GControlRecipeComplete( )函数可定义如下。

//用信号通知CDA服务器控制方法的所有方法事件被记入日志的函数

CDAFUNC G_Status APIENTRY GControlRecipeComplete

(

   const UINT32 NmBatchID

)

[0097]在事件恢复期间,在所恢复事件之前是方法事件恢复开始括弧。可在通知客户机206进行通知预订时或者在事件SDC 216向CDA服务器204命令方法事件恢复时发送方法事件恢复开始括弧。从控制执行环境发起该开始括弧以及所恢复方法事件。开始括弧可为恢复过程中的第一事件,且它对跟随的一个或多个所恢复方法事件的序列的起始做标记。CDA服务器204可通过常用通知机制向通知客户机206发送该事件。通知客户机206可为该事件的唯一接收方,而不将它分发到控制台或其它装置。特定子类型可用于识别方法事件恢复开始括弧。该子类型可包含事件恢复所请求的序列标识符以及所恢复的第一可用方法事件的序列标识符。

[0098]在正常情况下,当控制执行环境中的方法事件的缓冲器203可服务恢复请求时,所返回的序列标识符可比所请求的序列标识符大1。但是,如果控制执行环境中的缓冲器203已改写要在其开始事件恢复的所请求方法事件,则执行环境可必须恢复始于还在缓冲器203中的最旧的方法事件的任意余下事件。在这种情况下,在开始括弧中的所返回序列标识符将是所恢复的最旧的方法事件的序列标识符。同样,控制执行环境在它不能恢复所有所请求方法事件时可生成自应答警报。方法事件恢复可请求或不请求结束括弧。与方法事件恢复开始括弧有关的其它细节在表2中提供。

 

NmCategoryNC_BATCH_EVENTNmTypeNM_TYPE_BATCH_EVENTNmSubTypeNM_SUBTYPE_RECIPE_EVENT_RECOVERYNmEECode执行环境代码NmPriorityNM_PRIORITY_JOURNALNmUnikId批量标识符NmSeqId对恢复过程所公布的初始方法事件的序列标识符(所请求的)NmValue(过载)命令方法事件恢复的开始序列标识符(所返回的)NmLoadTime执行环境的载入时间szAuxDesc该事件的描述,例如“执行环境的方法事件恢复”

表2

监控服务器可将该方法事件恢复开始括弧视为日志唯一事件。它因此可进入事件列表214,在事件摘要中显示,并可最终到达事件SDC 216并被记入到事件日志218中。

[0099]通知客户机206可检查所有所接收通知以了解它是否接收到方法事件恢复开始括弧。如果是,则通知客户机206可在与开始括弧关联的通知队列分组中设置标记以便对它进行标识。当该事件到达事件SDC 216时,事件SDC 216可使用该标记识别该事件,并可用存储在该事件的值域中的所返回序列标识符更新其内部列表。如果在内存储器(in-memory)列表中的序列标识符小于所返回的序列标识符,则可只进行该更新。这种机制可用于避免事件SDC 216无限期地请求对在控制执行环境缓冲器203中已被回绕(wrapped-around)的丢失事件的恢复。

[0100]可能在传输期间丢失方法事件恢复开始括弧。为了克服该问题,如果事件SDC 216在命令方法事件恢复之后没有接收到开始括弧,那么如果它具有下一预期序列标识符则它可继续将所接收的后续方法事件记入日志并更新其内部列表。直到它已接收到开始括弧或者直到从首次命令的恢复开始已过去某段时间(例如30秒),它才可重新命令另一方法事件恢复。可假定紧随方法事件开始括弧的方法事件始终是按序的(如果没有出现中断)。

[0101]在完成方法执行时,控制方法可用其批量标识符报告控制方法完成事件。批量标识符可被存储在通知结构的唯一标识符域中。该事件可具有指示它是来自控制方法的最后事件的特定子类型。与其它方法事件类似,它也可包含序列标识符,且该标识符可表示紧随由方法执行所发出的最后方法事件的下一增加型序列标识符。与控制方法完成事件有关的其它细节在表3中提供。

 

NmCategoryNC_BATCH_EVENTNmTypeNM_TYPE_BATCH_EVENTNmSubTypeNM_SUBTYPE_CR_COMPLETENmEECode执行环境代码NmPriorityNM_PRIORITY_JOURNALNmUnikId批量标识符NmSeqId最后方法事件的序列标识符+1NmLoadTime执行环境的载入时间szAuxDesc该事件的描述,例如“方法已完成”

 

NmValue批量标识符

表3

当通知客户机206检测到该事件时,它可在与控制方法完成事件关联的通知队列分组中设置标记,然后将它投寄到通知队列208。

[0102]当该事件到达事件SDC 216时,如果控制方法完成事件的序列标识符与事件SDC 216所预期的下一序列标识符匹配,则意味着事件SDC 216已经成功接收到该方法的所有方法事件并将其记入日志。然后,它可调用hsc_gda_control_recipe_complete( )GDA API函数来用信号通知CDA服务器204可删除该控制方法。CDA服务器204可阻止该控制方法的删除,直到接到事件SDC 216的信号通知。如果事件SDC 216检测到控制方法完成事件的序列标识符失配,则意味着未将该方法执行的所有方法事件记入日志,且它可调用(invoke)方法事件恢复以检索丢失事件。可存在控制方法完成事件被发出但在它到达事件SDC 216之前丢失的情形。因此,CDA服务器204可一直等待来自事件SDC 216的信号。例如可在CDA服务器204或控制执行环境在某超时(timeout)之后重新宣告方法完成事件时,提供从该状态恢复的机制。

[0103]通知客户机206本身也可支持实现过程控制系统中的有保证事件交付的各种函数。其中,该可包括处理方法事件恢复开始括弧和控制方法完成事件。如上所述,通知客户机206可对用于这些特定事件的通知队列分组设置标记,然后再将其放入通知队列208。标记可定义如下。

prtque_def

//方法事件恢复开始括弧事件

#define PRQ_CR_RECOVERY_BRACKET_MASK 0x0004//域屏蔽

#define PRQ_CR_RECOVERY_BRACKET_0x0004

#define PRQ_CR_RECOVERY_BRACKET BIT3     //比特位置

//控制方法完成事件

#define PRQ_CR_COMPLETE_EVT_MASK 0x0004   //域屏蔽

#define PRQ_CR_COMPL.ETE_EVT 0x0004

#define PRQ_CR_COMPI_ETE_EVT_BIT4   //比特位置

可将两个类似标记添加到定义文件,使得通知管理器210在处理来自通知队列208的这两个事件的通知分组时,还设置与事件文件记录结构有关的对应标记,然后将事件放入事件列表214。因此事件SDC216可知晓当这些事件到达时如何对其进行检测,并作出相应响应。

[0104]在当CDA服务器204知晓方法事件恢复被请求的情形中,CDA服务器204可不知晓在哪一方法事件开始恢复,且可不知晓哪些事件已被记入日志。如果该消息在事件SDC 216可用,则CDA服务器204可从其获得该信息。为此,可将回叫函数添加到通知客户机206。表示为nc_get_SeqID_for_EEs( )的通知客户机206回叫函数可给CDA服务器204提供入口点(entry point),用于查询从各受控执行环境接收到的被最后记入日志的方法事件的序列标识符。当通知客户机206预订关于服务器启动的通知时,该回叫函数可被传递到CDA服务器204。如上所述,它可被作为GNotificationSubscribe( )函数的参数传递。调用函数nc_get_SeqID_for_EEs()可接收作为输入参数的“recipeevent-capable(方法事件-可以)”执行环境及其载入时间的列表,并可返回有助于从执行环境的方法事件恢复的序列标识符的列表。它可由CDA服务器204例如在以下情况下调用:通知客户机206预订来自CDA服务器204的通知、控制器重新启动/重新连接以及控制器冷重启。这种方法事件恢复可视为CDA服务器激活的恢复。它可略微不同于由事件SDC216所发起的方法事件恢复,即它因原因不同而在不同组件中被发起。当回叫函数被调用时,它可通过getSequenceIDs()方法(method)查询事件SDC216,查找序列标识符的列表。然后,它可向CDA服务器204返回该信息。在从回叫函数接收到该信息时,CDA服务器204可从执行环境请求方法事件恢复。下面提供通知客户机206回叫函数的定义。

int hsc_nc_get_SeqID_for_EEs(int NumOfEE,WORD*EEs,

FILETIME*LoadTimes,UINT64**SequenceIDs)

//查询事件SDC以获得从每个执行环境所接收到的最后序列ID,

//并向CDA服务器返回序列ID的列表

//返回值:

//FP_GET_SEQID_ERROR,如果在查询序列ID时出错

//FP_GET_SEQID_OK,如果成功获得序列ID

//FP_GET_SEQID_CANCEL,如果主线程相信该线程将不工作

[0105]GDA管理器220还可支持在过程控制系统中实现有保证事件交付的各种函数。例如,GDA管理器220可支持访问CDA服务器204的API函数。可用于事件恢复的两个CDA API函数可包括:hsc_cda_recipe_event_recovery()和hsc_cda_control_recipe_complete()。这些方法(method)可分别调用GRecipeEventRecovery()和GControlRecipeComplete()CDA通知函数。下面给出关于这些CDAAPI函数的其它细节。

//--------------------------------------------------------------------------

//HSC_CDA_RECIPE_EVENT_RECOVERY-调用方法事件恢复

//--------------------------------------------------------------------------

//简述:

//调用GRecipeEventRecovery

//如果状态不是“OK”,就产生警报

void hsc_cda_recipe_event_recovery(int2EE,HSCTime LoadTime,int8

SeqID);

//--------------------------------------------------------------------------

//HSC_CDA_CONTROL_RECIPE_COMPLETE-发信号通报CR的所有方法

//事件被记入日志

//--------------------------------------------------------------------------

//简述:

//调用GControlRecipeComplete

//如果状态不是“OK”,就产生警报

void hsc_cda_control_recipe_complete(int4BatchID);

[0106]可由GDA管理器220使用或支持的其它方法可包括RecipeEventRecover()和ControlRecipeComplete()。调用这两种方法(method)可导致对应的hsc_cda_recipe_event_recovery()和hsc_cda_control_recipe_complete()CDA API方法(method)被调用。

下面是关于这两种方法(method)的更多细节。

HRESULT RecipeEventRecover(

//参数

[in]int2EE,          //执行环境(EE)代码

[in]HSCTime LoadTime,//EE的载入时间

[in]int8SeqID,       //用于恢复的序列ID

[out]GDAERR*pStatus);//对请求所返回的状态

//注意

//通过该方法(method)仅可进行CDA方法事件恢复。

//可不需要GDA恢复。

//返回值

//S_OK-该方法(method)调用成功

//S-FALSE-该方法(method)调用部分成功,错误被返回到pStatus

//failed HRESULT-该方法(method)调用失败

HRESULT ControlRecipeComplete(

//参数

[in]int4BatchID,     //已完成控制方法的批量ID

[out]GDAERR*pStatus);//对请求所返回的状态

//注意

//通过该方法(method)仅可进行CDA方法事件恢复。

//GDA不支持该方法(method)。

//返回值

//S_OK-该方法(method)调用成功

//S-FALSE-该方法(method)调用部分成功,错误被返回到pStatus

//failed HRESULT-该方法(method)调用失败

HRESULT RecipeEventRecover(

//参数

[in]int2EE,          //EE代码

[in]HSCTime LoadTime,//EE的载入时间

[in]int8SeqID,       //用于恢复的序列ID

[out]GDAERR*pStatus);//对请求所返回的状态

//注意

//客户机调用该方法(method)来发起从服务器的方法事件恢复。

//返回值

//S_OK-该方法(method)调用成功

//failed HRESULT-该方法(method)调用失败

HRESULT ControlRecipeComplete(

//参数

[in]int4BatchID,     //批量ID

[out]GDAERR*pStatus);//对请求所返回的状态

//注意

//客户机调用该方法(method)来通过信号通知CDA服务器

//对于CR执行的所有方法事件被记入日志。

//返回值

//S_OK-该方法(method)调用成功

//failed HRESULT-该方法(method)调用失败

[0107]在GDA管理器中可使用附加的GDA API函数:hsc_gda_recipe_event_recovery()和hsc_gda_control_recipe_complete()。这些方法(method)可分别调用RecipeEventRecover()和ControlRecipeComplete()GDA方法(method)。下面提供关于这两个函数的细节。

//---------------------------------------------------------------------------

//HSC_GDA_RECIPE_EVENT_RECOVERY-调用方法事件

//恢复

//---------------------------------------------------------------------------

void hsc_gda_recipe_event_recovery(

[in]int EE,          //EE代码

[in]HSCTime LoadTime,//EE的载入时间

[in]int8SeqID)        //用于恢复的序列ID

//---------------------------------------------------------------------------

//HSC_GDA_CONTROL_RECIPE_COMPLETE-发信号通知CR的所有//方

法事件被记入日志

//---------------------------------------------------------------------------

void hsc_gda_control_recipe_complete(

int4BatchID)           //批量ID

[0108]事件SDC216还可支持实现过程控制系统中的有保证事件交付的各种函数。为了追踪任意丢失方法事件,事件SDC 216可需要维持包含可用“recipe event-capable(方法事件-可用)”执行环境的内存储器列表、从这些执行环境中每个执行环境所接收到的最后序列标识符以及它们的载入时间。该列表提供事件SDC 216从执行环境预期的序列标识符的快速查找。事件SDC 216中的内部列表的示例如表4所示。

 

EE代码EE载入时间最后接收到的序列ID114/12/2004,11:53:39.4639795741424/01/2005,19:35:23:53501603/11/2004,06:12:48:03235332623............

表4

注意,上述列表中的第二项记录具有0的最后所接收序列标识符。这意味着事件SDC 216先前没有将来自该执行环境的任意方法事件记入日志,或者该执行环境已被重新载入,且事件SDC 216期望CDA服务器204从该执行环境恢复所有方法事件。可在服务器启动时初始化该列表。

[0109]为了追踪来自各“recipe event-capable(方法事件-可用)”执行环境的所有被记入日志的方法事件,可在SQL或其它数据库中使用表格。该表格可包含先前已将其方法事件记入日志的所有执行环境、来自这些执行环境中每个执行环境的已记入日志的最后序列标识符、以及它们的执行环境载入时间。该表格的布局可与上述列表相同。在某个时间段过去之后(例如每分钟),事件SDC 216可将其内存储器列表复制到该表格。这可减少为更新该表格而给事件SDC 216所施加的负载或使其最小化。根据冗余,可按照与事件日志218相同的方式将该表格同步到备份服务器。

[0110]事件SDC 216的GetSequenceIDs()函数可在CDA服务器204尝试发起方法事件恢复时被通知客户机206调用。它可返回从执行环境的所请求列表所接收到的被最后记入日志的方法事件的序列标识符。在该函数被调用时,事件SDC 216可首先尝试使用其内部列表解析该请求。如果用相同所请求执行环境载入时间找到执行环境条目(entry),则事件SDC 216可返回来自该列表的最后所接收序列标识符。如果执行环境载入时间不同,则这可意味着控制器已被重新载入,且该函数可对该调用返回零序列标识符以指示事件SDC 216希望从执行环境恢复所有方法事件。对于后一情形,在事件SDC的内部列表中的执行环境条目(entry)可用执行环境的新载入时间和零序列标识符来更新。如果不能在该列表中找到执行环境条目(entry)或者该列表没被初始化,则事件SDC 216可查询事件日志218以获得对于具有相同所请求执行环境载入时间的执行环境的已记入日志的最大序列标识符。然后在事件SDC 216的内部列表的适当条目中使用该值。可通过使用ems_sp_GetGetSequenceID所存储程序进行对事件日志218的查询。如果找到该序列标识符,则该函数可更新事件SDC的内部列表并返回该序列标识符。否则,可返回零序列标识符。以下是与getSequenceIDs( )函数以及所存储程序有关的更多细节。

//描述:

//在列表中获得各EE的最新序列ID

//参数:

//[in]short connectID,

//[in]int NumOfEE,

//[in]int*EEs,

//[xn]_int64*EELoadTxmes,

//参数值:

//标准com S_OK or E_FAIL.

//[out]_int64**EESequenceIDs

[helpstring("Event SDC method getSequenceIDs")]HRESULT

getSequenceIDs(

                    [in]short connectID,

                [in]intNumOfEE,

                [in]int*EEs,

                [in]_int64*EELoadTimes,[out]_int64**EESequenceIDs);

ems_sp_GetGetSequenceID.sql

//名称:ems_sp_GetGetSequenceID

//描述:

//检索对被给定其载入时间的最新序列ID

//参数:

//@EE(in)获得最新序列ID的EE

//@LoadTime(in)EE的载入时间

//@SequencelD(out)检索的最新序列ID

[0111]在事件SDC 216处理方法事件时,它可检查序列标识符的任意间隙(gap)。如果它检测到具有比下一预期序列标识高的序列标识符的方法事件,那么这可意味着已丢失了一个或多个事件,且事件SDC 216可立即命令方法事件恢复。如果事件SDC 216接收到该执行环境的预期方法事件,则事件SDC 216可用该事件的序列标识符更新其内部列表。如果事件SDC 216检测到具有比该列表中的最后所接收序列标识低的序列标识符的方法事件,则它可不对列表进行任何操作。在所有三种情形中,事件SDC 216可将方法事件记入到事件日志218。

[0112]当事件SDC 216接收到方法事件恢复开始括弧,如果且只有当该列表中的序列标识符小于所接收序列标识符时,它才可用存储在事件的值域中的序列标识符更新其内部列表。这是因为该列表中的序列标识符识别记入日志的最后方法事件,可不需要把该序列标识符还原到比其低的任意序列标识符。事件SDC 216可不接收具有执行环境载入时间与保存在其内部列表中的不同的恢复开始括弧。这是因为事件SDC 216命令或者CDA服务器204激活方法事件恢复,事件SDC216可始终首先用新执行环境载入时间来更新其内部列表。当恢复开始括弧到达事件SDC 216时,它可始终包含预期的执行环境载入时间。

[0113]为了支持有保证事件交付,以下属性可添加到事件日志218所支持的事件模式(event schema):批量标识符、序列标识符和执行环境载入时间。所有这些属性可被记入到事件日志218。此外,附加的参数索引属性(例如UINT32值)可被添加到事件模式,且CDA通知域可被映射到该属性。事件模式中的该属性也可被记入到事件日志218。

[0114]如上所述,CDA服务器204可使用包含可表示字符串(例如LPSTR)的子条件域的通知结构。该新通知域可被映射到事件模式的现有子条件属性。

[0115]以下表示可出现在过程控制系统100中的特定情形。控制方法可启动并生成方法事件,所述方法事件被记入到事件日志218。然后,还在运行该控制方法的控制器被断电(假设没有备用电池以及空数据库)。执行该控制器的完全重载入,并再次启动该控制方法。需要检索来自该执行环境的所有方法事件。在没有该执行环境的载入时间的情况下,事件SDC 216可不知晓该控制器已被重新载入,则它可使用在重新载入之前从执行环境所接收到的最后方法事件所继续的序列标识符请求事件恢复。这可在恢复期间导致从控制方法的新运行中所生成的某些新方法事件被遗漏。为了避免这种情形,控制执行环境可通过使用恰好在载入之后的下一序列标识符而继续,批量标识符可被用来代替载入时间,或者下一序列标识符可恰好在控制器的重新载入之后继续。此外,CDA服务器204可只具有执行环境的列表而不具有其载入时间,且事件SDC 216可返回与执行环境的最新载入时间相关联的序列标识符。CDA服务器204可还向事件SDC 216提供该载入时间,因为事件SDC 216中的载入时间可不为该执行环境的当前载入事件,而事件SDC 216可需要知晓当前载入时间以便识别在那个序列标识符开始恢复。CDA服务器204可从执行环境获得载入时间。

[0116]在另一示例情况中,可存在这样的情形:控制方法完成了其执行,且控制方法完成事件被发出但在它到达事件SDC 216之前被丢失。结果,在控制方法可被删除之前,CDA服务器204可能一直等待来自事件SDC 216的信号。可存在从该状态恢复的机制,例如使CDA服务器204在某一溢出之后重新宣布该事件。

[0117]另外,CDA服务器204可不保留任意事件(除了在通过通知高速缓存的控制台站的情况下)。因此,可不存在CDA服务器204知晓事件在其往通知客户机206的路途中被丢失的方式(way)。可增强CDA服务器204使得每次它向通知客户机206发送方法完成事件时,它在指定时段内(在该时段之后CDA服务器204重新宣布该事件)等待从事件SDC216获得hsc_gda_control_recipe_complete()调用。此外,如果控制执行环境没有从事件SDC 216接收到方法完成指示(通过CDA服务器204),则它可重新发出方法完成事件。

[0118]尽管图5和6示出了支持有保证批量事件交付的过程控制系统的部分的一种特定示例,但是可对图5和6进行各种改变。例如,过程控制系统可包括任意数量的各组件502-518。此外,可用其它合适技术来实现或支持有保证事件交付。

[00119]图7示出支持过程控制系统中的有保证批量事件交付的示例用户界面700。图7中示出的用户界面的实施例仅是示例性的。在没有脱离该公开的范围的情况下,可使用用户界面700的其它实施例。

[0120]该示例中,用户界面700与控制执行环境相关联。用户界面700包括各种标签,用于访问与控制执行环境的不同可操作方面有关的不同信息并设置控制执行环境的不同可操作方面。当选择“main”标签时,用户界面700给用户呈现各种信息和选项。选项之一包括下拉菜单702,用户可用该菜单来选择控制执行环境中的事件缓冲器203的大小。在该示例中,下拉菜单702包括缓冲器大小的四个不同选项:无(none)、小型(small)、中型(medium)和大型(large)。选择“无”选项,则使用零缓冲器大小,且不能实现有保证批量事件交付。在特定实施例中,小型、中型和大型缓冲器203可分别容纳120、240和740个事件。用户基于例如在其中正在使用控制执行环境的应用程序来选择适当的缓冲器大小。

[0121]尽管图7示出了支持过程控制系统中的有保证批量事件交付的用户界面700的一种示例,但是可对图7进行各种改变。例如可使用任意其它合适用户界面或其它合适技术来设置控制执行环境中的事件缓冲器203的大小。

[0122]图8示出用于过程控制系统中的有保证批量事件交付的示例方法(method)800。图8中示出的方法(method)800仅是示例性的。在没有脱离该公开的范围的情况下,可使用方法(method)800的其它实施例。

[0123]在步骤802,控制器生成并缓存多个事件。这可包括例如控制执行环境生成与其操作关联的各个事件、例如与一个或多个方法控制模块504或连续控制模块506的执行相关联的事件。

[0124]在步骤804,控制器将唯一标识符与各事件关联。这可包括例如控制器给控制器所生成的事件的序列分配顺序数值。各事件的序列号在控制执行环境的当前执行中可是唯一的。序列号、标识控制执行环境的代码、以及控制执行环境的载入时间可共同表示在整个过程控制系统中唯一标识事件的标识符。

[0125]在步骤806,控制器将事件通信到监控服务器,在步骤808,监控服务器接收到事件中的至少某些事件并确定是否遗漏了任意事件。这可包含例如控制执行环境向通知客户机206提供事件,以供在通知队列208中的存储。这可还包括通知管理器210从通知队列208检索事件。这可还包括通知管理器210将事件存储在事件列表214中。另外,这可包括由事件SDC 216通过使用所接收事件的唯一标识符确定是否遗漏了任意事件。

[0126]在步骤810,如果没有遗漏事件,则在步骤812将事件记入日志。这可包括例如事件SDC 216将事件存储在日志218中。此时,流程返回到步骤802,在步骤802控制器生成更多事件。否则,遗漏了一个或多个事件,且在步骤814监控服务器将对遗漏事件的请求通信到控制器。这可包括例如监控服务器发送对事件恢复的请求。可将该请求经通知客户机206或GDA管理器220发送到CDA服务器204。

[0127]在步骤816,控制器接收到恢复请求并尝试定位遗漏事件。这可包括例如CDA服务器204使控制执行环境检查在其缓冲器203中的事件,查找要被重新发送的事件。在步骤818,如果找到所有遗漏事件,则在步骤820控制器发送开始括弧和包括遗漏事件的所请求事件。否则,不能找到一个或多个遗漏事件,例如当在事件缓冲器203中一个或多个事件已被改写时。这种情形下,在步骤822,控制器发送开始括弧和可找到(如果存在)的任意所请求事件,并设置警报。如果在缓冲器203中不能找到遗漏事件,则在步骤820中可省略开始括弧和所请求事件的发送。在步骤822所设置的警报可例如通知用户遗漏事件,允许用户采取任意合适措施。在步骤812,将所恢复事件记入日志,流程返回步骤802,在步骤802控制器生成更多事件。

[0128]尽管图8示出了用于过程控制系统中的有保证批量事件交付的方法(method)800的一种示例,但是可对图8进行各种改变。例如,虽然示出为一系列步骤,但是图8中的各种步骤可重叠、并行进行或者以不同次序进行。作为特定示例,控制器可连续生成、缓存事件并将其通信到监控服务器,且需要时控制器可间歇地向监控服务器重新传送丢失或遗漏事件。

[0129]在某些实施例中,用由计算机可读程序代码所构成的并包含在计算机可读媒介中的计算机程序实现或支持各种功能。短语“计算机可读程序代码”包含包括源代码、目标代码以及可执行代码的任意类型计算机代码。短语“计算机可读媒介”包括能够由计算机访问的任意类型媒介,例如只读存储器(ROM)、随机存取存储器(RAM)、硬盘驱动器、压缩盘(CD)、数字视频盘(DVD)或者任意其它类型的存储器。

[0130]给出本专利文档中使用的某些词或短语的定义是有利的。术语“耦合”及其派生词是指两个或多个以上单元之间的任意直接或间接通信,不论这些单元是否相互处于物理接触。术语“应用程序(应用)”和“程序”是指一个或多个适合以合适计算机代码(包括源代码、目标代码以及可执行代码)实现的计算机程序、软件组件、指令集合、流程、函数、对象、类、实例、相关数据或其部分。术语“发送(传送、传输)”、“接收”和“通信”及其派生词包括直接和间接通信。术语“包括”和“包含”及其派生词表示非限制的包含。术语“或(或者)”是非排他性的,表示和/或。短语“与关联”和“与其关联”及其派生词可表示包含、被包含于、互连于、容纳、被容纳于、连接到或与连接、耦合到耦合于、可与通信、与协作、交织、并列、被并列于、被捆绑到或被捆绑于、具有、具有属性等。术语“控制器”表示控制至少一个操作的任意装置、系统或其部分。控制器可用硬件、固件、软件或其中至少两种的某一组合来实现。与任意特定控制器相关联的功能性无论在本地或还是在远程均可为集中式的或分布式的。

[0131]既然该公开已描述了某些实施例及通常所关联的方法,那么这些实施例和方法的变化和置换对本领域技术人员而言是显而易见的。因此,示例实施例的以上描述不定义或约束该公开。在没有脱离如由随附权利要求书所定义的本公开的精神和范围的情况下,还能够实现其它改变、替代和变化。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号