用于给网络中多个设备传送数据的系统和方法转让专利

申请号 : CN201280029517.2

文献号 : CN103609065B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 丹尼尔·C·科恩詹姆士·S·斯皮塔埃尔布莱恩·帕特里克·默恩斯希曼苏·特里维迪维什沃斯·默罕艾拉杰·德奥卡

申请人 : 施耐德电气IT公司

摘要 :

本发明提供了一种向多个设备传送数据的系统和方法。在一个实例中,系统被配置成将数据广播到设备组中。该设备组中的每一个设备都被配置成用来检查消息并本地存储该消息的内容。此外,该设备组被配置以致该组设备的单个设备响应于每个消息。

权利要求 :

1.一种用于向多个设备传送数据的系统,所述系统包括存储器模块和连接到所述存储器模块的至少一个处理器模块,并且所述系统还包括:用于识别所述多个设备的设备子集的模块,所述设备子集具有基数并包括第一设备和第二设备;

用于在所述存储器模块中分配具有基于所述设备子集的所述基数的尺寸的缓冲器的模块;

用于将一组数据包存储在所述缓冲器中的模块,所述一组数据包具有基数并包括第一数据包和第二数据包,所述一组数据包的每个数据包在所述一组数据包内都具有序数值;

用于将所述第一数据包传送给所述设备子集的所有设备的模块;

用于从所述第一设备接收第一响应的模块,所述第一响应指示所述第一设备成功地接收了所述第一数据包;

用于将所述第二数据包传送给所述设备子集的所有设备的模块;

用于从所述第二设备接收第二响应的模块,所述第二响应指示所述第二设备没有成功地接收至少一个数据包;

用于响应于接收到所述第二响应向所述设备子集的所有设备重发所述第一数据包的模块;以及用于响应于接收到所述第二响应向所述设备子集的所有设备重发所述第二数据包的模块。

2.根据权利要求1所述的系统,其中所述缓冲器的尺寸等于所述设备子集的所述基数乘以所述第一数据包的尺寸。

3.根据权利要求1所述的系统,其中所述系统被配置成使用xmodem协议将所述第一数据包传送给所述设备子集的所有设备。

4.根据权利要求1所述的系统,其中所述系统还包括:用于将离散节点号分配给所述设备子集的每个设备的模块;以及用于向所述设备子集的每个设备传送指示所述设备子集的所述基数和分配给所述设备的离散节点号的数据的模块。

5.根据权利要求4所述的系统,其中所述设备子集的每个设备包括存储器模块和连接到该存储器模块的至少一个处理器模块,每个设备还包括:用于接收指示所述设备子集的基数和分配给所述设备的离散节点号的数据的模块;

用于接收所述一组数据包中的数据包的模块;

用于将所述数据包存储在所述存储器模块中的模块;以及用于发送响应以选择其序数值与所述子集的基数和分配给所述设备的离散节点号成预定关系的数据包的模块。

6.根据权利要求5所述的系统,其中所述设备子集的每个设备还包括:用于确定结果的模块,所述结果指示所述一组数据包中的被接收的数据包被先前存储在所述存储器模块中;以及用于响应于确定所述结果来接收所述一组数据包的另一数据包,而不将所接收的数据包存储在所述存储器模块中的模块。

7.根据权利要求5所述的系统,其中所述设备子集的所述第二设备还包括:用于确定第一结果的模块,所述第一结果指示所述第二设备没有成功地接收所述第一数据包;

用于将指示所述第一结果的数据存储在所述第二设备的存储器模块中的模块;

用于确定第二结果的模块,所述第二结果指示所述第一数据包的序数值对所述子集的基数取模的结果不等于分配给所述第二设备的离散节点号的模块;

用于响应于确定所述第二结果延迟所述第二响应的传送的模块;

用于确定第三结果的模块,所述第三结果指示所述第二数据包的序数值对所述子集的基数取模的结果等于分配给所述第二设备的离散节点号的模块;以及用于响应于确定所述第三结果传送所述第二响应的模块。

8.一种用于使用计算机将数据传送到多个设备的计算机实现方法,所述计算机包括存储器和连接到所述存储器的至少一个处理器,所述方法包括:通过所述计算机识别所述多个设备的设备子集,所述设备子集具有基数并包括第一设备和第二设备;

在所述存储器中分配具有基于所述设备子集的所述基数的尺寸的缓冲器;

将一组数据包存储在所述缓冲器中,所述一组数据包具有基数并包括第一数据包和第二数据包,所述一组数据包的每个数据包在所述一组数据包内都具有序数值;

将所述第一数据包传送给所述设备子集的所有设备;

从所述第一设备接收第一响应,所述第一响应指示所述第一设备成功地接收了所述第一数据包;

将所述第二数据包传送给所述设备子集的所有设备;

从所述第二设备接收第二响应,所述第二响应指示所述第二设备没有成功地接收至少一个数据包;

响应于接收到所述第二响应,向所述设备子集的所有设备重发所述第一数据包;以及响应于接收到所述第二响应,向所述设备子集的所有设备重发所述第二数据包。

9.根据权利要求8所述的方法,其中将所述一组数据包存储在所述缓冲器中包括存储具有总尺寸等于所述设备子集的所述基数乘以所述第一数据包的尺寸的一组数据包。

10.根据权利要求8所述的方法,其中将所述第一数据包传送给所述设备子集的所有设备包括使用xmodem协议进行传送。

11.根据权利要求8所述的方法,还包括:

向所述设备子集的每个设备分配离散节点号;以及向所述设备子集的每个设备传送指示所述设备子集的基数和分配给所述设备的离散节点号的数据。

12.根据权利要求11所述的方法,其中所述设备子集的每个设备包括存储器和连接到该存储器的至少一个处理器,并且所述方法还包括:通过每个设备接收指示所述设备子集的基数和分配给所述设备的离散节点号的数据;

通过每个设备接收所述一组数据包的数据包;

通过每个设备将所述数据包存储在所述设备的存储器中;以及通过每个设备传送响应以选择其序数值与所述子集的基数和分配给所述设备的离散节点号成预定关系的数据包。

13.根据权利要求12所述的方法,还包括:

