一种CANopen的从站到主站的数据同步方法与流程

文档序号:17157890发布日期:2019-03-20 00:14阅读:401来源:国知局
一种CANopen的从站到主站的数据同步方法与流程

本发明涉及通讯技术领域的一种数据同步方法,具体为一种canopen的从站到主站的数据同步方法。



背景技术:

基于canopen协议进行通讯的plc主站与plc从站往往由于从模块的数量限制,需要进行扩展,并增设多个plc扩展模块。由于主站和从站的特定硬件或应用千变万化,可扩展的模块在数量和类型上是随机的,plc扩展模块可以进行数字量或模拟量的输入或者输出,现有数据同步不能满足需求。因此,需要设计一种基于canopen的从站到主站的数据同步方法。



技术实现要素:

(一)解决的技术问题

针对现有技术的不足,本发明提供了一种canopen的从站到主站的数据同步方法,具备全面、方便等优点,解决了现有数据同步方法不能满足从站到主站的数据同步需求的问题。

(二)技术方案

为实现上述全面、方便的目的,本发明提供如下技术方案:一种canopen的从站到主站的数据同步方法,其用于同步多个从站的数据至主站;分别定义多个从站的用户变量参数、数据同步参数,并定义分别与从站的用户变量参数、数据同步参数相对应的主站的用户变量参数、数据同步参数;将所有用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表;

在主站和多个从站中新建处理数据对象表、通信对象表;所述处理数据对象表的每个表项的一个特定字段对应所述通讯对象参数表的一个表项,另一个特定字段对应所述映射表的一个映射;

所述数据同步方法包括:

步骤s1:轮询从站的处理数据对象表的每一项;

步骤s2:判断所述对象字典里的相关数据是否发生变化,是则发送对应所述相关数据的从站的用户变量到can总线上,否则启动步骤s1;

步骤s3:主站通过can总线接收can报文,根据接收的can报文,修改与从站的用户变量参数相对应的主站的用户变量。

作为上述方案的进一步改进,在主站、所有从站中新建用户变量参数表、数据同步参数表;所述用户变量参数表、所述数据同步参数表均包括分别设置多个字段的多个表项;所述通信对象表包括分别设置多个字段的多个表项,每个表项中的特定字段对应一个数据结构canmsg,每个数据结构canmsg包括多个数据字段。

进一步地,判断所述对象字典里的相关数据是否发生变化的方法为:在一次轮询中把所述处理数据对象表的所有表项轮询一次,并依次检查所述处理数据对象表的所有表项;根据所述处理数据对象表的每个表项找到映射字段,且所述映射字段被映射到所述对象字典里的相关对象,并确定对应的用户变量;将对应的用户变量设置到对应的数据结构canmsg的数据字段;判断所述数据结构canmsg的数据字段与所述处理数据对象表所对应的表项的拷贝是否相同,是则判定所述对象字典里的相关数据发生变化,否则判定所述对象字典里的相关数据未发生变化。

再进一步地,在判定所述对象字典里的相关数据发生变化后,设置所述处理数据对象表的所对应表项的状态为发送信号状态;再次依次检测所述处理数据对象表的各个表项的状态,并在检测到所述处理数据对象表的一个表项是有效的且是发送信号状态时,发送对应所述相关数据的从站的用户变量到can总线上。

再进一步地,发送对应所述相关数据的从站的用户变量到can总线上的方法为:将对应的从站的用户变量赋值到对应的数据结构canmsg的数据字段,设置所述处理数据对象表的表项中与通信相关的时间记录,并确定所述通信对象表对应的表项的结构体,将对应的数据结构canmsg的数据字段的内容填充至can硬件寄存器,并发送报文到can总线上。

作为上述方案的进一步改进,在步骤s3中,主站的can控制器接收报文并将报文存储到消息区中;其中,主站在从站轮询中处理主站接收到的消息,依次处理消息区中的所有消息报文,直至处理完所有的消息报文。

