【发明内容】
为了解决上述技术问题,本公开实施例提供一种基于控驱一体机器人的数据同步方法及装置,用以解决在机器人实时控制系统中控制信息和伺服驱动器的反馈信息中的同步问题。
根据本公开实施例的第一方面,提供一种基于控驱一体机器人的数据同步方法,所述控驱一体机器人的控制器和各个伺服驱动器结合在一起,且具体共享内存空间,所述方法包括:
当控制器需要向伺服驱动器进行目标数据的数据同步时,从所述共享内存中获取当前目标数据对应的目标数据块的第一读计数标志位和所述第一写计数标志位,其中,所述共享内存空间包括共享内存头和多个数据块,所述共享内存头中包括每个数据块的读计数标志位和写计数标志位,每个数据块包括数据头和数据包,不同数据块内存放的数据类型不同;
根据所述当前目标数据块的第一读计数标志位和所述第一写计数标志位确定是否可进行数据写入操作;
当确定可进行数据写入操作时,控制所述控制器发送同步请求至所述共享内存空间中;
当所述伺服驱动器从所述共享内存空间中读取到所述同步请求时,判断是否可进行数据写入操作,并在可进行数据写入操作时返回同步反馈信号至所述共享内存空间中;
当所述控制器从所述共享内存中读取到所述同步反馈信号时,开始进行目标数据的数据同步。
在一个实施例中,优选地,根据所述当前目标数据块的第一读计数标志位和所述第一写计数标志位确定是否可进行数据写入操作,包括:
在当前目标数据块的第一读计数标志位和所述第一写计数标志位均一致时,确定可以进行数据写入操作;
在当前目标数据块的第一读计数标志位和所述第一写计数标志位不一致时,确定不可以进行数据写入操作,只能进行数据读取操作。
在一个实施例中,优选地,当所述伺服驱动器从所述共享内存空间中读取到所述同步请求时,判断是否可进行数据写入操作,包括:
当所述伺服驱动器从所述共享内存空间中读取到所述同步请求时,获取当前所述目标数据块的第二读计数标志位和第二写计数标志位;
在当前所述目标数据块的第二读计数标志位和所述第二写计数标志位一致时,确定可以进行数据写入操作;
在当前所述目标数据块的第二读计数标志位和所述第二写计数标志位不一致时,确定不可以进行数据写入操作,只能进行数据读取操作。
在一个实施例中,优选地,当所述控制器从所述共享内存中读取到所述同步反馈信号时,开始进行目标数据的数据同步,包括:
当所述控制器从所述共享内存中读取到所述同步反馈信号时,获取当前所述目标数据块的第三读计数标志位和第三写计数标志位;
在当前所述目标数据块的第三读计数标志位和所述第三写计数标志位一致时,发送同步开始信号至所述共享内存中;
当所述伺服驱动器从所述共享内存中读取到所述同步开始信号时,完成所述目标数据的同步。
在一个实施例中,优选地,在每次完成数据写入操作时,对应的数据块的写计数标志位加一,在每次完成数据读取操作时,对应的数据块的读计数标志位加一。
根据本公开实施例的第二方面,提供一种基于控驱一体机器人的数据同步装置,所述控驱一体机器人的控制器和各个伺服驱动器结合在一起,且具体共享内存空间,所述装置包括:
获取模块,用于当控制器需要向伺服驱动器进行目标数据的数据同步时,从所述共享内存中获取当前目标数据对应的目标数据块的第一读计数标志位和所述第一写计数标志位,其中,所述共享内存空间包括共享内存头和多个数据块,所述共享内存头中包括每个数据块的读计数标志位和写计数标志位,每个数据块包括数据头和数据包,不同数据块内存放的数据类型不同;
确定模块,用于根据所述当前目标数据块的第一读计数标志位和所述第一写计数标志位确定是否可进行数据写入操作;
控制模块,用于当确定可进行数据写入操作时,控制所述控制器发送同步请求至所述共享内存空间中;
判断模块,用于当所述伺服驱动器从所述共享内存空间中读取到所述同步请求时,判断是否可进行数据写入操作,并在可进行数据写入操作时返回同步反馈信号至所述共享内存空间中;
同步模块,用于当所述控制器从所述共享内存中读取到所述同步反馈信号时,开始进行目标数据的数据同步。
在一个实施例中,优选地,所述确定模块包括:
第一确定单元,用于在当前目标数据块的第一读计数标志位和所述第一写计数标志位均一致时,确定可以进行数据写入操作;
第二确定单元,用于在当前目标数据块的第一读计数标志位和所述第一写计数标志位不一致时,确定不可以进行数据写入操作,只能进行数据读取操作。
在一个实施例中,优选地,所述判断模块包括:
第一获取单元,用于当所述伺服驱动器从所述共享内存空间中读取到所述同步请求时,获取当前所述目标数据块的第二读计数标志位和第二写计数标志位;
第三确定单元,用于在当前所述目标数据块的第二读计数标志位和所述第二写计数标志位一致时,确定可以进行数据写入操作;
第四确定单元,用于在当前所述目标数据块的第二读计数标志位和所述第二写计数标志位不一致时,确定不可以进行数据写入操作,只能进行数据读取操作。
在一个实施例中,优选地,所述同步模块包括:
第二获取单元,用于当所述控制器从所述共享内存中读取到所述同步反馈信号时,获取当前所述目标数据块的第三读计数标志位和第三写计数标志位;
发送单元,用于在当前所述目标数据块的第三读计数标志位和所述第三写计数标志位一致时,发送同步开始信号至所述共享内存中;
同步单元,用于当所述伺服驱动器从所述共享内存中读取到所述同步开始信号时,完成所述目标数据的同步。
在一个实施例中,优选地,在每次完成数据写入操作时,对应的数据块的写计数标志位加一,在每次完成数据读取操作时,对应的数据块的读计数标志位加一。
本公开的实施例提供的技术方案可以包括以下有益效果:
上述技术方案,在控制器和驱动器之间设置共享内存空间,通过共享内存空间来实现控制器和驱动器之间的数据同步和周期同步。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
【具体实施方式】
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1是根据一示例性实施例示出的一种基于控驱一体机器人的数据同步方法的流程图。
本公开实施例提供了一种基于控驱一体机器人的数据同步方法,控驱一体机器人的控制器和各个伺服驱动器结合在一起,且具体共享内存空间,如图1所示,该方法包括步骤S101-S105:
步骤S101,当控制器需要向伺服驱动器进行目标数据的数据同步时,从所述共享内存中获取当前目标数据对应的目标数据块的第一读计数标志位和所述第一写计数标志位,其中,所述共享内存空间包括共享内存头和多个数据块,所述共享内存头中包括每个数据块的读计数标志位和写计数标志位,每个数据块包括数据头和数据包,不同数据块内存放的数据类型不同。读计数标志位和写计数标志位分别为 32位的无符号整数。在初始化阶段,将读写计数标志位清零。
具体地,将划定的共享内存区域划分为若干数据块(section),每个section分为数据头(Section头)和数据区(Section区),每个数据区由多个内存块block组成。Section头用于描述整个section的信息,Section数据区用于存放双核的通信数据。其中,规定了每个section的独立用途,例如用于存放周期性数据,存放采集数据,存放交互命令,存放伺服参数等,具体如图2所示。
每一个section由多个block组成,用于存储数据。每一个block 为256bytes。Section数据Block从Section头所处Block的下一个Block 起始,block数量由Section的字节数决定。例:Block[0]为共享内存头,Block[1]为Section[1]头,Section[1]有500个字节,那么其数据 Block共有2个,为Block[2]、Block[3]。
共享内存头为共享内存的描述信息,包括共享内存ID,各个 section的W版本(即写计数标志位)和R版本号(即读计数标志位)。 Section头描述一个Section的信息,占用一个Block空间。Section的 ID为64位无符号整数,用于校验,具体如图3所示。
步骤S102,根据所述当前目标数据块的第一读计数标志位和所述第一写计数标志位确定是否可进行数据写入操作;
步骤S103,当确定可进行数据写入操作时,控制所述控制器发送同步请求至所述共享内存空间中;
步骤S104,当所述伺服驱动器从所述共享内存空间中读取到所述同步请求时,判断是否可进行数据写入操作,并在可进行数据写入操作时返回同步反馈信号至所述共享内存空间中;
步骤S105,当所述控制器从所述共享内存中读取到所述同步反馈信号时,开始进行目标数据的数据同步。
在该实施例中,在控制器和驱动器之间设置共享内存空间,通过共享内存空间来实现控制器和驱动器之间的数据同步和周期同步。
图4是根据一示例性实施例示出的一种基于控驱一体机器人的数据同步方法中步骤S102的流程图。
如图4所示,在一个实施例中,优选地,上述步骤S102包括:
步骤S401,在当前目标数据块的第一读计数标志位和所述第一写计数标志位均一致时,确定可以进行数据写入操作;
步骤S402,在当前目标数据块的第一读计数标志位和所述第一写计数标志位不一致时,确定不可以进行数据写入操作,只能进行数据读取操作。
在该实施例中,如果读计数标志与写计数标志位一致,则可以进行写操作;如果读计数标志和写计数标志不一致,可以进行读操作,对同一个数据包的读写操作互斥,即对于同一个数据包,要么进行读操作,要么进行写操作,不可以读写操作同时进行。
图5是根据一示例性实施例示出的一种基于控驱一体机器人的数据同步方法中步骤S104的流程图。
如图5所示,在一个实施例中,优选地,上述步骤S104包括:
步骤S501,当所述伺服驱动器从所述共享内存空间中读取到所述同步请求时,获取当前所述目标数据块的第二读计数标志位和第二写计数标志位;
步骤S502,在当前所述目标数据块的第二读计数标志位和所述第二写计数标志位一致时,确定可以进行数据写入操作;
步骤S503,在当前所述目标数据块的第二读计数标志位和所述第二写计数标志位不一致时,确定不可以进行数据写入操作,只能进行数据读取操作。
图6是根据一示例性实施例示出的一种基于控驱一体机器人的数据同步方法中步骤S105的流程图。
如图6所示,在一个实施例中,优选地,步骤S105包括:
步骤S601,当所述控制器从所述共享内存中读取到所述同步反馈信号时,获取当前所述目标数据块的第三读计数标志位和第三写计数标志位;
步骤S602,在当前所述目标数据块的第三读计数标志位和所述第三写计数标志位一致时,发送同步开始信号至所述共享内存中;
步骤S603,当所述伺服驱动器从所述共享内存中读取到所述同步开始信号时,完成所述目标数据的同步。
在一个实施例中,优选地,在每次完成数据写入操作时,对应的数据块的写计数标志位加一,在每次完成数据读取操作时,对应的数据块的读计数标志位加一。
其中,数据读取操作过程如图7所示。
如图7所示,任一个数据块section[i]的数据读取过程如下:
步骤S701,读取section[i]的R版本号和W版本号,判断section[i] 的R版本号和W版本号是否相等。如果不相等,转到步骤S702;如果相等,结束本次section的数据读取过程。
步骤S702,读取section[i]的block[i]的R版本号和W版本号,判断section[i]的block[i]R版本号和W版本号是否相等。如果不相等,转到S703;如果相等,转到S704。
步骤S703,读取section[i]的block[i]数据,转到S5。
步骤S704,遍历section[i]的所有block,判断是否遍历完成,如果是,转到S705;如果没有遍历完成,转到S702,继续完成剩余block 的遍历过程(每个section的block数量的固定)。
S705,更新section[i]的block[i]的R版本,转到S706。
S706,更新section[i]的R版本,结束本次section的数据读取过程。
其中,数据写入操作过程如图8所示。
如图8所示,任一个数据块section[i]的数据写入过程如下:
步骤S801,等待写入数据,如果发现有数据需要写入,转到步骤S802,否则继续等待。
步骤S802,判断Section[i]的R版本号和W版本号是否相等,如果相等,转到步骤S803,如果不相等,转到步骤S801。
步骤S803,写入section[i]的block[i]数据,转到步骤S804。
步骤S804,更新section[i]的block[i]的W版本号,转到步骤S805。
步骤S805,更新section[i]的W版本号,结束本次数据写入过程。
下面以控制器和驱动器进行周期信号同步为例,详细说明本发明的上述技术方案。
如图9所示,控制器同步流程包括:
步骤S901,初始化共享内存。
步骤S902,控制器向驱动器发送同步信号1,转到步骤S902。
步骤S903,控制器等待驱动器的同步信号2,如果没有收到同步信号2,继续等待,否则,转到步骤S904。
步骤S904,收到同步信号2,控制器向驱动器发送同步开始信号。
步骤S905,控制器周期计数开始。
伺服驱动器同步流程包括:
步骤S911,驱动器等待同步信号1,如果收到同步信号1,转到步骤S912,否则继续等待。
步骤S912,驱动器收到同步信号1,驱动器向控制器发送同步信号2,转到S913。
步骤S913,驱动器等待同步开始信号,驱动器如果收到同步开始信号转到步骤S914,否则继续等待。
步骤S914,驱动器收到同步开始信号,驱动器周期计数开始。
图10是根据一示例性实施例示出的一种基于控驱一体机器人的数据同步装置的结构图。
根据本公开实施例的第二方面,提供一种基于控驱一体机器人的数据同步装置,所述控驱一体机器人的控制器和各个伺服驱动器结合在一起,且具体共享内存空间,如图10所示,所述装置包括:
获取模块1001,用于当控制器需要向伺服驱动器进行目标数据的数据同步时,从所述共享内存中获取当前目标数据对应的目标数据块的第一读计数标志位和所述第一写计数标志位,其中,所述共享内存空间包括共享内存头和多个数据块,所述共享内存头中包括每个数据块的读计数标志位和写计数标志位,每个数据块包括数据头和数据包,不同数据块内存放的数据类型不同;
确定模块1002,用于根据所述当前目标数据块的第一读计数标志位和所述第一写计数标志位确定是否可进行数据写入操作;
控制模块1003,用于当确定可进行数据写入操作时,控制所述控制器发送同步请求至所述共享内存空间中;
判断模块1004,用于当所述伺服驱动器从所述共享内存空间中读取到所述同步请求时,判断是否可进行数据写入操作,并在可进行数据写入操作时返回同步反馈信号至所述共享内存空间中;
同步模块1005,用于当所述控制器从所述共享内存中读取到所述同步反馈信号时,开始进行目标数据的数据同步。
图11是根据一示例性实施例示出的一种基于控驱一体机器人的数据同步装置中确定模块的结构图。
如图11所示,在一个实施例中,优选地,所述确定模块1002包括:
第一确定单元1101,用于在当前目标数据块的第一读计数标志位和所述第一写计数标志位均一致时,确定可以进行数据写入操作;
第二确定单元1102,用于在当前目标数据块的第一读计数标志位和所述第一写计数标志位不一致时,确定不可以进行数据写入操作,只能进行数据读取操作。
图12是根据一示例性实施例示出的一种基于控驱一体机器人的数据同步装置中确定模块的结构图。
如图12所示,在一个实施例中,优选地,所述判断模块1004包括:
第一获取单元1201,用于当所述伺服驱动器从所述共享内存空间中读取到所述同步请求时,获取当前所述目标数据块的第二读计数标志位和第二写计数标志位;
第三确定单元1202,用于在当前所述目标数据块的第二读计数标志位和所述第二写计数标志位一致时,确定可以进行数据写入操作;
第四确定单元1203,用于在当前所述目标数据块的第二读计数标志位和所述第二写计数标志位不一致时,确定不可以进行数据写入操作,只能进行数据读取操作。
图13是根据一示例性实施例示出的一种基于控驱一体机器人的数据同步装置中确定模块的结构图。
如图13所示,在一个实施例中,优选地,所述同步模块1005包括:
第二获取单元1301,用于当所述控制器从所述共享内存中读取到所述同步反馈信号时,获取当前所述目标数据块的第三读计数标志位和第三写计数标志位;
发送单元1302,用于在当前所述目标数据块的第三读计数标志位和所述第三写计数标志位一致时,发送同步开始信号至所述共享内存中;
同步单元1303,用于当所述伺服驱动器从所述共享内存中读取到所述同步开始信号时,完成所述目标数据的同步。
在一个实施例中,优选地,在每次完成数据写入操作时,对应的数据块的写计数标志位加一,在每次完成数据读取操作时,对应的数据块的读计数标志位加一。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
进一步可以理解的是,本公开中“多个”是指两个或两个以上,其它量词与之类似。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在 A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
进一步可以理解的是,术语“第一”、“第二”等用于描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开,并不表示特定的顺序或者重要程度。实际上,“第一”、“第二”等表述完全可以互换使用。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。
进一步可以理解的是,本公开实施例中尽管在附图中以特定的顺序描述操作,但是不应将其理解为要求按照所示的特定顺序或是串行顺序来执行这些操作,或是要求执行全部所示的操作以得到期望的结果。在特定环境中,多任务和并行处理可能是有利的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。