通过所述设备子集的至少一个设备来确定结果,所述结果指示所述一组数据包的被接收的数据包被先前存储在所述至少一个设备的存储器中;以及响应于确定所述结果,通过所述至少一个设备接收所述一组数据包的另一个数据包,而不用将所接收的数据包存储在所述至少一个设备的存储器中。

14.根据权利要求12所述的方法,还包括:

通过所述第二设备确定指示所述第二设备没有成功地接收所述第一数据包的第一结果;

将指示所述第一结果的数据存储在所述第二设备的存储器中;

通过所述第二设备确定指示所述第一数据包的序数值对所述子集的基数取模的结果不等于分配给所述第二设备的离散节点号的第二结果;

响应于确定所述第二结果,通过所述第二设备延迟所述第二响应的传送;

通过所述第二设备确定指示所述第二数据包的序数值对所述子集的基数取模的结果等于分配给所述第二设备的离散节点号的第三结果;以及响应于确定所述第三结果,通过所述第二设备传送所述第二响应。

说明书 :

用于给网络中多个设备传送数据的系统和方法

技术领域

[0001] 本技术领域一般涉及计算机化设备之间的通信,并更具体地涉及用于在通过总线连接的设备之间传送数据的系统和方法。

背景技术

[0002] 对于采用总线拓扑的网络存在许多通信协议。这些协议中的大多数支持设备之间的点对点和广播通信,并包括用于处理通信中的错误的过程。然而,由于仲裁总线竞争和其它形式的开销的复杂性,用来执行握手和递送验证的方法在点对点和广播通信之间有所不同。
[0003] 采用总线拓扑的一些网络标准在市场上已经非常成功。例如,基于实施MODBUS协议的网络的RS-485在工业应用上具有广泛的安装基础。这些网络获得成功有各种各样的原因,这些原因中的一些包括易于实施、低成本的材料和在有噪声的工业环境中的稳定的2
性能。采用了总线拓扑的其它网络标准包括CAN、IC和许多基于无线的网络,如无线局域网(WLAN)、ZigBee和蓝牙(Bluetooth)。

发明内容

