CN102780613B - 一种分布式设备板间通信的方法与装置 - Google Patents

一种分布式设备板间通信的方法与装置 Download PDF

Info

Publication number
CN102780613B
CN102780613B CN201210208332.XA CN201210208332A CN102780613B CN 102780613 B CN102780613 B CN 102780613B CN 201210208332 A CN201210208332 A CN 201210208332A CN 102780613 B CN102780613 B CN 102780613B
Authority
CN
China
Prior art keywords
communication
rpc
layer
request message
message
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210208332.XA
Other languages
English (en)
Other versions
CN102780613A (zh
Inventor
王夕军
宋显建
肖迎杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Raisecom Technology Co Ltd
Original Assignee
Raisecom Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Raisecom Technology Co Ltd filed Critical Raisecom Technology Co Ltd
Priority to CN201210208332.XA priority Critical patent/CN102780613B/zh
Publication of CN102780613A publication Critical patent/CN102780613A/zh
Application granted granted Critical
Publication of CN102780613B publication Critical patent/CN102780613B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Communication Control (AREA)

Abstract

本发明涉及数字通信领域,特别涉及一种分布式设备中的板间通信方法与装置。主控板内的通信过程包括:通信功能层通过通信接口层接收到上层应用程序下发的接口调用指令后,根据所述接口调用指令携带的控制参数初始封装相应的初始远程过程调用私有协议RPC请求报文,并将初始封装后的初始RPC请求报文发往通信适配层;所述通信适配层根据目的节点地址的硬件类型对接收的初始RPC请求报文做出进一步封装后,将获得的RPC请求报文发往通信驱动层;所述通信驱动层将接收到的RPC请求报文发往相应的被控板卡,令被控板卡按照接收的RPC请求报文执行相应操作。本发明实施例可以避免浪费应用层的处理资源。

Description

一种分布式设备板间通信的方法与装置
技术领域
本发明涉及数据通信技术领域,特别涉及一种分布式设备板间通信的方法与装置。
背景技术
目前市场上的分布式设备主要为机框式设备,机框式设备一般由主控板卡(简称主控板)与业务板卡组成。通常情况下机框式设备中的业务板卡数目较多,并且包含的业务板卡类型、通信类型也不一致。
机框式设备中主控板承担着对整个设备与各个业务板卡的配置与管理工作,所以主控板与业务板卡之间存在着大量的板间信息交互。
目前板间信息交互过程是由应用层控制的,现有技术中,由于一般的机框式设备都支持不同类型的业务板卡混插,每当主控板需要与一种类型的业务板卡进行信息交互时,应用层需要根据该业务板卡的硬件类型构建一种对应的报文请求代码,并通过硬件通道将该报文请求代码发送到该业务板卡上。这样,在主控板需要与不同类型的业务板卡进行信息交互式时,应用层必须根据业务板卡的硬件类型构建不同的报文请求代码,因此就会导致主控板与不同的业务板卡进行信息交互时,需要由应用层构建不同的报文请求代码,使得应用层管理主控板与不同的业务板卡之间进行信息交互的过程较为复杂,且交互效率降低,并会浪费应用层的处理资源。
现有技术中,应用层在将主控板需要进行信息交互的请求发送到相应的业务板卡之后,无法知晓该业务板卡是否收到该报文请求,并且也无法立即获取到该报文请求的应答报文,只能等到应用层的驱动任务模块收到该业务板卡通过硬件通道回应的数据包后,应用层才能知道该业务板卡已经收到该报文请求,并能解析出要使用的数据。
发明内容
本发明实施例提出了一种分布式设备板间通信的方法与装置,用以解决现有技术中存在的应用层管理板间的信息交互的过程复杂、且交互效率低,并会浪费应用层处理资源的问题。
本发明实施例提供的具体技术方案如下:
一种分布式设备中的板间通信方法,主控板内的通信过程,包括:
通信功能层通过通信接口层接收到上层应用程序下发的接口调用指令后,根据所述接口调用指令携带的控制参数初始封装相应的初始远程过程调用私有协议RPC请求报文,并将初始封装后的初始RPC请求报文发往通信适配层;
所述通信适配层根据目的节点地址的硬件类型对接收的初始RPC请求报文做出进一步封装后,将获得的RPC请求报文发往通信驱动层;
所述通信驱动层将接收到的RPC请求报文发往相应的被控板卡,令被控板卡按照接收的RPC请求报文执行相应操作。
一种分布式设备中的板间通信方法,被控板卡接收主控板按照本发明实施例中的方法发送的初始远程过程调用私有协议RPC请求报文后,被控板卡内的通信过程,包括:
通信驱动层接收所述RPC请求报文并上传至通信适配层;
所述通信适配层剥离所述RPC请求报文的驱动报文头,上传至通信功能层;
所述通信功能层根据所述被剥离驱动报文头的RPC请求报文执行相应操作。
本发明有益效果如下:
本发明实施例中通过将不同硬件类型的被控板卡需要的通信协议类型封装在采用统一格式的初始RPC报文外的驱动报文头中,使得板间的信息交互可以通过本发明实施例中的设计的统一的应用层接口协议(即RPC远程过程调用私有协议)进行,简化了应用层管理板间的信息交互的过程,避免浪费应用层的处理资源,解决了现有技术中板间的信息交互方式单一的问题,提高了板间的信息交互的效率。
本发明实施例提出了一种分布式设备板间通信的方法与装置,采用统一的应用层接口协议,成功向应用层屏蔽了板件请求报文与应答报文的组装、解析以及传送过程,使得应用层仅通过简单的接口调用指令就可以调用板卡,管理板间的信息交互,使得管理板间的信息交互的代码的构建不需依据板卡的硬件信息,可以复用移植,节省了应用层的处理资源和处理时间,并且使得板间的信息交互支持多种交互方式,提高了主控板与其他板卡之间的信息交互效率,解决了现有技术中应用层管理板间信息交互的过程不易维护并且交互方式单一的问题。
本发明实施例中的,同步交互方式可以简化应用层的分布式管理实现,使得调用者可将分布式设备像盒式设备一样管理,异步交互方式使得请求线程不用等待应答报文返回,直接将请求报文已发送的信息传递给应用层,提高系统运行的性能和效率。
附图说明
图1为本发明实施例中的通信装置层次图;
图2A为本发明实施例中客户端的通信装置详细层次图;
图2B为本发明实施例中服务器端的通信装置详细层次图;
图3为本发明实施例中的RPC私有报文格式;
图4为本发明实施例中主控板A对单板B同步请求某功能的通信过程;
图5为本发明实施例中单板B处理同步请求的实现过程;
图6为本发明实施例中主控板A对单板B异步请求某功能的通信过程,该异步请求需要应答;
图7为本发明实施例中单板B处理异步请求的实现过程;
图8为本发明实施例中主控板A对单板B进行不需要应答的异步请求某功能的实现过程;
图9为本发明实施例中单板B处理不需要应答的异步请求的过程。
具体实施方式
本发明实施例设计了一种RPC(RemoteProcedureCallProtocol,远程过程调用协议)私有协议,用于板间的信息交互,通过将不同硬件类型的被控板卡需要的通信协议类型封装在采用统一格式的初始RPC报文外的驱动报文头中,以达到应用层通过统一的接口协议调用板卡的目的,使得应用层不需根据被管板卡类型和通信类型进行板间的信息交互管理操作,简化了应用层管理板间的信息交互的过程,避免浪费应用层的处理资源。
本发明实施例设计了一种分布式设备板间通信的方法,为板间的信息交互提供了可供选择的信息交互方式,包括一种同步交互方式和两种异步交互方式,同步交互方式可以简化应用层的分布式管理实现,使得调用者可将分布式设备像盒式设备一样管理,异步交互方式使得请求线程不用等待应答报文的返回,直接将请求报文已发送的消息传递给应用层,提高系统运行的性能和效率。
下面结合说明书附图对本发明实施例作进一步详细描述。
本发明实施例中设计了一种分布式设备板间通信的装置,可以向应用层屏蔽请求报文与应答报文的组装、解析、以及传送过程。
本发明实施例中的装置可应用于分布式设备中的主控板和具有CPU(CentralProcessingUnit,中央处理器)的单板之间的信息交互过程,这两种板卡之间通过硬件通道相连,本发明实施例将与主控板进行信息交互的单板称作被控板卡。由于目前市场上的分布式设备主要为机框式设备,因此,若将本发明实施例中的装置应用于机框式设备中,机框式设备的业务板卡就作为具有CPU的单板与主控板之间进行信息交互。
参阅图1所示,本发明实施例中的装置可分为四个层次,包括:通信接口层、通信功能层、通信适配层和通信驱动层。
本发明实施例中客户端的装置的详细层次结构如图2A所示,其中:
通信适配层和通信驱动层不变,与图1一致;
通信接口层分为两个模块,包括通信同步调用接口模块、通信异步调用接口模块;
本发明实施例中服务器端的装置的详细层次结构如图2B所示,其中:
通信适配层和通信驱动层不变,与图1一致;
通信接口层分为三个模块,包括通信同步调用接口模块、通信异步调用接口模块和注册模块,服务器端的注册模块用于注册回调函数;
客户端Client的通信功能层与服务器端Server的通信功能层的功能和实现都不相同。本发明实施例中,以主控板作为客户端主动对某一业务板卡发起通信,该业务板卡简称为被控板卡,被控板卡作为服务器端处理主控板的请求。
本发明实施例中板间的信息交互采用RPC私有协议通信,本发明实施例中涉及的请求报文与应答报文都采用RPC私有报文格式,并且将本发明实施例中的主控板发起通信请求的过程简称为RPC请求,同步的RPC请求过程简称为同步请求,异步的RPC请求过程简称为异步请求,被控板卡的应答过程简称为RPC应答。
本发明实施例中设计的RPC私有报文格式如附图3所示,包括RPC报文头和RPC报文体两部分:
报文体承载板间的信息交互过程中的内容(即主控板与被控板卡之间传输的信息),通信功能层将接口调用指令中的输入参数地址中的内容(即输入参数)封装进RPC请求报文的报文体中,将被控板卡需要返回的内容(该内容即输出参数,存放在输出参数地址中)封装进RPC应答报文的报文体中;
其中,RPC报文头又包括RPC头版本、控制标志、RPC报文头长度、RPC报文体长度、目的节点地址、源节点地址、对象标志/操作码、返回码和报文序列号。
RPC头版本大小为3bit(比特)。
控制标志的大小为5bit,可按顺序分为三段:第一段BIT0是请求/应答标记,表示该报文是RPC请求报文还是RPC应答报文;第二段BIT1表示是否需要应答;第三段BIT2-BIT4现阶段保留,可以用来扩展其他功能。
RPC报文体长度的大小为2Byte(字节),RPC报文体长度一般存在最大长度限制。
目的节点地址的大小为4Byte,可表明指定板卡或者指定板卡的端口或者更远端的设备的地址,目的节点地址格式可以按照图3中的顺序进行定义,即节点类型(3bit)、子架ID(Identity,身份标识码)(3bit)、子架槽位ID(5bit)、上端端口ID(6bit)、RPCtype(RemoteProcedureCallProtocoltype,私有远程过程调用协议类型)(3bit)、App(application,应用)type(4bit);目的节点地址格式也可以自定义(例如,按照节点类型、RPCtype、子架ID、子架槽位ID、上端端口ID、Apptype的顺序,或者采取其他格式),保持目的节点地址大小为32bit即可。
源节点地址的大小为4Byte,源节点的地址格式可以按照目的节点地址格式设定。
对象标识/操作码的大小为2Byte,是全局唯一的OPCODE(操作码)变量,每一个OPCODE对应一个具体的功能。
返回码的大小为2Byte,是RPC请求的返回值。
报文序列号的大小为2Byte,是RPC请求时RPC主控板模块自动生成的,用于应答的匹配。接收端可以不用自动生成报文序列号,在发送RPC应答报文时直接复制该报文序列号的值即可。
本发明实施例中的RPC私有报文格式可用于多种应用中的进程通信,根据应用的不同可以对报文地址、格式进行自定义修改。
一、本发明实施例中的主控板的通信接口层、通信功能层、通信适配层和通信驱动层的功能和实现如下:
上层应用程序通过接口调用指令调用通信接口层的接口,主控板的通信接口层的接口分为同步调用接口和异步调用接口两种。
上层应用程序调用该同步调用接口的接口调用指令简称为同步调用指令,该接口调用指令中携带的控制参数至少包括:
目的节点地址,用于存储所述相应的被控板卡地址;
操作码OPCODE,用于指示所述主控板请求的功能类型;
输入参数地址,用于存储所述主控板传输给所述被控板卡的内容;
输出参数地址,用于通知所述相应的被控板卡存储返回内容的地址;
其中操作码OPCODE被称为功能参数,输入参数地址用于存放输入参数(即封装入RPC请求报文的报文体的内容),输出参数地址用于存放输出参数(即封装入RPC应答报文的报文体的内容)。将同步调用指令中的控制参数封装入RPC请求报文中使得主控板根据目的节点地址发送RPC请求报文,通过操作码OPCODE向被控板卡请求一个对应的功能,将传输给被控板卡的内容存储在输入参数地址中,并令被控板卡将返回的内容存储在输出参数地址中。
同步调用接口被上层应用程序调用时的板间的信息交互过程是同步信息交互过程,在此过程中,主控板需要等待接收被控板卡回复的应答,主控板的处理过程如下:
主控板根据同步调用指令的控制参数,生成一个同步的RPC请求报文,该RPC请求报文的“控制标志”的BIT0段内容表示“请求”,BIT1段内容表示“需要应答”,“对象标识/操作码”中的信息则会对应一个同步的功能,即对应控制参数中的OPCODE功能参数;在主控板发送出该同步的RPC请求报文后,主控板的通信功能层阻塞上层应用程序的请求线程。
综上所述,在上层应用程序下发的接口调用指令携带的控制参数表明主控板需要等待被控板卡的应答,并且指示进行同步信息交互时,主控板的通信功能层通过通信接口层接收到上层应用程序下发的接口调用指令后,主控板的通信功能层创建初始为空的互斥信号量,生成全局唯一的报文序列号,将该同步调用指令的控制参数、该互斥信号量以及该报文序列号保存到SESSION库(会话信息库)中,注册SESSION库的信息大致包括:
nSerialNum表示RPC调用序列号,是RPC请求过程中生成的全局唯一的报文序列号,用于接收到RPC应答报文的匹配;
dwTimeout表示超时时间;
ponrpcAddrDst表示目的节点地址;
opcode表示操作码;
flags表示是同步调用还是异步调用;
semSync表示互斥信号量;
pPacketResponse表示存储输出参数的地址(上层应用程序提供);
nRpcLen表示能接收的输出参数的长度(上层应用程序提供)。
除本实施例列举的上述注册SESSION库的信息外,还可根据应用环境对注册SESSION库的信息做出适应性修改。
注册SESSION库后,根据该接口调用指令携带的控制参数初始封装相应的初始远程过程调用私有协议RPC请求报文,并将初始封装后的初始RPC请求报文发往通信适配层,在主控板的通信功能层将初始RPC请求报文发往通信适配层后,阻塞上层应用程序,等待被控板卡的应答;如果过了同步调用指令的控制参数中指示的超时时间,该通信功能层仍没有收到该RPC请求报文对应的剥离驱动报文头的RPC应答报文,该通信功能层则组装RPC请求超时的错误码并通过通信接口层返回给上层应用程序。
在本发明实施例的同步调用过程中,主控板创建互斥信号量,只有当被控板卡返回对应该请求的应答报文后,才给该互斥信号量赋值,并将该被赋值的互斥信号量返回给上层应用程序,而上层应用程序在获取到该互斥信号量之前,请求线程不返回,从而达到阻塞请求线程将同步信息交互完成的结果反馈给上层应用程序的目的。上层应用程序调用同步请求接口后,主控板的通信功能层创建初始为空的互斥信号量,上层应用程序等待该互斥信号量被赋值后,获取该互斥信号量。主控板的通信功能层获取到该RPC请求报文对应被剥离驱动报文头的应答报文后,根据应答报文中的信息查找出对应的RPC请求,并对该RPC请求对应的初始为空的互斥信号量赋值,并释放该被赋值的互斥信号量,这样,上层应用程序获取到该被赋值的互斥信号量,然后,主控板的通信功能层删除SESSION库中保存的该被赋值的互斥信号量,本次同步请求线程返回,将同步信息交互完成的结果以及RPC应答报文中的信息反馈给上层应用程序的目的。由此可见,本发明实施例通过互斥信号量的释放与获取达到任务交互的目的。
上层应用程序调用异步调用接口的接口调用指令简称为异步调用指令,该接口调用指令中携带的控制参数至少包括:
目的节点地址,用于存储所述相应的被控板卡地址;
操作码OPCODE,用于指示所述主控板请求的功能类型;
输入参数地址,用于存储所述主控板传输给所述被控板卡的内容;
输出参数地址,用于通知所述相应的被控板卡存储返回内容的地址;
回调函数,用于处理RPC应答报文,其中操作码OPCODE被称为功能参数,输入参数地址用于存放输入参数(即封装入RPC请求报文的报文体的内容,主控板发送给被控板卡的信息的具体内容),输出参数地址用于存放输出参数(即封装入RPC应答报文的报文体的内容,被控板卡返回给主控板卡的信息的具体内容),回调函数用于处理被控板卡返回的异步请求对应的应答报文。将异步调用指令的控制参数封装入RPC请求报文中使得主控板根据目的节点地址发送RPC请求报文,通过操作码OPCODE向被控板卡请求一个对应的功能,将传输给被控板卡的内容存储在输入参数地址中,并令被控板卡将返回的内容存储在输出参数地址中,以及使得主控板在收到RPC应答报文后,调用回调函数处理RPC应答报文。
其中,不需要应答的异步调用指令的回调函数和超时时间均为空。
异步调用接口被上层应用程序调用时的板间的信息交互过程是异步信息交互过程,在此过程中,主控板需要根据上层应用程序的异步调用指令的功能参数判断是否需要等待应答的返回:
当该异步调用指令的控制参数指示本次请求不需要应答时,主控板生成一个异步的RPC请求报文,该RPC请求报文的“控制标志”的BIT0段内容表示“请求”,BIT1段内容表示“不需要应答”,“对象标识/操作码”中的信息则会根据功能参数OPCODE对应一个不需要应答的异步的功能,主控板将该RPC请求信息发送出去,不等待接收该请求的处理结果;
当该异步调用指令的控制参数指示本次请求需要应答时,主控板生成一个异步的RPC请求报文,该RPC请求报文的“控制标志”的BIT0段内容表示“请求”,BIT1段内容表示“需要应答”,“对象标识/操作码”中的信息则会根据功能参数OPCODE对应一个需要应答的异步的功能,主控板在发送RPC请求的同时注册回调函数,主控板收到该请求的应答报文后,会调用该回调函数,达到异步调用的目的。
除本实施例列举的上述表示操作类型,以及是否需要应答等操作的方式外,还可根据应用环境对表示操作类型以及操作方式进行适应性修改。
在上述异步信息交互过程中,主控板的通信功能层通过通信接口层接收到上层应用程序下发的接口调用指令后,根据该接口调用指令携带的控制参数初始封装相应的初始远程过程调用私有协议RPC请求报文,并将初始封装后的初始RPC请求报文发往通信适配层。若该异步调用指令携带的控制参数表明主控板需要等待被控板卡的应答,则在封装初始RPC报文之前,主控板的通信功能层生成全局唯一的报文序列号,将该异步调用指令的控制参数和该报文序列号保存到SESSION库(会话信息库)中,注册SESSION库,注册SESSION库的信息大致包括:
nSerialNum表示RPC调用序列号RPC请求对应的全局唯一的报文序列号,用于接收到RPC应答报文的匹配;
dwTimeout表示超时时间;
ponrpcAddrDst表示目的节点地址;
opcode表示操作码;
flags表示是同步调用还是异步调用;
callbace表示回调函数(上层应用程序提供);
callback_cookie表示回调函数的参数(上层应用程序提供)。
除本实施例列举的上述注册SESSION库的信息外,还可根据应用环境对注册SESSION库的信息做出适应性修改。
主控板的通信功能层对于需要应答的异步调用的超时处理是这样的:在主控板的通信功能层将初始RPC请求报文发往通信适配层后,如果过了异步调用指令的控制参数指示的超时时间,该通信功能层仍没有收到该RPC请求报文对应的被剥离驱动报文头的RPC应答报文,该通信功能层则组装RPC请求超时的错误码并通过通信接口层返回给上层应用程序。
主控板的通信功能层在维护一个SESSION库的同时,监控2个事件,包括RPC应答事件和1秒轮询事件。
主控板的通信功能层维护SESSION库的过程为:在某次请求需要应答时,主控板的通信功能层会将该需要应答的请求的信息保存在在SESSION库中,用以保证被控板卡返回RPC应答报文时可以正确匹配。
因为SESSION库中保存着需要应答的RPC请求,主控板的通信功能层的一个主要任务为监控RPC应答事件:主控板的通信驱动层在收到其他板卡发送的RPC报文后,上传至通信适配层,通信适配层剥离该RPC报文的驱动报文头,并将被剥离驱动报文头的报文上传至通信功能层,主控板的通信功能层判断出通信驱动层接收到的报文为RPC报文后,根据该RPC报文的报文头中“控制标志”的BIT0段对该RPC报文进行判断,若该段内容为“应答”,则判断该RPC报文是RPC应答报文,将该RPC应答报文中携带的“报文序列号”中的信息与本端的SEESION库中的信息进行匹配,将结果反馈给发送该RPC请求的上层应用程序。
因为同步调用和异步调用都存在超时机制,所以主控板的通信功能层的另一个主要任务为监控1秒轮询事件:所有主控板每隔一秒钟维护一次SESSION库,清除那些过了超时时间仍没有RPC应答的记录,1秒轮询事件可以在目标板卡通信故障或者没有正确返回该RPC请求的应答时,保证RPC请求的流程正常进行。
主控板通信适配层位于通信功能层与通信驱动层之间,通信适配层的主要功能包括:
在主控板发送报文时,通信适配层提供给通信功能层报文发送接口,报文发送接口按照目的节点地址需要的通信协议的类型分类(在本实施例中可以根据目的节点地址中的节点类型、RPCtype、Apptype等信息获知),例如,串口通信、HDLC(High-LevelDataLinkControl,高级数据链路控制)、以太网等协议。硬件类型不同的被控板卡(即目的节点地址)需要的通信协议不同。通信适配层一般会按照目的节点地址的通信协议的要求在初始RPC请求报文外面在组装一层驱动报文头,进一步将初始RPC请求报文组装成RPC请求报文,然后调用该通信协议对应的通信驱动层的报文发送函数;
在主控板接收报文时,通信适配层接收通信驱动层获取后上传的报文,剥离接收到的报文的驱动报文头,将被剥离驱动报文头的报文上传至通信功能层。
主控板的通信驱动层,它的作用主要有接收报文与发送报文。在主控板发送RPC请求报文时,通信驱动层负责按照目的节点地址的硬件类型发送该RPC请求报文,通信驱动层还具有接收报文以及将接收到的报文上传至通信适配层的功能。
在主控板的通信驱动层将接收到的RPC请求报文发往相应的被控板卡之后,结束当前流程之前,进行下列步骤,包括:若该接口调用指令为同步调用指令,则该通信驱动层接收到述被控板卡返回的RPC应答报文后上传至通信适配层剥离驱动报文头,再并上传给通信功能层,该通信功能层将根据该被剥离驱动报文头的RPC应答报文的内容匹配SESSION库的结果通过通信接口层转达给上层应用程序;
或者,若该接口调用指令为异步调用指令且指示需要接收被控板的应答,则该通信驱动层接收到该被控板卡返回的RPC应答报文后上传至通信适配层剥离驱动报文头,再上传给通信功能层,该通信功能层根据该剥离驱动报文头的RPC应答报文的内容匹配SESSION库,根据匹配结果判断该RPC应答报文是否为异步的RPC应答报文,若是,则调用回调函数;否则,按处理同步请求过程中的被剥离驱动报文头的RPC应答报文的方式处理该被剥离驱动报文头的RPC应答报文,即主控板A的通信功能层解析出该报文不是异步请求的被剥离驱动报文头的RPC应答报文后,根据该被剥离驱动报文头的RPC应答报文中“报文序列号”的内容,从SESSION库中查找对应的RPC请求信息,匹配SESSION库,判断SESSION库中能否查找到对应的RPC请求信息,若能,主控板A的通信功能层根据该被剥离驱动报文头的应答报文的信息对该RPC请求对应的互斥信号量赋值,并释放该被赋值的互斥信号量,处理该被剥离驱动报文头的RPC应答报文中的内容,将该被剥离驱动报文头的RPC应答报文中的信息放置到上层应用程序提供的pPacketResponse地址中,然后删除该互斥信号量;否则进行其他处理,例如,丢弃该报文或者将该报文定义为非法报文。
除本实施例列举的上述判断该RPC应答报文是否为异步的RPC应答报文和后续操作的方式外,还可根据应用环境对表示报文类型、操作类型以及操作方式的字段和信息存放地址进行适应性修改。
二、本发明实施例中的被控板卡的通信接口层、通信功能层、通信适配层和通信驱动层的功能和实现如下:
被控板卡的通信接口层提供给上层应用程序调用的OPCODE注册接口,OPCODE注册功能是针对全局唯一的操作码OPCODE,注册该OPCODE对应的函数,是由本发明实施例中被控板卡提供给上层应用程序的。当被控板卡接收到该OPCODE对应的RPC请求报文时,调用对应的OPCODE函数,运行该函数,并且将结果返回至上层应用程序。
被控板卡接收主控板按照本发明实施例中的方法发送的RPC请求报文后,被控板卡内的通信过程,包括:通信驱动层接收该RPC请求报文并上传至通信适配层;该通信适配层剥离该RPC请求报文的驱动报文头,上传至通信功能层;该通信功能层根据该被剥离驱动报文头的RPC请求报文执行相应操作。
被控板卡的通信功能层在接收该RPC请求报文之前,通过被控板卡的通信接口层接收到上层应用程序下发的接口调用指令后,执行功能注册函数,将该接口调用指令携带的控制参数中的功能参数注册到操作码OPCODE注册表中。
被控板卡的通信功能层接收到该RPC请求报文时,查找OPCODE注册表中对应的函数的信息,并通知被控板卡的通信接口层调用该函数,该通信接口层调用并执行该函数后,根据执行结果(包括输出参数地址等)获取信息(包括输出参数等信息)并返回给通信功能层,通信功能层根据通信接口层返回的的信息(包括输出参数等信息)封装初始RPC应答报文,封装过程中,通信功能层将输出参数(即该输出参数地址中的内容)封装入初始RPC应答报文的报文体中,并根据目的节点地址的硬件类型在通信适配层作进一步封装后,通过通信驱动层发送至主控板;若被控板卡的通信功能层在注册表中找不到“对象标识/操作码”中的内容(即OPCODE)对应的函数,则直接将该OPCODE不支持的错误码封装到初始RPC应答报文中。
被控板卡的通信功能层主要负责监控其他板卡的RPC请求事件,同时维护一个注册表。
该注册表的KEY(索引)为全局唯一的操作码OPCODE,OPCODE对应上层应用程序需要实现的一个功能,该注册表维护的是该OPCODE对应的功能实现的函数。被控板卡的通信接口层提供OPCODE注册接口,在系统初始化时由上层应用程序按实现功能分别注册进入该注册表。
被控板卡通信功能层的一个主要任务为监控RPC请求事件:被控板卡的通信功能层接收到被控板卡的通信驱动层转发上来的其他板卡的发出的RPC请求,该RPC请求中包含一个操作码OPCODE,用以表示该RPC请求的目的,然后,被控板卡的通信功能层会检查维护本端的注册表,并调用RPC请求中的操作码OPCODE所指定的函数(简称某个OPCODE的调用函数),然后根据该RPC请求报文中“控制标记”的BIT1段的内容判断是否需要应答,若“控制标记”的BIT1段内容表示需要应答,则获取该OPCODE的调用函数执行后的内容,重新组装报文,并且将重新组装的报文发送给发送该RPC请求报文的主控板(即源节点),主控板的地址信息可以在该RPC请求报文中的“源节点地址”段获取。
该OPCODE的调用函数是根据上层应用程序的接口调用指令的控制参数中的操作码OPCODE功能参数注册的,并且该函数的执行时间是不可控制的,如果某个OPCODE的调用函数执行时间较长,为了不影响其他RPC请求的处理,在注册OPCODE的同时,上层应用程序可注册一个消息队列,此时被控板卡的通信驱动层会将该OPCODE的RPC请求事件转发到指定的消息队列中,由应用层对该OPCODE的调用函数进行初步处理。通信功能层负责将消息队列中的请求的OPCODE的调用函数执行后的内容进行处理,组装成报文,发送给该RPC请求的源节点地址。
被控板通信适配层位于通信功能层与通信驱动层之间。被控板卡的通信适配层与主控板的通信适配层的功能与实现都相同。所有板卡的通信适配层都是在发送报文时,根据目的节点地址需要的通信协议类型在通信功能层组装的初始RPC应答报文外组装一层驱动报文头,调用通信驱动层的报文发送函数;在接收报文时,剥离通信驱动层接收后上传至通信适配层的报文的驱动报文头,并将被剥离驱动报文头的报文上传至通信功能层。
在接收报文和发送报文时,被控板卡通信适配层的具体实现如下:
在被控板卡接收报文时,通信适配层接收通信驱动层获取后上传的报文,剥离接收到的报文的驱动报文头,将被剥离驱动报文头的报文上传至通信功能层;
在被控板卡发送报文时,通信适配层提供给通信功能层报文发送接口,报文发送接口按照目的节点地址需要的通信协议的类型分类,例如,串口通信、HDLC(High-LevelDataLinkControl,高级数据链路控制)、以太网等协议。通信适配层一般会按照该通信协议的要求在初始RPC应答报文外面在组装一层驱动报文头,进一步将初始RPC应答报文组装成RPC应答报文,然后调用该通信协议对应的通信驱动层的报文发送函数。
被控板卡的通信驱动层与主控板的通信驱动层的功能与实现相同,负责接收报文,以及按照目的节点地址发送报文。在被控板卡的通信驱动层接收到报文,将接收到的报文上传至通信适配层的功能;在被控板卡发送RPC应答报文时,通信驱动层负责按照目的节点地址的硬件类型发送该RPC应答报文
下面以主控板A与单板B(有CPU)通信为例详细阐述本发明设计的方法。本发明实施例中主控板A主动发起RPC请求,单板B作为被控板卡处理主控板A的RPC请求。
一、本发明中的同步请求实施例
以主控板A对单板B同步请求某功能为例,详细描述该通信过程,在此同步请求过程中将该功能对应的操作码OPCODE定义为opcode-1。
主控板A的同步请求调用的实现过程,参阅图4。
步骤401:上层应用程序通过同步调用指令调用同步调用接口,该调用指令包含控制参数:目的节点地址、OPCODE、输入参数地址、输出参数地址、超时时间,其中操作码OPCODE为功能参数。
步骤402:主控板A的通信功能层收到该同步请求,即收到同步调用指令,创建空的互斥信号量。
步骤403:主控板A的通信功能层生成全局唯一的报文序列号。
步骤404:主控板A的通信功能层将步骤402中收到的请求信息,即同步调用指令的控制参数以及步骤403中生成的报文序列号,保存在SESSION库中,注册SESSION库,注册SESSION库的信息大致包括:
nSerialNum表示RPC调用序列号RPC请求过程中生成的全局唯一的报文序列号,用于接收到RPC应答报文的匹配;
dwTimeout表示超时时间;
ponrpcAddrDst表示目的节点地址;
opcode表示操作码;
flags表示是同步调用还是异步调用;
semSync表示互斥信号量;
pPacketResponse表示存储输出参数的地址(上层应用程序提供);
nRpcLen表示能接收的输出参数的长度(上层应用程序提供)。
步骤405:主控板A的通信功能层组装初始RPC请求报文,该报文按本发明实施例中设计的RPC私有报文格式组装,通信功能层将上层应用程序的同步调用指令的控制参数以及步骤403生成的报文序列号封装到初始RPC请求报文中,因此,该初始RPC请求报文在“控制标志”的BIT0段表明这是一个请求报文,在“对象标识/操作码”内容中表明这是一个同步请求,在“控制标志”的BIT1段表明该同步请求需要应答,在“报文序列号”中储存着该RPC请求报文对应的全局唯一的报文序列号。
步骤406:主控板A的通信功能层调用通信适配层提供的报文发送接口,将初始RPC请求报文发往通信适配层,主控板A的通信功能层进行步骤407,通信适配层进行步骤408。
步骤407:主控板A的通信功能层等待上层应用程序获取互斥信号量,此时,上层应用程序因为还未获取互斥信号量会被阻塞,直至被控板卡回复应答。
步骤408:主控板A的通信适配层在该初始RPC请求报文外面增加一层驱动报文头,进一步封装为RPC请求报文,该驱动报文头按照目的节点地址(在此过程中为被控板卡)的硬件类型(即所需通信协议的要求)组装,具体信息在该初始RPC请求报文中“目的节点地址”段的“节点类型”中。
步骤409:主控板A的通信适配层调用通信驱动层的报文发送函数,将获得的RPC请求报文发往通信驱动层。
步骤410:主控板A的通信驱动层按照目的节点地址发送通信适配层组装的RPC请求报文,并等待RPC应答报文的返回,上述目的节点地址的ID、类型、所需通信协议等信息由RPC请求报文中的“目的节点地址”段提供。主控板A的通信驱动层收到报文后转发给通信适配层。
步骤411:主控板A的通信适配层接收到通信驱动层转发的报文。
步骤412:主控板A的通信适配层剥离报文的驱动报文头后,将被剥离驱动报文头的报文上传至通信功能层。
步骤413:主控板A的通信功能层获取到被剥离驱动报文头的报文。
步骤414:主控板A的通信功能层解析被剥离驱动报文头的报文,并判断通信驱动层接收到的报文是否为RPC应答报文。通信功能层可以根据解析出的该报文的内容判断,若解析出该报文的格式是RPC报文格式,并且该报文的“控制标记”BIT0段的内容是“应答”,说明该报文是RPC应答报文,进行步骤416,否则,进行步骤415。
步骤415:主控板A进行其它处理,例如,丢弃该报文或者将该报文定义为非法报文,结束当前流程。
步骤416:主控板A的通信功能层根据该RPC应答报文中“报文序列号”的内容,从SESSION库中查找对应的请求信息,匹配SESSION库。
步骤417:主控板A的通信功能层判断SESSION库中能否查找到对应的请求信息,若能,进行步骤419,否则进行步骤418。
步骤418:主控板A的通信功能层进行其他处理,例如,丢弃该报文或者将该报文定义为非法报文。
步骤419:主控板A的通信功能层根据被剥离驱动报文头的RPC应答报文中的信息将步骤417中查找到的请求信息对应的互斥信号量赋值,释放该互斥信号量,处理该RPC应答报文中的内容,将该RPC应答报文中的信息放置到上层应用程序提供的pPacketResponse地址中。
步骤420:上层应用模块获取到该被赋值的互斥信号量后,可以在pPacketResponse地址中获取到该RPC应答报文中携带的信息,主控板A的通信功能层删除该互斥信号量。
步骤421:该发送本次RPC请求的线程返回,即主控板A的通信功能层通过通信接口层将主控板A对本次同步请求的发送以及对应的RPC应答处理完毕的信息转达给上层应用程序。
至此,主控板A对同步请求与应答过程处理完毕。
在主控板(本实施例中为主控板A)对同步请求与应答的处理过程中,主控板利用一秒轮询事件维护SEESION,如果SEESION库中注册的同步请求超时时间已经到达,主控板也没有收到RPC应答的话,主控板的通信功能层直接释放信号量,返回任务超时的错误码给上层应用程序,这样的机制可以保证在目标板卡异常时板间的信息交互任务的正常进行。
具有CPU的单板B处理同步请求的实现过程如图5所示。
步骤501:单板B作为被控板卡,被控板卡系统初始化,调用通信接口层提供的OPCODE注册函数,将主控板A请求的功能opcode-1与其对应的实现函数注册到单板B的OPCODE注册表中。
步骤502:单板B的通信驱动层获取到报文,上传到单板B的通信适配层。
步骤503:单板B的通信适配层接收到通信驱动层转发的报文。
步骤504:单板B的通信适配层剥离该报文的驱动报文头,并上传至单板B的通信功能层。
步骤505:单板B的通信功能层接收到通信适配层上传的被剥离报文头的报文。
步骤506:单板B的通信功能层判断通信驱动层接收到的报文是否为RPC请求报文(被剥离驱动报文头的RPC请求报文的“控制标志”的BIT0段内容表示“请求”),若是,进行步骤508,否则,进行步骤507。
步骤507:单板B进行其它处理,例如,丢弃该报文或者将该报文定义为非法报文。
步骤508:单板B的通信功能层根据该被剥离驱动报文头的RPC请求报文中的“对象标识/操作码”中的内容(在本同步请求的实施例中为opcode-1)查找注册表。
步骤509:单板B的通信功能层判断是否能在注册表中找到“对象标识/操作码”(即OPCODE)中的内容(在本同步请求的实施例中为opcode-1)对应的函数,若能,进行步骤511,否则进行步骤510。
步骤510:单板B的通信功能层生成该OPCODE不支持的错误码,进行步骤513。
步骤511:单板B的通信功能层通知通信接口层调用存储在通信接口层的opcode-1对应的函数,通信接口层调用并执行该函数,根据执行结果获取信息,该函数的执行结果包括输出参数地址等,根据这些地址可以获取到输出参数等信息,将获取到的包括输出参数在内的信息返回给通信功能层。
步骤512:单板B的通信功能层接收到通信接口层中返回的执行结果后,进行步骤513。
步骤513:单板B的通信功能层根据通信接口层返回的包括输出参数在内的信息封装初始RPC应答报文,封装过程中,将输出参数(即对应该RPC请求的应答内容)封装入报文体中;若步骤509中单板B的通信功能层在注册表中未找到“对象标识/操作码”中的内容(在本同步请求的实施例中为opcode-1)对应的函数,则需要返回该OPCODE不支持的错误码,此时,直接封装返回该错误码的初始RPC应答报文。
步骤514:单板B的通信功能层调用通信适配层提供的报文发送接口。
步骤515:单板B的通信适配层的报文发送接口被调用后,在初始RPC应答报文外增加驱动报文头,进一步封装成RPC应答报文,该报文头按照目的节点地址(在此过程中为主控板)的硬件类型(即所需通信协议的要求)组装,上述硬件类型的具体信息在该初始RPC应答报文中“源节点地址”段的“节点类型”中。
步骤516:单板B的通信适配层调用通信驱动层的报文发送函数。
步骤517:单板B的通信驱动层按照源节点地址发送应答报文至主控板A。
至此,单板B对同步请求与应答过程处理完毕。
二、本发明中的异步通信请求实施例
异步请求分为需要应答的异步请求和不需要应答的异步请求。
下面以主控板A对单板B异步请求某功能为例,详细描述需要应答的异步请求通信过程,该功能对应的OPCODE为opcode-2。
主控板A的需要应答的异步请求调用的实现过程如图6所示。
步骤601:上层应用程序通过异步调用指令调用异步调用接口,该调用指令包含控制参数:目的节点地址、OPCODE、输入参数地址、输出参数地址、回调函数、超时时间,其中操作码OPCODE为功能参数。
步骤602:主控板A的通信功能层生成全局唯一的报文序列号。
步骤603:主控板A的通信功能层将该异步调用指令的控制参数和本次异步请求对应的全局唯一的报文序列号,保存在SESSION库中,注册SESSION库,注册SESSION库的信息大致包括:
nSerialNum表示RPC调用序列号RPC请求对应的全局唯一的报文序列号,用于接收到RPC应答报文的匹配;
dwTimeout表示超时时间;
ponrpcAddrDst表示目的节点地址;
opcode表示操作码;
flags表示是同步调用还是异步调用;
callbace表示回调函数(上层应用程序提供);
callback_cookie表示回调函数的参数(上层应用程序提供)。
步骤604:主控板A的通信功能层将异步调用指令的控制参数封装到初始RPC请求报文中,该报文按本发明实施例中设计的RPC私有报文格式组装,并且该初始RPC请求报文在“控制标志”的BIT0段表明这是一个请求报文,在“对象标识/操作码”内容中表明这是一个异步请求,在“控制标志”的BIT1段表明该异步请求需要应答,在“报文序列号”中储存本次异步请求对应的全局唯一的报文序列号。
步骤605:主控板A的通信功能层调用通信适配层提供的报文发送接口。
步骤606:发送本次RPC请求的线程返回,即主控板A的通信功能层通过通信接口层将本次异步请求的初始RPC请求报文已交由通信适配层和通信驱动层处理发送的信息转达给上层应用程序。
步骤607:主控板A的通信适配层的报文发送接口被调用之后,在该初始RPC请求报文外封装驱动报文头,进一步封装为RPC请求报文,该报文头按照目的节点地址(在此过程中为被控板卡,即单板B)的硬件类型(即所需通信协议的要求)组装,具体信息在该RPC请求报文中“目的节点地址”段的“节点类型”中。
步骤608:主控板A的通信适配层调用通信驱动层的报文发送函数,将获得的RPC请求报文发往通信驱动层。
步骤609:主控板A的通信驱动层按照目的节点地址发送通信适配层组装的RPC请求报文,并等待RPC应答报文的返回,目的节点地址的ID、类型、所需通信协议等信息由RPC请求报文中的“目的节点地址”段提供。主控板A的通信驱动层收到报文后转发给通信适配层。
步骤610:主控板A的通信适配层接收到通信驱动层转发的报文。
步骤611:主控板A的通信适配层剥离该报文的驱动报文头后,将被剥离驱动报文头的报文上传至通信功能层。
步骤612:主控板A的通信功能层获取到被剥离驱动报文头的报文。
步骤613:主控板A的通信功能层判断通信驱动层接收到的报文是否为RPC应答报文,在通信功能层解析之后,若该报文的“控制标记”BIT0段的内容是“应答”,说明该报文是RPC应答报文,进行步骤615,否则,进行步骤614。
步骤614:主控板A的通信功能层进行其它处理,例如,丢弃该报文或者将该报文定义为非法报文,结束当前流程。
步骤615:主控板A的通信功能层根据该被剥离驱动报文头的RPC应答报文中“报文序列号”的内容,从SESSION库中查找对应的请求信息,匹配SESSION库。
步骤616:主控板A的通信功能层在SESSION库中查找到该被剥离驱动报文头的RPC应答报文对应的请求信息,若该请求信息是异步请求,进行步骤618,否则进行步骤617。
步骤617:主控板A按处理同步请求的被剥离驱动报文头的RPC应答报文的步骤处理该被剥离驱动报文头的RPC应答报文,即主控板A的通信功能层解析出该报文不是异步请求的被剥离驱动报文头的RPC应答报文后,根据该被剥离驱动报文头的RPC应答报文中“报文序列号”的内容,从SESSION库中查找对应的RPC请求信息,匹配SESSION库,判断SESSION库中能否查找到对应的RPC请求信息,若能,主控板A的通信功能层根据该被剥离驱动报文头的RPC应答报文的信息给该RPC请求对应的互斥信号量赋值,并释放该被赋值的互斥信号量,处理该被剥离驱动报文头的RPC应答报文中的内容,将该被剥离驱动报文头的RPC应答报文中的信息放置到上层应用程序提供的pPacketResponse地址中,然后删除该被赋值的对应该RPC请求的互斥信号量;否则进行其他处理,例如,丢弃该报文或者将该报文定义为非法报文。
步骤618:主控板A的通信功能层调用通信接口层注册的回调函数,从而实现将RPC应答报文上传至上层应用程序的目的。
至此,主控板A对需要应答的异步请求与应答过程处理完毕。
在主控板A对需要应答的异步请求与应答的处理过程中,主控板(本实施例中为主控板A)利用一秒轮询事件维护SEESION库,如果SESSION库中注册的异步请求超时时间已经到达,也没有收到RPC应答的话,上层应用程序直接调用该请求注册的回调函数,返回任务超时的错误码给上层应用程序,这样的机制可以保证当被控板卡异常时板间的信息交互任务的正常进行。
单板B作为服务器,服务器初始化时应调用通信接口层提供的OPCODE注册函数,将主控板A请求的功能opcode-2与其对应的实现函数注册到单板B的OPCODE注册表中。
单板B的通信驱动层获取到报文,剥离驱动报文头,将被剥离驱动报文头的报文上传到单板B的通信功能层。单板B的通信功能层获取到被剥离驱动报文头的报文后,判断该报文是否为初始RPC请求报文(初始RPC请求报文的“控制标志”的BIT0段内容表示“请求”),若不是,则进行其他处理,若是,则根据该报文中的“对象标识/操作码”中的内容(在本实施例中为opcode-2)查找注册表中该OPCODE对应的函数信息,并调用通信接口层中的该OPCODE对应的函数;通信接口层执行该函数,并根据执行结果获取信息,并将获取的信息(包括输出参数等)返回给通信功能层;通信功能层根据通信接口层返回的包括输出参数在内的信息封装初始RPC应答报文,封装过程中,将输出参数(即对应该RPC请求的应答内容)封装入报文体中;调用通信适配层提供的报文发送接口,在初始RPC应答报文外增加驱动报文头,进一步封装为RPC应答报文,通过通信驱动层的报文发送函数发送该RPC应答报文;如果没有查找到opcode-2对应的函数,则直接将需要返回的该OPCODE不支持的错误码封装到初始RPC应答报文中(该错误码可以放在初始RPC应答报文的“返回码”段),通过通信适配层根据目的节点地址的硬件类型进行进一步封装为RPC应答报文后,调用通信驱动层的报文发送函数发送该RPC应答报文。
以上单板B处理需要应答的异步请求的过程如图7所示,单板B处理需要应答的异步请求报文的流程与处理同步的RPC请求报文的流程相似,其区别在于,图5的流程中的“对象标识/操作码”内容是opcode-1,图7的流程中的“对象标识/操作码”内容是opcode-2。
下面仍然以主控板A对单板B异步请求某功能为例,详细描述不需要应答的异步请求通信过程,该功能对应的OPCODE为opcode-3。
主控板A的不需要应答的异步请求调用的实现过程如图8所示。
步骤801:主控板A某上层应用程序通过异步调用指令调用异步调用接口,该指令包含控制参数:目的节点地址、OPCODE、输入参数地址、输出参数地址、超时时间,其中操作码OPCODE是功能参数。
步骤802:主控板A通信功能层收到该不需要应答的异步请求,不需要分配报文序列号,不需要将该请求的信息保存在SESSION库中,直接将该异步调用指令的控制参数封装在初始RPC请求报文中,该报文按本发明实施例中设计的RPC私有报文格式组装。
步骤803:主控板A的通信功能层调用通信适配层的报文发送接口。
步骤804:发送本次请求的线程返回,即主控板A的通信功能层通过通信接口层将本次异步请求的初始RPC请求报文已交由通信适配层和通信驱动层处理发送的信息转达给上层应用程序。
步骤805:主控板A的通信适配层在报文发送接口被调用后,在该初始RPC请求报文外面增加一层驱动报文头,进一步封装为RPC请求报文,该报文头按照目的节点地址的硬件类型(即所需通信协议的要求)组装,具体信息在该初始RPC请求报文中“目的节点地址”段的“节点类型”中。
步骤806:主控板A的通信适配层调用通信驱动层的报文发送函数,将获得的RPC请求报文发往通信驱动层。
步骤807:主控板A的通信驱动层按照目的节点地址发送该RPC请求报文,目的节点地址的ID、类型、所需通信协议等信息由该RPC请求报文中的“目的节点地址”段提供。
至此,主控板A对不需要应答的异步请求与应答过程处理完毕。
单板B处理不需要应答的异步请求的过程如图9所示。
步骤901:单板B作为被控板卡(即服务器端),单板B初始化时应调用通信接口层提供的OPCODE注册函数,将主控板A请求的功能opcode-3与其对应的实现函数注册到单板B的OPCODE注册表中。
步骤902:单板B的通信驱动层获取到报文。
步骤903:单板B的通信适配层接收到通信驱动层上传的报文。
步骤904:单板B的通信适配层剥离驱动报文头,将被剥离驱动报文头的报文上传到单板B的通信功能层。
步骤905:单板B的通信功能层获取到被剥离驱动报文头的报文。
步骤906:单板B的通信功能层判断通信驱动层接收到报文是否为RPC请求报文(被剥离驱动报文头的RPC请求报文的“控制标志”的BIT0段内容表示“请求”),若是,进行步骤908,否则,进行步骤907。
步骤907:单板B进行其它处理,例如,丢弃该报文或者将该报文定义为非法报文。
步骤908:单板B的通信功能层根据被剥离驱动报文头的RPC请求报文中的“对象标识/操作码”中的内容(在本实例中为opcode-3)查找注册表中该OPCODE对应的函数。
步骤909:单板B的通信功能层通知通信接口层调用存储在通信接口层中的该OPCODE对应的函数,通信接口层调用并执行该函数获取信息,并将获取的信息返回给通信功能层;通信功能层处理完成,结束当前流程。
在本发明实施例中,对于不需要应答的RPC请求,主控板不需要分配报文序列号,也不需要注册SESSION库。
从上述同步调用、异步调用的实现过程可以看出,本发明实施例中,应用层仅需要通过简单的接口调用指令就可以调用板卡,控制板间的信息交互过程;请求线程可选择等待应答的回复,获取应答信息后,将结果返回给上层应用程序,也可以选择直接将RPC请求已发送出去的信息反馈给上层应用程序。
本发明实施例通过将不同硬件类型的被控板卡需要的通信协议类型封装在采用统一格式的初始RPC报文外的驱动报文头中,使得板间的信息交互可以通过本发明实施例中的设计的统一的应用层接口协议(即RPC远程过程调用私有协议)进行,成功向应用层屏蔽了板间的请求报文与应答报文的组装、解析以及传送过程,使得应用层仅通过简单的接口调用指令就可以调用板卡,管理板间的信息交互,这样,应用层管理代码的构建不需依据板卡的硬件信息,可以复用移植,简化了应用层管理板间的信息交互的过程,节省了应用层的处理资源和处理时间,提高了板间的信息交互的效率,并且使得板间的信息交互支持同步交互与异步交互等多种交互方式,解决了现有技术中应用层管理板间信息交互的过程不易维护并且交互方式单一的问题。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (18)

1.一种分布式设备中的板间通信方法,其特征在于,主控板内的通信过程,包括:
通信功能层通过通信接口层接收到上层应用程序下发的接口调用指令后,根据所述接口调用指令携带的控制参数初始封装相应的初始远程过程调用私有协议RPC请求报文,并将初始封装后的初始RPC请求报文发往通信适配层;
所述通信适配层根据目的节点地址的硬件类型对接收的初始RPC请求报文做出进一步封装后,将获得的RPC请求报文发往通信驱动层;
所述通信驱动层将接收到的RPC请求报文发往相应的被控板卡,令被控板卡按照接收的RPC请求报文执行相应操作;
其中,所述接口调用指令为同步调用指令时,所述接口调用指令中携带的控制参数至少包括目的节点地址、操作码OPCODE、输入参数地址、输出参数地址,使得主控板根据所述目的节点地址发送RPC请求报文,通过操作码OPCODE向所述被控板卡请求一个对应的功能,将传输给所述被控板卡的内容存储在输入参数地址中,并令被控板卡将返回的内容存储在输出参数地址中;
或者,所述接口调用指令为异步调用指令时,所述接口调用指令中携带的控制参数至少包括目的节点地址、操作码OPCODE、输入参数地址、输出参数地址以及回调函数,使得主控板根据所述目的节点地址发送RPC请求报文,通过操作码OPCODE向所述被控板卡请求一个对应的功能,将传输给所述被控板卡的内容存储在输入参数地址中,并令被控板卡将返回的内容存储在输出参数地址中,以及使得主控板在收到RPC应答报文后,调用回调函数处理RPC应答报文;
所述通信适配层根据目的节点地址的硬件类型对接收的初始RPC请求报文做出进一步封装后,将获得的RPC请求报文发往通信驱动层的过程具体包括:
所述通信适配层根据目的节点地址的硬件类型为接收的初始RPC请求报文增加一层驱动报文头,并调用通信驱动层的报文发送函数,将获得的RPC请求报文发往通信驱动层。
2.如权利要求1所述的方法,其特征在于,所述通信功能层通过通信接口层接收到上层应用程序下发的接口调用指令后,若所述接口调用指令携带的控制参数表明主控板需要等待被控板卡的应答,则在封装初始RPC报文之前进行下列步骤:
若所述接口调用指令为同步调用指令,则所述通信功能层创建空的互斥信号量,生成全局唯一的报文序列号,注册会话信息库SESSION库,令被控板卡返回RPC应答报文时能够正确匹配;
或者,
若所述接口调用指令为异步调用指令,则所述通信功能层生成全局唯一的报文序列号,注册SESSION库,令被控板卡返回RPC应答报文时能够正确匹配。
3.如权利要求2所述的方法,其特征在于,若所述接口调用指令为同步调用指令,则所述方法还包括:
通信功能层将初始RPC请求报文发往通信适配层后,通过不释放所述空的互斥信号量阻塞上层应用程序,等待被控板卡回复应答;
或者
若所述接口调用指令为异步调用指令,则所述方法还包括:
通信功能层将初始RPC请求报文发往通信适配层后,通过通信接口层将发送结果通知上层应用程序。
4.如权利要求3所述的方法,其特征在于,所述通信驱动层将接收到的RPC请求报文发往相应的被控板卡之后,还包括:
若所述接口调用指令为同步调用指令,则所述通信驱动层接收到所述被控板卡返回的RPC应答报文后上传至通信适配层剥离驱动报文头,再上传给通信功能层,所述通信功能层将根据被剥离驱动报文头的RPC应答报文的内容匹配SESSION库的结果通过通信接口层转达给上层应用程序;
或者,
若所述接口调用指令为异步调用指令且指示需要接收被控板卡的应答,则所述通信驱动层接收到所述被控板卡返回的RPC应答报文后上传至通信适配层剥离驱动报文头,再上传给通信功能层,所述通信功能层根据被剥离驱动报文头的RPC应答报文的内容匹配SESSION库,根据匹配结果判断该RPC应答报文是否为异步的RPC应答报文,若是,则调用回调函数;否则,按处理同步的被剥离驱动报文头的RPC应答报文的方式处理所述RPC应答报文。
5.如权利要求4所述的方法,其特征在于,所述接口调用指令中携带的控制参数进一步包括超时时间,在达到超时时间后,若所述通信功能层仍未接收到所述RPC请求报文对应的被剥离驱动报文头的RPC应答报文,所述通信功能层则组装RPC请求超时的错误码并通过通信接口层返回给上层应用程序。
6.一种分布式设备中的板间通信方法,其特征在于,被控板卡接收主控板按照如权利要求1-5任一项的方法发送的初始远程过程调用私有协议RPC请求报文后,被控板卡内的通信过程,包括:
通信驱动层接收所述RPC请求报文并上传至通信适配层;
所述通信适配层剥离所述RPC请求报文的驱动报文头后,上传至通信功能层;
所述通信功能层根据被剥离驱动报文头的RPC请求报文执行相应操作。
7.如权利要求6所述的方法,其特征在于,通信功能层在接收所述RPC请求报文之前,还包括:
通信功能层通过通信接口层接收到上层应用程序下发的接口调用指令后,执行功能注册函数,将所述接口调用指令携带的控制参数中的功能参数注册到操作码OPCODE注册表中。
8.如权利要求7所述的方法,其特征在于,所述通信功能层根据被剥离驱动报文头的RPC请求报文执行相应操作,具体包括:
所述通信功能层在根据被剥离驱动报文头的RPC请求报文查找到OPCODE注册表中对应的函数的信息时,通知通信接口层调用所述函数;
所述通信接口层调用并执行所述函数,根据执行结果获取信息并返回给通信功能层。
9.如权利要求8所述的方法,其特征在于,所述通信功能层根据被剥离驱动报文头的RPC请求报文执行相应操作,进一步包括:
若通信功能层根据被剥离驱动报文头的RPC请求报文判断需要应答,根据目的节点地址的硬件类型,通信适配层对初始RPC应答报文做进一步封装后,通过通信驱动层发送至主控板,其中,所述初始RPC应答报文是通信功能层基于所述通信接口层返回的信息封装的。
10.一种分布式设备中的板间通信装置,包括主控板,其特征在于,主控板内的结构,包括:
通信接口模块,用于接收上层应用程序下发的接口调用指令;
通信功能模块,用于通过通信接口模块接收到上层应用程序下发的接口调用指令后,根据所述接口调用指令携带的控制参数初始封装相应的初始远程过程调用私有协议RPC请求报文,并将初始封装后的初始RPC请求报文发往通信适配模块;
通信适配模块,用于根据目的节点地址的硬件类型对接收的初始RPC请求报文做出进一步封装后,将获得的RPC请求报文发往通信驱动模块;
通信驱动模块,用于将接收到的RPC请求报文发往相应的被控板卡,令被控板卡按照接收的RPC请求报文执行相应操作;
其中,所述接口调用指令为同步调用指令时,所述接口调用指令中携带的控制参数至少包括目的节点地址、操作码OPCODE、输入参数地址、输出参数地址,使得主控板根据所述目的节点地址发送RPC请求报文,通过操作码OPCODE向所述被控板卡请求一个对应的功能,将传输给所述被控板卡的内容存储在输入参数地址中,并令被控板卡将返回的内容存储在输出参数地址中;
或者,
所述接口调用指令为异步调用指令时,所述接口调用指令中携带的控制参数至少包括目的节点地址、操作码OPCODE、输入参数地址、输出参数地址以及回调函数,使得主控板根据所述目的节点地址发送RPC请求报文,通过操作码OPCODE向所述被控板卡请求一个对应的功能,将传输给所述被控板卡的内容存储在输入参数地址中,并令被控板卡将返回的内容存储在输出参数地址中,以及使得主控板在收到RPC应答报文后,调用回调函数处理RPC应答报文;
所述通信适配模块根据目的节点地址的硬件类型对接收的初始RPC请求报文做出进一步封装后,将获得的RPC请求报文发往通信驱动模块,包括:
所述通信适配模块根据目的节点地址类型为接收的初始RPC请求报文增加一层驱动报文头,并调用通信驱动模块的报文发送函数,将获得的RPC请求报文发往通信驱动模块。
11.如权利要求10所述的装置,其特征在于,所述通信功能模块通过通信接口模块接收到上层应用程序下发的接口调用指令后,若所述接口调用指令携带的控制参数表明主控板需要等待被控板卡的应答,则进行下列步骤:
若所述接口调用指令为同步调用指令,则所述通信功能模块创建空的互斥信号量,生成全局唯一的报文序列号,注册会话信息库SESSION库,令被控板卡返回RPC应答报文时能够正确匹配;
或者,
若所述接口调用指令为异步调用指令,则所述通信功能模块生成全局唯一的报文序列号,注册SESSION库,令被控板卡返回RPC应答报文时可以正确匹配。
12.如权利要求11所述的装置,其特征在于,若所述接口调用指令为同步调用指令,则:
通信功能模块将初始RPC请求报文发往通信适配模块后,通过不释放所述空的互斥信号量阻塞上层应用程序,等待被控板卡回复应答;或者
若所述接口调用指令为异步调用指令,则:
通信功能模块将初始RPC请求报文发往通信适配模块后,通过通信接口模块将发送结果通知上层应用程序。
13.如权利要求12所述的装置,其特征在于,所述通信驱动模块将接收到的RPC请求报文发往相应的被控板卡之后,
若所述接口调用指令为同步调用指令,则所述通信驱动模块接收到所述被控板卡返回的RPC应答报文后上传至通信适配模块剥离驱动报文头,再上传给通信功能模块,所述通信功能模块将根据被剥离驱动报文头的RPC应答报文的内容匹配SESSION库的结果通过通信接口模块转达给上层应用程序;
或者,
若所述接口调用指令为异步调用指令且指示需要接收被控板卡的应答,则所述通信驱动模块接收到所述被控板卡返回的RPC应答报文后上传至通信适配模块剥离驱动报文头,再上传给通信功能模块,所述通信功能模块根据被剥离驱动报文头的RPC应答报文的内容匹配SESSION库,根据匹配结果判断该RPC应答报文是否为异步的RPC应答报文,若是,则调用回调函数;否则,按处理同步的RPC应答报文的方式处理所述RPC应答报文。
14.如权利要求13所述的装置,其特征在于,所述接口调用指令中携带的控制参数进一步包括超时时间,在达到超时时间后,若所述通信功能模块仍未接收到所述RPC请求报文对应的被剥离驱动报文头的RPC应答报文,所述通信功能模块则组装RPC请求超时的错误码并通过通信接口模块返回给上层应用程序。
15.一种分布式设备中的板间通信装置,包括权利要求10-14任一项所述的装置中的主控板,还包括被控板卡,其特征在于,被控板卡接收主控板发送的初始远程过程调用私有协议RPC请求报文,被控板卡内的结构包括:
通信驱动模块,用于接收所述RPC请求报文并上传至通信适配模块;
通信适配模块,用于剥离所述RPC请求报文的驱动报文头后,上传至通信功能模块;
通信功能模块,用于根据被剥离驱动报文头的RPC请求报文执行相应操作。
16.如权利要求15所述的装置,其特征在于,进一步包括:
通信接口模块,用于接收上层应用程序下发的接口调用指令;
通信功能模块在接收所述RPC请求报文之前,通过通信接口模块接收到上层应用程序下发的接口调用指令后,执行功能注册函数,将所述接口调用指令携带的控制参数中的功能参数注册到操作码OPCODE注册表中。
17.如权利要求16所述的装置,其特征在于,所述通信功能模块根据被剥离驱动报文头的RPC请求报文执行相应操作,具体包括:
所述通信功能模块在根据被剥离驱动报文头的RPC请求报文查找到OPCODE注册表中对应的函数的信息时,通知通信接口模块调用所述函数;
所述通信接口模块调用并执行所述函数后,根据执行结果获取信息并返回给通信功能模块。
18.如权利要求17所述的装置,其特征在于,所述通信功能模块根据被剥离驱动报文头的RPC请求报文执行相应操作,进一步包括:
若通信功能模块根据被剥离驱动报文头的RPC请求报文判断需要应答,根据目的节点地址的硬件类型,通信适配模块对初始RPC应答报文做进一步封装后,通过通信驱动模块发送至主控板,其中,所述初始RPC应答报文是通信功能模块基于所述通信接口模块返回的信息封装的。
CN201210208332.XA 2012-06-19 2012-06-19 一种分布式设备板间通信的方法与装置 Active CN102780613B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210208332.XA CN102780613B (zh) 2012-06-19 2012-06-19 一种分布式设备板间通信的方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210208332.XA CN102780613B (zh) 2012-06-19 2012-06-19 一种分布式设备板间通信的方法与装置

Publications (2)

Publication Number Publication Date
CN102780613A CN102780613A (zh) 2012-11-14
CN102780613B true CN102780613B (zh) 2015-12-09

Family

ID=47125374

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210208332.XA Active CN102780613B (zh) 2012-06-19 2012-06-19 一种分布式设备板间通信的方法与装置

Country Status (1)

Country Link
CN (1) CN102780613B (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103107906B (zh) * 2012-11-15 2016-06-29 瑞斯康达科技发展股份有限公司 一种板卡间通信方法、板卡及通信机框设备
CN103036668B (zh) * 2012-12-11 2018-01-30 上海斐讯数据通信技术有限公司 一种基于命令行的机架式设备卡间配置同步方法
CN103401773B (zh) * 2013-06-26 2017-04-19 杭州华三通信技术有限公司 一种实现板间通信的方法及网络设备
CN103401575B (zh) * 2013-07-04 2015-03-04 中国船舶重工集团公司第七二二研究所 一种通信集成设备的系统控制装置
CN106648928A (zh) * 2016-11-29 2017-05-10 成都广达新网科技股份有限公司 一种进程间通讯的方法及装置
CN107436817B (zh) * 2017-06-30 2019-01-29 武汉斗鱼网络科技有限公司 一种以同步方式进行远程过程调用的方法及装置
CN109218369B (zh) * 2017-07-05 2021-08-03 阿里巴巴集团控股有限公司 远程过程调用请求控制方法及装置
CN110474833B (zh) * 2018-05-10 2020-10-23 大唐移动通信设备有限公司 一种消息处理方法及装置
CN108846095A (zh) * 2018-06-15 2018-11-20 联想(北京)有限公司 一种数据处理方法及装置
CN110659139A (zh) * 2018-06-28 2020-01-07 武汉斗鱼网络科技有限公司 一种远程过程调用方法、计算机设备和存储介质
CN108928213B (zh) * 2018-07-17 2022-04-19 深圳市汇川技术股份有限公司 控制面板的参数配置方法、控制面板及被控设备
CN111585938B (zh) * 2019-02-15 2021-10-22 华为技术有限公司 一种通信方法及相关装置
CN111212085B (zh) * 2020-01-16 2022-11-22 厦门网宿有限公司 物联网平台同步调用的方法、物联网系统和网络设备
CN113722115A (zh) * 2020-05-26 2021-11-30 北京沃东天骏信息技术有限公司 调用接口的方法、装置、设备和计算机可读介质
CN112367294A (zh) * 2020-10-13 2021-02-12 成都精灵云科技有限公司 适配边缘计算架构的多主机间的网络通信方法
CN112612582B (zh) * 2020-12-14 2024-05-28 北京和利时控制技术有限公司 信号量功能实现方法和装置
CN112565286A (zh) * 2020-12-17 2021-03-26 金蝶软件(中国)有限公司 一种基于rpc访问的任务响应方法、装置、设备和存储介质
CN112769688B (zh) * 2020-12-18 2022-07-29 南方电网科学研究院有限责任公司 协议栈适配的方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1859119A (zh) * 2006-02-20 2006-11-08 珠海金山软件股份有限公司 计算机网络中实现分布式通讯的装置和通讯方法
CN101197851A (zh) * 2008-01-08 2008-06-11 杭州华三通信技术有限公司 一种实现控制平面集中式数据平面分布式的方法及系统
CN102098296A (zh) * 2010-12-29 2011-06-15 北京新媒传信科技有限公司 一种实现远程调用的方法和系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6931429B2 (en) * 2001-04-27 2005-08-16 Left Gate Holdings, Inc. Adaptable wireless proximity networking
CN100407728C (zh) * 2002-08-02 2008-07-30 中兴通讯股份有限公司 一种分布式系统对象之间的板间通信方法
CN100356340C (zh) * 2004-03-31 2007-12-19 华为技术有限公司 一种分布式测试组件框架系统及测试组件透传方法
CN101931605B (zh) * 2009-06-18 2014-03-19 中兴通讯股份有限公司 板间通信控制装置及板间通信的消息发送、接收方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1859119A (zh) * 2006-02-20 2006-11-08 珠海金山软件股份有限公司 计算机网络中实现分布式通讯的装置和通讯方法
CN101197851A (zh) * 2008-01-08 2008-06-11 杭州华三通信技术有限公司 一种实现控制平面集中式数据平面分布式的方法及系统
CN102098296A (zh) * 2010-12-29 2011-06-15 北京新媒传信科技有限公司 一种实现远程调用的方法和系统

Also Published As

Publication number Publication date
CN102780613A (zh) 2012-11-14

Similar Documents

Publication Publication Date Title
CN102780613B (zh) 一种分布式设备板间通信的方法与装置
EP3399715B1 (en) Protocol conversion method, platform, and protocol conversion gateway
CN108769165B (zh) 一种物联网中数据处理方法、物联网接入系统
CN103312528B (zh) 一种心跳消息发送方法及用户终端
CN101686145A (zh) 一种具有升级功能的设备、升级方法及系统
CN103440142A (zh) 基于gprs远程升级及动态加载方法
CN105260842B (zh) 异构erp系统之间的通信方法和系统
CN111294235A (zh) 数据处理方法、装置、网关及可读存储介质
CN111954100A (zh) 一种接口升级方法、装置以及光网络单元管理方法、装置
CN112217845B (zh) 一种基于Netconf协议的数据传输方法及相关设备
CN110071839B (zh) 支持数字信号处理器的corba通信装置
KR20230012565A (ko) 포트 상태 구성 방법, 장치, 시스템 및 저장 매체
CN110417875B (zh) 一种云服务器之间的对接方法、系统、设备及存储介质
EP4142422A1 (en) Method and apparatus for session audit for control and user plane separation
CN102693434B (zh) 射频识别设备接口层的通信装置及方法
CN105282235B (zh) 一种解决rpc在双pon口onu升级不稳定的方法
CN106341353B (zh) 资源处理方法及装置
CN103475506A (zh) 多设备管理控制方法和系统
CN110008032B (zh) 一种通信方式的实现方法及电子设备
CN103546513B (zh) 一种客户端页面间通信的方法及装置
CN110943895A (zh) 一种网关机、基于Linux系统的网络数据处理方法及装置
CN102075532B (zh) 一种防火墙穿透方法
CN100492982C (zh) 一种网络设备驱动系统及实现消息管理的方法
CN114844898B (zh) 一种互联网接入方法、装置及系统
CN114827188B (zh) 一种站台设备管理方法、系统、终端及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant