一种动态连接数据分布式系统及其数据交互方法
技术领域
本发明涉及通讯技术领域的一种分布式系统,尤其涉及一种动态连接数据分布式系统及其数据交互方法。
背景技术
CAN是Controller Area Network的缩写,是ISO国际标准化的串行通信协议。CAN属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。同时,CAN的高性能和可靠性已被广泛认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。
一个基于CAN总线的网络中有多个设备,在现有技术中,设备之间进行参数交换需要事先需进行配置,这样会降低设备之间连接的灵活性,不利于设备之间的数据交互。
发明内容
针对现有技术的技术问题,本发明提供一种动态连接数据分布式系统及其数据交互方法,以缓解现有技术中CAN总线上的设备之间进行参数交换需要事先需进行配置,设备之间连接的灵活性低,不利于设备之间的数据交互的问题。
本发明采用以下技术方案实现:一种动态连接数据分布式系统,包括挂接在CAN总线上的多个设备,且其中一个设备为主站,其他的设备为从站,且所述主站分散其部分任务至多个从站;所述主站包括一个服务数据对象(SDO)管理器,且所述管理器用于管理多个设备之间的动态数据交互;
每个设备包括SDO客户端、SDO服务端,且其中一个设备的SDO客户端通过所述CAN总线与另外一个设备的SDO服务端进行所述动态数据交互;所述SDO客户端、所述SDO服务端均设置模块表和对应通信对象表,且均通过状态机以协调其通信步骤;
所述模块表包括分别设置多个字段的多个模块表项,所述通讯对象表包括分别设置多个字段的多个COB表项;每个模块表项对应一个COB表项,且所述COB表项用于接收对应的模块表项发送的数据,以形成CAN报文;
所述COB表项包括CAN MSG结构,所述CAN MSG结构设置CAN控制器,且所述CAN控制器用于将所述CAN报文转换成所述CAN总线上的传输信号;所述CAN MSG结构具有CAN标识符、对应的模块表项发送的数据;
在进行动态数据交互的两个设备中,一个设备作为数据发送者时,其CAN标识符与另一个作为数据接收者的CAN标识符相对应;所述数据接收者在识别并匹配所述数据发送者的CAN标识符时接收所述数据发送者发送的数据;
所述状态机用于协调同步所述SDO客户端与所述SDO服务端之间的数据传输。
进一步地,所述数据发送者通过其CAN MSG结构与所述数据接收者的CAN MSG结构在CAN总线上进行数据传输而传输数据至所述数据接收者。
再进一步地,在一个设备中,所述通信对象表的数量为所述SDO客户端的数量的两倍,且所述两个通讯对象表分别为发送COB表和接收COB表;
其中,每个设备的发送COB表发送数据至另一个设备的接收COB表。
再进一步地,所述状态机协调同步所述SDO客户端与所述SDO服务端之间的数据传输的方法为:首先设置所述数据发送者需访问的站点号及其SDO客户端的状态,然后设置所述数据发送者的发送COB表的CAN标识符,最后进行所述数据发送者的所述SDO客户端的轮询处理,以响应所述数据接收者相匹配的SDO服务端。
作为上述方案的进一步改进,所述主站读其中一个从站的对象字典内的一个对象的方法为:
在所述主站中,通过所述主站需访问的从站的节点号设置所述主站的通讯对象表中的CAN标识符,并设置需读的对象字典的索引和子索引;
设置所述主站的SDO客户端的状态为上装初始状态;
在所述主站的SDO客户端的process轮询里轮询所有的SDO服务端,寻找状态不为空闲状态的SDO客户端,并根据状态进行对应的操作;
其中,在所述主站的SDO客户端的状态为上装初始状态时,先通过对应的COB表项发送一个CAN报文,后在需读的数据量能一次性发送时,设置所述主站的SDO客户端的状态为快速上装状态,并一次性读存数据,在需多次读数据量时,设置所述主站的SDO客户端的状态为等待长度状态,并多次读存数据。
进一步地,在所述主站的SDO客户端的状态为快速上装状态时,等待至所述从站返回一个报文;根据所述通讯对象表寻找对应的SDO客户端的回调,并进入对应的状态机;将读取的数据赋值于供保存数据的地址的变量中,设置所述主站的SDO服务端为完成状态并复位至空闲状态;
所述主站的SDO客户端在等待快速上装状态的时间超过一个预设时间时,且所述从站的SDO服务端未返回数据,设置所述主站的SDO客户端的状态为取消状态,并通过所述主站的SDO客户端发送一个取消报文至所述从站的SDO服务端;设置所述主站的SDO服务端为完成状态并复位至空闲状态。
再进一步地,在所述主站的SDO客户端的状态为等待长度状态时,等待所述主站的SDO客户端接收和发送数据,在上装状态中不停的读发送和读等待,直到读完所有数据量后设置所述主站的SDO服务端为完成状态并复位至空闲状态,否则在等待长度状态内循环。
作为上述方案的进一步改进,所述主站写其中一个从站的对象字典内的一个对象的方法为:
在所述主站中,通过所述主站需访问的从站的节点号设置所述主站的通讯对象表中的CAN标识符,并设置需写的对象字典的索引和子索引;
设置所述主站的SDO客户端的状态为下载初始化;
在所述主站的SDO客户端的process轮询里轮询所有的SDO服务端,寻找状态不为空闲状态的SDO客户端,并根据状态进行对应的操作;
其中,在所述主站的SDO客户端的状态为下载初始化时,先通过对应的COB表项发送一个CAN报文,后在需写的数据量能一次性发送时,设置所述主站的SDO客户端的状态为快速下载状态,并一次性写完数据,在需多次写数据量时,设置所述主站的SDO客户端的状态为多次下载状态,并进行多次写数据,直至写完数据。
进一步地,所述从站通过所述CAN总线接收所述主站发送的数据;
在所述主站读所述从站的对象字典内的对象时,所述从站的SDO服务端的状态跳转至下装状态,且根据接收到的报文设置对应的模块表,并根据接收到的索引和子索引寻找对应的对象字典内的响应对象;所述从站返回所述响应对象的值至所述CAN总线,并传输至所述主站的SDO客户端;所述从站的SDO服务端在所述响应对象的值返回至所述主站后,复位其模块表并跳转至空闲状态;
在所述主站写所述从站的对象字典内的对象时,所述从站的SDO服务端的状态跳转至上载状态,且根据接收到的报文设置对应的模块表,并根据接收到的索引和子索引寻找对应的对象字典内的响应对象;所述从站根据接收的报文设置所述响应对象的值,且在设置完成后,所述从站的SDO服务端先跳转至完成状态,后跳转至空闲状态。
本发明还提供一种数据交互方法,其应用于上述任意一项所述的动态连接数据分布式系统,包括:
寻找作为发送数据的设备的对应COB表项;
将需交互的数据通过对应的COB表项的CAN MSG结构转换成所述CAN总线上的传输信号;
根据所述传输信号对应的报文中的CAN标识符,依次对比其他设备的CAN标识符,使CAN标识符与所述报文中的CAN标识符相对应的设备接收发送的数据。
本发明的动态连接数据分布式系统及其数据交互方法,通过在CAN总线上的设备之间建立动态数据连接,并形成分布式系统,且动态处理设备之间的请求,而且保证了这些请求之间是有条不紊的发送和接收,彼此之间不会发生冲突,从而提高设备之间连接的灵活性,实现设备之间的数据交互。
附图说明
图1为本发明实施例1的动态连接数据分布式系统中服务数据对象客户端的模块表的结构图;
图2为分布式系统中主站与从站包含模块的网络连接组织拓扑图;
图3为本申请实施例1的分布式系统中服务数据对象客户端的状态机的流程图;
图4为本申请实施例1的分布式系统中服务数据对象服务端的状态机的流程图;
图5为本申请实施例2的动态连接数据分布式系统中动态管理方法中请求设备的状态和事件的框架图;
图6为本申请实施例2的动态管理方法中服务数据对象管理器的状态和事件的框架图;
图7为本申请实施例2的动态管理方法中分配的通道示意图;
图8为本申请实施例2的动态管理方法中服务数据对象管理器设置请求设备的服务数据对象客户端的流程图;
图9为本申请实施例2的动态管理方法中服务数据对象管理器设置接收设备的服务数据对象服务端的流程图;
图10为本申请实施例2的动态管理方法中数据传输的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
实施例1
本实施例提供了一种动态连接数据分布式系统,包括挂接在CAN总线上的多个设备,且其中一个设备为主站,其他的设备为从站,且主站分散其部分任务至多个从站。主站包含一个服务数据对象(SDO)管理器,且管理器用于管理多个设备之间的动态数据交互。其中,主站负责主要应用任务的统筹和管理,由于主站系统资源有限或其他原因,需要将主站的一部分功能分散到各个从站里去执行。这样就存在一个分布式的任务处理,在分布式架构中,需要主站和从站进行动态的数据服务请求,这是常见的,另外为了更加灵活性,从站之间也有可能进行数据服务请求,也就是说在这个网络中的任何两个设备都有可能存在数据服务请求的情况,这由本实施例所要实现的具体任务而定。
在本实施例中,为了方便举例,上述设备的数量被限定为5个,且给每个设备编号,并且设备编号作为设备的节点号,5个设备分别为:设备1,设备2,设备3,设备4,设备5。并且假设设备3是主站,也就是服务数据对象管理器所在的位置,换句话说设备3里有SDO管理模块,它负责SDO动态链接请求的管理工作,而其他设备作为从站。其中,设备之间进行交互存在如下三种情况:
第一种是设备1、设备2、设备4、设备5中的一个设备请求设备3进行数据交互,也就是从站请求主站进行数据交互。
第二种是设备3请求设备1、设备2、设备4、设备5中的一个设备进行数据交互,也就是主站请求从站进行数据交互。
第三种是设备1、设备2、设备4、设备5中任意两者之间的相互请求数据交互,也就是从站之间请求进行数据交互。
在本实施例中,仅选取其中一种情况进行进一步的说明,约束可变因素只是为了更加特定的描述本实施例,而不是限制了本实施例,故本实施例假定选取第三种情况,并进一步缩小范围假定是设备2请求设备5进行数据请求。
为了实现CAN总线的网络中的任意两个站点(主站或者从站)的数据可以交换,需要一个统筹这个交换的管理器,即服务数据对象管理器,而发起数据请求的(所谓数据请求就是数据的读写,但是这种读写是远程的读写而非本地的)设备称作SDO请求设备,SDO的传输采用客户端-服务端架构,客户端请求服务端的参数。客户端主要用于实现数据的发送,而服务端主要用于实现数据的接收。
请参阅图1和图2,每个设备包括服务数据对象客户端的多个子项、服务数据对象服务端的多个子项,且其中一个设备的服务数据对象客户端通过CAN总线与另外一个设备的服务数据对象服务端进行动态数据交互。服务数据对象客户端、服务数据对象服务端均设置模块表和对应通信对象表以及用状态机来协调通信步骤。一个SDO传输发生在服务数据对象客户端和服务数据对象服务端之间,一般的任何站点都同时存在服务数据对象客户端和服务数据对象服务端,因为这个站点可能访问别的站点,这需要服务数据对象客户端的模块,也可能被别的站点访问,这需要服务数据对象服务端的模块。
这里,为方便本实施例后续的说明,在接下来的描述中,SDO请求设备用SRD表示,服务数据对象管理器用SDOM表示,服务数据对象客户端用SDOC表示,服务数据对象服务端用SDOS表示,且通信对象表称为COB表。
一个模块表代表一块内存区域,而这个内存区域分成多个子区域(模块表项),每个子区域又包含了一些数据的集合,这个数据的集合可能因为所属模块的不同而不同,每个字段的作用也不一定一样。
模块表包括分别设置多个字段的多个模块表项,通讯对象表包括分别设置多个字段的多个COB表项。每个模块表项对应一个COB表项,且COB表项用于保存对应的模块表项所需要交互的数据,以形成CAN报文。具体地,当一个站点发送数据的时候,会找到发送COB表里对应的COB表项,然后将COB表项包含的CAN MSG结构设置CAN控制器,且CAN控制器用于将CAN报文转换成CAN总线上的传输信号。CAN MSG结构具有CAN标识符、对应的模块表项发送的数据。
在进行动态数据交互的两个设备中,一个设备作为数据发送者时,其CAN标识符与另一个作为数据接收者的CAN标识符相对应。数据接收者在识别并匹配数据发送者的CAN标识符时接收数据发送者发送的数据。数据发送者通过其CAN MSG结构与数据接收者的CANMSG结构在CAN总线上进行数据传输而传输数据至数据接收者。
CAN报文在CAN总线上传输时,哪个站点会响应取决于报文中的CAN标识符,所有其他站点检查自己的过滤器,如果匹配报文中的CAN标识符就接收报文。其中,站点靠其COB表确定报文是发给自己的,也就是说对于接收者自己内部也有COB接收表,COB接收表的很多表项的CAN MSG结构的ID与发送者的COB表的表项的CAN MSG结构中的ID一致,发送者通过这个COBID发送的数据接收者才会接收。
发送者有一个发送COB表(同时也有一个接收COB表),接收者有一个接收COB表(当然也有一个发送COB表),并且由于一个COB表包含很多子项(表项),每个COB表项对应一个表项结构。每个COB表项有独一无二的ID,这个ID也是发送到CAN总线上的CAN标识符,所以发送者有很多COB,每个COB有一个ID,这些ID是不同的,而接收者也有很多COB,每个COB也有对应的ID。当发送者用一个COB发送一个报文的时候,这个报文的CAN标识符就是这个COB表项的ID,在一个总线上有多个接收者,只有与这个ID一致的COB表项的接收者才会响应这个报文。所以发送者与接收者必须有一致的ID的COB表项,发送的报文接收者才能接收,而其他接收者不会响应。
故在本实施例中,并且在一个设备中,通信对象表项的数量为SDOC的数量的两倍,且两个通讯对象表项分别为发送COB表项和接收COB表项。其中,每个设备的发送COB表项发送数据至另一个设备的接收COB表项。
当主站也就是设备3请求一个的服务(所谓一个服务就是读或者写,不过这种读写是要经过CAN总线的,一般经过CAN总线的都叫做远程访问或服务,而站点内部的叫做本地)到设备2上时,并且假定设备3利用某一个SDOC来访问设备2上的一个SDOS。设备3是主站,设备2是从站,但是在这里设备3是用SDOC也就是客户端,而设备2是服务端了,也就是被访问的是服务端,发起访问的是客户端而与主从站无关,一个站点既可以作为服务端也可以作为客户端。
状态机用于协调同步SDOC与SDOS之间的数据传输。状态机协调同步SDOC与SDOS之间的数据传输的方法为:首先设置数据发送者需访问的站点号及其SDOC的状态,然后设置数据发送者的发送COB表的CAN标识符,最后进行数据发送者的SDOC的轮询处理,根据每个SDOC的状态找出那些需要被处理的SDOC后发送数据。
比如,用站点3的第一个SDOC访问站点2的第一个SDOS。首先站点3自己设置它的第一个SDOC,这个设置包含了设置SDOC的要访问的站点的节点号和命令(这个节点号是与对应COB ID相关的但不相等),这些命令为设置SDOC的状态的命令,如果是写还要设置发送的数据内容,如果是读还要设置读回来的数据要保存的地址。在设置SDOC过程中,这个SDOC对应的COB也会被设置,COB是数据交互的关键,不仅包含CAN标识符还包括数据。一旦设置好SDOC,那么在站点3的SDOC轮询中就会执行发送了。实际上每个站点只要包含了SDOC模块,该站点就有对应的SDOC轮询处理,且该处理是轮询的,即处于一个大的循环中的一个子循环。实际上,不同的模块都有自己的轮询处理,一个大的循环包含很多子循环,而跳出子循环和下次再次进入这个子循环均会执行不同的功能,而这种不同的功能也包含什么都不处理直接跳出。如此,可以形成一种时序同步关系,也就是说同一个循环,进入子循环是发数据还是接收数据,或者说再次进入是再次发数据还是接收数据,功能均是不同的,即执行的事情是不一样的,这取决于当时的状态。假如一个SDOC第一次进去是发送数据,第二次进去应该是检查数据有没有到来,第一次的状态是发送数据,所以它发送,之后把状态设置为等待接收状态,那么第二次进去它就会进行检查数据有没有到来(如果SDOS响应了的话);如果没有到来什么都不做,到来了SDOS才会把接收到的数据保存,然后又跳到下一个状态,显然SDOC与SDOS之间存在着一种协调同步关系。软件用状态机来处理这种协调关系。
请参阅图3,主站读其中一个从站的对象字典内的一个对象的方法为:
(1)在主站中,通过主站需访问的从站的节点号设置主站的通讯对象表中的CAN标识符,并设置需读的对象字典的索引和子索引;
(2)设置主站的SDOC的状态为上装初始状态;
(3)在主站的SDOC的轮询里轮询所有的SDOC,寻找状态不为空闲状态的SDOC,并根据状态进行对应的操作;
其中,在主站的SDOC的状态为上装初始状态时,先通过对应的COB表项发送一个CAN报文,后在需读的数据量能一次性发送时,设置主站的SDOC的状态为快速上装状态,并一次性读存数据,在需多次读数据量时,设置主站的SDOC的状态为等待长度状态,并多次读存数据。
在主站的SDOC的状态为快速上装状态时,等待至从站返回一个报文。根据通信对象表寻找对应的SDOC的回调,并进入对应的状态机。将读取的数据赋值于供保存数据的地址的变量中,设置主站的SDOC为完成状态并复位至空闲状态。
主站的SDOC在等待快速上装状态的时间超过一个预设时间时,且从站的SDOS未返回数据,设置主站的SDOC的状态为取消状态,并通过主站的SDOC发送一个取消报文至从站的SDOS;设置主站的SDOC为完成状态并复位至空闲状态。
在主站的SDOC的状态为等待长度状态时,等待主站的SDOC接收和发送数据,在上装状态中不停的读发送和读等待,直到读完所有数据量后设置主站的SDOC为完成状态并复位至空闲状态,否则在等待长度状态内循环。
主站写其中一个从站的对象字典内的一个对象的方法为:
(a)在主站中,通过主站需访问的从站的节点号设置主站的通信对象表中的CAN标识符,并设置需写的对象字典的索引和子索引;
(b)设置主站的SDOC的状态为下载初始化;
(c)在主站的SDOC的轮询里轮询所有的SDOC,寻找状态不为空闲状态的SDOC,并根据状态进行对应的操作;
其中,在主站的SDOC的状态为下载初始化时,先通过对应的COB表项发送一个CAN报文,后在需写的数据量能一次性发送时,设置主站的SDOC的状态为快速下载状态,并一次性写完数据,在需多次写数据量时,设置主站的SDOC的状态为多次下载状态,并进行多次写数据,直至写完数据。
请参阅图4,对于SDO服务端,当接收到数据的时候,根据已经设置好的COB表会找到对应的回调,这个回调会进行SDOS的状态机处理,根据接收到的内容判断是读还是写,其中:
在主站读从站的对象字典内的对象时,从站的SDOS的状态跳转至下装状态,且根据接收到的报文设置对应的模块表,并根据接收到的索引和子索引寻找对应的对象字典内的相应对象。从站返回相应对象的值至CAN总线,并传输至主站的SDOC。从站的SDOS在相应对象的值返回至主站后,复位其模块表并跳转至空闲状态。由于COB表项包含的CAN MSG的ID是与从站节点号关联的,这是动态设置的,而从站在初始化的时候固定的设置了SDOS的模块表,有一个默认的SDOS的模块表,而这个SDOS对应的COB表项的ID是与其节点相关的(相关的意思是指用其节点号+某个数,这个数有两个,一个是发送的,一个是接收的),这是固定设置的,至此其他都没有固定设置了,其他的要用到动态设置。
在主站写从站的对象字典内的对象时,从站的SDOS的状态跳转至上载状态,且根据接收到的报文设置对应的模块表,并根据接收到的索引和子索引寻找对应的对象字典内的相应对象;从站根据接收的报文设置相应对象的值,且在设置完成后,从站的SDOS先跳转至完成状态,后跳转至空闲状态。
SDOC和SDOS对应的两个状态机是交互的,存在着这种时序同步关系,SDOC发送后处于等待状态,等待SDOS的回复,SDOS接收到报文后进入相应状态返回报文给SDOC,SDOC接收到之后进入下一个状态。
本实施例还提供了一种数据交互方法,数据交互方法应用于上述的动态连接数据分布式系统,且数据交互方法包括:
寻找作为发送数据的设备的对应COB表项;
将需交互的数据通过对应的COB表项的CAN MSG结构转换成CAN总线上的传输信号;
根据传输信号对应的报文中的CAN标识符,依次对比其他设备的CAN标识符,使CAN标识符与报文中的CAN标识符相对应的设备接收发送的数据。
综上,本实施例的动态连接数据分布式系统,通过在CAN总线上的设备之间建立动态数据连接,并形成分布式系统,且动态处理设备之间的请求,而且保证了这些请求之间是有条不紊的发送和接收,彼此之间不会发生冲突,从而提高设备之间连接的灵活性,实现设备之间的数据交互。
实施例2
在实施例1中,从主站访问从站的分布式系统是已经固定设置好的,而从站之间、从站访问主站不易实现。这里是因为,主站主动访问从站是根据节点号动态设置的SDOC,从站访问主站无法确定从站是否已经被设置,主站难以设置所有的从站对应的SDOC,因为这样会大大消耗系统内存。另外,从站访问从站不能依靠固定设置的通道,也无法进行节点号设置,还没有事先约定,这会造成一个从站发起的响应造成所有从站都响应的可能,并引发冲突。为了解决这个问题,需要动态的分配独一无二的COB表项的ID给需要进行SDO传输的两个站点。
在本实施例中,SRD和SDOM均不包含模块表,但存在对应的一个COB表。其中,SRD和SDOM的COB表的ID是被设置成一致的,一个网络中的所有站点都可以请求其他站点的数据,所以任何一个网络都可以作为一个SRD。而一个网路中只有一个SDOM,所有站点都可以通过自己的SRD的COB发送一个报文到总线上去,而这个总线上与其一样的COB ID只有SDOM,因此SDOM会响应。换言之,SRD有通知SDOM的功能,所有的SRD都可以,当然SRD和SDOM也可以处于同一个站点。SRD和SDOM都有自己的状态和事件,且SDOM可以激活各个SRD的事件。
故本实施例提供的动态连接数据分布式系统中,存在一种动态管理方法,其包括:
步骤一、在SDOM上注册SRD;
步骤二、通过SDOM建立SRD与接收设备之间的数据连接;
步骤三、驱使SRD在CAN总线向接收设备传输数据;
步骤四、释放SRD与接收设备之间的连接。
在本实施例中,SRD为其中一个从站,且主站与每个从站之间存在一条以节点号相关的标识符配置的固定分配通道,这些固定分配通道只允许主站的SDOC单向的访问从站的SDOS。
在步骤一中,在SDOM上注册SRD的方法包括:
步骤S1,驱使SRD发送注册请求数据至CAN总线上,并传输至SDOM;
步骤S2,SDOM扫描所有从站,使SDOM确定发送注册请求的从站节点号;
步骤S3,用SDOM的内部变量保存注册请求的相关信息,分配一个未使用的CAN标识号(COB ID)给SDOM端的一个SDOS;
步骤S4,通过固定分配通道,并根据刚刚分配的SDOS的标识号,设置SRD端的SDOC的标识号和其他信息,这样SRD的SDOC与主站的SDOS经过设置后,SRD通过该SDOC发送的数据只有主站的该SDOS响应,这便形成第一条动态分配通道;
步骤S5,SDOM通知SRD注册成功。
在一些实施例中,在SDOM上注册SRD的方法还包括:
在SRD发送注册请求数据前,进行步骤S0,设置SRD的对象字典的一个对象为请求注册状态,通过引发一个注册请求事件驱使SRD从空闲状态跳转至等待注册状态;
在通知SRD注册成功后,进行步骤S6,使SDOM跳转回空闲状态,引发SRD的一个回调,并在回调中使SRD跳转回空闲状态。
在步骤二中,建立SRD与接收设备之间的数据连接的方法包括:
步骤S7,通过第一条动态分配通道,将SRD需访问的设备的节点号和处于空闲状态的一个SDOC的索引信息发送至主站的SDOS;
步骤S8,根据需访问的设备的节点号,驱使SDOM通过固定分配通道对接收设备的SDOS进行对应的设置;
步骤S9,通过另一条固定通道对SRD端的SDOC进行对应的设置,这样SRD端的一个SDOC与接收设备的一个SDOS对应起来,这便建立起SRD端(发送设备)与接收设备之间的动态连接通道,为标记这条通道称为第二条动态分配通道;
步骤S10,通知SRD连接请求成功。
在一些实施例中,建立SRD与接收设备之间的数据连接的方法还包括:
在通知SRD连接请求成功前,SDOM释放自己的SDOC后,跳转回空闲状态;
在通知SRD连接请求成功后,引发SRD的一个回调,并使SRD在回调中跳转回空闲状态;
其中,通过写一次SRD的对象字典的一个对象以通知SRD连接请求成功。
在步骤三中,驱使SRD在CAN总线向接收设备传输数据的方法包括:
步骤S11,SRD端设备可以通过第二条分配通道直接访问接收设备的对象字典。。
在步骤四中,释放SRD与接收设备之间的连接的方法包括:
步骤12,复位接收设备的SDOS、SRD的SDOC,并释放对应的CAN标识号。
在一些实施例中,动态管理方法还包括:
步骤五、在从站出现异常、报错、掉线、紧急事件和复位中任意一种情况时,解除SRD在SDOM上的注册。
其中,解除注册的方法包括:
步骤13,复位服务SDOM的服务数据对象服务端、SRD的服务数据对象客户端,并释放对应的标识号。
请参阅图5以及图6,本实施例接下来介绍本实施例的动态管理方法的动态管理过程。
假如设备2要访问设备5上的某个参数,当然这个参数基于对象字典结构。首先设备2需要向设备3注册,虽然设备2是计划向设备5实现访问,但是需要经过设备3的管理。设备2是发起请求的设备,它先把其注册到SDOM上。注册之后设备2需要与设备5建立一种连接,设备2需要再次请求SDOM去建立这种连接,一旦连接建立完毕之后,设备2就可以利用建立好的连接通道与设备5进行数据访问了。这种连接通道是独一无二的,SDOM就是为了多个不同的动态请求建立这种独一无二的连接通道,让彼此通信互不干扰。
一、SRD注册请求
1、设备2也就是请求设备(SRD)设置其的0X1F10对象字典为请求注册状态。
2、SRD先引发一个注册请求事件,使设备2从空闲状态跳到等待注册状态,在该状态下把这个请求发送到CAN总线上。
这个发送利用的是SRD的COB表项,如前,接收的必然是SDOM的COB表项,所有的SRD的COB表与SDOM的COB表一一对应,这是约定好的COBID专门用来处理SRD与SDOM请求报文的CAN标识符。所以设备3会响应这个报文。
3、SDOM接收到报文之后,利用的是SDOM的COB表的回调,在回调中设置SDOM的SRD注册事件,这样SDOM会跳到扫描请求设备状态。
在扫描设备请求状态下,SDOM扫描的是已经注册的设备,这种扫描是扫描内部的保存的可能要进行注册的设备的变量,这个变量并没有,所以会扫描不到任何设备,这主要是为了防止已经有可能注册的设备但是没有进行处理的情况。
由于没有扫描到SRD,所以它会引发SRD未发现事件,这让SDOM跳到扫描所有请求设备的状态,这个状态下与上一个状态是不同的,上一个状态是扫描内部保存的可能要进行注册的SRD,这次是进行所有从站的SDO传输,主站可以访问所有从站,这是固定配置的,也只有这个固定配置(通过前述的固定分配通道实现固定配置),这个SDO传输就是读所有从站的0x1F10对象字典,而之前SRD已经设置了其的0x1F10对象字典表示其要进行注册请求。
设备2不能直接对设备3进行SDO传输,但是先通过SRD通知SDOM,让SDOM读所有从站,看是哪个从站发起的注册请求。设备2就是通过0x1F10来交互这种信息的。
4、当SDOM通过SDO传输扫描到有站点要注册的时候,SDOM设置其内部的变量以保存相关信息,并且引发SRD发现事件,在该事件下SDOM会分配两个独一无二的COB ID,具体地,是在可用的COB ID中寻找没有被使用的ID,然后设置SDOM所在设备的SDOS,让SDOM所在设备的SDOS的COB ID等于被分配的ID。实际上,一个SDOS或SDOC对应两个COB,一个是发送COB表,另一个是接收COB表。然后SDOM跳到设置请求端设备状态。
5、在设置请求端设备状态下,如图7所示,SDOM利用先前分配的COB ID设置设备2的SDOC,设备2有9个SDOC,主要设置最后一个SDOC,最后一个SDOC是保留特殊作用的,这个SDOC是为了专门让SRD与SDOM进行SDO传输使用的,SDOM可以访问SRD,这通过SDOM所在设备(即主站)的SDOC访问SRD的SDOS,这是固定配置的,但是SRD的SDOC不能访问SDOM在设备的SDOS,这需要动态配置的,而现在就是设置SRD的SDOC,前述已经设置了SDOM所在设备的SDOS,所以现在又利用分配的COB ID设置SRD的SDOC,这样SRD可以利用这个设置的SDOC与SDOM进行数据传输了。
SDOM(设备3)通过固定分配的通道(固定分配通道)设置SRD(设备2)的SDOC,让设备2的SDOC与设备3的SDOS的COB ID一致并且没有被其他通道使用过,这样反方向建立了一种动态分配的通道,之后站点2可以主动访问站点3了。
SDOM设置SRD的SDOC进行的步骤如图8所示。SDOM设置SRD的SDOC主要分多次SDO传输实现,其中,一个SDO传输也可以有很多步骤,每次传输后进入接收状态,等待SDOS的回复,如果回复正确且不超时,即进入到下一个就绪状态,再次发动一次SDO传输,读写其他内容,以此类推等设置完所有该设置的后回到空闲状态。
该传输序列状态机主要设置SRD的SDOC的节点号和两个COB ID(接收和发送COB表的ID),至此站点2与站点3有双向SDO通道了。
6、设置SRD的SDOC完毕之后,SDOM跳到设置请求端0X1F10状态,在该状态下,SDOM回到空闲状态,同时进行一次SDO传输写SRD的0x1F10对象字典,通知SRD注册请求已经成功了。
7、SRD在被SDOM远程写0x1F10对象字典后,引发一个回调,在回调中回到空闲状态,至此一个SRD注册请求完毕。
二、SRD连接请求
SRD连接请求必须在SRD注册请求之后,SRD注册请求建立了SRD与SDOM的双向SDO传输通道,同时SDOM保存了这个注册请求相关信息,SRD可以在一个注册请求之后动态的建立连接或释放连接,通信完毕之后一般释放连接,防止连接数目过多,而注册一次就可以进行多次连接,可以每次连接连接到不同的设备,比如设备2连接到设备5之后,也可以同时连接到设备4等,或者与设备5的传输结束后释放这个通道,与其他设备建立新的连接。注册是SRD与SDOM之间的关系,而连接是SRD与其他站点之间的关系,后者需要通过SRD连接请求来建立。故SRD连接请求的流程如下:
1、SRD寻找一个空的SDOC(空的SDOC即处于空闲状态的SDOC),当SRD打算访问别的设备的时候,由于它可能同时访问多个设备,因此需要建立多个连接通道,而每个连接通道都需要一个SDOC,所以每次建立一个新的连接的时候,需要寻找一个空的SDOC,然后把试图要访问的设备的节点号(这里指设备5)和这个空的SDOC的索引(索引0代表第一个SDOC,索引2代表第二个SDOC,表示这个SDOC在SDOC表里的哪个表项,前面有描述SDOC表的组织结构)保存起来,作为发送给SDOM的数据。
之后,引发一个连接请求事件,这让SRD跳到等待连接状态,在该状态下,SRD通过前面的注册请求建立的新的通道去写SDOM的0x1F00对象字典。前面已经刚提到过建立了SRD主动访问SDOM的动态分配的SDO通道,现在就利用这个通道进行一次SDO传输,写SDOM的0x1F00对象字典,写的内容就是刚刚保存的内容(需要访问的设备节点号和空的SDOC索引)。
2、由于新的通道建立了,所以SDOM必然会响应这个CAN报文,并在对应的SDOS的COB表的回调里保存接收到内容(节点号5和空的SDOC索引,以及SRD的节点号),然后引发0X1F00被调用事件,这让SDOM跳到设置服务端设备状态。
3、在设置服务端设备状态,SDOM的任务是设置设备5的SDOS,设置过程的状态机如图9所示。SDOM先寻找一组没有使用过的COB ID,然后发动SDO传输远程检查服务端也就是设备5的SDOS的模块表的多个表项,检查是否已经被使用,寻找一个没有被使用的SDOS,找到之后经过多次SDO传输设置该SDOS。把SRD的节点号设备给SDOS,并且设置该SDOS刚刚分配的未使用的COB ID,设置正确后跳到设置请求端设备状态。
4、在设置设备请求端设备状态下,SDOM设置SRD的SDOC,这个SDOC是先前寻找的处于空闲状态的SDOC,与SRD和SDOM建立动态的SDOC属于不同的SDOC。
这个过程和先前的注册请求的一样,只不过设置的SDOC不一样,并且设置的COBID是刚分配的,与设置设备5的SDOS对应的COB ID一样,且设置的节点号为设备5的节点号,设置正确后跳到设置请求端0x1F10状态。
5、在设置请求端0X1F10状态下,SDOM回到空闲状态,同时进行一次SDO传输写SRD的0x1F10对象字典,通知SRD连接请求成功了。
6、SRD在被SDOM远程写0x1F10对象字典后,引发一个回调,在回调中回到空闲状态,至此一个SRD连接请求完毕。这样SDOM利用分配的COBID同时设置了设备2的SDOC和设备5的SDOS,这样设备2就能利用刚刚建立的通道与设备5进行SDO传输了。
三、数据传输
请参阅图10,假定站点2(SRD)找到的空的SDOC为SDOC2,而站点3(SDOM)找的站点5的处于空闲状态的SDOS为SDOS2。站点2的SRD通知站点3的SDOM,让SDOM发现自己正在请求注册,SDOM先设置其所在设备的SDOS,再通过固定分配通道1设置站点2的SDOC1,这样让站点2与站点3建立了动态分配1通道,站点2可以主动访问站点3。
之后,站点2通过动态分配1通道告知站点3其希望与站点5进行动态连接,站点3通过固定分配2通道设置站点5的SDOS2,接着站点3通过固定分配1通道设置站点2的SDOC2,这样站点2的SDOC2与站点5的SDOS2建立了新的连接通道。
再之后,站点2就可以利用动态分配2通道访问站点5,且这里的数据传输就是SDO传输。
四、连接释放和注册解除
连接释放主要由SRD的决定何时释放,这套机制提供了给用户动态释放SDO连接通道的实现。连接释放是连接请求的反操作,过程与SRD连接请求一样,只不过连接请求是设置被请求服务的SDOS和SRD的SDOC,而连接释放是复位被请求服务的SDOS和SRD的SDOC,并且释放分配的COB ID。注册解除主要由SDOM解除,过程与注册请求一样,也是复位SDOM设备的SDOS和SRD的SDOC,并且释放分配的COB ID。
注册解除一般发生在从站异常或出现错误,掉线,紧急事件,复位等情况,主要涉及所有从站的状态管理,包括心跳、生命周期、事件、紧急、管理机。
以上仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。