进一步地,主站处理消息区中的消息报文的方法为:根据canid,搜索所述通信对象表的所有表项中的数据结构canmsg的数据片段,找到与接收的消息报文里的canid一致的数据结构canmsg,并找到所述通信对象表对应的表项,将接收收的消息报文中的数据字段复制到对应的数据结构canmsg的数据字段。

作为上述方案的进一步改进,每个从站设置数字量输入端、数字量输出端、数字量输入输出端、模拟量输入端、模拟量输出端、模拟量输入输出端中的一种数据端口。

作为上述方案的进一步改进,所述对象字典包括一级映射表,所述一级映射表包括分别设置多个字段的多个表项;所述一级映射表的每个表项中的一个字段对应一个二级映射表;所述二级映射表包括分别设置多个字段的多个表项,且每个二级映射表的每个表项中的一个字段对应一个字典变量或者字典结构。

作为上述方案的进一步改进,所述数据结构canmsg包括多个数据字段,且所述数据结构canmsg用于设置can控制器的寄存器;在发送报文时,通过对应的所述数据结构canmsg设置硬件所述can控制器,在接收报文时,将报文填充对应的所述数据结构canmsg的数据字段。

(三)有益效果

与现有技术相比,本发明提供了一种canopen的从站到主站的数据同步方法,具备以下有益效果:

本发明的canopen的从站到主站的数据同步方法,通过定义主站和多个从站的用户变量参数、数据同步参数,将用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表,新建用户变量参数表、数据同步参数表、处理数据对象表以及通信对象表并进行内部的相互对应,通过判断对象字典里的相关数据是否发生变化,并在发生变化时,将变化的数据通过can总线发送至主站,实现多个从站和主站的数据同步。本发明能够全面应用于从站各种类型的数据输入输出,方便基于canopen协议的主从站的数据同步。并且,本发明只需要修改用户定义的参数即可以实现主站和从站的数据同步,简化了canopen的数据同步流程,提高数据同步效率。

附图说明

图1为本发明实施例1的canopen的从站到主站的数据同步方法中plc主模块和多个plc扩展模块之间的拓扑示意图;

图2为本发明实施例1的canopen的对象字典的结构示意图;

图3为本发明实施例1的canopen的从站到主站的数据同步方法的用户变量参数表、数据同步参数表的结构示意图;

图4为本发明实施例1的canopen的从站到主站的数据同步方法的pdo表的结构示意图;

图5为本发明实施例1的canopen的从站到主站的数据同步方法的cob表的结构示意图;

图6为本发明实施例1的canopen的从站到主站的数据同步方法的主从站之间的总体框架图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

请参阅图1,本实施例的canopen的从站到主站的数据同步方法用于同步多个从站的数据至主站。其中,plc扩展模块(从站)设置数字量输入端、数字量输出端、数字量输入输出端、模拟量输入端、模拟量输出端、模拟量输入输出端中的一种数据端口。plc扩展1仅输入数字量,plc扩展2仅输出数字量。plc扩展3既输入数字量,也输出数字量。plc扩展4仅输入模拟量,plc扩展5仅输出模拟量。plc扩展5既输入模拟量,也输出模拟量。plc主模块(主站)获取plc扩展模块1、3、4、6(具有输入功能的从站)的输入状态,同时将plc主模块的输出信号经过can总线传递给plc扩展模块2、3、5、6(具有输出功能的从站)再各自输出。

请参阅图2,对象字典是一系列数据对象的集合,被分配在内存里,对象字典被设计成由一级映射数据结构(表)、二级映射数据结构和具体的数据对象组成的数据集合。对象字典包括一级映射表,一级映射表包括分别设置多个字段的多个表项。一级映射表的每个表项中的一个字段对应一个二级映射表。二级映射表包括分别设置多个字段的多个表项,且每个二级映射表的每个表项中的一个字段对应一个字典变量或者字典结构。对象字典的这种数据组织形式,能够方便设置和查询任一个数据,寻找一个数据对象需要经过一级映射表搜寻,找到一级映射表指向的二级映射表,再由二级映射表找到具体的数据对象。

