数据通道的仿真方法和系统转让专利

申请号 : CN200910238693.7

文献号 : CN102082674B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 罗贤国

申请人 : 中兴通讯股份有限公司

摘要 :

本发明公开了一种数据通道的仿真方法和系统,其中,该方法包括:建立通信代理节点和多个用于仿真设备或设备功能的通信节点;多个通信节点中的任意两个通信节点通过通信代理节点进行数据的传输,其中,对于每个通信节点,通信节点与通信代理节点之间存在编程得到的通信链路。通过本发明,通过编程得到的通信链路以及节点来实现数据传输的仿真,避免数据传输仿真单纯地依赖于实际单板以及其间的特定硬件,能够有效缩短设备开发的周期,提高设备开发的速度,提高设备开发效率。

权利要求 :

1.一种数据通道的仿真方法,用于仿真设备的数据传输,其特征在于,包括:建立通信代理节点和多个用于仿真设备或设备功能的通信节点;

为所述通信节点分组,并利用通信节点的属性信息标识通信节点,其中,通信节点的属性信息包括:地址信息和组号;

位于同一组内的所述多个通信节点中的任意两个通信节点通过所述通信代理节点进行数据的传输,其中,对于每个通信节点,所述通信节点与所述通信代理节点之间存在通信链路,且数据的传输过程中,所述通信节点指定数据所发送的目的地址和目的组号,由所述通信代理节点根据所述目的地址和目的组号,将所传输数据发送给对应的通信节点。

2.根据权利要求1所述的方法,其特征在于,还包括:

为所述通信代理节点和所述多个通信节点分别建立套接字;

则所述通信节点与所述通信代理节点之间存在通信链路是指:

所述通信节点与所述通信代理节点之间存在基于套接字的传输控制协议链路,其中,所述通信代理节点上的套接字与所述通信节点上的套接字一一对应。

3.根据权利要求1所述的方法,其特征在于,传输单播数据时,所述多个通信节点中的任意两个通信节点通过所述通信代理节点进行数据的传输的操作包括:对于所述多个通信节点中的任一通信节点,所述通信节点将目的地址信息和单播数据包发送给所述通信代理节点;

所述通信代理节点将所述单播数据包发送给所述目的地址信息对应的通信节点。

4.根据权利要求1所述的方法,其特征在于,传输组播数据时,所述多个通信节点中的任意两个通信节点通过所述通信代理节点进行数据的传输的操作包括:对于所述多个通信节点中的任一通信节点,所述通信节点将组播地址和组播数据包发送给所述通信代理节点;

所述通信代理节点将所述组播数据包发送给所述组播地址内的所有通信节点;

或者,

对于所述多个通信节点中的任一通信节点,所述通信节点将组播数据包发送给所述通信代理节点,其中,所述组播数据包中携带有组播数据标识;

所述通信代理节点将所述组播数据包发送给所述组播数据标识对应的所有通信节点。

5.根据权利要求2所述的方法,其特征在于,所述多个通信节点中的任意两个通信节点通过所述通信代理节点进行数据的传输的操作包括:对于所述多个通信节点中的任一通信节点,所述通信代理节点将接收的数据包转发到通信节点的套接字中。

6.根据权利要求5所述的方法,其特征在于,对于所述多个通信节点中的任一通信节点,所述通信节点周期性地检测其上的套接字,查找该套接字中是否存在来自其他通信节点的数据包,读取查找到的数据包。

7.根据权利要求5所述的方法,其特征在于,如果所述通信节点的属性信息包括回调函数,则所述通信节点实时监测其上的套接字,查看该套接字中是否存在来自其他通信节点的数据包,读取查找到的数据包。

8.根据权利要求1至7中任一项所述的方法,其特征在于,还包括:对于所述多个通信节点中的任一通信节点,所述通信节点将注册信息发送给所述通信代理节点,以在所述通信代理节点上进行注册,其中,所述注册信息包括:地址信息和组号。

9.根据权利要求8所述的方法,其特征在于,还包括:

所述通信代理节点为已在其上注册的通信节点建立节点数据队列,并将待发送给通信节点的数据包放置在该通信节点对应的节点数据队列中。

10.根据权利要求1至7中任一项所述的方法,其特征在于,还包括:对于未在所述通信代理节点上注册的通信节点,所述通信代理节点待发送给该通信节点的数据包放置在未注册节点数据队列中;

如果该未注册的通信节点在所述通信代理节点上注册成功,所述通信代理节点将所述待发送给该通信节点的数据包传输给该通信节点。

11.一种数据通道的仿真系统,其特征在于,包括

建立模块,用于建立通信代理节点和多个用于仿真设备功能的通信节点;为所述通信节点分组,并利用通信节点的属性信息标识通信节点,其中,通信节点的属性信息包括:地址信息和组号;

仿真模块,用于仿真位于同一组内的所述多个通信节点中的任意两个通信节点通过所述通信代理节点所进行的数据传输,其中,对于每个通信节点,所述通信节点与所述通信代理节点之间存在编程得到的通信链路,且数据的传输过程中,所述通信节点指定数据所发送的目的地址和目的组号,由所述通信代理节点根据所述目的地址和目的组号,将所传输数据发送给对应的通信节点。

12.根据权利要求11所述的系统,其特征在于,所述仿真模块还用于为所述通信代理节点和所述多个通信节点分别建立套接字,并为所述通信节点与所述通信代理节点之间仿真建立基于套接字的传输控制协议链路,其中,所述通信代理节点上的套接字与所述通信节点上的套接字一一对应。

说明书 :

数据通道的仿真方法和系统

技术领域

[0001] 本发明涉及通信领域,尤其涉及一种数据通道的仿真方法和系统。

背景技术

[0002] 目前,通信设备(例如单板)之间主要采用高级数据链路控制(High-LevelData Link Control,简称为HDLC)、I2C(Inter-Integrated Circuit)、通用异步收发器(Universal Asynchronous Receiver/Transmitter,简称为UART)等物理通道进行数据通信。
[0003] 随着通信技术的快速发展,对通信设备开发周期的要求越来越短,对开发速度和开发效率的要求也越来越高,但HDLC、I2C、UART等数据通道均由物理器件构成,这样,会降低设备的开发速度,使得通信设备的开发周期延长,降低了设备的开发效率,这与通信技术的快速发展和快节奏要求是不相符的。
[0004] 然而,针对现有技术中通信设备的开发周期较长、开发速度慢、以及开发效率较低的问题,目前尚未提出有效的解决方案。

发明内容

[0005] 针对现有技术中通信设备的开发周期较长、开发速度慢、以及开发效率较低的问题,本发明提出一种数据通道的仿真方法,能够缩短开发周期。
[0006] 针对现有技术中通信设备的开发周期较长、开发速度慢、以及开发效率较低的问题,本发明还提出一种数据通道的仿真系统,能够缩短开发周期。
[0007] 本发明的技术方案是这样实现的:
[0008] 一种数据通道的仿真方法,包括:
[0009] 建立通信代理节点和多个用于仿真设备或设备功能的通信节点;
[0010] 所述多个通信节点中的任意两个通信节点通过所述通信代理节点进行数据的传输,其中,对于每个通信节点,所述通信节点与所述通信代理节点之间存在编程得到的通信链路。
[0011] 进一步地,上述方法还包括:
[0012] 为所述通信代理节点和所述多个通信节点分别建立套接字;
[0013] 则所述通信节点与所述通信代理节点之间存在编程得到的通信链路是指:所述通信节点与所述通信代理节点之间存在基于套接字的传输控制协议链路,其中,所述通信代理节点上的套接字与所述通信节点上的套接字一一对应。
[0014] 其中,所述通信节点的属性信息包括:地址信息和/或组号。
[0015] 其中,传输单播数据时,所述多个通信节点中的任意两个通信节点通过所述通信代理节点进行数据的传输的操作包括:
[0016] 对于所述多个通信节点中的任一通信节点,所述通信节点将目的地址信息和单播数据包发送给所述通信代理节点;
[0017] 所述通信代理节点将所述单播数据包发送给所述目的地址信息对应的通信节点。
[0018] 其中,传输组播数据时,所述多个通信节点中的任意两个通信节点通过所述通信代理节点进行数据的传输的操作包括:
[0019] 对于所述多个通信节点中的任一通信节点,所述通信节点将组播地址和组播数据包发送给所述通信代理节点;
[0020] 所述通信代理节点将所述组播数据包发送给所述组播地址内的所有通信节点;
[0021] 或者,
[0022] 对于所述多个通信节点中的任一通信节点,所述通信节点将组播数据包发送给所述通信代理节点,其中,所述组播数据包中携带有组播数据标识;
[0023] 所述通信代理节点将所述组播数据包发送给所述组播数据标识对应的所有通信节点。
[0024] 优选地,所述多个通信节点中的任意两个通信节点通过所述通信代理节点进行数据的传输的操作包括:
[0025] 对于所述多个通信节点中的任一通信节点,所述通信代理节点将接收的数据包转发到通信节点的套接字中。
[0026] 优选地,对于所述多个通信节点中的任一通信节点,所述通信节点周期性地检测其上的套接字,查找该套接字中是否存在来自其他通信节点的数据包,读取查找到的数据包。
[0027] 其中,如果所述通信节点的属性信息包括回调函数,则所述通信节点实时监测其上的套接字,查看该套接字中是否存在来自其他通信节点的数据包,读取查找到的数据包。
[0028] 进一步地,上述方法还包括:
[0029] 对于所述多个通信节点中的任一通信节点,所述通信节点将注册信息发送给所述通信代理节点,以在所述通信代理节点上进行注册,其中,所述注册信息包括:地址信息和组号。
[0030] 进一步地,上述方法还包括:
[0031] 所述通信代理节点为已在其上注册的通信节点建立节点数据队列,并将来自通信节点的数据包放置在该通信节点对应的节点数据队列中。
[0032] 进一步地,上述方法还包括:
[0033] 对于未在所述通信代理节点上注册的通信节点,所述通信代理节点将来自该通信节点的数据包放置在未注册节点数据队列中;
[0034] 如果该未注册的通信节点在所述通信代理节点上注册成功,所述通信代理节点将所述待发送给该通信节点的数据包传输给该通信节点。
[0035] 一种数据通道的仿真系统,其特征在于,包括
[0036] 建立模块,用于建立通信代理节点和多个通信节点;
[0037] 仿真模块,用于仿真所述多个通信节点中的任意两个通信节点通过所述通信代理节点所进行的数据传输,其中,对于每个通信节点,所述通信节点与所述通信代理节点之间存在编程得到的通信链路。
[0038] 上述仿真模块还用于为所述通信代理节点和所述多个通信节点分别建立套接字,并为所述通信节点与所述通信代理节点之间仿真建立基于套接字的传输控制协议链路,其中,所述通信代理节点上的套接字与所述通信节点上的套接字一一对应。
[0039] 借助于本发明的上述技术方案,通过编程得到的通信链路以及节点来实现数据传输的仿真,避免数据传输仿真单纯地依赖于实际单板以及其间的特定硬件,能够有效缩短设备开发的周期,提高设备开发的速度,提高设备开发效率。

附图说明

[0040] 图1是根据本发明实施例的数据通道的仿真方法的流程图;
[0041] 图2是根据本发明实施例的通信节点与通信代理节点的关系示意图;
[0042] 图3是根据本发明实施例的通信节点初始化过程的步骤流程图;
[0043] 图4是根据本发明实施例的通信节点以轮询模式接收数据的处理流程图;
[0044] 图5是根据本发明实施例的通信代理节点中保存的通信节点的节点数据队列的结构示意图;
[0045] 图6是根据本发明实施例的通信代理节点中保存的未注册通信节点数据队列的示意图;
[0046] 图7是根据本发明实施例的通信代理节点的主循环处理过程流程图;
[0047] 图8a至图8b是根据本发明实施例的通信代理节点中的TCP连接处理读事件的流程;
[0048] 图9是根据本发明实施例的通信代理节点写事件的处理流程图;
[0049] 图10是根据本发明实施例的数据通道的仿真系统的组成结构图。

具体实施方式

[0050] 下面结合附图对本发明实施例进行详细说明。
[0051] 图1是本发明实施例的数据通道的仿真方法的步骤流程图,用于仿真设备间或设备内的数据传输,如图1所示,包括以下处理:
[0052] 步骤S101,建立通信代理节点和多个用于仿真设备或设备功能的通信节点,其中,通信节点的属性信息包括:地址信息和/或组号,每个通信节点相当于通信设备(例如,单板)上的某个功能模块,用以实现该功能模块所具备的功能,这样,为了实现通信设备上的多个功能,可以根据需要创建多个通信节点。
[0053] 步骤S102,多个通信节点中的任意两个通信节点通过通信代理节点进行数据的传输,其中,对于每个通信节点,通信节点与通信代理节点之间存在通信链路,具体地,可以为通信代理节点和多个通信节点分别建立套接字,这样,通信节点与通信代理节点之间就存在基于套接字的传输控制协议(Transmission Control Protocol,简称为TCP)链路,通信节点与通信代理节点通过传输控制协议链路进行数据的传输,其中,通信代理节点上的套接字与通信节点上的套接字一一对应;例如,存在三个通信节点,通信节点1、通信节点2和通信节点,此时可以在每个通信节点上创建一个套接字,并在代理通信节点上创建三个套接字,假设为套接字1、套接字2和套接字3,并通过套接字1与通信节点1上的套接字,建立通信节点1与通信代理节点之间的TCP链路,通过套接字2与通信节点2上的套接字,建立通信节点2与通信代理节点之间的TCP链路,通过套接字3与通信节点3上的套接字,建立通信节点3与通信代理节点之间的TCP链路,这样就可以实现基于socket机制在仿真环境中实现设备间或设备内的数据传输。优选地,可以为建立的多个通信节点分组,例如,可以参照图2所示的通信节点与通信代理节点的关系示意图,每个通信节点只能与自己组内的通信节点进行数据的交互,这样,在建立通信节点时,可以根据地址信息和组号来唯一地确定一个通信节点。
[0054] 在传输单播数据时,通信节点将目的地址信息和单播数据包发送给通信代理节点,通信代理节点将单播数据包发送给目的地址信息对应的通信节点;在传输组播数据时,通信节点将组播地址和组播数据包发送给通信代理节点;通信代理节点将组播数据包发送给组播地址内的所有通信节点;或者,在传输组播数据时,通信节点将组播数据包发送给通信代理节点,其中,组播数据包中携带有组播数据标识;通信代理节点将组播数据包发送给组播数据标识对应的所有通信节点。
[0055] 参照图2所示的通信节点与通信代理节点的关系示意图,在具体实现过程中,首先,运行通信代理节点202,开始运行时建立一个空的通信节点101队列、未注册通信节点101数据队列,并建立监听socket,然后构造TCP连接的读集合、写事件集合(包括监听socket的TCP连接事件),并在该集合上监听读、写事件的发生,并做相应处理;然后,初始化通信节点101,通信节点101主动与通信代理节点202建立TCP连接,例如尝试3次连接,若不成功,则初始化化失败。如果TCP连接建立成功,将通信节点101的地址信息和/或通信组号发送通信代理节点202以进行注册,通信节点101等待注册应答,可选地,如果初始化操作时指定了回调函数,则通信节点101创建一个守护任务接收数据;接着,通信节点
101接收数据,如果初始化操作时指定回调函数,则采用中断模式接收数据,如果初始化操作时没有指定回调函数,则采用轮询模式接收数据;在通信过程中,通信节点101向通信代理节点202发送数据,如果是单播数据,则采用单播方式发送,如果是组播数据,则采用组播方式;通信代理节点202转发来自通信节点101的数据,具体地,如果通信代理节点202接收到来自通信节点101的单播数据后,会搜索通信节点101的队列,找到目的通信节点,将数据转发给目的通信节点,如果通信代理节点202接收到来自通信节点101的组播数据后,会将数据转发给与通信节点101归属于同一组的所有通信节点1;如果通信代理节点
202未找到目的通信节点,则将数据缓存到未注册通信节点数据队列,直到该目的通信节点在通信代理节点202上注册成功后,再将数据转发给目的通信节点。
[0056] 本发明的上述处理不依赖实际单板间通信的特定硬件,只要设备中操作系统支持socket机制即可实现。通过上述处理,能够仿真实现链路层功能,即实现二层数据包的收发,同时不改变原有的通信API接口,并且对程序改动较小,可以实现HDLC、UART、I2C等多种特定硬件的通信功能的仿真,并且通过仿真单板之间的物理通道,能够实现数据的收发功能,既支持点对点通信,也支持组播通信。该方法不仿真物理通道的物理特性,仅实现数据收发特性。
[0057] 并且,在上述处理中,主要涉及到通信节点模块和通信代理模块,其中,通信节点模块可用于完成通道初始化、收数据、发数据功能,通信代理模块可用于实现管理通信节点的管理,转发通信节点数据,并控制通信节点的数据流量。
[0058] 图3是本发明实施例的通信节点初始化过程的步骤流程图,对于每个通信节点,均执行如图3所示的处理,主要包括以下步骤:
[0059] 步骤S301,为通信节点分配地址信息,如果需要对多个通信节点进行分组,则为每个通信节点分配组号,可选地,还可以为通信节点指定回调函数,并在通信节点上创建一个Socket。
[0060] 步骤S302,通信节点主动向通信代理节点发起建立TCP连接的操作。
[0061] 步骤S303,如果通信节点与通信代理节点之间建立TCP连接,则执行步骤S304;否则执行步骤S302。
[0062] 步骤S304,通信节点向通信代理节点发送注册信息,注册信息可以包括以下之一:通信节点的地址信息、通信节点的地址信息和通信组号。
[0063] 步骤S305,通信节点接收来自通信代理节点的注册应答消息。
[0064] 步骤S306,判断通信节点中是否指定了回调函数,如果指定了回调函数,则执行步骤S307,否则执行步骤S308。
[0065] 步骤S307,为通信节点创建一个守护任务,以中断模式接收数据,即通信节点实时监测TCP链路上的Socket,查找该Socket中是否存在来自其他通信节点的数据包,读取查找到的数据包,并利用回调函数处理读取到的数据包。
[0066] 步骤S308,通信节点以轮询模式接收数据,周期性地检测TCP链路上的套接字,查看该Socket中是否存在来自其他通信节点的数据包,读取查找到的数据包。
[0067] 其中,在步骤S302与步骤S303中,可以设置通信节点发起建立TCP连接操作的次数阈值,例如3次,如果通信节点向通信代理节点发起3次建立TCP连接的操作都没有成功,则初始化过程失败,通过节点可以间隔一段时间后再向通信代理节点发起建立TCP连接的操作。
[0068] 图4是根据本发明实施例的通信节点以轮询模式接收数据的处理流程图,如图4所示,包括以下处理:
[0069] 步骤S401,判断通信节点初始化时是否指定了回调函数,如果指定了回调函数,表明节点不支持轮询模式接收数据,数据接收失败,如果没有指定回调函数,则执行步骤S402。
[0070] 步骤S402,通信节点等待自身的TCP连接上发生读事件,即通信节点周期性地检测TCP链路上的套接字,查看该Socket中是否存在来自其他通信节点的数据包,读取查找到的数据包。
[0071] 步骤S403,通信节点根据数据包中的消息头,判断上次接收的数据是否已经接收完毕,如果判断结果为是,则执行步骤S405,否则执行步骤S404。
[0072] 步骤S404,通信节点继续接收上次未接收完整的数据。
[0073] 步骤S405,通信节点接收Socket中保存的新数据包。
[0074] 图5是根据本发明实施例的通信代理节点中保存的通信节点的节点数据队列的结构示意图,如图5所示,通信代理节点启动时,通信节点队列501是空的,当通信节点与通信代理节点建立TCP连接并在通信代理节点上注册成功时,通信代理节点在通信节点队列501中为该通信节点分配节点数据队列506。当该通信节点有待发送的数据包515时,通信代理节点先将数据包515插入待发送数据包队列506中,当待发送数据包队列506达到一定长度,通信代理节点则将该通信节点阻塞,并将来自该通信节点的数据包插入被阻塞的通信节点队列504中。此外,通信节点队列501还保存了通信节点的以下属性信息:注册信息503,用于唯一标识通信节点;socket套接字502,用于标识已建立的TCP连接;当前发送的数据包508和该数据包已发送的数据长度509;当前接收的数据包510和该数据包已接收的数据长度511;被阻塞的通讯节点队列504(例如通信节点1和通信节点2)和队列长度505;通信节点阻塞状态512,用于标识通信节点是否被阻塞;下一个被阻塞的通信节点514,用于指向下一个被阻塞的通讯节点;下一个通信节点513,用于指向队列中的下一个通信节点,通信节点队列501也保存了通信节点513的属性信息,与上述属性信息类似,这里不再赘述。
[0075] 图6是根据本发明实施例的通信代理节点中保存的未注册通信节点数据队列的示意图。通信代理节点202启动时,未注册通信节点数据队列601的队列是空的,当通信代理节点202接收到数据包602后,发现接收端的通信节点603还没有注册,则将通信节点603插入未注册通信节点数据队列601,并在未注册通信节点数据队列601中保存以下属性信息:数据包602;接收端的通信节点603;未注册数据节点还保存下一个未注册通信节点数据节点604,用于指向下一个未注册通信节点数据节点,未注册通信节点数据队列601也保存了通信节点604的属性信息,与上述属性信息类似,这里不再赘述。在具体实现过程中,通信代理节点并没有直接将数据包602丢弃,而是等到接收端的通信节点603在通信代理节点202上注册成功后,再将该数据包602转发给接收端的通信节点603。
[0076] 对于在通信代理节点上注册成功的通信节点,通信代理节点会为该通信节点建立节点数据队列,并将来自通信节点的数据包放置在该通信节点对应的节点数据队列中,例如有十个通信节点在通信代理节点上注册成功,则通信代理节点会建立十个节点数据队列,每个节点数据队列保存来自同一通信节点的数据包,下面结合图5、图6和图7以一个通信节点的节点数据队列为例对通信代理节点的主循环处理过程进行说明,图7是根据本发明实施例的通信代理节点的主循环处理过程流程图,如图7所示,主要包括如下步骤:
[0077] 步骤S701,通信代理节点创建监听Socket。
[0078] 步骤S702,通信代理节点遍历通信节点队列501(即上文所述的节点数据队列)构造读事件、写事件的TCP连接集合,监听socket加入读事件集合,对于被阻塞的通信节点,不能加入读事件集合,只能加入写事件集合,对于未被阻塞的通信节点,加入读事件集合和写事件集合,其中,写事件是指:通信节点向通信代理节点发送数据包、通信代理节点向通信节点发送数据包,读事件是指:通信节点接收通信代理节点转发的数据包、通信代理节点接收来自通信节点的数据包。
[0079] 步骤S703,通信代理节点分别在读事件集合、写事件集合上监听事件,等待事件发生。
[0080] 步骤S704,事件发生后,如果是读事件,则执行步骤S705,否则执行步骤S706。
[0081] 步骤S705,通信代理节点处理完读事件之后,执行步骤S702。
[0082] 步骤S706,通信代理节点处理完写事件之后,执行步骤S702。
[0083] 下面结合图5、图6、和图8,对通信代理节点中的TCP连接处理读事件的过程进行说明,图8是根据本发明实施例的通信代理节点中的TCP连接处理读事件的流程,如图8所示,包括以下步骤:
[0084] 步骤S801,通信代理节点判断读事件是否发生在监听Socket上,如果判断结果为是,执行步骤S802,否则执行步骤S809。
[0085] 步骤S802,通信代理节点接收通信节点的TCP连接请求,创建新的TCP连接。
[0086] 步骤S803,通信代理节点接收通信节点的注册信息
[0087] 步骤S804,通信代理节点该通信节点是否已经注册,如果该通信节点已经注册,表明是重复注册,则执行步骤S805;否则执行步骤S806。
[0088] 步骤S805,通信代理节点关闭原来的TCP连接,并释放通信节点队列501中的相应通信节点。
[0089] 步骤S806,通信代理节点发送注册成功应答消息给相应的通信节点。
[0090] 步骤S807,通信代理节点为建立连接的通信节点分配新的节点数据队列,并在该新的节点数据队列中保存通信节点的注册信息等相关数据,并插入通信节点队列501。
[0091] 步骤S808,通信代理节点遍历未注册通信节点数据队列601,如果有本通信节点的数据包602,则插入待发送数据包队列506,等待以后发送。
[0092] 步骤S809,通信代理节点遍历通信节点队列501,判断是否遍历完毕,如果未遍历完毕,则执行步骤S810,如果遍历完毕,读事件处理结束。
[0093] 步骤S810,通信代理节点确定发生读事件的通信节点。
[0094] 步骤S811,通信代理节点判断上次数据是否接收完毕,如果判断结果为是,则执行步骤S812;否则执行步骤S813。
[0095] 步骤S812,通信代理节点接收新消息数据
[0096] 步骤S813,通信代理节点继续接收上次的消息数据,并执行步骤S814。
[0097] 步骤S814,通信代理节点判断接收完毕来自通信节点的所有数据包,如果判断结果为是,则读事件处理结束;否则执行步骤S815。
[0098] 步骤S815,通信代理节点判断接收到的数据是否为单播消息,如果为单播数据,则执行步骤S816;否则执行步骤S819。
[0099] 步骤S816,通信代理节点判断接收端的通信节点是否已经注册,如果已经注册,则执行步骤S817;否则执行步骤S818。
[0100] 步骤S817,通信代理节点将数据包515插入接收端通信节点101的待发送数据包队列506,数据包队列506达到一定长度后,阻塞发送端的通信节点,并执行步骤S809。
[0101] 步骤S818,通信代理节点将数据包602插入未注册通信节点队列601,并执行步骤S809。
[0102] 步骤S819,通信代理节点遍历通信节点队列501,对每个同组的通信节点101增加对广播数据包的引用计数,插入到通信节点待发送数据包队列506中,并执行步骤S809。
[0103] 图9是根据本发明实施例的通信代理节点写事件的处理流程图,如图9所示,主要步骤描述如下:
[0104] 步骤S901,通信代理节点遍历通信节点队列,判断是否遍历完毕,如果遍历完毕,表示写事件处理结束,流程结束;否则执行步骤S902。
[0105] 步骤S902,通信代理节点确定发送写事件的通信节点。
[0106] 步骤S903,通信代理节点判断上次消息数据是否发送完毕,如果发送完毕,则执行步骤S905;否则执行步骤S904。
[0107] 步骤S904,通信代理节点继续发送上次消息的剩余数据,并执行步骤S906。
[0108] 步骤S905,通信代理节点发送新消息的数据。
[0109] 步骤S906,通信代理节点判断消息数据是否发送完毕,如果发送完毕,则执行步骤S901,否则执行步骤S907。
[0110] 步骤S907,通信代理节点将数据包的引用递减,如果没有被任何通信节点使用,则释放该数据包,转步骤S901。
[0111] 通过上述处理,能够借助编程得到的通信链路以及节点来实现数据传输的仿真,避免数据传输仿真单纯地依赖于实际单板以及其间的特定硬件,能够在不改变原有的通信API接口的情况下达到链路层功能仿真的目的,从而有效缩短设备开发的周期,提高设备开发的速度,提高设备开发效率。
[0112] 图10是根据本发明实施例的数据通道的仿真系统的组成结构图,如图10所示,该数据通道的仿真系统包括:
[0113] 建立模块1,用于建立通信代理节点和多个用于仿真设备或设备功能的通信节点;
[0114] 仿真模块2,用于仿真多个通信节点中的任意两个通信节点通过通信代理节点所进行的数据传输,其中,对于每个通信节点,通信节点与通信代理节点之间存在编程得到的通信链路;仿真模块2还用于为通信代理节点和多个通信节点分别建立套接字,并为通信节点与通信代理节点之间仿真建立基于套接字的传输控制协议链路,其中,通信代理节点上的套接字与通信节点上的套接字一一对应。
[0115] 图10所示的系统可以对图2所示的通信系统实现仿真。其中,图2所示的通信节点与通信代理节点以及其间的通信链路可以通过仿真编程得到,从网络层面看,可将通信代理节点202视为由n个虚拟局域网构成的网络集合,其中,通信代理102还可以是集中控制器,用于管理所有的虚拟局域网以及所有的注册通信节点101。每个通信节点只能连接到一个虚拟局域网上,且归属于同一虚拟局域网上的多个通信节点之间才能互相通信,通信节点发送组播数据时,归属于同一虚拟局域网内的通信节点才能接收到数据。
[0116] 为了借助图10所示的系统实现仿真,需要通信节点101能够完成设备的初始化操作、读数据、写数据、关闭设备的功能。具体地,在设备的初始化过程中,通信节点101用于指定通信节点的地址、节点所在的通信组(相当于局域网),通信代理节点运行时的IP地址;用于通信节点主动与通信代理节点202建立TCP连接,成功后通信节点将自己的属性信息(例如通信节点的地址、通信节点的通信组号)发送给通信代理节点202,以在通信代理节点上进行注册,一般来说,每个通信节点只能注册一次;通信节点101还用于提供两种读写数据模式:轮询模式和中断模式,应用轮询模式读写数据时,通信节点会主动读取数据,每次返回实际读取的数据,而不是指定的数据长度;应用中断模式读取数据时,需要在设备初始化时传递应用编写的回调函数,通信节点101接收到一个完整的数据包后,调用回调函数将数据包传递给应用处理,一般来说,通信节点只能使用轮询模式和中断模式中的一种来读写数据;通信节点101可以以点对点的方式发送数据,也可以组播的方式发送数据,一般来说,只有在同一个通信组的通信节点才能接收组播数据,通信代理节点202会根据通信节点的注册信息对组播数据进行处理。
[0117] 此外,还需要通信代理节点202能够管理通信节点、转发数据、控制通信节点流量。具体地,通信代理节点202建立通信节点队列,保存所有通信节点的注册信息、TCP连接信息、通信节点的数据。通信代理节点还需要为已注册的通信节点均建立一个节点数据队列,用于缓存来自通信节点的数据,通信代理节点202还会建立一个未注册节点的数据队列,这样,未注册的通信节点接收通信代理节点转发的数据时,通信代理节点202可以将该数据缓存在未注册节点的数据队列中,当通信节点注册成功后,通信代理节点202可再将缓存在未注册节点的数据队列中的数据转发给通信节点。例如,在通信代理节点202上已注册的通信节点个数为n个,则在通信代理节点202中,共存在(n+1)个数据队列。当通信代理节点202检测到通信节点的节点数据队列中的数据队列长度大于或等于长度阈值后,会将该通信节点的节点数据队列阻塞,当该队列中的数据队列长度小于该长度阈值时,会将该通信节点的节点数据队列解阻塞,以实现流量控制功能。通信代理节点202接收到通信节点的组播数据后,会将该组播数据发送给与该通信节点归属于同一个通信组的其他所有通信节点,即与该通信节点同一通信组的通信节点都保留一份对该数据的引用,以实现组播功能。通信代理节点202对所有注册的通信节点的TCP连接进行监听,检查通信节点发生的读事件、写事件,当通信节点被阻塞时,通信代理节点只检测该通信节点的写事件,而不检测该通信节点的读事件。
[0118] 基于以上所述的通信代理节点和通信节点的各个功能,根据本实施例的数据通道的仿真系统可以实现方法实施例中各流程所给出仿真处理,具体过程之前已经描述,这里不再重复。
[0119] 图10是与前面方法对应的系统,系统的工作过程以及工作原理在方法部分已经进行了详细描述,在此不再赘述,参照方法中相应部分的描述即可。
[0120] 借助于本发明的上述技术方案,能够借助编程得到的通信链路以及节点来实现数据传输的仿真,避免数据传输仿真单纯地依赖于实际单板以及其间的特定硬件,能够在不改变原有的通信API接口的情况下达到链路层功能仿真的目的,从而有效缩短设备开发的周期,提高设备开发的速度,提高设备开发效率。
[0121] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。