[0004] 本文所公开的各个方面和实例呈现了能够使通过共享总线互连的设备以广播模式有效且高效地交换数据的数据传送协议。如本文所述,术语“广播”涉及同时向多个设备传送数据的动作。如以下进一步地讨论,这些数据传送协议中的至少一些提供了旋转响应时间表,在该旋转响应时间表中,接收数据的设备轮流向提供数据的设备报告进程。以这种方式,数据传送协议使得接收设备能够及时地提供关于失败的数据通信的反馈,而无需要求从每个设备得到对每个通信数据包的响应的不必要的开销。
[0005] 根据一个方面,提供了一种用于向多个设备传送数据的系统。该系统包括存储器和连接到该存储器上的至少一个处理器。该系统被配置成:识别多个设备的设备子集,该设备子集具有基数并包括第一设备和第二设备;在存储器中分配具有基于设备子集的基数的尺寸的缓冲器;将一组数据包存储在缓冲器中,该组数据包具有基数并包括第一数据包和第二数据包,该组数据包的每一个数据包在该组数据包内都具序数值;将第一数据包传送到设备子集的所有设备;从第一设备接收第一响应,第一响应指示第一设备成功地接收了第一数据包;将第二数据包传送到设备子集的所有设备;从第二设备接收第二响应,第二响应指示第二设备没有成功地接收至少一个数据包;响应于接收到的第二响应,向设备子集的所有设备传送第一数据包;以及响应于接收到的第二响应,向设备子集的所有设备传送第二数据包。
[0006] 在该系统中,缓冲器的大小可以等于设备子集的基数乘以第一数据包的大小。该系统还可以被配置成通过使用xmodem协议将第一数据包传送到设备子集的所有设备。另外,该系统还可以被配置成:将离散节点号分配给设备子集的每个设备,并向设备子集的每个设备传送指示设备子集的基数和分配给该设备的离散节点号的数据。
[0007] 设备子集的每个设备可以包括存储器和连接到该存储器上的至少一个处理器。每个设备都可以被配置成:接收指示设备子集的基数和分配给该设备的离散节点号的数据;接收该组数据包的数据包;将该数据包存储在存储器中并发送响应以选择具序数值的数据包,该序数值与子集的基数和分配给该设备的离散节点号成预定关系。此外,设备子集的每个设备可以被进一步配置成:确定指示该组数据包的被接收的数据包先前被存储在存储器中的结果;响应于确定该结果,接收该组数据包的另一数据包,而不将所接收的数据包存储在所述存储器中。
[0008] 该设备子集的第二设备可以被配置成:确定第一结果,该第一结果指示第二设备没有成功地接收第一数据包;将指示第一结果的数据存储在第二设备的存储器中;确定指示第一数据包的序数值对所述子集的基数取模的结果不等于分配给第二设备的离散节点号的第二结果;响应于确定第二结果,延迟第二响应的传送;确定指示第二数据包的序数值对所述子集的基数取模的结果等于分配给第二设备的离散节点号的第三结果;以及响应于确定第三结果,传送第二响应。
[0009] 在另一个方面,提供了一种用于通过使用计算机将数据传送到多个设备的计算机实现方法。该计算机包括存储器和连接到存储器上的至少一个处理器。该方法包括以下动作:通过计算机识别多个设备的设备子集,该设备子集具有基数并包括第一设备和第二设备;在存储器中分配具有基于设备子集的基数的大小的缓冲器;将一组数据包存储在缓冲器中,该组数据包具有基数并包括第一数据包和第二数据包,该组数据包的每个数据包在该组数据包内都具序数值;将第一数据包传送到设备子集的所有设备;从第一设备接收第一响应,第一响应指示第一设备成功地接收了第一数据包;将第二数据包传送到设备子集的所有设备;从第二设备接收第二响应,第二响应指示第二设备没有成功地接收至少一个数据包;响应于接收到的第二响应,向设备子集的所有设备传送第一数据包;以及响应于接收到的第二响应,向设备子集的所有设备传送第二数据包。
[0010] 在该方法中,将该组数据包存储在缓冲器中的动作可以包括存储具有等于设备子集的基数乘以第一数据包的尺寸的总尺寸的一组数据包的动作。将第一数据包传送到设备子集的所有设备的动作可以包括使用xmodem协议进行传送的动作。另外,该方法可以进一步包括以下动作:将离散节点号分配给设备子集的每个设备;以及向设备子集的每个设备传送指示设备子集的基数和分配给该设备的离散节点号的数据。
[0011] 另外,该方法可以进一步包括以下动作:通过每个设备接收指示设备子集的基数和分配给该设备的离散节点号的数据;通过每个设备接收该组数据包的数据包;通过每个设备将数据包存储在设备的存储器中;以及通过每个设备传送响应以选择具序数值的数据包,该序数值与子集的基数和分配给该设备的离散节点号成预定关系。该方法还可以包括以下动作:通过设备子集的至少一个设备来确定结果,该结果指示该组数据包的被接收的数据包先前被存储在至少一个设备的存储器中;以及响应于确定该结果,通过至少一个设备接收该组数据包的另一个数据包,而不用将所接收的数据包存储在至少一个设备的存储器中。此外,该方法可以包括以下动作:通过第二设备确定指示第二设备没有成功地接收第一数据包的第一结果;将指示第一结果的数据存储在第二设备的存储器中;通过第二设备确定指示第一数据包的序数值对所述子集的基数取模的结果不等于分配给第二设备的离散节点号的第二结果;响应于确定第二结果,通过第二设备延迟第二响应的传送;通过第二设备确定指示第二数据包的序数值对子集的基数取模的结果等于分配给第二设备的离散节点号的第三结果;以及响应于确定第三结果,通过第二设备传送第二响应。
[0012] 根据另一实例,提供了一种非暂时性计算机可读介质。计算机可读介质已将用于向多个设备传送数据的指令序列存储在其上。该指令包括一些指令,这些指令将使至少一个处理器用来:识别多个设备的设备子集,该设备子集具有基数并包括第一设备和第二设备;将缓冲器分配在连接到至少一个处理器上的存储器中,缓冲器具有基于设备子集的基数的尺寸;将一组数据包存储在缓冲器中,该组数据包具有基数并包括第一数据包和第二数据包,该组数据包的每个数据包在该组数据包内都具序数值;将第一数据包传送到设备子集的所有设备;从第一设备接收第一响应,第一响应指示第一设备成功地接收了第一数据包;将第二数据包传送到设备子集的所有设备,从第二设备接收第二响应,第二响应指示第二设备没有成功地接收至少一个数据包;响应于接收到的第二响应,向设备子集的所有设备传送第一数据包;以及响应于接收到的第二响应,向设备子集的所有设备传送第二数据包。
[0013] 另外,指令的序列可以包括会使至少一个处理器使用xmodem协议进行传送的指令。而且,指令的序列可以包括一些指令,这些指令将使至少一个处理器用来:将离散节点号分配给设备子集的每个设备;并将指示设备子集的基数和分配给该设备的离散节点号的数据传送给设备子集的每个设备。此外,指令的序列可以包括一些指令,这些指令会使每个设备用来:接收指示设备子集的基数和分配给该设备的离散节点号的数据;接收该组数据包的数据包;存储数据包并传送响应以选择具有序数值的数据包,该序数值与子集的基数和分配给该设备的离散节点号成预定关系。此外,指令的序列可以包括一些指令,这些指令将使设备子集的至少一个设备用来:确定指示至少一个设备之前成功地接收了该组数据包的被接收的数据包的结果;并响应于确定该结果接收该组数据包的另一数据包,而不用将接收的数据包存储在至少一个设备中。另外,该指令的序列可以包括一些指令,这些指令会使第二设备用来:确定指示第二设备没有成功地接收第一数据包的第一结果;存储指示第一结果的数据;确定指示第一数据包的序数值对所述子集的基数取模的结果不等于分配给第二设备的离散节点号的第二结果;响应于确定第二结果,延迟第二响应的传送;确定指示第二数据包的序数值对所述子集的基数取模的结果等于分配给第二设备的离散节点号的第三结果;以及响应于确定第三结果,传送第二响应。
[0014] 这些示例性方面和实施例的其它方面、实例和优点将在下文中详细的讨论。此外,要理解的是,前面的信息和下面的详细描述只是各个方面和实例的说明性范例,而且其目的是为理解所要求保护的各方面和实例的性质和特征提供综述或框架。本文所公开的任何实例都可以与以任何方式与本文所公开的目标、目的和需求中的至少一个相一致的任何其它实例相结合,以及提到“实例”、“一些实例”、“另一实例”、“各种实例”、“一个实例”、“至少一个实例”、“此实例和其它实例”等并不一定是相互排斥的,而是旨在表明结合该实例所描述的特定的特征、结构或特性可以被包括在至少一个实例中。本文中出现的此类术语不一定都指的是同一实例。

附图说明

[0015] 下面参照附图讨论至少一个实例的各个方面,其中各个附图并不是按比例绘制的。附图被包括在内,为的是提供说明和进一步理解各个方面和实例,并且被合并在此说明书中且构成此说明书的一部份,但并不旨在作为限制特定实例的定义。这些附图连同该说明书的其余部分用来解释所描述的并提出权利要求的方面和实施例的原理和操作。在附图中,在各图中示出的每个相同的或近似相同的组件用相似的附图标记来表示。为了清楚起见,在每个附图中,并不是每个组件都被标记。在附图中:
[0016] 图1是数据传送系统的一个实例的功能示意图;
[0017] 图2是可以执行本文所公开的过程和功能的计算机系统的一个实例的功能示意图;
[0018] 图3是描述了用于向目标设备提供数据的过程的流程图;
[0019] 图4是示出了用于建立通信会话的过程的流程图;
[0020] 图5是示出了用于将数据包发送到目标设备的过程的流程图;
[0021] 图6是示出了终止通信会话的过程的流程图;
[0022] 图7是描述了用于从源设备接收数据的过程的流程图;
[0023] 图8是示出了用于初始化通信会话的过程的流程图;
[0024] 图9是示出了用于从源设备接收数据包的过程的流程图;以及
[0025] 图10是示出了结束通信会话的流程图。

具体实施方式