请参阅图3,定义各个plc扩展模块的用户变量参数(用户变量参数包含了用户变量,还包含一些回调处理,索引,子索引,有效性等)以及数据同步参数,并在plc扩展模块中新建用户变量参数表、数据同步参数表。这些用户变量参数指向的用户变量是与具体扩展模块的硬件输入输出相关的,并且称指向的变量为特定设备变量,然后要为这些特定设备变量定义对应的数据同步参数。用户变量参数表、数据同步参数表均包括分别设置多个字段的多个表项。定义plc主模块的用户变量参数及数据同步参数,且plc主模块的用户变量参数、数据同步参数分别对应各个plc扩展模块的用户变量参数、数据同步参数。

将所有用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表,这样以后操作对象字典实际上等于操作真实的设备变量了。在本实施例中,对象字典里的同步对象的数目可以经过宏添加预设的数量。

用户变量参数的索引与子索引是找到对象字典里具体的对象的两个参数,用户变量参数里指向的用户变量是设备的输入输出相关的变量,将这类变量绑定对象字典里的结构或变量,准确的说是让对象字典里相应的对象的指针指向用户定义的变量,以后操作对象字典里的这些指针其实等于操作了用户定义的与输入输出相关的变量。

将同步参数设置到对象字典里的同步配置和同步映射两部分,同步配置是同步控制的一些参数,比如超时之类的,同步映射则表示同步哪些对象,是一种映射关系(这里的映射与对象字典里的一级二级映射表是不同的,这里的映射是指与处理数据对象表相关的,处理数据对象表要找到的是需要同步的变量的一种映射),这些对象通过索引、子索引可以找到。

请参阅图4,在plc主模块和多个plc扩展模块中新建处理数据对象表(pdo表),开辟处理数据对象表的内存区域。由于用户变量参数设置了对象字典里相关的部分,对象字典里的同步配置和同步映射部分与pdo表直接相关的,在步骤二将用户数据同步参数设置对象字典的时候,就间接第一次设置了pdo表。处理数据对象表包括分别设置多个字段的多个表项。处理数据对象表设置多个处理参数。处理参数为超时、被同步的数据类型、大小、数量、can标识号、状态、模式、当前时间、上一次接收时间等参数。pdo表在进行数据同步的动态过程使用,包含需要同步的变量的映射关系。

pdo表一般有多个表项(具体多少是对象字典与pdo相关的宏申明的数量决定),每个表项是一个pdo的结构,包含了软件实现控制和同步的信息,这些信息经过初始化、设置以及中间状态的修改等,在同步过程中起到关键作用。每个表项包含一个cob参数,cob参数是设置通信对象表(cob表)相关的参数。

一个pdo表的表项最多包含8个映射参数,也就是一个pdo报文可以最多一次性同步8个数据,当然在其他实施例中也可以只同步一个数据。

请参阅图5,在plc主模块和多个plc扩展模块中新建通信对象表(cob表)。通信对象表包括分别设置多个字段的多个表项,每个表项中的特定字段对应一个数据结构canmsg。处理数据对象表的每个表项的特定字段对应通讯对象表的一个表项。

cob表包含了当前通信对象的状态,回调,以及一个指向对应pdo表项的指针,还包含一个与底层can控制器通信密切相关的数据结构canmsg,可以用这个数据结构设置硬件携带的can控制器寄存器。pdo表的每个表项的一个特定字段对应cob表的一个表项,另一个特定字段对应映射表的一个映射。

cob表起到承上启下作用,连接对应的pdo结构和具体的can报文。当发送报文的时候,将对应的cob表的表项对应的数据结构canmsg设置硬件can控制器,当接收到报文的时候,将报文填充对应的cob表的表项的数据结构canmsg结构中。

请参阅图6,plc主模块和多个plc扩展模块之间进行数据轮询。

因此,本实施例的canopen的从站到主站的数据同步方法包括:

步骤s1:轮询从站的处理数据对象表的每一项。

步骤s2:判断所述对象字典里的相关数据是否发生变化,是则发送对应所述相关数据的从站的用户变量到can总线上,否则启动步骤s1。