[0026] 在至少一个实例中,通过共享总线网络彼此连接的设备使用协议进行通信,该协议使得每个接收数据的设备能够在定期的、例行的基础上报告进程,但并不要求每个设备对接收的每个数据包都报告进程。从而,该实例体现了一种理解,即使在嘈杂的网络环境中,大多数的数据通信还是成功的。在这种情况下,确认(在本文中称为“ACK”)消耗相当多的计算资源,而不提供成比例的量值。因此,尽管用来提供反馈的定期的、例行的机会是必要的,以避免重新发送大量的数据集合的需要,但是这些机会并不需要提供所接收的数据的每个单元。
[0027] 本文所讨论的方法和装置的实例并不将其应用局限于下文提出的或附图所示的结构细节和组件布置。该方法和装置能够在其它实例中实现而且能够以各种不同的方式被执行或被实施。本文所提供的特定实施例的实例仅用于说明的目的,且不旨在限制。特别是,结合任何一个或多个实例一起讨论的动作、组件、元件和特征并不旨在排除任何其它实施例的类似作用。
[0028] 同样,本文所使用的措辞和术语是出于解释说明的目的,不应该被看作限制。在本文以单数形式被提及的对系统和方法的实例、组件、元件或动作的任何引用也可以包含包括复数的实例,而在本文以复数形式对任何实例、组件、元件或动作的任何引用也包含仅包括单数的实例。单数或复数形式的引用并不旨在限制当前公开的系统或方法、它们的组件、动作或元件。本文所使用的“包括”、“包含”“具有”、“含有”、“涉及”及其变体是指包括随后列出的项目及其等同物以及附加项目。对“或”的引用可以理解为包括在内,使得所述的使用“或”的任何术语可以表示所述术语的任何一个、多于一个和所有。
[0029] 数据传送系统
[0030] 本文所公开的各种实例在一个或多个计算机系统上实施数据传送系统。图1示出了这些实例中的一个,数据传送系统100。如图所示,数据传送系统100包括用户102和通过网络112连接到设备106、108和110的服务器104。在所示的实例中,服务器104通过使用计算机系统来进行实施,如下面参考图2进一步讨论的计算机系统。在一些实例中,设备106、108和110也是计算机系统。如图所示,服务器104包括通信管理器114且设备106、
108和110分别包括通信客户端116、118和120。
[0031] 在其它实例中,设备106、108和110包括计算资源、但主要用作设备而非计算机系统。例如,在这些实例中,设备106、108和110可以为不间断电源、电流变压器或智能电池和无线Zigbee设备等等。因此,在这些实例中,限制和调整包括在设备106、108和110中的计算资源以支持这些设备的操作。
[0032] 网络112可以包括任何通信网络,计算机系统通过该通信网络可以发送或提供信息。例如,网络112可以是公共网络,诸如因特网,并且可以包括其它公共网络或私有网络,诸如局域网(LANs)、广域网(WANs)、外部网和内部网。在一些实施例中,网络112采用非常TM适用于工业应用或民用应用的标准。这些网络标准包括通信协议(诸如以太网上的C-BUS和TCP/IP)、串行协议(诸如串行线、DMX512和JCI-N2上的MODBUSASCII/RTU、MODBUS)、以及无线协议(诸如ZigBee和蓝牙)。例如,根据一个实例,服务器104与设备106、108和
110分别为通过无线总线进行通信的主CT模块和从CT模块,如在2010年5月28日提交
的题目为“用于监测电流和功率使用的系统和方法(SYSTEM AND METHOD FOR MONITORING ELECTRICAL CURRENT AND POWER USAGE)”共同待决的美国专利申请序列号为12/789,922中参照图5所述的主CT模块502和从CT模块504,该申请通过引用被本文整个地并入。此外,在至少一个实例中,网络112包括只允许一个设备在给定时间段内发布消息的半双工介质。进一步地,根据该实施例,网络112不包括冲突检测和避免设施。
[0033] 如图所示,用户102使用服务器104通过网络112将信息传送到设备106、108和110。特别地,驻留在服务器104上的用户接口组件提供用户接口,通信管理器114通过该用户接口从用户102接收数据传送请求。在至少一个实例中,该用户接口组件被包括在通信管理器114中。根据该实例,数据传送请求包括:要被传送的诸如文件的数据的集合,数据的集合被存储在其中的一个或多个源设备;和以接收数据的集合为目标的一组目标设备。通信管理器114通过与所有的目标设备建立通信回话及将数据的集合,逐单元地(即逐数据包地),同时提供给所有的目标设备来处理数据传送请求。在一个实例中,通信管理器114实施使用xmodem协议来建立通信会话和将数据的每个数据包提供给目标设备的系统接口。以下参考图3-6进一步描述由通信管理器114进行的至少一个示例性过程。
[0034] 在另一实例中,中间设备位于网络112的内部,并在服务器104和设备106、108和110之间。根据该实例,用户接口组件不包括在通信管理器114中。相反,根据该实例,用户接口组件是驻留在服务器104上的独立组件,而通信管理器114驻留在中间设备上。进一步地,根据该实施例,服务器104将数据传送请求提供给通信管理器114,并且如上所述,通信管理器114将数据的每个数据包都提供给目标设备。
[0035] 继续参考图1的实例,根据预定协议,通信客户端116、118和120的每一个都为进行通信会话、接收数据包和响应该数据包做准备。更具体地,通信客户端116、118和120的每一个都实施系统接口,通过该系统接口,每个通信客户端接收数据包,验证每个传送的数据包是否已经被成功地接收,以及在数据包的序数值与该组目标设备的基数值和由正在创建通信会话的通信管理器114所分配的离散节点号成预定关系时进行响应。以下参考图7-10进一步讨论由通信客户端116、118和120中的每一个进行的至少一个示例性过程。
[0036] 使用各种技术,信息可以在本文所公开的这些组件、任何元件、组件和子系统之间流动。这种技术包括,例如,使用诸如MODBUS的标准协议在网络上传递信息,在存储器中的模块之间传递信息,以及通过向文件、数据库、数据存储器或一些其它非易失性数据存储设备进行写入来传递信息。另外,可以传送和接收对信息的指针或其它引用来替换或添加到信息的备份。相反地,可以交换信息来替换或添加到对信息的指针或其它引用。在不脱离本文所公开的实例的范围的情况下,可以使用用于传送信息的其它技术和协议。
[0037] 另外,数据传送系统100的实例可以包括配置成用来执行本文所述的过程和功能的各种硬件和软件组件,且实例并不局限于特定的硬件组件,软件组件或其组合。例如,根据一些实例,使用分布式计算机系统进行实施数据传送系统100。下面参考图2进一步讨论一种这样的分布式计算机系统的实例。
[0038] 包括数据集合和数据传送请求的信息可以以能够将信息存储在计算机可读介质上的任何逻辑结构存储在服务器104或设备106、108和110上,该计算机可读介质除其它结构外包括索引文件、层次数据库、关系数据库或面向对象数据库。可使用唯一的和外键关系和索引对数据进行建模。唯一的和外键关系和索引可以建立在各个字段和表之间以确保数据完整性和数据互换性能。
[0039] 本文所公开的既包括系统接口又包括用户接口的接口交换(即提供或接收)各供应商和消费者的信息。这些供应商和消费者可以包括任何外部实体,该外部实体除其它实体外包括用户和系统。本文所公开的接口的每一个即可以将输入限制到一组预定的值,又可以验证在使用信息或将信息提供给其它组件之前输入的任何信息。另外,本文所公开的接口的每一个都可以在与外部实体交互之前或期间验证外部实体的身份。这些功能可以防止将错误数据引入到数据传送系统100或防止对数据传送系统100的未授权访问。
[0040] 计算机系统
[0041] 如以上参考图1所讨论的,本文描述的各个方面和功能可以作为运行在一个或多个计算机系统中的专用硬件或软件组件进行实施。存在目前使用的计算机系统的许多实例。这些实例除其它之外包括网络应用、个人计算机、工作站、主机、网络客户端、服务器、媒体服务器、应用服务器、数据库服务器和web服务器。计算机系统的其它实例可以包括移动计算设备,诸如蜂窝电话、个人数字助理、平板电脑和笔记本电脑,以及网络设备(例如负载平衡器、路由器和交换机)。进一步地,各个方面可以位于单个计算机系统上,或者可以分布在连接到一个或多个通信网络的多个计算机系统间。
[0042] 例如,各个方面和功能可以分布在配置成为一个或多个客户端计算机提供服务或作为分布式系统的一部分执行全局任务的一个或多个计算机系统之中。另外,各个方面可以在客户端-服务器或多级系统上执行,该客户端-服务器或多级系统包括分布在执行多个功能的一个或多个服务器系统中的组件。因此,实例并不局限于在任何特定系统或系统组上执行。进一步地,可以在软件、硬件、固件或其任何组合中实施各个方面和功能。因此,通过使用各种硬件配置和软件配置可以在方法、动作、系统、系统元件和组件内实施各个方面、过程和功能,并且实例不限于任何特定的分布式结构、网络或通信协议。
[0043] 参考图2,其示出了在其中实施了各个方面和功能的分布式计算机系统200的功能示意图。如图所示,分布式计算机系统200包括交换信息的另一个计算机系统。更具体地,分布式计算机系统200包括计算机系统202、204和206。如图所示,计算机系统202、204和206通过通信网络208互连,并且通过该通信网络208可以交换数据。网络208可以包括任何通信网络,计算机系统通过该通信网络可以交换数据。为使用网络208交换数据,计算机系统202、204和206和网络208可以使用各种方法、协议和标准,包括除其它外的RS-485、RS422、光纤信道、令牌环网、以太网、无线以太网、蓝牙、IP、IPV6、TCP/IP、UDP、DTN、HTTP、FTP、SNMP、SMS、MMS、SS7、JSON、SOAP、CORBA、REST和Web服务。为了确保数据传送安全,计算机系统202、204和206可以通过使用包括例如TLS、SSL或VPN的各种安全措施的网络208来传送数据。虽然分布式计算机系统200示出了三个网络化的计算机系统,但是分布式计算机系统200并不局限于此,并且可以包括使用任何介质和通信协议进行网络化的任何数目的计算机系统和计算设备。
[0044] 图2示出了包括计算机系统202、204和206的分布式计算机系统200的特定实例。如图2所示,计算机系统202包括处理器210、存储器212、总线214、接口216和数据存储器218。为了实施本文所公开的至少一些方面、功能和过程,处理器210执行导致操控数据的一系列的指令。处理器210可以是任何类型的处理器、多处理器、控制器或微控制器。一些示例性的处理器包括市场上可购买到的处理器,例如Stellaris ARM Cortex-M3、Intel Xeon、Itanium、Core、Celeron、Pentium、AMD Opteron、Sun UltraSPARC、IBM Power5+和IBM主机芯片。处理器210通过总线214被连接到其它的系统组件上,其他系统组件包括一个或多个存储设备212。
[0045] 在计算机系统202的操作期间,存储器212存储程序和数据。因此,存储器212可以是相对高性能、易失性,随机存取存储器,例如,动态随机存取存储器(DRAM)或静态随机存取存储器(SRAM)。然而,存储器212可以包括用于存储数据的任何设备,例如磁盘驱动器或其它非易失性存储设备。各种实例可以将存储器212组织成具体化的,并且在一些情况下,组织成独特的结构以执行本文所公开的功能。这些数据结构可以定尺寸成和组织成用来存储用于特定的数据和数据的类型的值。
[0046] 计算机系统202的组件是由例如总线214的互连元件连接的。总线214可以包括一个或多个物理总线,例如,在相同机器内集成的组件之间的总线,但是可以包括系统元件之间的任何通信连接,系统元件包括专用或标准计算总线技术,例如IDE、SCSI、PCI和InfiniBand。因此,总线214使得例如数据和指令的通信在计算机系统202的系统组件之间进行交换。
[0047] 计算机系统202还包括一个或多个接口设备216,例如输入设备、输出设备以及组合输入/输出设备。接口设备可以接收输入或提供输出。更具体地,输出设备可以为外部展示提供信息。输入设备可以接收来自外部源的信息。接口设备的实例包括键盘、鼠标设备、跟踪球、麦克风、触摸屏、打印设备、显示屏、扬声器、网络接口卡等。接口设备允许计算机系统202与外部实体进行交换信息和通信,外部实体如用户和其它系统。
[0048] 数据存储器218包括在其上存储有指令的计算机可读和可写的非易失性(非暂时性)数据存储介质,该指令定义了由处理器210执行的程序或其它对象。数据存储器218还可以包括记录在介质之上或之中的信息,该信息在程序执行期间由处理器210处理。更具体地,该信息可以存储在被具体地配置成用来保存存储空间或增加数据交换性能的一个或多个数据结构中。该指令可以作为编码信号被持久地存储,并且该指令可以使得处理器210来执行本文所述的任何功能。例如,该介质可以是光盘、磁盘或闪存等。在操作中,处理器210或一些其它的控制器使得数据从非易失性记录介质中读取到例如存储器212的另一存储器中,该另一存储器允许处理器210存取信息比包括在数据存储器218中的存储介质允许存取信息更快。该存储器可以位于数据存储器218或存储器212中,然而,处理器210操作存储器内的数据,然后在完成处理之后将该数据拷贝到与数据存储器218相关联的存储介质中。各种组件可以管理数据在存储介质和其它存储元件之间的移动,并且实例并不局限于特定的数据管理组件。此外,实例并不局限于特定的存储器系统或数据存储系统。
[0049] 虽然计算机系统202是作为可以在其上实践各个方面和功能的一种计算机系统类型的范例示出的,但是各个方面和功能不局限于在图2所示的计算机系统202上实现。各个方面和功能可以在具有与图2所示的计算机不同的体系结构或组件的一个或多个计算机上实践。例如,计算机系统202可以包括专门编程的专用硬件,例如设计成适于执行本文所公开的特定操作的专用集成电路(ASIC)。而另一个实例可以使用运行具有摩托罗拉PowerPC处理器的MAC OS系统X的几个通用计算机设备和运行专用硬件和操作系统的几个专用计算设备的网格来执行相同的功能。
[0050] 计算机系统202可以是包括操作系统的计算机系统,该操作系统管理包括在计算机系统202中的硬件元件的至少一部分。在一些实例中,处理器或控制器,例如处理器210,执行操作系统。可以被执行的特定操作系统的实例包括可从Micrium公司获得的MicroC/OS-II;可从微软公司获得的基于Windows的操作系统,例如Windows NT、Windows2000(Windows ME)、Windows XP、Windows Vista或Windows7操作系统;可从苹果电脑公司获得的MAC OS系统X操作系统,许多基于Linux的操作系统分布中的一个,例如,可从红帽公司获得的企业linux操作系统;可从Sun微系统公司获得的Solaris操作系统;或可从各种源获得的UNIX操作系统。可以使用许多其它的操作系统,并且实例并不限局限于任何特定的操作系统。
[0051] 处理器210和操作系统一起定义了用高级编程语言写应用程序的计算机平台。这些组件应用程序可以是使用通信协议(例如,TCP/IP)在通信网络(例如,因特网)上传送的可执行的代码、中间代码、字节代码或解释代码。类似地,某些方面可以使用面向对象的编程语言实现,例如.Net、SmallTalk、Java、C++、Ada或C#(C-Sharp)。也可以使用其它面向对象的编程语言。另外,可以使用功能、脚本、或逻辑编程语言。
[0052] 另外,各个方面和功能可以在非编程环境中实现,例如,以HTML、XML或其他形式产生的文件,当在浏览器程序的窗口中察看的时候,提供图形用户界面的诸方面或实现其他功能。此外,各个方面可能是作为编程或非编程的元件或其任何组合实现的。例如,当从网页内调用的数据对象可以用C++来编写的同时,网页可以使用HTML来实现。因此,该实例不局限于具体的编程语言并且可以使用任何合适的编程语言。因此,本文所公开的功能组件可以包括被配置成用来执行本文所述的功能的各种各样的元件,例如专用硬件、可执行代码、数据结构或对象。
[0053] 在一些实例中,本文所公开的组件可以读取影响由组件执行的功能的参数。这些参数可以以任何形式物理地存储在包括易失性存储器(例如随机存储器(RAM))或非易失性存储器(例如磁性硬盘驱动器)的合适的存储器中。另外,该参数可以以适当的数据结构(例如由用户模式应用程序定义的数据库或文件)或通用共享数据结构(如由操作系统定义的应用注册表)被逻辑地存储。另外,一些实例提供系统和用户接口,允许外部实体来修改该参数,并从而配置部件的行为。
[0054] 数据传送过程
[0055] 如上文所讨论的,一些实例执行导致数据通过网络在至少两个设备之间传送的过程。更具体地,根据一个实施例,诸如服务器104的设备包括诸如通信管理器114的一个或多个组件,该一个或多个组件执行将存储在设备上的数据传送到一个或多个其它设备(例如设备106、108和110)的过程。图3示出了过程300的这种过程的实例。如图所示,过程300包括建立通信会话、发送数据包和终止通信会话的动作。
[0056] 在动作302中,通信会话被建立在能够访问将要被传送的数据集合的源设备和连接到网络上的一个或多个目标设备之间。在至少一个实例中,源设备和目标设备在由用户102输入的或由外部系统提供的数据传送请求中被规定了。根据另一实例,源设备执行使得源设备以支持本文所公开的总体数据传送协议的具体的初始化和分配功能。在该实例中,源设备还提供了在对目标设备进行初始化的过程中产生的信息的一部分。以下将参考图4进一步地讨论在动作302中执行的过程的一个实例。
[0057] 在动作304中,数据包被从源设备发送到至少一个目标设备。在几个实例中,源设备为发送到所有的目标设备的每个数据包接收来自指定的目标设备的一个响应。如以下进一步所述,被指定的将响应发送给任何给定的数据包的特定的目标设备从数据包到数据包不同。以下将参考图5进一步地说明在动作304中执行的过程的一个实例。
[0058] 在动作306中,通信会话结束。根据至少一个实例,在终止通信会话之前,源设备通知目标设备。以这种方式,源设备向目标设备提供请求目标设备没有接收到的数据包重发的一个机会。以下将参考图6进一步地描述在动作306中执行的过程的一个实例。数据传送过程根据过程300使得源设备能够高效地和有效地传送信息到多个目标设备而不引起大量的所听到的ACK和NAK。
[0059] 为接收通过过程300的执行所提供的信息,诸如设备106、108和110的目标设备包括诸如通信客户端116、118、120的至少一个组件,该至少一个组件执行逆过程700。参考图7示出了过程700的一个实例。如图所示,过程700包括初始化通信会话、接收数据包和结束通信会话的动作。
[0060] 在动作702中,通信会话在目标设备上被初始化。在一个实例中,目标设备从源设备接收初始化信息,并且目标设备处理该初始化信息以使自身准备接收来自源设备的数据数据包。以下将参考图8进一步讨论在动作702中执行的过程的一个实例。
[0061] 在动作704中,目标设备接收数据包。在一个实例中,目标设备分析每个数据包的特征,目标设备的集合的基数和供应给目标设备的初始化信息以确定该目标设备是否可以向源设备发出响应。以下将参考图9进一步地解释在动作704中执行的过程的一个实例。
[0062] 在动作706中,通信会话结束。根据至少一个实例,在从源设备接收到发送消息结束之后,目标设备对源设备发出响应以请求重发包括在数据传送中的未被目标设备成功接收的任何数据包。以下将参考图10进一步描述在动作706中执行的过程的一个实例。
[0063] 源设备过程
[0064] 如以上参考过程300的动作302所讨论的,在一些实例中,源设备(例如服务器104)建立与一个或多个目标设备的通信会话。图4示出了由源设备来实现以达到该目的的示例性过程400。如图所示,过程400包括以下动作:确定节点标识符、发送初始化信息和建立数据传送会话。
[0065] 在动作402中,源设备为以接收数据的集合为目标的每个设备确定节点标识符。根据一个实例,源设备使用包括在数据传送请求中的信息识别以接收数据的集合为目标的一组设备。一旦该组目标设备被识别,源设备就会为是该组设备中的每个目标设备确定离散的和唯一的节点标识符。例如,在一个实例中,源设备产生以0开始的整数序列,,并且将每个整数作为用于特定设备成员的节点标识符进行存储。在其它实例中,可以使用其它节点标识符,例如以1开始的整数、序列号、或其它列举的数据,并且实例并不局限于特定组或类型的节点标识符。
[0066] 在动作404中,源设备为目标设备的每一个提供初始化信息。在至少一个实例中,该初始化信息包括目标设备的集合的基数和分配给目标设备的节点标识符。接着,在动作406中,源设备建立与目标设备的每一个的数据传送会话。根据一个实例,源设备使用xmodem协议建立与目标设备的会话并进行通信,然而可以使用任何通信协议而不脱离本文所公开的实例的范围。在过程400完成之后,源设备准备好开始传送用于分布到目标设备的数据的集合。
[0067] 如以上参考过程300的动作304所讨论的,在一些实例中,源设备(例如服务器104)通过发送信息的数据包传送所请求的数据的集合到一个或多个目标设备。图5示出了由源设备来实现以达到该目的的示例性过程500。如图所示,过程500包括几个动作,下面将进一步讨论这几个动作中的每一个动作。
[0068] 在动作502中,源设备初始化数据包缓冲器。在一些实例中,源设备将数据包缓冲器分配在本地存储器中。此外,在这些实例中,数据包缓冲器的大小基于以接收数据的集合(即目标设备的集合的基数)为目标的设备的数目来设置。在至少一个实例中,该数据包缓冲器的大小被设置为容纳等于目标设备的集合的基数的多个数据包。在数据包缓冲器被分配之后,源设备将要传送的数据的集合,或其一部分存储在数据包缓冲器内作为数据包的序列并初始化当前的数据包指示器,例如,指向缓冲器的指针指示在缓冲器内的第一数据包。
[0069] 在另一个实例中,该数据包缓冲器作为滚动窗口或视图实现于要被传送的数据的集合中。在该实例中,滚动窗口的范围是使用指示包括在该窗口中的第一个和最后一个数据包的指针来实现的。与先前的实例一样,源设备的大小基于目标设备的集合的基数来设置,并且在至少一个实例中,源设备设置数据包缓冲器的大小以包含等于目标设备的集合的基数的多个数据包。而且,与先前的实例一样,源设备初始化当前的数据包指示器,例如,指向缓冲器的指针指示在缓冲器内的第一数据包。
[0070] 在动作504中,源设备确定当前的数据包指示器是否指向数据包缓冲器的末端。如果是,则源设备执行动作506。否则,源设备执行动作508。在动作506中,源设备向数据包缓冲器添加另一数据包。根据数据包缓冲器的特定的实施方案,这可以通过从缓冲器中移除最近最少传送的数据包并添加新的数据包或通过递增限定了长度为1个数据包的滚动窗口的指针来完成。另外,在动作506中,源设备设置当前的数据包指示器以指示最近添加的数据包。
[0071] 在动作508中,源设备向目标设备的每一个传送当前的数据包。另外,在一些实例中,源设备为动作508中的目标设备的每一个提供指示数据包标识符的数据。在这些实例中的一些实例中,指示数据包标识符的数据括在数据包中,而在其它实例中,该数据被分别从数据包传送。在至少一个实例中,源设备保存包含来自数据的集合的数据的该组数据包内的每个数据包的位置(即序数值)的记录,提供当前数据包的序数值作为数据包标识符。
[0072] 接下来,在动作510中,源设备以1个数据包地递增当前的数据包指示器。在动作512中,源设备接收来自目标设备的一个的响应。然后,在动作514中,源设备确定该响应是否指示相应的目标设备在数据包缓冲器中没能成功地接收先前发送的数据包中的一个,即确定该响应是否是否定确认(本文称为“NAK”)。如果是,则源设备执行动作516。否则,源设备执行动作518。
[0073] 在动作516中,源设备重置当前的数据包指示器以指示数据包缓冲器中的第一数据包。因此,在接收到目标设备中的一个没能成功地接收数据包的指示之后,源设备开始重发缓冲器中的所有数据包以确保该失败的通信得到补救。在动作518中,源设备确定包括来自数据的集合的数据的所有数据包是否都已经被发送。如果是,则过程500结束。否则,源设备执行动作504。在过程500完成之后,源设备很可能已经成功地向目标设备传送了大量的数据的集合,并准备来完成数据传送过程。
[0074] 如以上参考过程300的动作306所讨论的,在一些实例中,源设备(例如服务器104)终止了与一个或多个目标设备的通信会话。图6示出了可以由源设备来实现以达到该目的的示例性过程600。如图所示,过程600包括以下动作:传送传送结束的消息、接收响应、重传没有被目标设备成功地接收的数据包和终止数据传送会话。
[0075] 在动作602中,源设备向每个目标设备传送EOT消息。EOT消息包括指示源设备已经传送了包括来自数据的集合的数据的所有数据包。在动作604中,源设备接收来自每一个目标设备的响应。如果任何所接收到的响应指示目标设备未接收到先前传送的数据包,即指示NAK的数据包的响应,源设备则在动作606中将NAK的数据包重新发送到目标设备。源设备将继续重发NAK的数据包,直到所有的目标设备都指示成功地接收了包括来自数据的集合的数据的所有的数据包。在动作608中,源设备终止了与目标设备的数据传送会话。
在完成过程600后,源设备已经成功地向目标设备传送了数据的集合。
[0076] 目标设备过程
[0077] 如以上参考过程700的动作702所讨论的,在一些实例中,目标设备(例如设备106)执行初始化过程以使其自身准备与源设备进行通信会话。图8示出了过程800这样的一种过程的实例。如图所示,过程800包括以下动作:接收初始化信息、存储初始化信息和初始化数据传送会话。
[0078] 在动作802中,目标设备接收由是将要被传送给目标设备的数据集合的源的设备提供的初始化信息。在至少一个实例中,初始化信息指示通过源设备分配给目标设备的节点标识符和以接收数据的集合为目标的设备的集合的基数。接下来,在动作804中,目标设备本地地存储该初始化信息。在动作806中,目标设备建立与源设备的数据传送会话。在至少一个实例中,目标设备使用xmodem协议来与源设备进行通信,但是可以使用任何通信协议而不脱离本文所公开的实例的范围。在过程800完成之后,目标设备准备好开始接收用于分配给目标设备的数据的集合。
[0079] 如以上参考过程700的动作704所讨论的,在一些实例中,目标设备(例如设备106)从源设备接收数据的数据包。图9示出了由目标设备来实现以达到该目的的示例性过程900。如图所示,过程900包括几个动作,以下将进一步讨论这几个动作中的每一个动作。
[0080] 在动作902中,目标设备从源设备接收数据包。接下来,目标设备确定在动作904中该数据包是否先前被成功地接收并确认。如果是,则目标设备执行动作918。否则,目标设备执行动作906。
[0081] 在动作906中,目标设备确定该数据包是否是有效的和是否被以正确的顺序接收。如果是,则目标设备在动作910中存储该数据包。否则,目标设备在动作908中将该数据包记录为无效。
[0082] 在动作912中,目标设备确定该数据包是否是传送数据包结束。如果是,则目标设备结束过程900。否则,目标设备执行动作914。
[0083] 在动作914中,目标设备确定该数据包是否被先前否定确认。如果是,则目标设备在动作916中删除指示数据包没有被成功地接收的记录。否则,目标设备确定该数据包的数据包标识符是否与目标设备的节点标识符成预定关系。如果是,则目标设备执行动作920。否则,目标设备执行动作902。
[0084] 在动作920中,目标设备确定先前由源设备传送的任何数据包是否未被成功地接收。如果是,则目标设备在动作924中产生并传送NAK到源设备。否则,目标设备在动作922中产生并传送ACK到源设备。在过程900完成之后,目标设备很可能已经成功地接收了大量的数据的集合并准备结束数据传送过程。
[0085] 如以上参考过程700的动作706所讨论的,在一些实例中,目标设备(例如设备106)结束与源设备的通信过程。图10示出了可以由目标设备来实现以达到该目的的示例性过程1000。如图所示,过程1000包括几个动作,下面将进一步讨论这几个动作中的每一个动作。
[0086] 在动作1002中,目标设备确定先前由源设备传送的任何数据包是否未被成功地接收。如果是,则目标设备在动作1006中产生并传送NAK到源设备。在至少一个实例中,该NAK包括未被成功地接收的数据包的数据包标识符。如果先前由源设备传送的所有的数据包被成功地接收,那么目标设备在动作1104中产生并发送ACK到源设备并结束过程1000。
[0087] 在动作1008中,目标设备从源设备接收数据包。接下来,目标设备在动作1010中确定该数据包是否先前被成功地接收并确认。如果是,则目标设备执行动作1008。否则,目标设备执行动作1012。
[0088] 在动作1012中,目标设备确定该数据包是否有效。如果是,则目标设备在动作1016中存储该数据包。否则,目标设备在动作1014中将该数据包记录为无效。
[0089] 在动作1018中,目标设备确定该数据包是否被先前否定确认。如果是,则目标设备在动作1020中删除指示该数据包未被成功地接收的记录。否则,目标设备执行动作1002。在完成过程1000后,目标设备已经从源设备成功地接收到了数据的集合。
[0090] 过程300至1000中的每一个过程都以特定的实例描述了一种特定的动作序列。包括在这些过程中的动作可以由或可以使用本文所讨论的专门配置的一个或多个计算机系统来执行。一些动作是可选的,并且因此,可以根据一个或多个实例被省略。另外,动作的顺序可以被改变,或可以添加其它动作,而不脱离本文所讨论的系统和过程的范围。此外,如上所述,在至少一个实例中,该动作是在特定的、专门配置的机器,即根据本文所公开的实例配置的计算机系统上执行的。
[0091] 本文所公开的系统和方法可以应用于各种环境中。例如,在一个实例中,民用电力系统采用本文所公开的数据传送协议来保持在测量家庭中的支路电流的电流变压器上运行的固件。在另一个实例中,工业电力系统采用数据传送协议来保持在多个并联的不间断电源上运行的固件。因此,本文所公开的示例性系统和过程都非常适合用于需要低成本和高度可靠的数据通信的环境中。
[0092] 这样,本文已经描述了至少一个实例的若干方面,应理解,本领域技术人员将容易地想到各种改变、修改和改进。例如,虽然说明书的大部分讨论了具有总线拓扑的网络内的数据传送,但是在网络中可以采用的实例具有除了本文所描述的标准以外的其它拓扑或支持标准。另外,实例可以在通过单个设备中的本地总线连接的设备之间实现。这些改变、修改和改进被认为是本公开的一部分,并且被认为属于本公开的精神和范围内。相应地,前面的描述和附图仅是示例性的。