步骤s3:主站通过can总线接收can报文,根据接收的can报文,修改与从站的用户变量参数相对应的主站的用户变量。

判断所述对象字典里的相关数据是否发生变化的方法为:在一次轮询中把所述处理数据对象表的所有表项轮询一次,并依次检查所述处理数据对象表的所有表项。根据所述处理数据对象表的每个表项找到映射字段,且所述映射字段被映射到所述对象字典里的相关对象,并确定对应的用户变量。将对应的用户变量设置到对应的数据结构canmsg的数据字段。判断所述数据结构canmsg的数据字段与所述处理数据对象表所对应的表项的拷贝是否相同,是则判定所述对象字典里的相关数据发生变化,否则判定所述对象字典里的相关数据未发生变化。

在判定所述对象字典里的相关数据发生变化后,设置所述处理数据对象表的所对应表项的状态为发送信号状态。再次依次检测所述处理数据对象表的各个表项的状态,并在检测到所述处理数据对象表的一个表项是有效的且是发送信号状态时,发送对应所述相关数据的从站的用户变量到can总线上。

发送对应所述相关数据的从站的用户变量到can总线上的方法为:将对应的从站的用户变量赋值到对应的数据结构canmsg的数据字段,设置所述处理数据对象表的表项中与通信相关的时间记录,并确定所述通信对象表对应的表项的结构体,将对应的数据结构canmsg的数据字段的内容填充至can硬件寄存器,并发送报文到can总线上。

在步骤s3中,主站的can控制器接收报文并将报文存储到消息区中。其中,主站在从站轮询中处理主站接收到的消息,依次处理消息区中的所有消息报文,直至处理完所有的消息报文。

主站处理消息区中的消息报文的方法为:根据canid,搜索所述通信对象表的所有表项中的数据结构canmsg的数据片段,找到与接收的消息报文里的canid一致的数据结构canmsg,并找到所述通信对象表对应的表项,将接收收的消息报文中的数据字段复制到对应的数据结构canmsg的数据字段。

综上,相较于现有的canopen的从站到主站的数据同步方法,本实施例的canopen的从站到主站的数据同步方法具有以下优点:

本实施例的canopen的从站到主站的数据同步方法,通过定义主站和多个从站的用户变量参数、数据同步参数,将用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表,新建用户变量参数表、数据同步参数表、处理数据对象表以及通信对象表并进行内部的相互对应,通过判断对象字典里的相关数据是否发生变化,并在发生变化时,将变化的数据通过can总线发送至主站,实现多个从站和主站的数据同步。本实施例能够全面应用于从站各种类型的的数据输入输出,方便基于canopen协议的主从站的数据同步。并且,本实施例只需要修改用户定义的参数即可以实现主站和从站的数据同步,简化了canopen的数据同步流程,提高数据同步效率。

实施例2

本实施例的canopen的从站到主站的数据同步方法在实施例1的基础上还公开了一种canopen的数据同步构建方法。

canopen的数据同步构建方法包括:

步骤一:定义各个plc扩展模块的用户变量参数以及数据同步参数,并在所述plc扩展模块中新建用户变量参数表、数据同步参数表。所述用户变量参数表、所述数据同步参数表均包括分别设置多个字段的多个表项。定义所述plc主模块的用户变量参数及数据同步参数,且所述plc主模块的用户变量参数、数据同步参数分别对应各个plc扩展模块的用户变量参数、数据同步参数。

步骤二:将所有用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表。

步骤三:在所述plc主模块和多个plc扩展模块中新建处理数据对象表,开辟所述处理数据对象表的内存区域。所述处理数据对象表包括分别设置多个字段的多个表项。

步骤四:在所述plc主模块和多个plc扩展模块中新建通信对象表。所述通信对象表包括分别设置多个字段的多个表项,每个表项中的特定字段对应一个数据结构canmsg。所述处理数据对象表的每个表项的特定字段对应所述通讯对象表的一个表项。

步骤五:所述plc主模块和多个plc扩展模块之间进行数据轮询。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1